@cat-factory/server 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/dist/agents/CompositeAgentExecutor.d.ts +39 -0
- package/dist/agents/CompositeAgentExecutor.d.ts.map +1 -0
- package/dist/agents/CompositeAgentExecutor.js +169 -0
- package/dist/agents/CompositeAgentExecutor.js.map +1 -0
- package/dist/agents/ContainerAgentExecutor.d.ts +235 -0
- package/dist/agents/ContainerAgentExecutor.d.ts.map +1 -0
- package/dist/agents/ContainerAgentExecutor.js +825 -0
- package/dist/agents/ContainerAgentExecutor.js.map +1 -0
- package/dist/agents/ContainerRepoBootstrapper.d.ts +78 -0
- package/dist/agents/ContainerRepoBootstrapper.d.ts.map +1 -0
- package/dist/agents/ContainerRepoBootstrapper.js +279 -0
- package/dist/agents/ContainerRepoBootstrapper.js.map +1 -0
- package/dist/agents/ModelRouter.d.ts +69 -0
- package/dist/agents/ModelRouter.d.ts.map +1 -0
- package/dist/agents/ModelRouter.js +84 -0
- package/dist/agents/ModelRouter.js.map +1 -0
- package/dist/agents/RunnerJobClient.d.ts +41 -0
- package/dist/agents/RunnerJobClient.d.ts.map +1 -0
- package/dist/agents/RunnerJobClient.js +43 -0
- package/dist/agents/RunnerJobClient.js.map +1 -0
- package/dist/agents/modelProviderResolver.d.ts +33 -0
- package/dist/agents/modelProviderResolver.d.ts.map +1 -0
- package/dist/agents/modelProviderResolver.js +48 -0
- package/dist/agents/modelProviderResolver.js.map +1 -0
- package/dist/agents/providerCapabilities.d.ts +22 -0
- package/dist/agents/providerCapabilities.d.ts.map +1 -0
- package/dist/agents/providerCapabilities.js +43 -0
- package/dist/agents/providerCapabilities.js.map +1 -0
- package/dist/agents/resolveRepoTarget.d.ts +33 -0
- package/dist/agents/resolveRepoTarget.d.ts.map +1 -0
- package/dist/agents/resolveRepoTarget.js +81 -0
- package/dist/agents/resolveRepoTarget.js.map +1 -0
- package/dist/app.d.ts +12 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +102 -0
- package/dist/app.js.map +1 -0
- package/dist/auth/GitHubOAuth.d.ts +39 -0
- package/dist/auth/GitHubOAuth.d.ts.map +1 -0
- package/dist/auth/GitHubOAuth.js +90 -0
- package/dist/auth/GitHubOAuth.js.map +1 -0
- package/dist/auth/GoogleOAuth.d.ts +35 -0
- package/dist/auth/GoogleOAuth.d.ts.map +1 -0
- package/dist/auth/GoogleOAuth.js +66 -0
- package/dist/auth/GoogleOAuth.js.map +1 -0
- package/dist/auth/middleware.d.ts +15 -0
- package/dist/auth/middleware.d.ts.map +1 -0
- package/dist/auth/middleware.js +63 -0
- package/dist/auth/middleware.js.map +1 -0
- package/dist/auth/signing.d.ts +50 -0
- package/dist/auth/signing.d.ts.map +1 -0
- package/dist/auth/signing.js +96 -0
- package/dist/auth/signing.js.map +1 -0
- package/dist/auth/wsTicket.d.ts +34 -0
- package/dist/auth/wsTicket.d.ts.map +1 -0
- package/dist/auth/wsTicket.js +50 -0
- package/dist/auth/wsTicket.js.map +1 -0
- package/dist/config/types.d.ts +294 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +2 -0
- package/dist/config/types.js.map +1 -0
- package/dist/config/url-safety.d.ts +8 -0
- package/dist/config/url-safety.d.ts.map +1 -0
- package/dist/config/url-safety.js +11 -0
- package/dist/config/url-safety.js.map +1 -0
- package/dist/containers/ContainerSessionService.d.ts +67 -0
- package/dist/containers/ContainerSessionService.d.ts.map +1 -0
- package/dist/containers/ContainerSessionService.js +44 -0
- package/dist/containers/ContainerSessionService.js.map +1 -0
- package/dist/crypto/WebCryptoPasswordHasher.d.ts +9 -0
- package/dist/crypto/WebCryptoPasswordHasher.d.ts.map +1 -0
- package/dist/crypto/WebCryptoPasswordHasher.js +67 -0
- package/dist/crypto/WebCryptoPasswordHasher.js.map +1 -0
- package/dist/crypto/WebCryptoPersonalSecretCipher.d.ts +6 -0
- package/dist/crypto/WebCryptoPersonalSecretCipher.d.ts.map +1 -0
- package/dist/crypto/WebCryptoPersonalSecretCipher.js +57 -0
- package/dist/crypto/WebCryptoPersonalSecretCipher.js.map +1 -0
- package/dist/crypto/WebCryptoSecretCipher.d.ts +23 -0
- package/dist/crypto/WebCryptoSecretCipher.d.ts.map +1 -0
- package/dist/crypto/WebCryptoSecretCipher.js +60 -0
- package/dist/crypto/WebCryptoSecretCipher.js.map +1 -0
- package/dist/crypto/encoding.d.ts +14 -0
- package/dist/crypto/encoding.d.ts.map +1 -0
- package/dist/crypto/encoding.js +58 -0
- package/dist/crypto/encoding.js.map +1 -0
- package/dist/events/FanOutEventPublisher.d.ts +32 -0
- package/dist/events/FanOutEventPublisher.d.ts.map +1 -0
- package/dist/events/FanOutEventPublisher.js +76 -0
- package/dist/events/FanOutEventPublisher.js.map +1 -0
- package/dist/events/InAppNotificationChannel.d.ts +20 -0
- package/dist/events/InAppNotificationChannel.d.ts.map +1 -0
- package/dist/events/InAppNotificationChannel.js +23 -0
- package/dist/events/InAppNotificationChannel.js.map +1 -0
- package/dist/github/FetchGitHubClient.d.ts +72 -0
- package/dist/github/FetchGitHubClient.d.ts.map +1 -0
- package/dist/github/FetchGitHubClient.js +485 -0
- package/dist/github/FetchGitHubClient.js.map +1 -0
- package/dist/github/FetchGitHubProvisioningClient.d.ts +13 -0
- package/dist/github/FetchGitHubProvisioningClient.d.ts.map +1 -0
- package/dist/github/FetchGitHubProvisioningClient.js +59 -0
- package/dist/github/FetchGitHubProvisioningClient.js.map +1 -0
- package/dist/github/GitHubAppAuth.d.ts +30 -0
- package/dist/github/GitHubAppAuth.d.ts.map +1 -0
- package/dist/github/GitHubAppAuth.js +95 -0
- package/dist/github/GitHubAppAuth.js.map +1 -0
- package/dist/github/GitHubAppRegistry.d.ts +57 -0
- package/dist/github/GitHubAppRegistry.d.ts.map +1 -0
- package/dist/github/GitHubAppRegistry.js +51 -0
- package/dist/github/GitHubAppRegistry.js.map +1 -0
- package/dist/github/GitHubCiStatusProvider.d.ts +21 -0
- package/dist/github/GitHubCiStatusProvider.d.ts.map +1 -0
- package/dist/github/GitHubCiStatusProvider.js +39 -0
- package/dist/github/GitHubCiStatusProvider.js.map +1 -0
- package/dist/github/GitHubMergeabilityProvider.d.ts +26 -0
- package/dist/github/GitHubMergeabilityProvider.d.ts.map +1 -0
- package/dist/github/GitHubMergeabilityProvider.js +38 -0
- package/dist/github/GitHubMergeabilityProvider.js.map +1 -0
- package/dist/github/GitHubPullRequestMerger.d.ts +23 -0
- package/dist/github/GitHubPullRequestMerger.d.ts.map +1 -0
- package/dist/github/GitHubPullRequestMerger.js +38 -0
- package/dist/github/GitHubPullRequestMerger.js.map +1 -0
- package/dist/github/WebCryptoWebhookVerifier.d.ts +9 -0
- package/dist/github/WebCryptoWebhookVerifier.d.ts.map +1 -0
- package/dist/github/WebCryptoWebhookVerifier.js +40 -0
- package/dist/github/WebCryptoWebhookVerifier.js.map +1 -0
- package/dist/github/ensureWorkBranch.d.ts +26 -0
- package/dist/github/ensureWorkBranch.d.ts.map +1 -0
- package/dist/github/ensureWorkBranch.js +97 -0
- package/dist/github/ensureWorkBranch.js.map +1 -0
- package/dist/github/state.d.ts +19 -0
- package/dist/github/state.d.ts.map +1 -0
- package/dist/github/state.js +55 -0
- package/dist/github/state.js.map +1 -0
- package/dist/http/authGate.d.ts +21 -0
- package/dist/http/authGate.d.ts.map +1 -0
- package/dist/http/authGate.js +77 -0
- package/dist/http/authGate.js.map +1 -0
- package/dist/http/cors.d.ts +13 -0
- package/dist/http/cors.d.ts.map +1 -0
- package/dist/http/cors.js +30 -0
- package/dist/http/cors.js.map +1 -0
- package/dist/http/env.d.ts +68 -0
- package/dist/http/env.d.ts.map +1 -0
- package/dist/http/env.js +2 -0
- package/dist/http/env.js.map +1 -0
- package/dist/http/errorHandler.d.ts +4 -0
- package/dist/http/errorHandler.d.ts.map +1 -0
- package/dist/http/errorHandler.js +33 -0
- package/dist/http/errorHandler.js.map +1 -0
- package/dist/http/params.d.ts +8 -0
- package/dist/http/params.d.ts.map +1 -0
- package/dist/http/params.js +13 -0
- package/dist/http/params.js.map +1 -0
- package/dist/http/validation.d.ts +12 -0
- package/dist/http/validation.d.ts.map +1 -0
- package/dist/http/validation.js +21 -0
- package/dist/http/validation.js.map +1 -0
- package/dist/index.d.ts +46 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +63 -0
- package/dist/index.js.map +1 -0
- package/dist/modules/accounts/AccountController.d.ts +10 -0
- package/dist/modules/accounts/AccountController.d.ts.map +1 -0
- package/dist/modules/accounts/AccountController.js +197 -0
- package/dist/modules/accounts/AccountController.js.map +1 -0
- package/dist/modules/agentRuns/AgentRunController.d.ts +10 -0
- package/dist/modules/agentRuns/AgentRunController.d.ts.map +1 -0
- package/dist/modules/agentRuns/AgentRunController.js +65 -0
- package/dist/modules/agentRuns/AgentRunController.js.map +1 -0
- package/dist/modules/auth/AuthController.d.ts +12 -0
- package/dist/modules/auth/AuthController.d.ts.map +1 -0
- package/dist/modules/auth/AuthController.js +457 -0
- package/dist/modules/auth/AuthController.js.map +1 -0
- package/dist/modules/board/BoardController.d.ts +8 -0
- package/dist/modules/board/BoardController.d.ts.map +1 -0
- package/dist/modules/board/BoardController.js +89 -0
- package/dist/modules/board/BoardController.js.map +1 -0
- package/dist/modules/boardScan/BoardScanController.d.ts +10 -0
- package/dist/modules/boardScan/BoardScanController.d.ts.map +1 -0
- package/dist/modules/boardScan/BoardScanController.js +53 -0
- package/dist/modules/boardScan/BoardScanController.js.map +1 -0
- package/dist/modules/bootstrap/BootstrapController.d.ts +10 -0
- package/dist/modules/bootstrap/BootstrapController.d.ts.map +1 -0
- package/dist/modules/bootstrap/BootstrapController.js +75 -0
- package/dist/modules/bootstrap/BootstrapController.js.map +1 -0
- package/dist/modules/clarity/ClarityReviewController.d.ts +11 -0
- package/dist/modules/clarity/ClarityReviewController.d.ts.map +1 -0
- package/dist/modules/clarity/ClarityReviewController.js +97 -0
- package/dist/modules/clarity/ClarityReviewController.js.map +1 -0
- package/dist/modules/consensus/ConsensusController.d.ts +12 -0
- package/dist/modules/consensus/ConsensusController.d.ts.map +1 -0
- package/dist/modules/consensus/ConsensusController.js +23 -0
- package/dist/modules/consensus/ConsensusController.js.map +1 -0
- package/dist/modules/documents/DocumentSourceController.d.ts +10 -0
- package/dist/modules/documents/DocumentSourceController.d.ts.map +1 -0
- package/dist/modules/documents/DocumentSourceController.js +116 -0
- package/dist/modules/documents/DocumentSourceController.js.map +1 -0
- package/dist/modules/environments/EnvironmentController.d.ts +10 -0
- package/dist/modules/environments/EnvironmentController.d.ts.map +1 -0
- package/dist/modules/environments/EnvironmentController.js +95 -0
- package/dist/modules/environments/EnvironmentController.js.map +1 -0
- package/dist/modules/events/EventsController.d.ts +26 -0
- package/dist/modules/events/EventsController.d.ts.map +1 -0
- package/dist/modules/events/EventsController.js +56 -0
- package/dist/modules/events/EventsController.js.map +1 -0
- package/dist/modules/execution/ExecutionController.d.ts +10 -0
- package/dist/modules/execution/ExecutionController.d.ts.map +1 -0
- package/dist/modules/execution/ExecutionController.js +156 -0
- package/dist/modules/execution/ExecutionController.js.map +1 -0
- package/dist/modules/fragmentLibrary/FragmentLibraryController.d.ts +14 -0
- package/dist/modules/fragmentLibrary/FragmentLibraryController.d.ts.map +1 -0
- package/dist/modules/fragmentLibrary/FragmentLibraryController.js +128 -0
- package/dist/modules/fragmentLibrary/FragmentLibraryController.js.map +1 -0
- package/dist/modules/github/GitHubController.d.ts +12 -0
- package/dist/modules/github/GitHubController.d.ts.map +1 -0
- package/dist/modules/github/GitHubController.js +234 -0
- package/dist/modules/github/GitHubController.js.map +1 -0
- package/dist/modules/github/GitHubWebhookController.d.ts +13 -0
- package/dist/modules/github/GitHubWebhookController.d.ts.map +1 -0
- package/dist/modules/github/GitHubWebhookController.js +74 -0
- package/dist/modules/github/GitHubWebhookController.js.map +1 -0
- package/dist/modules/llmProxy/LlmProxyController.d.ts +18 -0
- package/dist/modules/llmProxy/LlmProxyController.d.ts.map +1 -0
- package/dist/modules/llmProxy/LlmProxyController.js +567 -0
- package/dist/modules/llmProxy/LlmProxyController.js.map +1 -0
- package/dist/modules/localModels/LocalModelEndpointController.d.ts +4 -0
- package/dist/modules/localModels/LocalModelEndpointController.d.ts.map +1 -0
- package/dist/modules/localModels/LocalModelEndpointController.js +58 -0
- package/dist/modules/localModels/LocalModelEndpointController.js.map +1 -0
- package/dist/modules/merge/MergePresetController.d.ts +9 -0
- package/dist/modules/merge/MergePresetController.d.ts.map +1 -0
- package/dist/modules/merge/MergePresetController.js +46 -0
- package/dist/modules/merge/MergePresetController.js.map +1 -0
- package/dist/modules/modelDefaults/ModelDefaultsController.d.ts +9 -0
- package/dist/modules/modelDefaults/ModelDefaultsController.d.ts.map +1 -0
- package/dist/modules/modelDefaults/ModelDefaultsController.js +32 -0
- package/dist/modules/modelDefaults/ModelDefaultsController.js.map +1 -0
- package/dist/modules/models/ModelController.d.ts +11 -0
- package/dist/modules/models/ModelController.d.ts.map +1 -0
- package/dist/modules/models/ModelController.js +38 -0
- package/dist/modules/models/ModelController.js.map +1 -0
- package/dist/modules/notifications/NotificationController.d.ts +13 -0
- package/dist/modules/notifications/NotificationController.d.ts.map +1 -0
- package/dist/modules/notifications/NotificationController.js +67 -0
- package/dist/modules/notifications/NotificationController.js.map +1 -0
- package/dist/modules/pipelines/PipelineController.d.ts +5 -0
- package/dist/modules/pipelines/PipelineController.d.ts.map +1 -0
- package/dist/modules/pipelines/PipelineController.js +46 -0
- package/dist/modules/pipelines/PipelineController.js.map +1 -0
- package/dist/modules/promptFragments/PromptFragmentController.d.ts +11 -0
- package/dist/modules/promptFragments/PromptFragmentController.d.ts.map +1 -0
- package/dist/modules/promptFragments/PromptFragmentController.js +18 -0
- package/dist/modules/promptFragments/PromptFragmentController.js.map +1 -0
- package/dist/modules/providers/ApiKeyController.d.ts +13 -0
- package/dist/modules/providers/ApiKeyController.d.ts.map +1 -0
- package/dist/modules/providers/ApiKeyController.js +98 -0
- package/dist/modules/providers/ApiKeyController.js.map +1 -0
- package/dist/modules/providers/PersonalSubscriptionController.d.ts +4 -0
- package/dist/modules/providers/PersonalSubscriptionController.d.ts.map +1 -0
- package/dist/modules/providers/PersonalSubscriptionController.js +48 -0
- package/dist/modules/providers/PersonalSubscriptionController.js.map +1 -0
- package/dist/modules/providers/VendorCredentialController.d.ts +4 -0
- package/dist/modules/providers/VendorCredentialController.d.ts.map +1 -0
- package/dist/modules/providers/VendorCredentialController.js +55 -0
- package/dist/modules/providers/VendorCredentialController.js.map +1 -0
- package/dist/modules/providers/personalCredentialGate.d.ts +34 -0
- package/dist/modules/providers/personalCredentialGate.d.ts.map +1 -0
- package/dist/modules/providers/personalCredentialGate.js +106 -0
- package/dist/modules/providers/personalCredentialGate.js.map +1 -0
- package/dist/modules/recurring/RecurringPipelineController.d.ts +8 -0
- package/dist/modules/recurring/RecurringPipelineController.d.ts.map +1 -0
- package/dist/modules/recurring/RecurringPipelineController.js +58 -0
- package/dist/modules/recurring/RecurringPipelineController.js.map +1 -0
- package/dist/modules/recurring/TrackerSettingsController.d.ts +8 -0
- package/dist/modules/recurring/TrackerSettingsController.d.ts.map +1 -0
- package/dist/modules/recurring/TrackerSettingsController.js +30 -0
- package/dist/modules/recurring/TrackerSettingsController.js.map +1 -0
- package/dist/modules/releaseHealth/ReleaseHealthController.d.ts +9 -0
- package/dist/modules/releaseHealth/ReleaseHealthController.d.ts.map +1 -0
- package/dist/modules/releaseHealth/ReleaseHealthController.js +58 -0
- package/dist/modules/releaseHealth/ReleaseHealthController.js.map +1 -0
- package/dist/modules/requirements/RequirementReviewController.d.ts +12 -0
- package/dist/modules/requirements/RequirementReviewController.d.ts.map +1 -0
- package/dist/modules/requirements/RequirementReviewController.js +107 -0
- package/dist/modules/requirements/RequirementReviewController.js.map +1 -0
- package/dist/modules/runners/RunnerPoolController.d.ts +10 -0
- package/dist/modules/runners/RunnerPoolController.d.ts.map +1 -0
- package/dist/modules/runners/RunnerPoolController.js +52 -0
- package/dist/modules/runners/RunnerPoolController.js.map +1 -0
- package/dist/modules/serviceFragmentDefaults/ServiceFragmentDefaultsController.d.ts +9 -0
- package/dist/modules/serviceFragmentDefaults/ServiceFragmentDefaultsController.d.ts.map +1 -0
- package/dist/modules/serviceFragmentDefaults/ServiceFragmentDefaultsController.js +32 -0
- package/dist/modules/serviceFragmentDefaults/ServiceFragmentDefaultsController.js.map +1 -0
- package/dist/modules/services/ServiceMountController.d.ts +11 -0
- package/dist/modules/services/ServiceMountController.d.ts.map +1 -0
- package/dist/modules/services/ServiceMountController.js +64 -0
- package/dist/modules/services/ServiceMountController.js.map +1 -0
- package/dist/modules/settings/WorkspaceSettingsController.d.ts +9 -0
- package/dist/modules/settings/WorkspaceSettingsController.d.ts.map +1 -0
- package/dist/modules/settings/WorkspaceSettingsController.js +32 -0
- package/dist/modules/settings/WorkspaceSettingsController.js.map +1 -0
- package/dist/modules/slack/SlackController.d.ts +17 -0
- package/dist/modules/slack/SlackController.d.ts.map +1 -0
- package/dist/modules/slack/SlackController.js +135 -0
- package/dist/modules/slack/SlackController.js.map +1 -0
- package/dist/modules/tasks/TaskSourceController.d.ts +9 -0
- package/dist/modules/tasks/TaskSourceController.d.ts.map +1 -0
- package/dist/modules/tasks/TaskSourceController.js +103 -0
- package/dist/modules/tasks/TaskSourceController.js.map +1 -0
- package/dist/modules/webSearch/WebSearchProxyController.d.ts +4 -0
- package/dist/modules/webSearch/WebSearchProxyController.d.ts.map +1 -0
- package/dist/modules/webSearch/WebSearchProxyController.js +78 -0
- package/dist/modules/webSearch/WebSearchProxyController.js.map +1 -0
- package/dist/modules/webSearch/upstreams.d.ts +50 -0
- package/dist/modules/webSearch/upstreams.d.ts.map +1 -0
- package/dist/modules/webSearch/upstreams.js +107 -0
- package/dist/modules/webSearch/upstreams.js.map +1 -0
- package/dist/modules/workspaces/WorkspaceController.d.ts +5 -0
- package/dist/modules/workspaces/WorkspaceController.d.ts.map +1 -0
- package/dist/modules/workspaces/WorkspaceController.js +167 -0
- package/dist/modules/workspaces/WorkspaceController.js.map +1 -0
- package/dist/observability/logger.d.ts +9 -0
- package/dist/observability/logger.d.ts.map +1 -0
- package/dist/observability/logger.js +39 -0
- package/dist/observability/logger.js.map +1 -0
- package/dist/persistence/mappers.d.ts +101 -0
- package/dist/persistence/mappers.d.ts.map +1 -0
- package/dist/persistence/mappers.js +260 -0
- package/dist/persistence/mappers.js.map +1 -0
- package/dist/runtime/escalateNotifications.d.ts +12 -0
- package/dist/runtime/escalateNotifications.d.ts.map +1 -0
- package/dist/runtime/escalateNotifications.js +25 -0
- package/dist/runtime/escalateNotifications.js.map +1 -0
- package/dist/runtime/gateways.d.ts +159 -0
- package/dist/runtime/gateways.d.ts.map +1 -0
- package/dist/runtime/gateways.js +2 -0
- package/dist/runtime/gateways.js.map +1 -0
- package/package.json +44 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContainerAgentExecutor.js","sourceRoot":"","sources":["../../src/agents/ContainerAgentExecutor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import type { BootstrapJobHandle, BootstrapJobRepository, BootstrapJobUpdate, BootstrapRepoOutcome, BootstrapRepoRequest, GitHubClient, GitHubInstallationRepository, ModelRef, RepoBootstrapper, RepoProjectionRepository } from '@cat-factory/kernel';
|
|
2
|
+
import type { ContainerSessionService } from '../containers/ContainerSessionService.js';
|
|
3
|
+
import { type ResolveRunnerTransport } from './RunnerJobClient.js';
|
|
4
|
+
export interface ContainerRepoBootstrapperDependencies {
|
|
5
|
+
/**
|
|
6
|
+
* Resolve which runner backend (Cloudflare container or self-hosted pool) a
|
|
7
|
+
* bootstrap job dispatches to — the same seam the implementation executor rides.
|
|
8
|
+
*/
|
|
9
|
+
resolveTransport: ResolveRunnerTransport;
|
|
10
|
+
/** Resolve which GitHub installation a workspace's repos live under. */
|
|
11
|
+
installationRepository: GitHubInstallationRepository;
|
|
12
|
+
/** Look up a job's target repo name when polling (the poll only carries a job id). */
|
|
13
|
+
bootstrapJobRepository: BootstrapJobRepository;
|
|
14
|
+
/** Local repo projection: where the bootstrapped repo is recorded + linked to its frame. */
|
|
15
|
+
repoRepository: RepoProjectionRepository;
|
|
16
|
+
/** Resolves/validates the pre-created target repository (existence + emptiness). */
|
|
17
|
+
githubClient: GitHubClient;
|
|
18
|
+
/** Mints a short-lived GitHub installation token for clone + push. */
|
|
19
|
+
mintInstallationToken: (installationId: number) => Promise<string>;
|
|
20
|
+
/** Mints the signed, model-locked LLM-proxy session token the container uses. */
|
|
21
|
+
sessionService: ContainerSessionService;
|
|
22
|
+
/** Model the bootstrapper agent runs with (must be proxyable). */
|
|
23
|
+
model: ModelRef;
|
|
24
|
+
/** Public base URL of the Worker's OpenAI-compatible LLM proxy, including `/v1`. */
|
|
25
|
+
proxyBaseUrl: string;
|
|
26
|
+
/** GitHub REST base for creating the repo / pushing (Enterprise / api.github.com). */
|
|
27
|
+
githubApiBase?: string;
|
|
28
|
+
/** Web base for building the created repo's URL (defaults to github.com). */
|
|
29
|
+
webBaseUrl?: string;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* A {@link RepoBootstrapper} that performs the side-effecting half of a
|
|
33
|
+
* "bootstrap repo" run. The empty target repository is created up front — by the
|
|
34
|
+
* user (the default — cat-factory then needs no repo-creation permission) or, for
|
|
35
|
+
* orgs served by the privileged App tier (ADR 0005), via the create-repo endpoint
|
|
36
|
+
* behind the modal's "Create repository" button. This spins up a per-run Cloudflare
|
|
37
|
+
* Container that clones the reference architecture, has the bootstrapper agent adapt
|
|
38
|
+
* it per the instructions, and pushes the result as the new repo's initial commit.
|
|
39
|
+
*
|
|
40
|
+
* It pre-flights that the target repo exists, is reachable by the installation,
|
|
41
|
+
* and is empty (the push is the first commit). Secrets never reach the container
|
|
42
|
+
* image: the per-job GitHub installation token and the model-locked LLM-proxy
|
|
43
|
+
* session token are minted here and handed over in the dispatch body, exactly as
|
|
44
|
+
* the implementation executor does.
|
|
45
|
+
*/
|
|
46
|
+
export declare class ContainerRepoBootstrapper implements RepoBootstrapper {
|
|
47
|
+
private readonly deps;
|
|
48
|
+
/** Shared backend-polymorphic dispatch/poll/release plumbing (see RunnerJobClient). */
|
|
49
|
+
private readonly jobs;
|
|
50
|
+
constructor(deps: ContainerRepoBootstrapperDependencies);
|
|
51
|
+
/** An active (non-soft-deleted) installation means the workspace is connected. */
|
|
52
|
+
isWorkspaceConnected(workspaceId: string): Promise<boolean>;
|
|
53
|
+
/**
|
|
54
|
+
* Pre-flight the target repo and dispatch the bootstrap container as a
|
|
55
|
+
* background job (returns once accepted, like `/run`). Throws on a pre-flight
|
|
56
|
+
* failure so the run fails fast before a board frame is created.
|
|
57
|
+
*/
|
|
58
|
+
startBootstrap(request: BootstrapRepoRequest): Promise<BootstrapJobHandle>;
|
|
59
|
+
/** Poll a dispatched bootstrap job, mapping the runner job view into an update. */
|
|
60
|
+
pollBootstrap(handle: BootstrapJobHandle): Promise<BootstrapJobUpdate>;
|
|
61
|
+
/**
|
|
62
|
+
* Best-effort: reclaim the per-run container for a job. Releases through the same
|
|
63
|
+
* transport the run dispatched to (keyed by job id) — for the Cloudflare backend
|
|
64
|
+
* this SIGKILLs the per-run container and clears its live-inventory row. Safe to
|
|
65
|
+
* call when the container is already gone — a release on a non-running instance is
|
|
66
|
+
* a no-op, and any error is swallowed by the caller.
|
|
67
|
+
*/
|
|
68
|
+
stopBootstrap(handle: BootstrapJobHandle): Promise<void>;
|
|
69
|
+
/**
|
|
70
|
+
* After a successful run: record the bootstrapped repo in the local projection
|
|
71
|
+
* (a brand-new repo may not be there yet) and link it to the board frame, so
|
|
72
|
+
* tasks dropped on that service resolve to (and are implemented against) it.
|
|
73
|
+
*/
|
|
74
|
+
linkRepoToBlock(workspaceId: string, outcome: BootstrapRepoOutcome, blockId: string): Promise<void>;
|
|
75
|
+
/** Construct the success outcome from the installation + the recorded job's repo name. */
|
|
76
|
+
private buildOutcome;
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=ContainerRepoBootstrapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContainerRepoBootstrapper.d.ts","sourceRoot":"","sources":["../../src/agents/ContainerRepoBootstrapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,kBAAkB,EAClB,sBAAsB,EACtB,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,YAAY,EACZ,4BAA4B,EAC5B,QAAQ,EACR,gBAAgB,EAEhB,wBAAwB,EACzB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAA;AACvF,OAAO,EAAmB,KAAK,sBAAsB,EAAE,MAAM,sBAAsB,CAAA;AAGnF,MAAM,WAAW,qCAAqC;IACpD;;;OAGG;IACH,gBAAgB,EAAE,sBAAsB,CAAA;IACxC,wEAAwE;IACxE,sBAAsB,EAAE,4BAA4B,CAAA;IACpD,sFAAsF;IACtF,sBAAsB,EAAE,sBAAsB,CAAA;IAC9C,4FAA4F;IAC5F,cAAc,EAAE,wBAAwB,CAAA;IACxC,oFAAoF;IACpF,YAAY,EAAE,YAAY,CAAA;IAC1B,sEAAsE;IACtE,qBAAqB,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;IAClE,iFAAiF;IACjF,cAAc,EAAE,uBAAuB,CAAA;IACvC,kEAAkE;IAClE,KAAK,EAAE,QAAQ,CAAA;IACf,oFAAoF;IACpF,YAAY,EAAE,MAAM,CAAA;IACpB,sFAAsF;IACtF,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,6EAA6E;IAC7E,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAmBD;;;;;;;;;;;;;;GAcG;AACH,qBAAa,yBAA0B,YAAW,gBAAgB;IAIpD,OAAO,CAAC,QAAQ,CAAC,IAAI;IAHjC,uFAAuF;IACvF,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAiB;IAEtC,YAA6B,IAAI,EAAE,qCAAqC,EAEvE;IAED,kFAAkF;IAC5E,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAGhE;IAED;;;;OAIG;IACG,cAAc,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA8H/E;IAED,mFAAmF;IAC7E,aAAa,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAiC3E;IAED;;;;;;OAMG;IACG,aAAa,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAK7D;IAED;;;;OAIG;IACG,eAAe,CACnB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,oBAAoB,EAC7B,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAgBf;IAED,0FAA0F;YAC5E,YAAY;CAkB3B"}
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
import { RunnerJobClient } from './RunnerJobClient.js';
|
|
2
|
+
import { logger } from '../observability/logger.js';
|
|
3
|
+
/** The role prompt when adapting a cloned reference architecture. */
|
|
4
|
+
const ADAPT_SYSTEM_PROMPT = 'You are a repository bootstrapper. You have a fresh clone of a reference ' +
|
|
5
|
+
'architecture (a base/golden-template repository). Adapt it in place into the ' +
|
|
6
|
+
'new service per the instructions: rename packages/modules, remove pieces that ' +
|
|
7
|
+
'do not apply, update README and metadata, and leave the project building. Make ' +
|
|
8
|
+
'focused, idiomatic changes that match the existing structure. Do not invent ' +
|
|
9
|
+
'unrelated features.';
|
|
10
|
+
/** The role prompt when scaffolding a brand-new repository from scratch. */
|
|
11
|
+
const SCAFFOLD_SYSTEM_PROMPT = 'You are a repository bootstrapper. You are working in an empty directory and ' +
|
|
12
|
+
'must scaffold a brand-new repository from scratch per the instructions. Create ' +
|
|
13
|
+
'a sensible, idiomatic project layout: source files, a README, and the metadata ' +
|
|
14
|
+
'and build/config files appropriate for the stack, leaving the project building. ' +
|
|
15
|
+
'Keep the scope to what the instructions describe; do not invent unrelated features.';
|
|
16
|
+
/**
|
|
17
|
+
* A {@link RepoBootstrapper} that performs the side-effecting half of a
|
|
18
|
+
* "bootstrap repo" run. The empty target repository is created up front — by the
|
|
19
|
+
* user (the default — cat-factory then needs no repo-creation permission) or, for
|
|
20
|
+
* orgs served by the privileged App tier (ADR 0005), via the create-repo endpoint
|
|
21
|
+
* behind the modal's "Create repository" button. This spins up a per-run Cloudflare
|
|
22
|
+
* Container that clones the reference architecture, has the bootstrapper agent adapt
|
|
23
|
+
* it per the instructions, and pushes the result as the new repo's initial commit.
|
|
24
|
+
*
|
|
25
|
+
* It pre-flights that the target repo exists, is reachable by the installation,
|
|
26
|
+
* and is empty (the push is the first commit). Secrets never reach the container
|
|
27
|
+
* image: the per-job GitHub installation token and the model-locked LLM-proxy
|
|
28
|
+
* session token are minted here and handed over in the dispatch body, exactly as
|
|
29
|
+
* the implementation executor does.
|
|
30
|
+
*/
|
|
31
|
+
export class ContainerRepoBootstrapper {
|
|
32
|
+
deps;
|
|
33
|
+
/** Shared backend-polymorphic dispatch/poll/release plumbing (see RunnerJobClient). */
|
|
34
|
+
jobs;
|
|
35
|
+
constructor(deps) {
|
|
36
|
+
this.deps = deps;
|
|
37
|
+
this.jobs = new RunnerJobClient(deps.resolveTransport);
|
|
38
|
+
}
|
|
39
|
+
/** An active (non-soft-deleted) installation means the workspace is connected. */
|
|
40
|
+
async isWorkspaceConnected(workspaceId) {
|
|
41
|
+
const installation = await this.deps.installationRepository.getByWorkspace(workspaceId);
|
|
42
|
+
return !!installation && !installation.deletedAt;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Pre-flight the target repo and dispatch the bootstrap container as a
|
|
46
|
+
* background job (returns once accepted, like `/run`). Throws on a pre-flight
|
|
47
|
+
* failure so the run fails fast before a board frame is created.
|
|
48
|
+
*/
|
|
49
|
+
async startBootstrap(request) {
|
|
50
|
+
const log = logger.child({ jobId: request.jobId, workspaceId: request.workspaceId });
|
|
51
|
+
const installation = await this.deps.installationRepository.getByWorkspace(request.workspaceId);
|
|
52
|
+
if (!installation || installation.deletedAt) {
|
|
53
|
+
throw new Error(`Workspace '${request.workspaceId}' is not connected to GitHub`);
|
|
54
|
+
}
|
|
55
|
+
if (!isProxyableProvider(this.deps.model.provider)) {
|
|
56
|
+
throw new Error(`Repo bootstrapping needs a model the LLM proxy can serve ` +
|
|
57
|
+
`(Workers AI, or a direct OpenAI-compatible provider); ` +
|
|
58
|
+
`'${this.deps.model.provider}' is not supported.`);
|
|
59
|
+
}
|
|
60
|
+
// The target repo is created up front — by the user via GitHub's new-repo page,
|
|
61
|
+
// or, for privileged-tier orgs (ADR 0005), programmatically via the create-repo
|
|
62
|
+
// endpoint behind the modal's "Create repository" button. Resolve it under the
|
|
63
|
+
// installation account to confirm it exists, is reachable by the App, and is
|
|
64
|
+
// empty — the run pushes the bootstrapped contents as the initial commit.
|
|
65
|
+
const owner = installation.accountLogin;
|
|
66
|
+
const repoName = request.target.name;
|
|
67
|
+
const ref = { owner, repo: repoName };
|
|
68
|
+
log.info({ target: `${owner}/${repoName}` }, 'bootstrap: pre-flighting target repo');
|
|
69
|
+
let target;
|
|
70
|
+
try {
|
|
71
|
+
target = await this.deps.githubClient.getRepo(installation.installationId, ref);
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
throw new Error(`Repository ${owner}/${repoName} was not found or is not accessible to the GitHub App. ` +
|
|
75
|
+
`Create a repository named "${repoName}" under ${owner} (an initial README, .gitignore ` +
|
|
76
|
+
`or license is fine), make sure the App is installed on it, then run bootstrap again.`);
|
|
77
|
+
}
|
|
78
|
+
// The run replaces the repo's contents with a fresh single-commit history, so
|
|
79
|
+
// the target must be empty — except that GitHub's create-repo page often
|
|
80
|
+
// prepopulates a README, .gitignore and/or license. Those are throwaway
|
|
81
|
+
// boilerplate, so tolerate a repo that holds *only* them (the push force-
|
|
82
|
+
// overwrites them); reject anything with real content to avoid clobbering work.
|
|
83
|
+
const rootEntries = await this.deps.githubClient.listRootEntries(installation.installationId, ref);
|
|
84
|
+
const realContent = rootEntries.filter((entry) => !isBootstrapBoilerplate(entry));
|
|
85
|
+
if (realContent.length > 0) {
|
|
86
|
+
const sample = realContent
|
|
87
|
+
.map((entry) => entry.path)
|
|
88
|
+
.slice(0, 5)
|
|
89
|
+
.join(', ');
|
|
90
|
+
throw new Error(`Repository ${owner}/${repoName} already has content (${sample}). Bootstrapping replaces ` +
|
|
91
|
+
`the repository's contents, so it needs an empty repository — or one prepopulated only ` +
|
|
92
|
+
`with a README, .gitignore, license and/or AGENTS.md.`);
|
|
93
|
+
}
|
|
94
|
+
const ghToken = await this.deps.mintInstallationToken(installation.installationId);
|
|
95
|
+
const sessionToken = await this.deps.sessionService.mint({
|
|
96
|
+
workspaceId: request.workspaceId,
|
|
97
|
+
executionId: request.jobId,
|
|
98
|
+
agentKind: 'architect',
|
|
99
|
+
provider: this.deps.model.provider,
|
|
100
|
+
model: this.deps.model.model,
|
|
101
|
+
});
|
|
102
|
+
const webBase = (this.deps.webBaseUrl ?? 'https://github.com').replace(/\/+$/, '');
|
|
103
|
+
const targetCloneUrl = `${webBase}/${owner}/${repoName}.git`;
|
|
104
|
+
const defaultBranch = target.defaultBranch ?? 'main';
|
|
105
|
+
// With a reference architecture the container clones + adapts it; without one
|
|
106
|
+
// it scaffolds an empty repo from the freeform instructions alone.
|
|
107
|
+
const reference = request.referenceRepo
|
|
108
|
+
? {
|
|
109
|
+
owner: request.referenceRepo.owner,
|
|
110
|
+
name: request.referenceRepo.name,
|
|
111
|
+
cloneUrl: `${webBase}/${request.referenceRepo.owner}/${request.referenceRepo.name}.git`,
|
|
112
|
+
baseBranch: 'main',
|
|
113
|
+
}
|
|
114
|
+
: undefined;
|
|
115
|
+
const body = {
|
|
116
|
+
jobId: request.jobId,
|
|
117
|
+
systemPrompt: reference ? ADAPT_SYSTEM_PROMPT : SCAFFOLD_SYSTEM_PROMPT,
|
|
118
|
+
instructions: request.instructions ||
|
|
119
|
+
(reference
|
|
120
|
+
? 'Adapt the reference architecture for the new service.'
|
|
121
|
+
: 'Scaffold a new repository for the service.'),
|
|
122
|
+
model: this.deps.model.model,
|
|
123
|
+
// Bootstrap runs on the Pi harness only (proxy + session token); it does not
|
|
124
|
+
// select a subscription harness. The job schema tolerates `harness` (shared
|
|
125
|
+
// HarnessAuthFields), but bootstrap is the one container flow that always uses
|
|
126
|
+
// the deployment's proxyable model rather than a workspace's pooled subscription
|
|
127
|
+
// token — there is no per-block model selection on a not-yet-existing repo.
|
|
128
|
+
proxyBaseUrl: this.deps.proxyBaseUrl,
|
|
129
|
+
sessionToken,
|
|
130
|
+
ghToken,
|
|
131
|
+
...(reference ? { reference } : {}),
|
|
132
|
+
target: {
|
|
133
|
+
owner,
|
|
134
|
+
name: repoName,
|
|
135
|
+
cloneUrl: targetCloneUrl,
|
|
136
|
+
defaultBranch,
|
|
137
|
+
},
|
|
138
|
+
...(this.deps.githubApiBase ? { githubApiBase: this.deps.githubApiBase } : {}),
|
|
139
|
+
};
|
|
140
|
+
// Dispatch through the shared transport (keyed by job id), exactly like the
|
|
141
|
+
// implementation executor: it hits the harness `/bootstrap` endpoint, starts the
|
|
142
|
+
// background job and returns once accepted; we then poll via the same transport.
|
|
143
|
+
// Idempotent per job id — a replayed dispatch re-attaches rather than duplicating.
|
|
144
|
+
log.info({ reference: reference ? `${reference.owner}/${reference.name}` : null }, 'bootstrap: dispatching container');
|
|
145
|
+
// A bootstrap is a single-job flow: its run IS its one job, so the run id and job
|
|
146
|
+
// id coincide (no per-step fan-out into a shared container).
|
|
147
|
+
await this.jobs.dispatch(request.workspaceId, { runId: request.jobId, jobId: request.jobId }, body, 'bootstrap');
|
|
148
|
+
log.info('bootstrap: container accepted job');
|
|
149
|
+
return { workspaceId: request.workspaceId, jobId: request.jobId };
|
|
150
|
+
}
|
|
151
|
+
/** Poll a dispatched bootstrap job, mapping the runner job view into an update. */
|
|
152
|
+
async pollBootstrap(handle) {
|
|
153
|
+
const view = await this.jobs.poll(handle.workspaceId, {
|
|
154
|
+
runId: handle.jobId,
|
|
155
|
+
jobId: handle.jobId,
|
|
156
|
+
});
|
|
157
|
+
if (view.state === 'running') {
|
|
158
|
+
return view.progress ? { state: 'running', subtasks: view.progress } : { state: 'running' };
|
|
159
|
+
}
|
|
160
|
+
if (view.state === 'failed') {
|
|
161
|
+
// The transport maps an evicted/crashed container (a 404 poll) to a failed
|
|
162
|
+
// view; the harness redacts + labels watchdog kills. Classify both kinds so the
|
|
163
|
+
// board surfaces a clear, actionable reason.
|
|
164
|
+
const error = view.error ?? 'Bootstrap job failed';
|
|
165
|
+
return {
|
|
166
|
+
state: 'failed',
|
|
167
|
+
failureKind: classifyBootstrapFailure(error),
|
|
168
|
+
error,
|
|
169
|
+
detail: view.error,
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
// Completed: a structured `error` (e.g. push rejected) is still a failure.
|
|
173
|
+
const result = view.result ?? {};
|
|
174
|
+
if (result.error) {
|
|
175
|
+
return {
|
|
176
|
+
state: 'failed',
|
|
177
|
+
failureKind: 'agent',
|
|
178
|
+
error: `Bootstrap failed: ${result.error}`,
|
|
179
|
+
detail: result.error,
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
const outcome = await this.buildOutcome(handle, result.defaultBranch);
|
|
183
|
+
return { state: 'done', outcome };
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Best-effort: reclaim the per-run container for a job. Releases through the same
|
|
187
|
+
* transport the run dispatched to (keyed by job id) — for the Cloudflare backend
|
|
188
|
+
* this SIGKILLs the per-run container and clears its live-inventory row. Safe to
|
|
189
|
+
* call when the container is already gone — a release on a non-running instance is
|
|
190
|
+
* a no-op, and any error is swallowed by the caller.
|
|
191
|
+
*/
|
|
192
|
+
async stopBootstrap(handle) {
|
|
193
|
+
await this.jobs.release(handle.workspaceId, { runId: handle.jobId, jobId: handle.jobId });
|
|
194
|
+
logger
|
|
195
|
+
.child({ jobId: handle.jobId, workspaceId: handle.workspaceId })
|
|
196
|
+
.info('bootstrap: stopped container');
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* After a successful run: record the bootstrapped repo in the local projection
|
|
200
|
+
* (a brand-new repo may not be there yet) and link it to the board frame, so
|
|
201
|
+
* tasks dropped on that service resolve to (and are implemented against) it.
|
|
202
|
+
*/
|
|
203
|
+
async linkRepoToBlock(workspaceId, outcome, blockId) {
|
|
204
|
+
const log = logger.child({ workspaceId, blockId });
|
|
205
|
+
const installation = await this.deps.installationRepository.getByWorkspace(workspaceId);
|
|
206
|
+
if (!installation || installation.deletedAt) {
|
|
207
|
+
throw new Error(`Workspace '${workspaceId}' is not connected to GitHub`);
|
|
208
|
+
}
|
|
209
|
+
const repo = await this.deps.githubClient.getRepo(installation.installationId, {
|
|
210
|
+
owner: outcome.owner,
|
|
211
|
+
repo: outcome.name,
|
|
212
|
+
});
|
|
213
|
+
await this.deps.repoRepository.upsertMany(workspaceId, [repo]);
|
|
214
|
+
await this.deps.repoRepository.linkBlock(workspaceId, repo.githubId, blockId);
|
|
215
|
+
log.info({ repo: `${outcome.owner}/${outcome.name}`, githubId: repo.githubId }, 'bootstrap: linked repo to service frame');
|
|
216
|
+
}
|
|
217
|
+
/** Construct the success outcome from the installation + the recorded job's repo name. */
|
|
218
|
+
async buildOutcome(handle, resultDefaultBranch) {
|
|
219
|
+
const installation = await this.deps.installationRepository.getByWorkspace(handle.workspaceId);
|
|
220
|
+
if (!installation)
|
|
221
|
+
throw new Error(`Workspace '${handle.workspaceId}' is not connected to GitHub`);
|
|
222
|
+
const record = await this.deps.bootstrapJobRepository.get(handle.workspaceId, handle.jobId);
|
|
223
|
+
if (!record)
|
|
224
|
+
throw new Error(`Bootstrap job '${handle.jobId}' not found`);
|
|
225
|
+
const owner = installation.accountLogin;
|
|
226
|
+
const webBase = (this.deps.webBaseUrl ?? 'https://github.com').replace(/\/+$/, '');
|
|
227
|
+
return {
|
|
228
|
+
repoUrl: `${webBase}/${owner}/${record.repoName}`,
|
|
229
|
+
owner,
|
|
230
|
+
name: record.repoName,
|
|
231
|
+
defaultBranch: resultDefaultBranch ?? 'main',
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Whether a repo's root entry is throwaway boilerplate GitHub commonly prepopulates
|
|
237
|
+
* at create time — a README, a `.gitignore`, or a license file — or an `AGENTS.md`
|
|
238
|
+
* that a prior (incomplete) bootstrap attempt left behind. The push force-overwrites
|
|
239
|
+
* all of these, so tolerating them lets bootstrap re-run over a repo seeded only with
|
|
240
|
+
* agent context. Only top-level files qualify (a directory means real project
|
|
241
|
+
* content), and the match is case-insensitive across the usual extensions
|
|
242
|
+
* (`README.md`, `LICENSE.txt`, …).
|
|
243
|
+
*/
|
|
244
|
+
function isBootstrapBoilerplate(entry) {
|
|
245
|
+
if (entry.type !== 'file')
|
|
246
|
+
return false;
|
|
247
|
+
const name = entry.path.toLowerCase();
|
|
248
|
+
return (name === '.gitignore' ||
|
|
249
|
+
name === 'readme' ||
|
|
250
|
+
name.startsWith('readme.') ||
|
|
251
|
+
name === 'license' ||
|
|
252
|
+
name.startsWith('license.') ||
|
|
253
|
+
name === 'licence' ||
|
|
254
|
+
name.startsWith('licence.') ||
|
|
255
|
+
name === 'agents.md');
|
|
256
|
+
}
|
|
257
|
+
/** Providers the LLM proxy can serve (mirrors ContainerAgentExecutor). */
|
|
258
|
+
function isProxyableProvider(provider) {
|
|
259
|
+
return (provider === 'workers-ai' ||
|
|
260
|
+
provider === 'qwen' ||
|
|
261
|
+
provider === 'deepseek' ||
|
|
262
|
+
provider === 'moonshot' ||
|
|
263
|
+
provider === 'openai');
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Classify a failed bootstrap job's error message into a {@link BootstrapFailureKind}
|
|
267
|
+
* the board can act on. The transport maps an evicted/crashed container (a 404 poll)
|
|
268
|
+
* to a failed view whose message ends "(container evicted or crashed)"; the harness
|
|
269
|
+
* redacts + labels its watchdog kills ("…no agent activity…", "…exceeded max
|
|
270
|
+
* duration…"). Everything else is an ordinary agent fault.
|
|
271
|
+
*/
|
|
272
|
+
function classifyBootstrapFailure(error) {
|
|
273
|
+
if (/evicted or crashed/i.test(error))
|
|
274
|
+
return 'evicted';
|
|
275
|
+
if (/inactivity|no agent activity|max duration/i.test(error))
|
|
276
|
+
return 'timeout';
|
|
277
|
+
return 'agent';
|
|
278
|
+
}
|
|
279
|
+
//# sourceMappingURL=ContainerRepoBootstrapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContainerRepoBootstrapper.js","sourceRoot":"","sources":["../../src/agents/ContainerRepoBootstrapper.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,eAAe,EAA+B,MAAM,sBAAsB,CAAA;AACnF,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AA8BnD,qEAAqE;AACrE,MAAM,mBAAmB,GACvB,2EAA2E;IAC3E,+EAA+E;IAC/E,gFAAgF;IAChF,iFAAiF;IACjF,8EAA8E;IAC9E,qBAAqB,CAAA;AAEvB,4EAA4E;AAC5E,MAAM,sBAAsB,GAC1B,+EAA+E;IAC/E,iFAAiF;IACjF,iFAAiF;IACjF,kFAAkF;IAClF,qFAAqF,CAAA;AAEvF;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,yBAAyB;IAIP,IAAI;IAHjC,uFAAuF;IACtE,IAAI,CAAiB;IAEtC,YAA6B,IAA2C;oBAA3C,IAAI;QAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;IACxD,CAAC;IAED,kFAAkF;IAClF,KAAK,CAAC,oBAAoB,CAAC,WAAmB;QAC5C,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,cAAc,CAAC,WAAW,CAAC,CAAA;QACvF,OAAO,CAAC,CAAC,YAAY,IAAI,CAAC,YAAY,CAAC,SAAS,CAAA;IAClD,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,cAAc,CAAC,OAA6B;QAChD,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAA;QACpF,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,cAAc,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;QAC/F,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,SAAS,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CAAC,cAAc,OAAO,CAAC,WAAW,8BAA8B,CAAC,CAAA;QAClF,CAAC;QAED,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnD,MAAM,IAAI,KAAK,CACb,2DAA2D;gBACzD,wDAAwD;gBACxD,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,qBAAqB,CACpD,CAAA;QACH,CAAC;QAED,gFAAgF;QAChF,gFAAgF;QAChF,+EAA+E;QAC/E,6EAA6E;QAC7E,0EAA0E;QAC1E,MAAM,KAAK,GAAG,YAAY,CAAC,YAAY,CAAA;QACvC,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAA;QACpC,MAAM,GAAG,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAA;QACrC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,KAAK,IAAI,QAAQ,EAAE,EAAE,EAAE,sCAAsC,CAAC,CAAA;QAEpF,IAAI,MAAM,CAAA;QACV,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,cAAc,EAAE,GAAG,CAAC,CAAA;QACjF,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,KAAK,CACb,cAAc,KAAK,IAAI,QAAQ,yDAAyD;gBACtF,8BAA8B,QAAQ,WAAW,KAAK,kCAAkC;gBACxF,sFAAsF,CACzF,CAAA;QACH,CAAC;QACD,8EAA8E;QAC9E,yEAAyE;QACzE,wEAAwE;QACxE,0EAA0E;QAC1E,gFAAgF;QAChF,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,eAAe,CAC9D,YAAY,CAAC,cAAc,EAC3B,GAAG,CACJ,CAAA;QACD,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAA;QACjF,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,WAAW;iBACvB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;iBAC1B,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;iBACX,IAAI,CAAC,IAAI,CAAC,CAAA;YACb,MAAM,IAAI,KAAK,CACb,cAAc,KAAK,IAAI,QAAQ,yBAAyB,MAAM,4BAA4B;gBACxF,wFAAwF;gBACxF,sDAAsD,CACzD,CAAA;QACH,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,cAAc,CAAC,CAAA;QAClF,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;YACvD,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,WAAW,EAAE,OAAO,CAAC,KAAK;YAC1B,SAAS,EAAE,WAAW;YACtB,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ;YAClC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK;SAC7B,CAAC,CAAA;QAEF,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,oBAAoB,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;QAClF,MAAM,cAAc,GAAG,GAAG,OAAO,IAAI,KAAK,IAAI,QAAQ,MAAM,CAAA;QAC5D,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa,IAAI,MAAM,CAAA;QAEpD,8EAA8E;QAC9E,mEAAmE;QACnE,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa;YACrC,CAAC,CAAC;gBACE,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,KAAK;gBAClC,IAAI,EAAE,OAAO,CAAC,aAAa,CAAC,IAAI;gBAChC,QAAQ,EAAE,GAAG,OAAO,IAAI,OAAO,CAAC,aAAa,CAAC,KAAK,IAAI,OAAO,CAAC,aAAa,CAAC,IAAI,MAAM;gBACvF,UAAU,EAAE,MAAM;aACnB;YACH,CAAC,CAAC,SAAS,CAAA;QAEb,MAAM,IAAI,GAAG;YACX,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,YAAY,EAAE,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,sBAAsB;YACtE,YAAY,EACV,OAAO,CAAC,YAAY;gBACpB,CAAC,SAAS;oBACR,CAAC,CAAC,uDAAuD;oBACzD,CAAC,CAAC,4CAA4C,CAAC;YACnD,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK;YAC5B,6EAA6E;YAC7E,4EAA4E;YAC5E,+EAA+E;YAC/E,iFAAiF;YACjF,4EAA4E;YAC5E,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY;YACpC,YAAY;YACZ,OAAO;YACP,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnC,MAAM,EAAE;gBACN,KAAK;gBACL,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,cAAc;gBACxB,aAAa;aACd;YACD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC/E,CAAA;QAED,4EAA4E;QAC5E,iFAAiF;QACjF,iFAAiF;QACjF,mFAAmF;QACnF,GAAG,CAAC,IAAI,CACN,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EACxE,kCAAkC,CACnC,CAAA;QACD,kFAAkF;QAClF,6DAA6D;QAC7D,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CACtB,OAAO,CAAC,WAAW,EACnB,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,EAC9C,IAAI,EACJ,WAAW,CACZ,CAAA;QACD,GAAG,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAA;QAC7C,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAA;IACnE,CAAC;IAED,mFAAmF;IACnF,KAAK,CAAC,aAAa,CAAC,MAA0B;QAC5C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;YACpD,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,KAAK,EAAE,MAAM,CAAC,KAAK;SACpB,CAAC,CAAA;QAEF,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAA;QAC7F,CAAC;QACD,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC5B,2EAA2E;YAC3E,gFAAgF;YAChF,6CAA6C;YAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,sBAAsB,CAAA;YAClD,OAAO;gBACL,KAAK,EAAE,QAAQ;gBACf,WAAW,EAAE,wBAAwB,CAAC,KAAK,CAAC;gBAC5C,KAAK;gBACL,MAAM,EAAE,IAAI,CAAC,KAAK;aACnB,CAAA;QACH,CAAC;QACD,2EAA2E;QAC3E,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,CAAA;QAChC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,OAAO;gBACL,KAAK,EAAE,QAAQ;gBACf,WAAW,EAAE,OAAO;gBACpB,KAAK,EAAE,qBAAqB,MAAM,CAAC,KAAK,EAAE;gBAC1C,MAAM,EAAE,MAAM,CAAC,KAAK;aACrB,CAAA;QACH,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,aAAa,CAAC,CAAA;QACrE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAA;IACnC,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,aAAa,CAAC,MAA0B;QAC5C,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAA;QACzF,MAAM;aACH,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC;aAC/D,IAAI,CAAC,8BAA8B,CAAC,CAAA;IACzC,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,eAAe,CACnB,WAAmB,EACnB,OAA6B,EAC7B,OAAe;QAEf,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAA;QAClD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,cAAc,CAAC,WAAW,CAAC,CAAA;QACvF,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,SAAS,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CAAC,cAAc,WAAW,8BAA8B,CAAC,CAAA;QAC1E,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,cAAc,EAAE;YAC7E,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,IAAI,EAAE,OAAO,CAAC,IAAI;SACnB,CAAC,CAAA;QACF,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;QAC9D,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;QAC7E,GAAG,CAAC,IAAI,CACN,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,EACrE,yCAAyC,CAC1C,CAAA;IACH,CAAC;IAED,0FAA0F;IAClF,KAAK,CAAC,YAAY,CACxB,MAA0B,EAC1B,mBAAuC;QAEvC,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,cAAc,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;QAC9F,IAAI,CAAC,YAAY;YACf,MAAM,IAAI,KAAK,CAAC,cAAc,MAAM,CAAC,WAAW,8BAA8B,CAAC,CAAA;QACjF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;QAC3F,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,MAAM,CAAC,KAAK,aAAa,CAAC,CAAA;QACzE,MAAM,KAAK,GAAG,YAAY,CAAC,YAAY,CAAA;QACvC,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,oBAAoB,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;QAClF,OAAO;YACL,OAAO,EAAE,GAAG,OAAO,IAAI,KAAK,IAAI,MAAM,CAAC,QAAQ,EAAE;YACjD,KAAK;YACL,IAAI,EAAE,MAAM,CAAC,QAAQ;YACrB,aAAa,EAAE,mBAAmB,IAAI,MAAM;SAC7C,CAAA;IACH,CAAC;CACF;AAED;;;;;;;;GAQG;AACH,SAAS,sBAAsB,CAAC,KAAgB;IAC9C,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,KAAK,CAAA;IACvC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAA;IACrC,OAAO,CACL,IAAI,KAAK,YAAY;QACrB,IAAI,KAAK,QAAQ;QACjB,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAC1B,IAAI,KAAK,SAAS;QAClB,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAC3B,IAAI,KAAK,SAAS;QAClB,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAC3B,IAAI,KAAK,WAAW,CACrB,CAAA;AACH,CAAC;AAED,0EAA0E;AAC1E,SAAS,mBAAmB,CAAC,QAAgB;IAC3C,OAAO,CACL,QAAQ,KAAK,YAAY;QACzB,QAAQ,KAAK,MAAM;QACnB,QAAQ,KAAK,UAAU;QACvB,QAAQ,KAAK,UAAU;QACvB,QAAQ,KAAK,QAAQ,CACtB,CAAA;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAS,wBAAwB,CAAC,KAAa;IAC7C,IAAI,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAA;IACvD,IAAI,4CAA4C,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAA;IAC9E,OAAO,OAAO,CAAA;AAChB,CAAC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type { AgentRunContext, ModelRef, SubscriptionVendor } from '@cat-factory/kernel';
|
|
2
|
+
import { type AgentRouting } from '@cat-factory/agents';
|
|
3
|
+
/** The collaborators {@link ModelRouter} needs to resolve a step's model + subscription path. */
|
|
4
|
+
export interface ModelRouterDependencies {
|
|
5
|
+
/** Default model routing; used when the block pins no (usable) model. */
|
|
6
|
+
agentRouting: AgentRouting;
|
|
7
|
+
/** Resolve a block's selected model id to a concrete ref (direct flavour). */
|
|
8
|
+
resolveBlockModel: (modelId: string | undefined) => ModelRef | undefined;
|
|
9
|
+
/**
|
|
10
|
+
* Resolve the workspace's per-agent-kind default model id, consulted when the
|
|
11
|
+
* block pins no model. Optional: absent → the env routing for the kind is used.
|
|
12
|
+
*/
|
|
13
|
+
resolveWorkspaceModelDefault?: (workspaceId: string, agentKind: string) => Promise<string | undefined>;
|
|
14
|
+
/**
|
|
15
|
+
* Whether the workspace has a pooled token for a vendor. Drives "subscriptions
|
|
16
|
+
* always win" for POOLABLE vendors: a step pinned to a dual-mode model (Kimi/DeepSeek
|
|
17
|
+
* with a Cloudflare base) is auto-routed to its subscription flavour when this returns
|
|
18
|
+
* true.
|
|
19
|
+
*/
|
|
20
|
+
hasSubscriptionToken?: (workspaceId: string, vendor: SubscriptionVendor) => Promise<boolean>;
|
|
21
|
+
/**
|
|
22
|
+
* Whether the run-initiator has their OWN personal subscription for an INDIVIDUAL-usage
|
|
23
|
+
* vendor. Individual vendors (e.g. GLM) are never pooled, so a dual-mode individual
|
|
24
|
+
* model is auto-routed to the user's personal subscription when this returns true, and
|
|
25
|
+
* otherwise stays on its Cloudflare base — so a subscriber runs GLM on their plan while
|
|
26
|
+
* a non-subscriber on the same workspace falls back to Cloudflare GLM.
|
|
27
|
+
*/
|
|
28
|
+
hasPersonalSubscription?: (userId: string, vendor: SubscriptionVendor) => Promise<boolean>;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Resolves which model — and which subscription path — a pipeline step runs on,
|
|
32
|
+
* decoupling routing POLICY from the container executor's job dispatch. Holds the one
|
|
33
|
+
* canonical step precedence (block pin > workspace per-kind default > env routing) plus
|
|
34
|
+
* the "subscriptions always win" override, so the dispatch path and the spend gate can't
|
|
35
|
+
* disagree on what a step will run. Side-effect-free.
|
|
36
|
+
*/
|
|
37
|
+
export declare class ModelRouter {
|
|
38
|
+
private readonly deps;
|
|
39
|
+
constructor(deps: ModelRouterDependencies);
|
|
40
|
+
/**
|
|
41
|
+
* Resolve the step's model ref with the shared step precedence (block pin >
|
|
42
|
+
* workspace per-kind default > env routing). Side-effect-free and dispatch-free,
|
|
43
|
+
* so it backs both the up-front `resolveModel` preview and `buildJobBody`.
|
|
44
|
+
*/
|
|
45
|
+
resolveRef(context: AgentRunContext): Promise<ModelRef>;
|
|
46
|
+
/**
|
|
47
|
+
* The canonical catalog model id the step resolves to (block pin > workspace
|
|
48
|
+
* per-kind default), or undefined when it falls through to the env routing
|
|
49
|
+
* default (a raw ref with no canonical id). Used to look up the model's
|
|
50
|
+
* subscription path for the "subscriptions always win" override.
|
|
51
|
+
*/
|
|
52
|
+
private resolveCanonicalModelId;
|
|
53
|
+
/**
|
|
54
|
+
* Resolve the step's EFFECTIVE model ref plus the subscription vendor (if any) it
|
|
55
|
+
* will run on, applying the "subscriptions always win" override:
|
|
56
|
+
* - a subscription-only model carries its harness already (always its subscription);
|
|
57
|
+
* - a dual-mode POOLABLE model (Kimi/DeepSeek) switches to its subscription flavour
|
|
58
|
+
* when the WORKSPACE has a pooled token for the vendor;
|
|
59
|
+
* - a dual-mode INDIVIDUAL model (GLM — never pooled) switches to the RUN-INITIATOR's
|
|
60
|
+
* own personal subscription when they have one, and otherwise stays on its Cloudflare
|
|
61
|
+
* base. So a subscriber runs GLM on their plan while a non-subscriber on the same
|
|
62
|
+
* workspace falls back to Cloudflare GLM.
|
|
63
|
+
*/
|
|
64
|
+
resolveEffectiveRef(context: AgentRunContext, workspaceId: string): Promise<{
|
|
65
|
+
ref: ModelRef;
|
|
66
|
+
subscriptionVendor?: SubscriptionVendor;
|
|
67
|
+
}>;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=ModelRouter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ModelRouter.d.ts","sourceRoot":"","sources":["../../src/agents/ModelRouter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAExF,OAAO,EAAE,KAAK,YAAY,EAAuB,MAAM,qBAAqB,CAAA;AAE5E,iGAAiG;AACjG,MAAM,WAAW,uBAAuB;IACtC,yEAAyE;IACzE,YAAY,EAAE,YAAY,CAAA;IAC1B,8EAA8E;IAC9E,iBAAiB,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,KAAK,QAAQ,GAAG,SAAS,CAAA;IACxE;;;OAGG;IACH,4BAA4B,CAAC,EAAE,CAC7B,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,KACd,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IAChC;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IAC5F;;;;;;OAMG;IACH,uBAAuB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;CAC3F;AAED;;;;;;GAMG;AACH,qBAAa,WAAW;IACV,OAAO,CAAC,QAAQ,CAAC,IAAI;IAAjC,YAA6B,IAAI,EAAE,uBAAuB,EAAI;IAE9D;;;;OAIG;IACH,UAAU,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,QAAQ,CAAC,CAatD;IAED;;;;;OAKG;YACW,uBAAuB;IAWrC;;;;;;;;;;OAUG;IACG,mBAAmB,CACvB,OAAO,EAAE,eAAe,EACxB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;QAAE,GAAG,EAAE,QAAQ,CAAC;QAAC,kBAAkB,CAAC,EAAE,kBAAkB,CAAA;KAAE,CAAC,CA2BrE;CACF"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { isIndividualVendor, subscriptionOptionFor } from '@cat-factory/kernel';
|
|
2
|
+
import { resolveStepModelRef } from '@cat-factory/agents';
|
|
3
|
+
/**
|
|
4
|
+
* Resolves which model — and which subscription path — a pipeline step runs on,
|
|
5
|
+
* decoupling routing POLICY from the container executor's job dispatch. Holds the one
|
|
6
|
+
* canonical step precedence (block pin > workspace per-kind default > env routing) plus
|
|
7
|
+
* the "subscriptions always win" override, so the dispatch path and the spend gate can't
|
|
8
|
+
* disagree on what a step will run. Side-effect-free.
|
|
9
|
+
*/
|
|
10
|
+
export class ModelRouter {
|
|
11
|
+
deps;
|
|
12
|
+
constructor(deps) {
|
|
13
|
+
this.deps = deps;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Resolve the step's model ref with the shared step precedence (block pin >
|
|
17
|
+
* workspace per-kind default > env routing). Side-effect-free and dispatch-free,
|
|
18
|
+
* so it backs both the up-front `resolveModel` preview and `buildJobBody`.
|
|
19
|
+
*/
|
|
20
|
+
resolveRef(context) {
|
|
21
|
+
return resolveStepModelRef({
|
|
22
|
+
agentRouting: this.deps.agentRouting,
|
|
23
|
+
resolveBlockModel: this.deps.resolveBlockModel,
|
|
24
|
+
resolveWorkspaceModelDefault: this.deps.resolveWorkspaceModelDefault,
|
|
25
|
+
}, {
|
|
26
|
+
agentKind: context.agentKind,
|
|
27
|
+
blockModelId: context.block.modelId,
|
|
28
|
+
workspaceId: context.workspaceId,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* The canonical catalog model id the step resolves to (block pin > workspace
|
|
33
|
+
* per-kind default), or undefined when it falls through to the env routing
|
|
34
|
+
* default (a raw ref with no canonical id). Used to look up the model's
|
|
35
|
+
* subscription path for the "subscriptions always win" override.
|
|
36
|
+
*/
|
|
37
|
+
async resolveCanonicalModelId(context) {
|
|
38
|
+
if (context.block.modelId)
|
|
39
|
+
return context.block.modelId;
|
|
40
|
+
if (this.deps.resolveWorkspaceModelDefault && context.workspaceId) {
|
|
41
|
+
return ((await this.deps.resolveWorkspaceModelDefault(context.workspaceId, context.agentKind)) ??
|
|
42
|
+
undefined);
|
|
43
|
+
}
|
|
44
|
+
return undefined;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Resolve the step's EFFECTIVE model ref plus the subscription vendor (if any) it
|
|
48
|
+
* will run on, applying the "subscriptions always win" override:
|
|
49
|
+
* - a subscription-only model carries its harness already (always its subscription);
|
|
50
|
+
* - a dual-mode POOLABLE model (Kimi/DeepSeek) switches to its subscription flavour
|
|
51
|
+
* when the WORKSPACE has a pooled token for the vendor;
|
|
52
|
+
* - a dual-mode INDIVIDUAL model (GLM — never pooled) switches to the RUN-INITIATOR's
|
|
53
|
+
* own personal subscription when they have one, and otherwise stays on its Cloudflare
|
|
54
|
+
* base. So a subscriber runs GLM on their plan while a non-subscriber on the same
|
|
55
|
+
* workspace falls back to Cloudflare GLM.
|
|
56
|
+
*/
|
|
57
|
+
async resolveEffectiveRef(context, workspaceId) {
|
|
58
|
+
let ref = await this.resolveRef(context);
|
|
59
|
+
let subscriptionVendor;
|
|
60
|
+
const subOption = subscriptionOptionFor(await this.resolveCanonicalModelId(context));
|
|
61
|
+
if (subOption) {
|
|
62
|
+
if (ref.harness) {
|
|
63
|
+
subscriptionVendor = subOption.vendor;
|
|
64
|
+
}
|
|
65
|
+
else if (isIndividualVendor(subOption.vendor)) {
|
|
66
|
+
// Dual-mode individual vendor (GLM): use the initiator's OWN personal subscription
|
|
67
|
+
// when they have one; else leave `ref` on the Cloudflare base (ungated fallback).
|
|
68
|
+
if (context.initiatedByUserId &&
|
|
69
|
+
this.deps.hasPersonalSubscription &&
|
|
70
|
+
(await this.deps.hasPersonalSubscription(context.initiatedByUserId, subOption.vendor))) {
|
|
71
|
+
ref = subOption.ref;
|
|
72
|
+
subscriptionVendor = subOption.vendor;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
else if (this.deps.hasSubscriptionToken &&
|
|
76
|
+
(await this.deps.hasSubscriptionToken(workspaceId, subOption.vendor))) {
|
|
77
|
+
ref = subOption.ref;
|
|
78
|
+
subscriptionVendor = subOption.vendor;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return { ref, ...(subscriptionVendor ? { subscriptionVendor } : {}) };
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=ModelRouter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ModelRouter.js","sourceRoot":"","sources":["../../src/agents/ModelRouter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAC/E,OAAO,EAAqB,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAiC5E;;;;;;GAMG;AACH,MAAM,OAAO,WAAW;IACO,IAAI;IAAjC,YAA6B,IAA6B;oBAA7B,IAAI;IAA4B,CAAC;IAE9D;;;;OAIG;IACH,UAAU,CAAC,OAAwB;QACjC,OAAO,mBAAmB,CACxB;YACE,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY;YACpC,iBAAiB,EAAE,IAAI,CAAC,IAAI,CAAC,iBAAiB;YAC9C,4BAA4B,EAAE,IAAI,CAAC,IAAI,CAAC,4BAA4B;SACrE,EACD;YACE,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,YAAY,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO;YACnC,WAAW,EAAE,OAAO,CAAC,WAAW;SACjC,CACF,CAAA;IACH,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,uBAAuB,CAAC,OAAwB;QAC5D,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO;YAAE,OAAO,OAAO,CAAC,KAAK,CAAC,OAAO,CAAA;QACvD,IAAI,IAAI,CAAC,IAAI,CAAC,4BAA4B,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YAClE,OAAO,CACL,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,4BAA4B,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;gBACtF,SAAS,CACV,CAAA;QACH,CAAC;QACD,OAAO,SAAS,CAAA;IAClB,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,mBAAmB,CACvB,OAAwB,EACxB,WAAmB;QAEnB,IAAI,GAAG,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;QACxC,IAAI,kBAAkD,CAAA;QACtD,MAAM,SAAS,GAAG,qBAAqB,CAAC,MAAM,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC,CAAA;QACpF,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;gBAChB,kBAAkB,GAAG,SAAS,CAAC,MAAM,CAAA;YACvC,CAAC;iBAAM,IAAI,kBAAkB,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;gBAChD,mFAAmF;gBACnF,kFAAkF;gBAClF,IACE,OAAO,CAAC,iBAAiB;oBACzB,IAAI,CAAC,IAAI,CAAC,uBAAuB;oBACjC,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,iBAAiB,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,EACtF,CAAC;oBACD,GAAG,GAAG,SAAS,CAAC,GAAG,CAAA;oBACnB,kBAAkB,GAAG,SAAS,CAAC,MAAM,CAAA;gBACvC,CAAC;YACH,CAAC;iBAAM,IACL,IAAI,CAAC,IAAI,CAAC,oBAAoB;gBAC9B,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,EACrE,CAAC;gBACD,GAAG,GAAG,SAAS,CAAC,GAAG,CAAA;gBACnB,kBAAkB,GAAG,SAAS,CAAC,MAAM,CAAA;YACvC,CAAC;QACH,CAAC;QACD,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;IACvE,CAAC;CACF"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { RunnerDispatchKind, RunnerDispatchOptions, RunnerJobRef, RunnerJobView, RunnerTransport } from '@cat-factory/kernel';
|
|
2
|
+
/**
|
|
3
|
+
* Resolve the runner backend a workspace's container jobs run on. Picks a
|
|
4
|
+
* workspace's self-hosted runner pool when one is registered (and runner pools are
|
|
5
|
+
* enabled), else the per-run Cloudflare Container. Called per dispatch and per poll;
|
|
6
|
+
* a poll/release passes the job's `workspaceId` (carried on the job's handle) so it
|
|
7
|
+
* resolves the same backend it dispatched to.
|
|
8
|
+
*/
|
|
9
|
+
export type ResolveRunnerTransport = (workspaceId: string | undefined) => Promise<RunnerTransport>;
|
|
10
|
+
/**
|
|
11
|
+
* The shared dispatch → poll → release plumbing every container-backed flow rides
|
|
12
|
+
* (the implementation executor and the repo bootstrapper today; the scanner next).
|
|
13
|
+
* Each flow keeps its own "mint tokens + build the harness body" and "map the
|
|
14
|
+
* runner view into its result" — the parts that genuinely differ — and delegates
|
|
15
|
+
* the backend-polymorphic transport mechanics here so they are written once.
|
|
16
|
+
*
|
|
17
|
+
* It is a thin wrapper over {@link ResolveRunnerTransport}: it resolves the right
|
|
18
|
+
* backend (Cloudflare container vs. self-hosted pool) for the job's workspace on
|
|
19
|
+
* every call, then dispatches/polls/releases through it. Stateless, so a caller may
|
|
20
|
+
* construct one per flow and reuse it across jobs.
|
|
21
|
+
*/
|
|
22
|
+
export declare class RunnerJobClient {
|
|
23
|
+
private readonly resolveTransport;
|
|
24
|
+
constructor(resolveTransport: ResolveRunnerTransport);
|
|
25
|
+
/**
|
|
26
|
+
* Start (or idempotently re-attach to) job `ref` for `workspaceId`. `kind`
|
|
27
|
+
* selects the harness endpoint; the Cloudflare backend serves every kind, a
|
|
28
|
+
* self-hosted pool only `run` (and throws a clear "unsupported" for the rest).
|
|
29
|
+
*/
|
|
30
|
+
dispatch(workspaceId: string | undefined, ref: RunnerJobRef, spec: Record<string, unknown>, kind: RunnerDispatchKind, options?: RunnerDispatchOptions): Promise<void>;
|
|
31
|
+
/** Poll the job's current state from the same backend it dispatched to. */
|
|
32
|
+
poll(workspaceId: string | undefined, ref: RunnerJobRef): Promise<RunnerJobView>;
|
|
33
|
+
/**
|
|
34
|
+
* Reclaim a run's backing runner (for the Cloudflare backend, SIGKILL the per-run
|
|
35
|
+
* container instead of letting it idle out its sleep timer; for a pool, cancel the
|
|
36
|
+
* run's in-flight job `ref.jobId`). Best-effort and idempotent: a transport without
|
|
37
|
+
* `release`, or an already-gone run/job, is a no-op.
|
|
38
|
+
*/
|
|
39
|
+
release(workspaceId: string | undefined, ref: RunnerJobRef): Promise<void>;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=RunnerJobClient.d.ts.map
|