@cat-factory/worker 0.128.1 → 0.129.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/dist/infrastructure/container-assembly.d.ts +8 -1
- package/dist/infrastructure/container-assembly.d.ts.map +1 -1
- package/dist/infrastructure/container-assembly.js +8 -1
- package/dist/infrastructure/container-assembly.js.map +1 -1
- package/dist/infrastructure/container-executor-deps.d.ts +81 -0
- package/dist/infrastructure/container-executor-deps.d.ts.map +1 -0
- package/dist/infrastructure/container-executor-deps.js +346 -0
- package/dist/infrastructure/container-executor-deps.js.map +1 -0
- package/dist/infrastructure/container-model-resolver.d.ts +14 -0
- package/dist/infrastructure/container-model-resolver.d.ts.map +1 -0
- package/dist/infrastructure/container-model-resolver.js +110 -0
- package/dist/infrastructure/container-model-resolver.js.map +1 -0
- package/dist/infrastructure/container-vcs-identity.d.ts +39 -0
- package/dist/infrastructure/container-vcs-identity.d.ts.map +1 -0
- package/dist/infrastructure/container-vcs-identity.js +88 -0
- package/dist/infrastructure/container-vcs-identity.js.map +1 -0
- package/dist/infrastructure/container.d.ts +8 -74
- package/dist/infrastructure/container.d.ts.map +1 -1
- package/dist/infrastructure/container.js +26 -481
- package/dist/infrastructure/container.js.map +1 -1
- package/dist/infrastructure/repositories/D1AgentContextSnapshotRepository.d.ts +2 -0
- package/dist/infrastructure/repositories/D1AgentContextSnapshotRepository.d.ts.map +1 -1
- package/dist/infrastructure/repositories/D1AgentContextSnapshotRepository.js +20 -4
- package/dist/infrastructure/repositories/D1AgentContextSnapshotRepository.js.map +1 -1
- package/dist/infrastructure/repositories/D1AgentSearchQueryRepository.d.ts +2 -0
- package/dist/infrastructure/repositories/D1AgentSearchQueryRepository.d.ts.map +1 -1
- package/dist/infrastructure/repositories/D1AgentSearchQueryRepository.js +22 -4
- package/dist/infrastructure/repositories/D1AgentSearchQueryRepository.js.map +1 -1
- package/dist/infrastructure/repositories/D1LlmCallMetricRepository.d.ts +2 -0
- package/dist/infrastructure/repositories/D1LlmCallMetricRepository.d.ts.map +1 -1
- package/dist/infrastructure/repositories/D1LlmCallMetricRepository.js +21 -3
- package/dist/infrastructure/repositories/D1LlmCallMetricRepository.js.map +1 -1
- package/dist/infrastructure/repositories/D1NotificationWebhookRepository.d.ts +5 -1
- package/dist/infrastructure/repositories/D1NotificationWebhookRepository.d.ts.map +1 -1
- package/dist/infrastructure/repositories/D1NotificationWebhookRepository.js +11 -5
- package/dist/infrastructure/repositories/D1NotificationWebhookRepository.js.map +1 -1
- package/migrations/0072_webhook_run_events.sql +11 -0
- package/package.json +18 -18
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
// The Worker's INLINE model-provider resolution: the memoised `ModelProviderResolver` every
|
|
2
|
+
// inline consumer shares (agent executor, requirements reviewer, doc planner, fragment
|
|
3
|
+
// selector, the sandbox) plus the per-step workspace-default resolver they all consult.
|
|
4
|
+
//
|
|
5
|
+
// Split out of `container.ts` along the same seam the Node facade already draws with
|
|
6
|
+
// `container-model-deps.ts`: model resolution is what everything else in the composition root
|
|
7
|
+
// is *given*, not part of assembling it, and keeping it here is what lets the executor wiring
|
|
8
|
+
// (`container-executor-deps.ts`) import it without either module reaching back into the root.
|
|
9
|
+
import { composeTraceSinks } from '@cat-factory/kernel';
|
|
10
|
+
import { vendorConcurrencyLimiterFromEnv } from '@cat-factory/agents';
|
|
11
|
+
import { cloudflareBindingRegistry } from '@cat-factory/provider-cloudflare';
|
|
12
|
+
import { buildLangfuseSink, buildOtelSink } from './container-trace-sinks.js';
|
|
13
|
+
import { resolvePresetModelForKind } from '@cat-factory/orchestration';
|
|
14
|
+
import { logger, createInlineInstrumentation, createScopedModelProviderResolver, wrapResolverWithTelemetry, } from '@cat-factory/server';
|
|
15
|
+
import { loadLangfuseConfig } from './config/langfuse';
|
|
16
|
+
import { loadObservabilityConfig } from './config/observability';
|
|
17
|
+
import { loadOtelConfig } from './config/otel';
|
|
18
|
+
import { requireTelemetryDb } from './env';
|
|
19
|
+
import { baseUrlFor } from './ai/providerEndpoints';
|
|
20
|
+
import { resolveExtraRegistries } from './ai/registries';
|
|
21
|
+
import { D1LlmCallMetricRepository } from './repositories/D1LlmCallMetricRepository';
|
|
22
|
+
import { D1WorkspaceSettingsRepository } from './repositories/D1WorkspaceSettingsRepository';
|
|
23
|
+
import { D1ModelPresetRepository } from './repositories/D1ModelPresetRepository';
|
|
24
|
+
import { buildApiKeyService, buildLocalModelEndpointService } from './wireCredentialServices';
|
|
25
|
+
import { CryptoIdGenerator, SystemClock } from './runtime';
|
|
26
|
+
/**
|
|
27
|
+
* The Worker's {@link ModelProvider}: the base registry plus any extra provider
|
|
28
|
+
* registries an installation registered (see ./ai/registries). Used everywhere a
|
|
29
|
+
* model provider is needed so every path — agent executor, requirements reviewer,
|
|
30
|
+
* doc planner, fragment selector — sees the same provider set. When Langfuse is
|
|
31
|
+
* configured the provider is wrapped so those INLINE (non-proxied) calls surface on
|
|
32
|
+
* the same trace sink the LLM proxy fans container calls out to.
|
|
33
|
+
*/
|
|
34
|
+
// Memoised per `(Env, db)`: every inline consumer (agent executor, requirements
|
|
35
|
+
// reviewer, doc planner, fragment selector) shares ONE resolver — and so ONE Langfuse
|
|
36
|
+
// sink — for a container build. The resolver builds a per-scope provider from the
|
|
37
|
+
// DB-backed API-key pool plus the opt-in Cloudflare binding + Bedrock registries.
|
|
38
|
+
const modelResolverCache = new WeakMap();
|
|
39
|
+
export function buildModelProviderResolver(env, db) {
|
|
40
|
+
const cached = modelResolverCache.get(env);
|
|
41
|
+
if (cached)
|
|
42
|
+
return cached;
|
|
43
|
+
// Opt-in provider registries that need no per-scope DB key: the Cloudflare Workers
|
|
44
|
+
// AI binding (when bound) and any extra registries (e.g. Bedrock). NOT assumed —
|
|
45
|
+
// `workers-ai` resolves only when the `AI` binding is present.
|
|
46
|
+
const extraRegistries = [
|
|
47
|
+
...(env.AI ? [cloudflareBindingRegistry({ binding: env.AI })] : []),
|
|
48
|
+
...resolveExtraRegistries(env),
|
|
49
|
+
];
|
|
50
|
+
// Instrument inline (non-proxied) calls with the SAME composed trace sink the proxied
|
|
51
|
+
// path uses — Langfuse and/or the OTLP exporter, whichever are enabled.
|
|
52
|
+
const traceSink = composeTraceSinks([
|
|
53
|
+
buildLangfuseSink(loadLangfuseConfig(env)),
|
|
54
|
+
buildOtelSink(loadOtelConfig(env)),
|
|
55
|
+
]);
|
|
56
|
+
// Persist inline calls to the SAME `llm_call_metrics` store the proxy writes for Pi and
|
|
57
|
+
// the executor writes for a subscription harness, so an inline agent kind (`doc-researcher`,
|
|
58
|
+
// the judges, consensus, the requirements writer) is visible to `ObservabilityPanel`, the
|
|
59
|
+
// per-step rollups and `/api/v1/debug/*` rather than only to an external trace backend.
|
|
60
|
+
// Composed through the shared factory so the recorder's service and the provider's fallback
|
|
61
|
+
// sink cannot be handed two DIFFERENT instances — the service owns the fan-out for a call it
|
|
62
|
+
// records, so a mismatch would split the trace (and wiring both to the provider would double
|
|
63
|
+
// every inline generation on Langfuse/OTel). No cache handle is passed because
|
|
64
|
+
// `workspaceSettings` is a pass-through in the isolate-safe profile.
|
|
65
|
+
const instrument = createInlineInstrumentation({
|
|
66
|
+
llmCallMetricRepository: new D1LlmCallMetricRepository({ db: requireTelemetryDb(env) }),
|
|
67
|
+
...(traceSink ? { traceSink } : {}),
|
|
68
|
+
recordPrompts: loadObservabilityConfig(env).recordPrompts,
|
|
69
|
+
workspaceSettingsRepository: new D1WorkspaceSettingsRepository({ db }),
|
|
70
|
+
idGenerator: new CryptoIdGenerator(),
|
|
71
|
+
clock: new SystemClock(),
|
|
72
|
+
logger,
|
|
73
|
+
});
|
|
74
|
+
const localModelEndpoints = buildLocalModelEndpointService(env, db, { now: () => Date.now() });
|
|
75
|
+
const scoped = createScopedModelProviderResolver({
|
|
76
|
+
apiKeys: buildApiKeyService(env, db, { now: () => Date.now() }),
|
|
77
|
+
baseUrlFor: (provider) => baseUrlFor(provider, env) ?? undefined,
|
|
78
|
+
extraRegistries,
|
|
79
|
+
localEndpointsFor: localModelEndpoints
|
|
80
|
+
? (userId) => localModelEndpoints.listResolved(userId)
|
|
81
|
+
: undefined,
|
|
82
|
+
});
|
|
83
|
+
// Observe inline calls, then cap concurrency, through the ONE composer that owns their order
|
|
84
|
+
// (instrumentation inside, limiter outermost). The Worker has no facade wrap that substitutes a
|
|
85
|
+
// resolved model today, so it could not hit the local-mode blind spot this order exists for —
|
|
86
|
+
// but going through the shared composer is what keeps that true for a Worker-side wrap added
|
|
87
|
+
// later, and it keeps the two facades textually symmetric. The limiter bounds concurrency within
|
|
88
|
+
// one isolate only (no cross-isolate/global limiting — see
|
|
89
|
+
// backend/docs/concurrency-and-redis.md), and since the Worker's inline path degrades
|
|
90
|
+
// subscription refs before resolve, it is a wired pass-through here in practice.
|
|
91
|
+
const resolver = wrapResolverWithTelemetry(scoped, {
|
|
92
|
+
...(instrument ? { instrument } : {}),
|
|
93
|
+
limiter: vendorConcurrencyLimiterFromEnv((key) => env[key]),
|
|
94
|
+
});
|
|
95
|
+
modelResolverCache.set(env, resolver);
|
|
96
|
+
return resolver;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* The resolver every executor consults for a step's default model (block-pinned >
|
|
100
|
+
* the task's selected/default model preset > env routing). Backed by the D1
|
|
101
|
+
* model-preset repo; shared by the inline LLM executor and the container executor so
|
|
102
|
+
* both honour the workspace presets identically. The built-in default preset points
|
|
103
|
+
* every agent kind at Kimi K2.7, so an unpinned step resolves to it even before the
|
|
104
|
+
* preset library is materialised.
|
|
105
|
+
*/
|
|
106
|
+
export function buildResolveWorkspaceModelDefault(db) {
|
|
107
|
+
const repo = new D1ModelPresetRepository({ db });
|
|
108
|
+
return (workspaceId, agentKind, modelPresetId) => resolvePresetModelForKind(repo, workspaceId, agentKind, modelPresetId);
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=container-model-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"container-model-resolver.js","sourceRoot":"","sources":["../../src/infrastructure/container-model-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { type Clock } from '@cat-factory/kernel';
|
|
2
|
+
import { type AppConfig } from './config';
|
|
3
|
+
import type { Env } from './env';
|
|
4
|
+
import { type ResolveRepoTarget, type ResolveRepoTargets } from './ai/ContainerAgentExecutor';
|
|
5
|
+
import { GitHubAppRegistry } from './github/GitHubAppRegistry';
|
|
6
|
+
import type { D1Database } from '@cloudflare/workers-types';
|
|
7
|
+
/**
|
|
8
|
+
* Build the multi-App registry (ADR 0005): the default App always, plus the
|
|
9
|
+
* privileged App when configured. It resolves which App's key to use per
|
|
10
|
+
* installation (from the binding's recorded appId), so every token mint / app-JWT
|
|
11
|
+
* call routes correctly. Callers guard on `config.github.enabled`, which requires
|
|
12
|
+
* GITHUB_APP_PRIVATE_KEY, so the default key is present.
|
|
13
|
+
*/
|
|
14
|
+
export declare function buildAppRegistry(env: Env, config: AppConfig, db: D1Database, clock: Clock): GitHubAppRegistry;
|
|
15
|
+
/**
|
|
16
|
+
* Resolve the repo linked to a running block's enclosing service, via the shared
|
|
17
|
+
* runtime-neutral `buildResolveRepoTarget` (the ancestry walk + no-fallback policy
|
|
18
|
+
* live in `@cat-factory/server` so the Worker and Node service can't drift). This
|
|
19
|
+
* wrapper just binds the D1 repositories. Shared by the container executor, the CI
|
|
20
|
+
* status provider and the PR merger.
|
|
21
|
+
*
|
|
22
|
+
* No `repoProjectionCache` is threaded here (unlike the Node facade, which caches the
|
|
23
|
+
* whole-projection re-list per workspace — caching-layer slice 3): the repo projection
|
|
24
|
+
* is our own mutable D1 state, and the Worker's isolate-safe profile makes that cache
|
|
25
|
+
* pass-through (no cross-isolate invalidation bus), so an in-isolate TTL would serve
|
|
26
|
+
* stale repos after a write on another isolate. Reading live IS the isolate-safe
|
|
27
|
+
* behaviour. The shared GitHub sync/webhook services still receive the (pass-through)
|
|
28
|
+
* handle via `createGitHubModule`, so their invalidation code path stays symmetric.
|
|
29
|
+
*/
|
|
30
|
+
export declare function buildResolveRepoTarget(db: D1Database): ResolveRepoTarget;
|
|
31
|
+
/**
|
|
32
|
+
* The MULTI-REPO resolver (service-connections phase 3): the task's own repo plus each
|
|
33
|
+
* connected involved-service repo, deduped. Wired from the SAME D1 repos as the singular
|
|
34
|
+
* resolver (the D1 service repo's batched `listByFrameBlocks` resolves the involved frames'
|
|
35
|
+
* repos in one query). Fed to the container executor so the implementer can fan a
|
|
36
|
+
* cross-service change out across sibling checkouts.
|
|
37
|
+
*/
|
|
38
|
+
export declare function buildResolveRepoTargets(db: D1Database): ResolveRepoTargets;
|
|
39
|
+
//# sourceMappingURL=container-vcs-identity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"container-vcs-identity.d.ts","sourceRoot":"","sources":["../../src/infrastructure/container-vcs-identity.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAKhD,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,UAAU,CAAA;AACzC,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAChC,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAM7F,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAE3D;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,SAAS,EACjB,EAAE,EAAE,UAAU,EACd,KAAK,EAAE,KAAK,GACX,iBAAiB,CAyBnB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,UAAU,GAAG,iBAAiB,CAOxE;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,UAAU,GAAG,kBAAkB,CAO1E"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
// The Worker's VCS IDENTITY + REPO-TARGETING building blocks: the multi-App GitHub registry
|
|
2
|
+
// (which App's key signs a given installation's token) and the two resolvers that map a running
|
|
3
|
+
// block to the repo(s) its work belongs in.
|
|
4
|
+
//
|
|
5
|
+
// These three are the composition root's most widely SHARED pieces — the GitHub module, the
|
|
6
|
+
// tracker wiring, the merge-lifecycle deps, the executor and the assembly step all need them —
|
|
7
|
+
// so they live beside it rather than in it: every consumer imports them from here, and none of
|
|
8
|
+
// them has to import the root (which imports several of those consumers back).
|
|
9
|
+
import {} from '@cat-factory/kernel';
|
|
10
|
+
import { buildResolveRepoTarget as buildSharedResolveRepoTarget, buildResolveRepoTargets as buildSharedResolveRepoTargets, } from '@cat-factory/server';
|
|
11
|
+
import {} from './config';
|
|
12
|
+
import {} from './ai/ContainerAgentExecutor';
|
|
13
|
+
import { D1BlockRepository } from './repositories/D1BlockRepository';
|
|
14
|
+
import { D1ServiceRepository } from './repositories/D1ServiceRepository';
|
|
15
|
+
import { D1GitHubInstallationRepository } from './repositories/D1GitHubInstallationRepository';
|
|
16
|
+
import { D1RepoProjectionRepository } from './repositories/D1RepoProjectionRepository';
|
|
17
|
+
import { GitHubAppAuth } from './github/GitHubAppAuth';
|
|
18
|
+
import { GitHubAppRegistry } from './github/GitHubAppRegistry';
|
|
19
|
+
/**
|
|
20
|
+
* Build the multi-App registry (ADR 0005): the default App always, plus the
|
|
21
|
+
* privileged App when configured. It resolves which App's key to use per
|
|
22
|
+
* installation (from the binding's recorded appId), so every token mint / app-JWT
|
|
23
|
+
* call routes correctly. Callers guard on `config.github.enabled`, which requires
|
|
24
|
+
* GITHUB_APP_PRIVATE_KEY, so the default key is present.
|
|
25
|
+
*/
|
|
26
|
+
export function buildAppRegistry(env, config, db, clock) {
|
|
27
|
+
const installationRepository = new D1GitHubInstallationRepository({ db });
|
|
28
|
+
const makeAuth = (appId, privateKeyPem) => new GitHubAppAuth({
|
|
29
|
+
appId,
|
|
30
|
+
privateKeyPem,
|
|
31
|
+
installationRepository,
|
|
32
|
+
clock,
|
|
33
|
+
apiBase: config.github.apiBase,
|
|
34
|
+
});
|
|
35
|
+
const privileged = config.github.privilegedApp && env.GITHUB_PRIVILEGED_APP_PRIVATE_KEY
|
|
36
|
+
? {
|
|
37
|
+
appId: config.github.privilegedApp.appId,
|
|
38
|
+
auth: makeAuth(config.github.privilegedApp.appId, env.GITHUB_PRIVILEGED_APP_PRIVATE_KEY),
|
|
39
|
+
}
|
|
40
|
+
: undefined;
|
|
41
|
+
return new GitHubAppRegistry({
|
|
42
|
+
default: {
|
|
43
|
+
appId: config.github.appId,
|
|
44
|
+
auth: makeAuth(config.github.appId, env.GITHUB_APP_PRIVATE_KEY),
|
|
45
|
+
},
|
|
46
|
+
privileged,
|
|
47
|
+
installationRepository,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Resolve the repo linked to a running block's enclosing service, via the shared
|
|
52
|
+
* runtime-neutral `buildResolveRepoTarget` (the ancestry walk + no-fallback policy
|
|
53
|
+
* live in `@cat-factory/server` so the Worker and Node service can't drift). This
|
|
54
|
+
* wrapper just binds the D1 repositories. Shared by the container executor, the CI
|
|
55
|
+
* status provider and the PR merger.
|
|
56
|
+
*
|
|
57
|
+
* No `repoProjectionCache` is threaded here (unlike the Node facade, which caches the
|
|
58
|
+
* whole-projection re-list per workspace — caching-layer slice 3): the repo projection
|
|
59
|
+
* is our own mutable D1 state, and the Worker's isolate-safe profile makes that cache
|
|
60
|
+
* pass-through (no cross-isolate invalidation bus), so an in-isolate TTL would serve
|
|
61
|
+
* stale repos after a write on another isolate. Reading live IS the isolate-safe
|
|
62
|
+
* behaviour. The shared GitHub sync/webhook services still receive the (pass-through)
|
|
63
|
+
* handle via `createGitHubModule`, so their invalidation code path stays symmetric.
|
|
64
|
+
*/
|
|
65
|
+
export function buildResolveRepoTarget(db) {
|
|
66
|
+
return buildSharedResolveRepoTarget({
|
|
67
|
+
installationRepository: new D1GitHubInstallationRepository({ db }),
|
|
68
|
+
repoProjectionRepository: new D1RepoProjectionRepository({ db }),
|
|
69
|
+
blockRepository: new D1BlockRepository({ db }),
|
|
70
|
+
serviceRepository: new D1ServiceRepository({ db }),
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* The MULTI-REPO resolver (service-connections phase 3): the task's own repo plus each
|
|
75
|
+
* connected involved-service repo, deduped. Wired from the SAME D1 repos as the singular
|
|
76
|
+
* resolver (the D1 service repo's batched `listByFrameBlocks` resolves the involved frames'
|
|
77
|
+
* repos in one query). Fed to the container executor so the implementer can fan a
|
|
78
|
+
* cross-service change out across sibling checkouts.
|
|
79
|
+
*/
|
|
80
|
+
export function buildResolveRepoTargets(db) {
|
|
81
|
+
return buildSharedResolveRepoTargets({
|
|
82
|
+
installationRepository: new D1GitHubInstallationRepository({ db }),
|
|
83
|
+
repoProjectionRepository: new D1RepoProjectionRepository({ db }),
|
|
84
|
+
blockRepository: new D1BlockRepository({ db }),
|
|
85
|
+
serviceRepository: new D1ServiceRepository({ db }),
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=container-vcs-identity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"container-vcs-identity.js","sourceRoot":"","sources":["../../src/infrastructure/container-vcs-identity.ts"],"names":[],"mappings":"AAAA,4FAA4F;AAC5F,gGAAgG;AAChG,4CAA4C;AAC5C,EAAE;AACF,4FAA4F;AAC5F,+FAA+F;AAC/F,+FAA+F;AAC/F,+EAA+E;AAE/E,OAAO,EAAc,MAAM,qBAAqB,CAAA;AAChD,OAAO,EACL,sBAAsB,IAAI,4BAA4B,EACtD,uBAAuB,IAAI,6BAA6B,GACzD,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAkB,MAAM,UAAU,CAAA;AAEzC,OAAO,EAAmD,MAAM,6BAA6B,CAAA;AAC7F,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAA;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAA;AACxE,OAAO,EAAE,8BAA8B,EAAE,MAAM,+CAA+C,CAAA;AAC9F,OAAO,EAAE,0BAA0B,EAAE,MAAM,2CAA2C,CAAA;AACtF,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AAG9D;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAC9B,GAAQ,EACR,MAAiB,EACjB,EAAc,EACd,KAAY;IAEZ,MAAM,sBAAsB,GAAG,IAAI,8BAA8B,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;IACzE,MAAM,QAAQ,GAAG,CAAC,KAAa,EAAE,aAAqB,EAAE,EAAE,CACxD,IAAI,aAAa,CAAC;QAChB,KAAK;QACL,aAAa;QACb,sBAAsB;QACtB,KAAK;QACL,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO;KAC/B,CAAC,CAAA;IACJ,MAAM,UAAU,GACd,MAAM,CAAC,MAAM,CAAC,aAAa,IAAI,GAAG,CAAC,iCAAiC;QAClE,CAAC,CAAC;YACE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK;YACxC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC,iCAAiC,CAAC;SACzF;QACH,CAAC,CAAC,SAAS,CAAA;IACf,OAAO,IAAI,iBAAiB,CAAC;QAC3B,OAAO,EAAE;YACP,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK;YAC1B,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,sBAAuB,CAAC;SACjE;QACD,UAAU;QACV,sBAAsB;KACvB,CAAC,CAAA;AACJ,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,sBAAsB,CAAC,EAAc;IACnD,OAAO,4BAA4B,CAAC;QAClC,sBAAsB,EAAE,IAAI,8BAA8B,CAAC,EAAE,EAAE,EAAE,CAAC;QAClE,wBAAwB,EAAE,IAAI,0BAA0B,CAAC,EAAE,EAAE,EAAE,CAAC;QAChE,eAAe,EAAE,IAAI,iBAAiB,CAAC,EAAE,EAAE,EAAE,CAAC;QAC9C,iBAAiB,EAAE,IAAI,mBAAmB,CAAC,EAAE,EAAE,EAAE,CAAC;KACnD,CAAC,CAAA;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CAAC,EAAc;IACpD,OAAO,6BAA6B,CAAC;QACnC,sBAAsB,EAAE,IAAI,8BAA8B,CAAC,EAAE,EAAE,EAAE,CAAC;QAClE,wBAAwB,EAAE,IAAI,0BAA0B,CAAC,EAAE,EAAE,EAAE,CAAC;QAChE,eAAe,EAAE,IAAI,iBAAiB,CAAC,EAAE,EAAE,EAAE,CAAC;QAC9C,iBAAiB,EAAE,IAAI,mBAAmB,CAAC,EAAE,EAAE,EAAE,CAAC;KACnD,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -1,87 +1,21 @@
|
|
|
1
|
-
import { type
|
|
2
|
-
import { type
|
|
3
|
-
import { type EnvironmentBackendRegistry, PersonalSubscriptionService, ProviderSubscriptionService } from '@cat-factory/integrations';
|
|
1
|
+
import { type Clock, type IdGenerator, type NotificationChannel, type ResolveBinaryArtifactStore, type VcsIdentityRegistry, type WorkRunner, type ProviderRegistry } from '@cat-factory/kernel';
|
|
2
|
+
import { type EnvironmentBackendRegistry } from '@cat-factory/integrations';
|
|
4
3
|
import { selectTraceSink } from './container-trace-sinks.js';
|
|
5
4
|
export { selectTraceSink };
|
|
5
|
+
import { buildAppRegistry, buildResolveRepoTarget } from './container-vcs-identity.js';
|
|
6
|
+
export { buildAppRegistry, buildResolveRepoTarget };
|
|
7
|
+
import { maybeWrapConsensus, selectAgentExecutor } from './container-executor-deps.js';
|
|
8
|
+
export { maybeWrapConsensus, selectAgentExecutor };
|
|
9
|
+
export type { WorkerExecutorDeps } from './container-executor-deps.js';
|
|
6
10
|
import { type CoreDependencies } from '@cat-factory/orchestration';
|
|
7
11
|
import { ContainerEnvConfigRepairer, type ServerContainer } from '@cat-factory/server';
|
|
8
12
|
import { type AppConfig } from './config';
|
|
9
13
|
import type { Env } from './env';
|
|
10
|
-
import { type
|
|
14
|
+
import { type ResolveRunnerTransport } from './ai/ContainerAgentExecutor';
|
|
11
15
|
import { ContainerRepoBootstrapper } from './ai/ContainerRepoBootstrapper';
|
|
12
16
|
import { type GateProviderOverrides } from '@cat-factory/gates';
|
|
13
|
-
import { GitHubAppRegistry } from './github/GitHubAppRegistry';
|
|
14
17
|
import type { D1Database } from '@cloudflare/workers-types';
|
|
15
18
|
export type Container = ServerContainer;
|
|
16
|
-
/**
|
|
17
|
-
* Pick the agent that performs pipeline steps: real LLM work via the Vercel AI
|
|
18
|
-
* SDK, composed with a per-run sandbox for the repo-operating steps (`coder`,
|
|
19
|
-
* `mocker`, `playwright`, …). Container-based implementation is ALWAYS on — the
|
|
20
|
-
* sandbox is a hard requirement, so this throws at startup if it can't be built.
|
|
21
|
-
* Tests bypass this entirely by overriding `agentExecutor` with a fake.
|
|
22
|
-
*
|
|
23
|
-
* There is intentionally NO inline fallback for the sandbox kinds — a one-shot
|
|
24
|
-
* LLM call cannot clone/edit/commit/open a PR, so a degraded inline implementer is
|
|
25
|
-
* silently broken rather than usefully degraded. If the sandbox prerequisites are
|
|
26
|
-
* missing we fail the deploy loudly here rather than starting with a half-wired
|
|
27
|
-
* implementer that would only fault the moment a repo-operating step is dispatched.
|
|
28
|
-
*/
|
|
29
|
-
/**
|
|
30
|
-
* The shared prerequisites both the composite executor selection and its container leg
|
|
31
|
-
* need — the Worker's infra handles (`env`/`config`/`db`/`clock`), the resolved runner
|
|
32
|
-
* transport, the agent-kind registry, and the optional subscription / observability seams.
|
|
33
|
-
* Bundled so the two builders take one dependency object rather than nine positional args.
|
|
34
|
-
*/
|
|
35
|
-
interface WorkerExecutorDeps {
|
|
36
|
-
env: Env;
|
|
37
|
-
config: AppConfig;
|
|
38
|
-
db: D1Database;
|
|
39
|
-
clock: Clock;
|
|
40
|
-
resolveTransport: ResolveRunnerTransport | null;
|
|
41
|
-
agentKindRegistry: AgentKindRegistry;
|
|
42
|
-
subscriptions?: ProviderSubscriptionService;
|
|
43
|
-
personalSubscriptions?: PersonalSubscriptionService;
|
|
44
|
-
agentContextObservability?: AgentContextRecorder;
|
|
45
|
-
}
|
|
46
|
-
export declare function selectAgentExecutor(deps: WorkerExecutorDeps): AgentExecutor;
|
|
47
|
-
/**
|
|
48
|
-
* Wrap the standard executor with the optional consensus mechanism when
|
|
49
|
-
* `CONSENSUS_ENABLED` is set: register the consensus capability traits (so the builder
|
|
50
|
-
* offers "Enable Consensus" on eligible steps) and route consensus-enabled steps through
|
|
51
|
-
* a multi-model process, persisting + pushing the transcript. Off ⇒ returns `standard`
|
|
52
|
-
* unchanged (no traits, no wrapping), so behaviour is identical to before.
|
|
53
|
-
*/
|
|
54
|
-
export declare function maybeWrapConsensus(standard: AgentExecutor, env: Env, config: AppConfig, db: D1Database, eventPublisher: ExecutionEventPublisher | undefined, agentKindRegistry: AgentKindRegistry): AgentExecutor;
|
|
55
|
-
/**
|
|
56
|
-
* Build the container-based implementation executor, or return null when its
|
|
57
|
-
* prerequisites are missing (a runner backend — Cloudflare Containers and/or a
|
|
58
|
-
* self-hosted pool — plus a configured GitHub App, the proxy's public URL and the
|
|
59
|
-
* signing secret) — the caller then falls back to inline work.
|
|
60
|
-
*/
|
|
61
|
-
/**
|
|
62
|
-
* Build the multi-App registry (ADR 0005): the default App always, plus the
|
|
63
|
-
* privileged App when configured. It resolves which App's key to use per
|
|
64
|
-
* installation (from the binding's recorded appId), so every token mint / app-JWT
|
|
65
|
-
* call routes correctly. Callers guard on `config.github.enabled`, which requires
|
|
66
|
-
* GITHUB_APP_PRIVATE_KEY, so the default key is present.
|
|
67
|
-
*/
|
|
68
|
-
export declare function buildAppRegistry(env: Env, config: AppConfig, db: D1Database, clock: Clock): GitHubAppRegistry;
|
|
69
|
-
/**
|
|
70
|
-
* Resolve the repo linked to a running block's enclosing service, via the shared
|
|
71
|
-
* runtime-neutral `buildResolveRepoTarget` (the ancestry walk + no-fallback policy
|
|
72
|
-
* live in `@cat-factory/server` so the Worker and Node service can't drift). This
|
|
73
|
-
* wrapper just binds the D1 repositories. Shared by the container executor, the CI
|
|
74
|
-
* status provider and the PR merger.
|
|
75
|
-
*
|
|
76
|
-
* No `repoProjectionCache` is threaded here (unlike the Node facade, which caches the
|
|
77
|
-
* whole-projection re-list per workspace — caching-layer slice 3): the repo projection
|
|
78
|
-
* is our own mutable D1 state, and the Worker's isolate-safe profile makes that cache
|
|
79
|
-
* pass-through (no cross-isolate invalidation bus), so an in-isolate TTL would serve
|
|
80
|
-
* stale repos after a write on another isolate. Reading live IS the isolate-safe
|
|
81
|
-
* behaviour. The shared GitHub sync/webhook services still receive the (pass-through)
|
|
82
|
-
* handle via `createGitHubModule`, so their invalidation code path stays symmetric.
|
|
83
|
-
*/
|
|
84
|
-
export declare function buildResolveRepoTarget(db: D1Database): ResolveRepoTarget;
|
|
85
19
|
/** What {@link selectMergeLifecycleDeps} needs. An options object rather than a positional tail:
|
|
86
20
|
* it already carried six parameters, and the notification channels it composes will keep
|
|
87
21
|
* growing (in-app, Slack, the outbound webhook, …) — a named bag stays readable and keeps the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../src/infrastructure/container.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,
|
|
1
|
+
{"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../src/infrastructure/container.ts"],"names":[],"mappings":"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"}
|