@cat-factory/integrations 0.38.0 → 0.39.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/index.d.ts CHANGED
@@ -73,6 +73,10 @@ export { KubernetesApiClient, type KubernetesClientConfig, } from './modules/kub
73
73
  export { KubernetesEnvironmentProvider } from './modules/kubernetes/KubernetesEnvironmentProvider.js';
74
74
  export * as kubernetesLogic from './modules/kubernetes/kubernetes.logic.js';
75
75
  export * as kubernetesEnvironmentLogic from './modules/kubernetes/kubernetes-environment.logic.js';
76
+ export { ComposeEnvironmentProvider, type ComposeEnvironmentProviderOptions, } from './modules/compose/ComposeEnvironmentProvider.js';
77
+ export { composeEnvironmentBackend } from './modules/compose/compose-environment-backend.js';
78
+ export { type ComposeRuntime, type ComposeExecResult, type ComposeEnvironmentConfig, } from './modules/compose/compose-environment.logic.js';
79
+ export * as composeEnvironmentLogic from './modules/compose/compose-environment.logic.js';
76
80
  export { ProvisioningLogRecorder, ProvisioningLogService, PROVISIONING_LOG_MAX_LIMIT, type ProvisioningLogEvent, type ProvisioningLogRecorderDependencies, type ProvisioningLogServiceDependencies, } from './modules/provisioning-logs/ProvisioningLogService.js';
77
81
  export { LoggingRunnerTransport, type LoggingRunnerTransportOptions, } from './modules/provisioning-logs/LoggingRunnerTransport.js';
78
82
  export { redactSecrets } from './modules/provisioning-logs/redact.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -98,6 +98,16 @@ export { KubernetesApiClient, } from './modules/kubernetes/KubernetesApiClient.j
98
98
  export { KubernetesEnvironmentProvider } from './modules/kubernetes/KubernetesEnvironmentProvider.js';
99
99
  export * as kubernetesLogic from './modules/kubernetes/kubernetes.logic.js';
100
100
  export * as kubernetesEnvironmentLogic from './modules/kubernetes/kubernetes-environment.logic.js';
101
+ // The Docker Compose environment backend: a host-daemon `EnvironmentProvider` (the Checkbox
102
+ // compose-stack mechanic) registered BY REFERENCE from the LOCAL facade only — it drives the
103
+ // host docker CLI on the Docker-family local runtimes, which is a local-mode construct (the
104
+ // plain Node service has no per-run container runtime, and the Worker has no host daemon).
105
+ // `composeEnvironmentBackend(runtime)` closes over the facade's docker CLI seam; the provider +
106
+ // pure logic are exported for tests + facade wiring.
107
+ export { ComposeEnvironmentProvider, } from './modules/compose/ComposeEnvironmentProvider.js';
108
+ export { composeEnvironmentBackend } from './modules/compose/compose-environment-backend.js';
109
+ export {} from './modules/compose/compose-environment.logic.js';
110
+ export * as composeEnvironmentLogic from './modules/compose/compose-environment.logic.js';
101
111
  // Unified provisioning event log: the best-effort recorder every spin-up/down site
102
112
  // writes through, and the read service behind the "View logs" drawers + run details.
103
113
  export { ProvisioningLogRecorder, ProvisioningLogService, PROVISIONING_LOG_MAX_LIMIT, } from './modules/provisioning-logs/ProvisioningLogService.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import type { ConnectionTestResult, EnvironmentConnectionTestRequest, EnvironmentProvider, EnvironmentStatus, EnvironmentStatusRequest, EnvironmentTeardownRequest, ProviderConfigField, ProvisionEnvironmentRequest, ProvisionedEnvironment } from '@cat-factory/kernel';
2
+ import { type ComposeRuntime } from './compose-environment.logic.js';
3
+ export interface ComposeEnvironmentProviderOptions {
4
+ /** Reserved for future URL-policy-aware behaviour; unused today (the URL is always localhost). */
5
+ urlPolicy?: unknown;
6
+ }
7
+ export declare class ComposeEnvironmentProvider implements EnvironmentProvider {
8
+ private readonly runtime;
9
+ private readonly options;
10
+ constructor(runtime: ComposeRuntime, options?: ComposeEnvironmentProviderOptions);
11
+ provision(req: ProvisionEnvironmentRequest): Promise<ProvisionedEnvironment>;
12
+ status(req: EnvironmentStatusRequest): Promise<ProvisionedEnvironment>;
13
+ teardown(req: EnvironmentTeardownRequest): Promise<{
14
+ status: EnvironmentStatus;
15
+ }>;
16
+ testConnection(_req: EnvironmentConnectionTestRequest): Promise<ConnectionTestResult>;
17
+ describeConfig(): ProviderConfigField[];
18
+ describeManifestTemplate(): {
19
+ providerId: string;
20
+ label: string;
21
+ baseUrl: string;
22
+ auth: {
23
+ type: 'none';
24
+ };
25
+ provision: {
26
+ method: 'POST';
27
+ pathTemplate: string;
28
+ };
29
+ response: {};
30
+ providerConfig: {};
31
+ };
32
+ private failed;
33
+ /** `down -v` is idempotent (a missing project is a no-op); swallow its result. */
34
+ private safeDown;
35
+ /** Read the compose file from the configured source (co-located PR repo or a separate repo). */
36
+ private readComposeFile;
37
+ }
38
+ //# sourceMappingURL=ComposeEnvironmentProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ComposeEnvironmentProvider.d.ts","sourceRoot":"","sources":["../../../src/modules/compose/ComposeEnvironmentProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,gCAAgC,EAChC,mBAAmB,EACnB,iBAAiB,EACjB,wBAAwB,EACxB,0BAA0B,EAC1B,mBAAmB,EACnB,2BAA2B,EAC3B,sBAAsB,EAEvB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAEL,KAAK,cAAc,EAUpB,MAAM,gCAAgC,CAAA;AA0BvC,MAAM,WAAW,iCAAiC;IAChD,kGAAkG;IAClG,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAED,qBAAa,0BAA2B,YAAW,mBAAmB;IAElE,OAAO,CAAC,QAAQ,CAAC,OAAO;IAExB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAH1B,YACmB,OAAO,EAAE,cAAc,EAEvB,OAAO,GAAE,iCAAsC,EAC9D;IAEE,SAAS,CAAC,GAAG,EAAE,2BAA2B,GAAG,OAAO,CAAC,sBAAsB,CAAC,CA4DjF;IAEK,MAAM,CAAC,GAAG,EAAE,wBAAwB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CA0B3E;IAEK,QAAQ,CAAC,GAAG,EAAE,0BAA0B,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,iBAAiB,CAAA;KAAE,CAAC,CAMtF;IAEK,cAAc,CAAC,IAAI,EAAE,gCAAgC,GAAG,OAAO,CAAC,oBAAoB,CAAC,CA+B1F;IAED,cAAc,IAAI,mBAAmB,EAAE,CAmDtC;IAED,wBAAwB;QAEpB,UAAU;QACV,KAAK;QACL,OAAO;QACP,IAAI;YAAI,IAAI,EAAE,MAAM;;QACpB,SAAS;YAAI,MAAM,EAAE,MAAM;YAAW,YAAY;;QAClD,QAAQ;QACR,cAAc;MAEjB;IAID,OAAO,CAAC,MAAM;IAYd,kFAAkF;YACpE,QAAQ;IAUtB,gGAAgG;YAClF,eAAe;CA4B9B"}
@@ -0,0 +1,260 @@
1
+ import { classifyComposePs, parseComposeEnvConfig, parseHostPort, prepareComposeProject, renderEnvMap, renderTemplate, resolveProjectName, tailOutput, templateVars, } from './compose-environment.logic.js';
2
+ // Native Docker Compose ephemeral-environment provider. It brings the PR repo's OWN
3
+ // `docker-compose.yml` up on a local Docker daemon under a per-PR project name, publishes the
4
+ // configured web service's port to an ephemeral host port, and returns `http://localhost:<port>`
5
+ // for the Tester to run against — the Checkbox compose-stack mechanic. Teardown is a single
6
+ // project `down -v`. Daemon access is the injected `ComposeRuntime` (the local facade wires the
7
+ // docker CLI), so this stays runtime-neutral; it is registered only where a daemon exists
8
+ // (local/Node), never the Cloudflare Worker.
9
+ //
10
+ // The repo compose file is read checkout-free (no working tree) and rewritten into ONE
11
+ // isolation-safe project file before `up` (`prepareComposeProject`): host ports forced ephemeral
12
+ // so concurrent per-PR stacks never collide, the probed service guaranteed to publish its port,
13
+ // and references that can't be honored (build contexts / host bind mounts / relative env_files /
14
+ // privileged) refused up front instead of silently mis-mounting.
15
+ //
16
+ // Per-workspace config rides the stored manifest's `providerConfig` (parsed here); there are no
17
+ // secrets. The provider is a stateless singleton — every call re-reads the config + project from
18
+ // the request, so one instance serves every workspace.
19
+ const WAIT_TIMEOUT_S = 300;
20
+ // Bound for the plain compose calls (port / ps / down / version-probe) so a wedged daemon can't
21
+ // hang a provision/status/teardown forever; `up` gets a longer bound that clears its own --wait.
22
+ const SHORT_TIMEOUT_MS = 60_000;
23
+ const UP_TIMEOUT_MS = (WAIT_TIMEOUT_S + 30) * 1000;
24
+ export class ComposeEnvironmentProvider {
25
+ runtime;
26
+ options;
27
+ constructor(runtime,
28
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
29
+ options = {}) {
30
+ this.runtime = runtime;
31
+ this.options = options;
32
+ }
33
+ async provision(req) {
34
+ const config = parseComposeEnvConfig(req.manifest);
35
+ const inputs = req.inputs;
36
+ const project = resolveProjectName(config, inputs);
37
+ const image = config.imageTemplate ? renderTemplate(config.imageTemplate, inputs) : undefined;
38
+ const vars = templateVars(inputs, project, image);
39
+ const composeText = renderTemplate(await this.readComposeFile(req, config), vars);
40
+ // Rewrite the repo compose into one isolation-safe project file (ephemeral host ports, the
41
+ // probed service guaranteed to publish, unsupported references rejected). A blocking issue
42
+ // surfaces as a deterministic failure BEFORE we touch the daemon.
43
+ const prepared = prepareComposeProject(composeText, config.service, config.port);
44
+ if (prepared.issues.length > 0) {
45
+ return this.failed(project, `This Docker Compose stack can't be provisioned as a preview env:\n- ${prepared.issues.join('\n- ')}`);
46
+ }
47
+ const basePath = await this.runtime.writeProjectFile(project, 'compose.yaml', prepared.content);
48
+ const files = ['-f', basePath];
49
+ const env = config.envTemplate ? renderEnvMap(config.envTemplate, vars) : undefined;
50
+ const up = await this.runtime.compose(['-p', project, ...files, 'up', '-d', '--wait', '--wait-timeout', String(WAIT_TIMEOUT_S)], { env, timeoutMs: UP_TIMEOUT_MS });
51
+ if (up.code !== 0) {
52
+ // Best-effort cleanup so a retry starts from a clean slate, then surface the verbatim
53
+ // compose error as a deterministic (non-throwing) failure → `step.environment.lastError`.
54
+ await this.safeDown(project);
55
+ return this.failed(project, tailOutput(up.stderr || up.stdout) || 'docker compose up failed');
56
+ }
57
+ const portRes = await this.runtime.compose(['-p', project, ...files, 'port', config.service, String(config.port)], { env, timeoutMs: SHORT_TIMEOUT_MS });
58
+ const hostPort = parseHostPort(portRes.stdout);
59
+ if (hostPort === null) {
60
+ await this.safeDown(project);
61
+ return this.failed(project, `Service '${config.service}' does not publish container port ${config.port}; cannot resolve a preview URL`);
62
+ }
63
+ const scheme = config.scheme ?? 'http';
64
+ const url = `${scheme}://localhost:${hostPort}`;
65
+ return {
66
+ externalId: project,
67
+ url,
68
+ status: 'ready',
69
+ // Auto-teardown TTL (the connect form's `ttlMinutes`, default 2h) so a forgotten preview
70
+ // env is swept off the host instead of leaking containers + volumes forever. Null ⇒ the
71
+ // operator chose "never expire" (teardown still runs on demand / at run end).
72
+ expiresAt: config.defaultTtlMs ? Date.now() + config.defaultTtlMs : null,
73
+ access: null,
74
+ // `status()`/`teardown()` re-derive everything from `project`; the URL is captured here so
75
+ // a later status poll returns it without re-running `compose port` (which needs the files).
76
+ fields: { project, url, hostPort: String(hostPort), scheme },
77
+ };
78
+ }
79
+ async status(req) {
80
+ const project = req.provisionFields.project ?? req.externalId;
81
+ if (!project) {
82
+ return {
83
+ externalId: null,
84
+ url: null,
85
+ status: 'failed',
86
+ expiresAt: null,
87
+ access: null,
88
+ fields: {},
89
+ };
90
+ }
91
+ // `-a` so a container that's briefly recreating (or a completed one-shot) is still visible —
92
+ // an empty default `ps` would otherwise flip a healthy env to `failed` mid-recreate.
93
+ const ps = await this.runtime.compose(['-p', project, 'ps', '-a', '--format', 'json'], {
94
+ timeoutMs: SHORT_TIMEOUT_MS,
95
+ });
96
+ const status = ps.code === 0 ? classifyComposePs(ps.stdout) : 'provisioning';
97
+ return {
98
+ externalId: project,
99
+ url: req.provisionFields.url ?? null,
100
+ status,
101
+ expiresAt: null,
102
+ access: null,
103
+ fields: req.provisionFields,
104
+ };
105
+ }
106
+ async teardown(req) {
107
+ const project = req.provisionFields.project ?? req.externalId;
108
+ if (!project)
109
+ return { status: 'torn_down' };
110
+ await this.safeDown(project);
111
+ await this.runtime.cleanupProject?.(project);
112
+ return { status: 'torn_down' };
113
+ }
114
+ async testConnection(_req) {
115
+ try {
116
+ const version = await this.runtime.compose(['version', '--short'], {
117
+ timeoutMs: SHORT_TIMEOUT_MS,
118
+ });
119
+ if (version.code !== 0) {
120
+ return {
121
+ ok: false,
122
+ message: tailOutput(version.stderr || version.stdout) || 'docker compose unavailable',
123
+ };
124
+ }
125
+ // `version --short` is a client-only call and succeeds even with the daemon stopped, so it
126
+ // can't confirm reachability on its own. `compose ls` actually contacts the daemon — only a
127
+ // success there means a real provision could run.
128
+ const ls = await this.runtime.compose(['ls', '--format', 'json'], {
129
+ timeoutMs: SHORT_TIMEOUT_MS,
130
+ });
131
+ if (ls.code !== 0) {
132
+ return {
133
+ ok: false,
134
+ message: tailOutput(ls.stderr || ls.stdout) || 'Docker daemon is not reachable',
135
+ };
136
+ }
137
+ const v = version.stdout.trim();
138
+ return {
139
+ ok: true,
140
+ message: v ? `Docker Compose ${v} reachable.` : 'Docker Compose reachable.',
141
+ };
142
+ }
143
+ catch (err) {
144
+ return { ok: false, message: err instanceof Error ? err.message : String(err) };
145
+ }
146
+ }
147
+ describeConfig() {
148
+ // Flat, descriptor-driven connect form (the SPA overlays these onto the manifest's
149
+ // providerConfig). `service` + `port` are required, so the unconfigured banner stays lit
150
+ // until they're set (the local preset prefills them). No secret — Compose stacks need none.
151
+ return [
152
+ {
153
+ key: 'composePath',
154
+ label: 'Compose file path',
155
+ default: 'docker-compose.yml',
156
+ help: 'Path to the compose file in the PR repo (read at the PR head branch).',
157
+ },
158
+ {
159
+ key: 'composeRepo',
160
+ label: 'Separate repo (optional)',
161
+ placeholder: 'owner/repo',
162
+ help: 'Read the compose file from a different repo instead of the PR repo.',
163
+ },
164
+ { key: 'composeRef', label: 'Separate repo ref (optional)', placeholder: 'main' },
165
+ {
166
+ key: 'service',
167
+ label: 'Web service name',
168
+ required: true,
169
+ placeholder: 'web',
170
+ help: 'The compose service whose port becomes the preview URL.',
171
+ },
172
+ {
173
+ key: 'port',
174
+ label: 'Container port',
175
+ required: true,
176
+ placeholder: '8080',
177
+ help: 'The in-container port to publish to an ephemeral host port + probe. Image-based stacks only (v1) — a service that builds from source is not yet supported.',
178
+ },
179
+ { key: 'scheme', label: 'URL scheme', default: 'http' },
180
+ {
181
+ key: 'projectTemplate',
182
+ label: 'Project name template (optional)',
183
+ placeholder: 'cf-env-{{pullNumber}}',
184
+ help: 'Defaults to cf-env-<repo>-<pullNumber>. Drives COMPOSE_PROJECT_NAME (per-PR isolation).',
185
+ },
186
+ {
187
+ key: 'imageTemplate',
188
+ label: 'Image override (optional)',
189
+ help: 'Made available to the compose file as {{image}} (e.g. a CI-built tag).',
190
+ },
191
+ {
192
+ key: 'ttlMinutes',
193
+ label: 'Auto-teardown after (minutes)',
194
+ default: '120',
195
+ help: 'The stack is swept + torn down this many minutes after it comes up, so a forgotten preview env does not leak containers + volumes on the host. 0 = never expire (teardown still runs on demand / at run end).',
196
+ },
197
+ ];
198
+ }
199
+ describeManifestTemplate() {
200
+ return {
201
+ providerId: 'compose',
202
+ label: 'Docker Compose',
203
+ baseUrl: 'http://localhost',
204
+ auth: { type: 'none' },
205
+ provision: { method: 'POST', pathTemplate: '' },
206
+ response: {},
207
+ providerConfig: {},
208
+ };
209
+ }
210
+ // --- internals ----------------------------------------------------------
211
+ failed(project, error) {
212
+ return {
213
+ externalId: project,
214
+ url: null,
215
+ status: 'failed',
216
+ expiresAt: null,
217
+ access: null,
218
+ fields: { project },
219
+ error,
220
+ };
221
+ }
222
+ /** `down -v` is idempotent (a missing project is a no-op); swallow its result. */
223
+ async safeDown(project) {
224
+ try {
225
+ await this.runtime.compose(['-p', project, 'down', '-v', '--remove-orphans'], {
226
+ timeoutMs: SHORT_TIMEOUT_MS,
227
+ });
228
+ }
229
+ catch {
230
+ // teardown is best-effort; the registry tombstones the record regardless.
231
+ }
232
+ }
233
+ /** Read the compose file from the configured source (co-located PR repo or a separate repo). */
234
+ async readComposeFile(req, config) {
235
+ let ctx;
236
+ let ref;
237
+ if (!config.composeRepo) {
238
+ ctx = req.runRepo ?? null;
239
+ if (!ctx) {
240
+ throw new Error('A co-located docker-compose file requires the run repo (is the VCS connected?)');
241
+ }
242
+ ref = req.inputs.branch || ctx.baseBranch;
243
+ }
244
+ else {
245
+ const [owner, repo] = config.composeRepo.split('/');
246
+ ctx =
247
+ (await req.resolveRepoFiles?.({ owner: owner, repo: repo, ref: config.composeRef })) ??
248
+ null;
249
+ if (!ctx) {
250
+ throw new Error(`Could not resolve the compose repo '${config.composeRepo}'`);
251
+ }
252
+ ref = config.composeRef || ctx.baseBranch;
253
+ }
254
+ const file = await ctx.repo.getFile(config.composePath, ref);
255
+ if (!file)
256
+ throw new Error(`No docker-compose file found at '${config.composePath}'`);
257
+ return file.content;
258
+ }
259
+ }
260
+ //# sourceMappingURL=ComposeEnvironmentProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ComposeEnvironmentProvider.js","sourceRoot":"","sources":["../../../src/modules/compose/ComposeEnvironmentProvider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { type ComposeRuntime } from './compose-environment.logic.js';
2
+ import type { EnvironmentBackendProvider } from '../environments/environment-backends.js';
3
+ /** Build the Compose environment backend over a host `ComposeRuntime` (the docker CLI seam). */
4
+ export declare function composeEnvironmentBackend(runtime: ComposeRuntime): EnvironmentBackendProvider;
5
+ //# sourceMappingURL=compose-environment-backend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compose-environment-backend.d.ts","sourceRoot":"","sources":["../../../src/modules/compose/compose-environment-backend.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,cAAc,EAAyB,MAAM,gCAAgC,CAAA;AAI3F,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,yCAAyC,CAAA;AAazF,gGAAgG;AAChG,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,cAAc,GAAG,0BAA0B,CA6B7F"}
@@ -0,0 +1,48 @@
1
+ import { ValidationError } from '@cat-factory/kernel';
2
+ import { ComposeEnvironmentProvider } from './ComposeEnvironmentProvider.js';
3
+ import { parseComposeEnvConfig } from './compose-environment.logic.js';
4
+ // The Docker Compose environment backend. Unlike the built-in `manifest`/`kubernetes` backends,
5
+ // it is NOT in the default registry: it needs a host Docker daemon, so the LOCAL facade registers
6
+ // it BY REFERENCE, closing over a `ComposeRuntime` that drives the docker CLI. The plain Node
7
+ // service (no per-run container runtime) and the Cloudflare Worker (no daemon) never register it
8
+ // — the documented runtime-bound asymmetry.
9
+ //
10
+ // It rides the contract's generic environment-backend manifest member (kind `compose` is not a
11
+ // reserved built-in), so it needs no new config variant, no table, and no migration: the flat
12
+ // config lives in the stored manifest's `providerConfig`, written by the descriptor-driven
13
+ // connect form (`describeConfig`/`describeManifestTemplate`).
14
+ /** Build the Compose environment backend over a host `ComposeRuntime` (the docker CLI seam). */
15
+ export function composeEnvironmentBackend(runtime) {
16
+ return {
17
+ kind: 'compose',
18
+ displayLabel: 'Docker Compose',
19
+ // No secrets — a compose stack authenticates via the images themselves.
20
+ referencedSecretKeys: () => [],
21
+ connectionMeta: (config) => ({
22
+ providerId: 'compose',
23
+ label: 'manifest' in config ? config.manifest.label : 'Docker Compose',
24
+ baseUrl: 'manifest' in config ? config.manifest.baseUrl : 'http://localhost',
25
+ }),
26
+ assertConfigSafe: (config) => {
27
+ // The provider only ever returns a localhost URL and never fetches an operator-supplied
28
+ // URL, so there is no SSRF surface. Validate the load-bearing fields (service + port) up
29
+ // front so a bad config fails the connect form (422) instead of deep in a provision.
30
+ if (!('manifest' in config))
31
+ return;
32
+ try {
33
+ parseComposeEnvConfig(config.manifest);
34
+ }
35
+ catch (err) {
36
+ throw new ValidationError(err instanceof Error ? err.message : String(err));
37
+ }
38
+ },
39
+ toManifest: (config) => {
40
+ if (!('manifest' in config))
41
+ throw new Error('Expected a Docker Compose environment config');
42
+ return config.manifest;
43
+ },
44
+ fromManifest: (manifest) => ({ kind: 'compose', manifest }),
45
+ buildProvider: (ctx) => new ComposeEnvironmentProvider(runtime, { urlPolicy: ctx.urlPolicy }),
46
+ };
47
+ }
48
+ //# sourceMappingURL=compose-environment-backend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compose-environment-backend.js","sourceRoot":"","sources":["../../../src/modules/compose/compose-environment-backend.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAA;AAC5E,OAAO,EAAuB,qBAAqB,EAAE,MAAM,gCAAgC,CAAA;AAM3F,gGAAgG;AAChG,kGAAkG;AAClG,8FAA8F;AAC9F,iGAAiG;AACjG,4CAA4C;AAC5C,EAAE;AACF,+FAA+F;AAC/F,8FAA8F;AAC9F,2FAA2F;AAC3F,8DAA8D;AAE9D,gGAAgG;AAChG,MAAM,UAAU,yBAAyB,CAAC,OAAuB;IAC/D,OAAO;QACL,IAAI,EAAE,SAAS;QACf,YAAY,EAAE,gBAAgB;QAC9B,wEAAwE;QACxE,oBAAoB,EAAE,GAAG,EAAE,CAAC,EAAE;QAC9B,cAAc,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAC3B,UAAU,EAAE,SAAS;YACrB,KAAK,EAAE,UAAU,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,gBAAgB;YACtE,OAAO,EAAE,UAAU,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB;SAC7E,CAAC;QACF,gBAAgB,EAAE,CAAC,MAAM,EAAE,EAAE;YAC3B,wFAAwF;YACxF,yFAAyF;YACzF,qFAAqF;YACrF,IAAI,CAAC,CAAC,UAAU,IAAI,MAAM,CAAC;gBAAE,OAAM;YACnC,IAAI,CAAC;gBACH,qBAAqB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;YACxC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,IAAI,eAAe,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;YAC7E,CAAC;QACH,CAAC;QACD,UAAU,EAAE,CAAC,MAAM,EAAE,EAAE;YACrB,IAAI,CAAC,CAAC,UAAU,IAAI,MAAM,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;YAC5F,OAAO,MAAM,CAAC,QAAQ,CAAA;QACxB,CAAC;QACD,YAAY,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;QAC3D,aAAa,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,0BAA0B,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC;KAC9F,CAAA;AACH,CAAC"}
@@ -0,0 +1,155 @@
1
+ import type { EnvironmentManifest, EnvironmentStatus } from '@cat-factory/kernel';
2
+ /** A single `docker compose` invocation result (exit code + captured output). */
3
+ export interface ComposeExecResult {
4
+ code: number;
5
+ stdout: string;
6
+ stderr: string;
7
+ }
8
+ /**
9
+ * The host seam the provider drives. A facade (local mode) implements it over the docker CLI
10
+ * + a host temp dir; the integrations package stays free of `node:*` so it remains
11
+ * runtime-neutral. `compose(args)` runs `docker compose <args>`; `writeProjectFile` persists a
12
+ * scratch file (the repo's compose file + the generated override) somewhere the daemon reads.
13
+ */
14
+ export interface ComposeRuntime {
15
+ /**
16
+ * Run `docker compose <args>`; resolves with the exit code + captured stdout/stderr. `timeoutMs`
17
+ * bounds the invocation (a wedged daemon must not hang provision/status/teardown forever); the
18
+ * facade kills the child + surfaces a non-zero result when it elapses.
19
+ */
20
+ compose(args: string[], opts?: {
21
+ env?: Record<string, string>;
22
+ timeoutMs?: number;
23
+ }): Promise<ComposeExecResult>;
24
+ /** Write a per-project scratch file; returns its absolute host path. */
25
+ writeProjectFile(project: string, fileName: string, content: string): Promise<string>;
26
+ /** Best-effort removal of a project's scratch dir after teardown. Optional. */
27
+ cleanupProject?(project: string): Promise<void>;
28
+ }
29
+ /** The flat per-workspace config, read off `manifest.providerConfig`. */
30
+ export interface ComposeEnvironmentConfig {
31
+ label: string;
32
+ /** Path to the compose file (co-located in the PR repo by default). */
33
+ composePath: string;
34
+ /** Read the compose file from a SEPARATE `owner/repo` instead of the PR repo. */
35
+ composeRepo?: string;
36
+ /** Ref to read the separate repo at; absent ⇒ that repo's default branch. */
37
+ composeRef?: string;
38
+ /** The compose service whose port is published + probed for the preview URL. */
39
+ service: string;
40
+ /** The in-container port to publish + probe. */
41
+ port: number;
42
+ /** URL scheme (default `http`). */
43
+ scheme?: 'http' | 'https';
44
+ /** Project-name template (default derived from repo + PR number / block id). */
45
+ projectTemplate?: string;
46
+ /** Optional image ref made available to the compose file as `{{image}}`. */
47
+ imageTemplate?: string;
48
+ /** Optional extra env passed to compose (templated), for `${VAR}` interpolation. */
49
+ envTemplate?: Record<string, string>;
50
+ /** Fallback TTL (ms) after which the env is swept + torn down. */
51
+ defaultTtlMs?: number;
52
+ }
53
+ /**
54
+ * Read the flat Compose config off the stored manifest's `providerConfig`. Validates the two
55
+ * load-bearing fields (service + port); throws a clear error otherwise. The connect form wrote
56
+ * these as strings (the generic descriptor overlay), so `port` is coerced from its string form.
57
+ */
58
+ export declare function parseComposeEnvConfig(manifest: EnvironmentManifest): ComposeEnvironmentConfig;
59
+ /** Build the stored manifest that carries a Compose env config in its `providerConfig`. */
60
+ export declare function composeConfigToManifest(config: ComposeEnvironmentConfig): EnvironmentManifest;
61
+ /** Replace `{{ key }}` placeholders from `vars`; an unknown key resolves to ''. */
62
+ export declare function renderTemplate(template: string, vars: Record<string, string>): string;
63
+ /** Render every value of an env map through {@link renderTemplate}. */
64
+ export declare function renderEnvMap(env: Record<string, string>, vars: Record<string, string>): Record<string, string>;
65
+ /**
66
+ * Sanitize an arbitrary string into a valid Docker Compose project name: lower-case, only
67
+ * `[a-z0-9_-]`, must start with `[a-z0-9]`, bounded length. Mirrors the k8s namespace
68
+ * sanitize so two stacks can't collide on a malformed name.
69
+ */
70
+ export declare function sanitizeProjectName(name: string): string;
71
+ /** A short, stable, filesystem-safe digest (djb2 → base36) used to disambiguate project names. */
72
+ export declare function shortHash(input: string): string;
73
+ /**
74
+ * Resolve the per-PR project name. An explicit `projectTemplate` is rendered + sanitized; else
75
+ * the default qualifies the PR number with the repo (a workspace can have many repos that each
76
+ * open a PR with the SAME number — a bare `cf-env-<pr>` would collide on one project and the
77
+ * second PR's `up`/`down` would hit the first's stack) AND, when known, a short digest of the
78
+ * globally-unique block id (so two DIFFERENT workspaces sharing a repo name + PR number on the
79
+ * same host can't collide either). It falls back to the block id, then a bare PR number, for a
80
+ * manual provision.
81
+ */
82
+ export declare function resolveProjectName(config: ComposeEnvironmentConfig, inputs: Record<string, string>): string;
83
+ /** The `{{var}}` substitution map available to the compose text + env templates. */
84
+ export declare function templateVars(inputs: Record<string, string>, project: string, image: string | undefined): Record<string, string>;
85
+ type ComposeDoc = Record<string, unknown>;
86
+ /**
87
+ * Rewrite a single `ports` entry to its container-only (ephemeral host port) form, dropping any
88
+ * host ip / published host port. `"127.0.0.1:8080:8080"` / `"8080:8080"` / `{ published, target }`
89
+ * all collapse to `"8080"`; a protocol suffix is preserved. Returns null for an unparsable entry.
90
+ */
91
+ export declare function toEphemeralPortEntry(entry: unknown): string | null;
92
+ /**
93
+ * Force every service's published host ports to ephemeral. Compose MERGES (`-f` overlays) and
94
+ * a base compose file usually pins the web service's host port (`"8080:8080"`) — leaving that in
95
+ * place makes concurrent per-PR stacks collide on one host port, defeating the project-name
96
+ * isolation. So instead of an additive override we rewrite the file: each service's host port is
97
+ * stripped, leaving the container port published to an ephemeral host port. Mutates + returns the doc.
98
+ */
99
+ export declare function neutralizeHostPorts(doc: ComposeDoc): ComposeDoc;
100
+ /** Guarantee the probed service publishes `port`, so `docker compose port` can read the host binding back. */
101
+ export declare function ensureServicePublishes(doc: ComposeDoc, service: string, port: number): ComposeDoc;
102
+ /**
103
+ * Collect references this backend cannot honor or must refuse, so a provision fails fast with a
104
+ * clear reason instead of silently mis-mounting / over-privileging. The compose file is read
105
+ * checkout-free (no repo on disk), so anything resolved against the repo working tree is broken,
106
+ * and the stack runs on the operator's shared host daemon, so host access is a safety concern:
107
+ * - `build:` — needs the source tree (image-based stacks only).
108
+ * - host bind mounts — resolve against an empty scratch dir; also expose the host filesystem.
109
+ * - relative `env_file` — points into the absent repo tree.
110
+ * - `privileged: true` — refused on the shared host daemon.
111
+ */
112
+ export declare function collectUnsupportedComposeRefs(doc: ComposeDoc): string[];
113
+ /** The outcome of preparing a repo compose file into a single isolation-safe project file. */
114
+ export interface PreparedCompose {
115
+ /** The rewritten compose file to hand to `docker compose -f` (valid even when `issues` is non-empty). */
116
+ content: string;
117
+ /** Blocking reasons the stack can't be provisioned as-is; non-empty ⇒ the provider fails the provision. */
118
+ issues: string[];
119
+ }
120
+ /**
121
+ * Turn the (already `{{var}}`-rendered) repo compose text into ONE isolation-safe project file:
122
+ * validate it parses + contains the probed service, surface any unsupported references, force all
123
+ * host ports ephemeral, and guarantee the probed service publishes its port. Returning a single
124
+ * rewritten file (rather than a second `-f` overlay) is what lets us STRIP the base's pinned host
125
+ * ports — an overlay can only add, not remove.
126
+ */
127
+ export declare function prepareComposeProject(renderedText: string, service: string, port: number): PreparedCompose;
128
+ /**
129
+ * Parse the host port out of `docker compose port <svc> <port>` output (e.g. `0.0.0.0:49153`
130
+ * or `[::]:49153`). Returns null when the service publishes no host port for that target.
131
+ */
132
+ export declare function parseHostPort(output: string): number | null;
133
+ interface ComposePsRow {
134
+ State?: string;
135
+ Health?: string;
136
+ ExitCode?: number;
137
+ }
138
+ /** Parse `docker compose ps --format json` (a JSON array OR newline-delimited objects). */
139
+ export declare function parseComposePsRows(output: string): ComposePsRow[];
140
+ /**
141
+ * Reduce a `docker compose ps -a` snapshot (the `-a` includes stopped containers) into one
142
+ * lifecycle verdict:
143
+ * - empty ⇒ `failed` (the project is gone / never came up);
144
+ * - any `unhealthy` service, or a container `exited`/`dead` with a non-zero code ⇒ `failed`;
145
+ * - a transient state (`created`/`restarting`/`paused`/`removing`) or a `running` service still
146
+ * `starting` its healthcheck ⇒ `provisioning` (so a brief recreate doesn't flip a healthy env
147
+ * to `failed`);
148
+ * - a clean one-shot that `exited (0)` is treated as complete (neither pending nor failing);
149
+ * - otherwise ⇒ `ready`.
150
+ */
151
+ export declare function classifyComposePs(output: string): EnvironmentStatus;
152
+ /** A short tail of command output, for a deterministic-failure `lastError`. */
153
+ export declare function tailOutput(output: string, lines?: number): string;
154
+ export {};
155
+ //# sourceMappingURL=compose-environment.logic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compose-environment.logic.d.ts","sourceRoot":"","sources":["../../../src/modules/compose/compose-environment.logic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,376 @@
1
+ import { parse, stringify } from 'yaml';
2
+ const DEFAULT_COMPOSE_PATH = 'docker-compose.yml';
3
+ function optionalString(value) {
4
+ if (typeof value !== 'string')
5
+ return undefined;
6
+ const trimmed = value.trim();
7
+ return trimmed.length > 0 ? trimmed : undefined;
8
+ }
9
+ /**
10
+ * Read the flat Compose config off the stored manifest's `providerConfig`. Validates the two
11
+ * load-bearing fields (service + port); throws a clear error otherwise. The connect form wrote
12
+ * these as strings (the generic descriptor overlay), so `port` is coerced from its string form.
13
+ */
14
+ export function parseComposeEnvConfig(manifest) {
15
+ const raw = (manifest.providerConfig ?? {});
16
+ const service = optionalString(raw.service);
17
+ if (!service) {
18
+ throw new Error('Docker Compose environment is missing the web service name (service)');
19
+ }
20
+ const port = Number(raw.port);
21
+ if (!Number.isInteger(port) || port < 1 || port > 65535) {
22
+ throw new Error(`Docker Compose environment has an invalid container port: ${String(raw.port)}`);
23
+ }
24
+ const scheme = raw.scheme === 'https' ? 'https' : 'http';
25
+ const envTemplate = raw.envTemplate && typeof raw.envTemplate === 'object'
26
+ ? Object.fromEntries(Object.entries(raw.envTemplate).map(([k, val]) => [
27
+ k,
28
+ String(val),
29
+ ]))
30
+ : undefined;
31
+ return {
32
+ label: manifest.label,
33
+ composePath: optionalString(raw.composePath) ?? DEFAULT_COMPOSE_PATH,
34
+ composeRepo: optionalString(raw.composeRepo),
35
+ composeRef: optionalString(raw.composeRef),
36
+ service,
37
+ port,
38
+ scheme,
39
+ projectTemplate: optionalString(raw.projectTemplate),
40
+ imageTemplate: optionalString(raw.imageTemplate),
41
+ envTemplate,
42
+ defaultTtlMs: resolveTtlMs(raw.ttlMinutes, manifest.defaultTtlMs),
43
+ };
44
+ }
45
+ /**
46
+ * Resolve the env's auto-teardown TTL (ms). The connect form collects it as `ttlMinutes` (a
47
+ * string) so a leaked compose project is swept off the host instead of running forever; a present
48
+ * `0`/blank/invalid value is an explicit "never expire" (undefined), and an absent field falls
49
+ * back to the manifest's own `defaultTtlMs`.
50
+ */
51
+ function resolveTtlMs(rawTtlMinutes, manifestDefaultTtlMs) {
52
+ const ttlMinutes = optionalString(rawTtlMinutes);
53
+ if (ttlMinutes === undefined)
54
+ return manifestDefaultTtlMs;
55
+ const minutes = Number(ttlMinutes);
56
+ return Number.isFinite(minutes) && minutes > 0 ? Math.round(minutes * 60_000) : undefined;
57
+ }
58
+ /** Build the stored manifest that carries a Compose env config in its `providerConfig`. */
59
+ export function composeConfigToManifest(config) {
60
+ return {
61
+ providerId: 'compose',
62
+ label: config.label,
63
+ // Inert: the provider always returns a localhost URL, so baseUrl is never fetched and is
64
+ // not SSRF-checked. A placeholder keeps the manifest schema (which requires a non-empty
65
+ // baseUrl + provision + response) satisfied.
66
+ baseUrl: 'http://localhost',
67
+ auth: { type: 'none' },
68
+ provision: { method: 'POST', pathTemplate: '' },
69
+ response: {},
70
+ ...(config.defaultTtlMs ? { defaultTtlMs: config.defaultTtlMs } : {}),
71
+ providerConfig: { ...config },
72
+ };
73
+ }
74
+ /** Replace `{{ key }}` placeholders from `vars`; an unknown key resolves to ''. */
75
+ export function renderTemplate(template, vars) {
76
+ return template.replace(/\{\{\s*([a-zA-Z0-9_.]+)\s*\}\}/g, (_m, key) => vars[key] ?? '');
77
+ }
78
+ /** Render every value of an env map through {@link renderTemplate}. */
79
+ export function renderEnvMap(env, vars) {
80
+ return Object.fromEntries(Object.entries(env).map(([k, val]) => [k, renderTemplate(val, vars)]));
81
+ }
82
+ /**
83
+ * Sanitize an arbitrary string into a valid Docker Compose project name: lower-case, only
84
+ * `[a-z0-9_-]`, must start with `[a-z0-9]`, bounded length. Mirrors the k8s namespace
85
+ * sanitize so two stacks can't collide on a malformed name.
86
+ */
87
+ export function sanitizeProjectName(name) {
88
+ const cleaned = name
89
+ .toLowerCase()
90
+ .replace(/[^a-z0-9_-]+/g, '-')
91
+ .replace(/^[^a-z0-9]+/, '')
92
+ .replace(/-+$/g, '')
93
+ .slice(0, 63);
94
+ return cleaned.length > 0 ? cleaned : 'cf-env';
95
+ }
96
+ /** A short, stable, filesystem-safe digest (djb2 → base36) used to disambiguate project names. */
97
+ export function shortHash(input) {
98
+ let h = 5381;
99
+ for (let i = 0; i < input.length; i++)
100
+ h = ((h << 5) + h + input.charCodeAt(i)) >>> 0;
101
+ return h.toString(36).slice(0, 6);
102
+ }
103
+ /**
104
+ * Resolve the per-PR project name. An explicit `projectTemplate` is rendered + sanitized; else
105
+ * the default qualifies the PR number with the repo (a workspace can have many repos that each
106
+ * open a PR with the SAME number — a bare `cf-env-<pr>` would collide on one project and the
107
+ * second PR's `up`/`down` would hit the first's stack) AND, when known, a short digest of the
108
+ * globally-unique block id (so two DIFFERENT workspaces sharing a repo name + PR number on the
109
+ * same host can't collide either). It falls back to the block id, then a bare PR number, for a
110
+ * manual provision.
111
+ */
112
+ export function resolveProjectName(config, inputs) {
113
+ if (config.projectTemplate) {
114
+ return sanitizeProjectName(renderTemplate(config.projectTemplate, inputs));
115
+ }
116
+ if (inputs.repoName && inputs.pullNumber) {
117
+ const base = `cf-env-${inputs.repoName}-${inputs.pullNumber}`;
118
+ return sanitizeProjectName(inputs.blockId ? `${base}-${shortHash(inputs.blockId)}` : base);
119
+ }
120
+ return sanitizeProjectName(`cf-env-${inputs.blockId || inputs.pullNumber || 'env'}`);
121
+ }
122
+ /** The `{{var}}` substitution map available to the compose text + env templates. */
123
+ export function templateVars(inputs, project, image) {
124
+ return { ...inputs, project, ...(image !== undefined ? { image } : {}) };
125
+ }
126
+ function servicesOf(doc) {
127
+ const services = doc.services;
128
+ if (!services || typeof services !== 'object')
129
+ return {};
130
+ return services;
131
+ }
132
+ function asArray(value) {
133
+ if (Array.isArray(value))
134
+ return value;
135
+ if (value === undefined || value === null)
136
+ return [];
137
+ return [value];
138
+ }
139
+ /** The container-target of a normalized (host-stripped) short-form ports entry: `"8080/tcp"` → `8080`. */
140
+ function portTarget(entry) {
141
+ return (entry.split('/')[0] ?? '').trim();
142
+ }
143
+ /**
144
+ * Rewrite a single `ports` entry to its container-only (ephemeral host port) form, dropping any
145
+ * host ip / published host port. `"127.0.0.1:8080:8080"` / `"8080:8080"` / `{ published, target }`
146
+ * all collapse to `"8080"`; a protocol suffix is preserved. Returns null for an unparsable entry.
147
+ */
148
+ export function toEphemeralPortEntry(entry) {
149
+ if (typeof entry === 'number')
150
+ return String(entry);
151
+ if (typeof entry === 'string') {
152
+ const [mapping, proto] = entry.split('/');
153
+ const segments = (mapping ?? '').split(':');
154
+ const target = segments[segments.length - 1]?.trim();
155
+ if (!target)
156
+ return null;
157
+ return proto ? `${target}/${proto}` : target;
158
+ }
159
+ if (entry && typeof entry === 'object') {
160
+ const e = entry;
161
+ if (e.target === undefined || e.target === null)
162
+ return null;
163
+ const proto = typeof e.protocol === 'string' ? e.protocol : undefined;
164
+ return proto ? `${String(e.target)}/${proto}` : String(e.target);
165
+ }
166
+ return null;
167
+ }
168
+ /**
169
+ * Force every service's published host ports to ephemeral. Compose MERGES (`-f` overlays) and
170
+ * a base compose file usually pins the web service's host port (`"8080:8080"`) — leaving that in
171
+ * place makes concurrent per-PR stacks collide on one host port, defeating the project-name
172
+ * isolation. So instead of an additive override we rewrite the file: each service's host port is
173
+ * stripped, leaving the container port published to an ephemeral host port. Mutates + returns the doc.
174
+ */
175
+ export function neutralizeHostPorts(doc) {
176
+ for (const service of Object.values(servicesOf(doc))) {
177
+ if (!service || typeof service !== 'object' || !Array.isArray(service.ports))
178
+ continue;
179
+ service.ports = service.ports.map(toEphemeralPortEntry).filter((p) => p !== null);
180
+ }
181
+ return doc;
182
+ }
183
+ /** Guarantee the probed service publishes `port`, so `docker compose port` can read the host binding back. */
184
+ export function ensureServicePublishes(doc, service, port) {
185
+ const svc = servicesOf(doc)[service];
186
+ if (!svc || typeof svc !== 'object')
187
+ return doc;
188
+ const ports = Array.isArray(svc.ports) ? svc.ports.map(String) : [];
189
+ svc.ports = ports.some((p) => portTarget(p) === String(port)) ? ports : [...ports, String(port)];
190
+ return doc;
191
+ }
192
+ function isRelativePath(path) {
193
+ return !path.startsWith('/') && !/^[a-zA-Z]:[\\/]/.test(path);
194
+ }
195
+ function bindMountSource(volume) {
196
+ if (typeof volume === 'string') {
197
+ const segments = volume.split(':');
198
+ if (segments.length < 2)
199
+ return null; // anonymous volume (`/data`) — a container path, not a host bind
200
+ const source = segments[0] ?? '';
201
+ return source.startsWith('.') || source.startsWith('/') || source.startsWith('~')
202
+ ? source
203
+ : null;
204
+ }
205
+ if (volume && typeof volume === 'object') {
206
+ const v = volume;
207
+ if (v.type === 'bind')
208
+ return typeof v.source === 'string' ? v.source : 'bind';
209
+ if (v.type === undefined && typeof v.source === 'string') {
210
+ const s = v.source;
211
+ return s.startsWith('.') || s.startsWith('/') || s.startsWith('~') ? s : null;
212
+ }
213
+ }
214
+ return null;
215
+ }
216
+ /**
217
+ * Collect references this backend cannot honor or must refuse, so a provision fails fast with a
218
+ * clear reason instead of silently mis-mounting / over-privileging. The compose file is read
219
+ * checkout-free (no repo on disk), so anything resolved against the repo working tree is broken,
220
+ * and the stack runs on the operator's shared host daemon, so host access is a safety concern:
221
+ * - `build:` — needs the source tree (image-based stacks only).
222
+ * - host bind mounts — resolve against an empty scratch dir; also expose the host filesystem.
223
+ * - relative `env_file` — points into the absent repo tree.
224
+ * - `privileged: true` — refused on the shared host daemon.
225
+ */
226
+ export function collectUnsupportedComposeRefs(doc) {
227
+ const issues = [];
228
+ for (const [name, service] of Object.entries(servicesOf(doc))) {
229
+ if (!service || typeof service !== 'object')
230
+ continue;
231
+ if (service.build !== undefined) {
232
+ issues.push(`service '${name}' uses build: — image-based stacks only (no repo is checked out)`);
233
+ }
234
+ if (service.privileged === true) {
235
+ issues.push(`service '${name}' requests privileged: true — refused on the shared host daemon`);
236
+ }
237
+ for (const volume of asArray(service.volumes)) {
238
+ const source = bindMountSource(volume);
239
+ if (source !== null) {
240
+ issues.push(`service '${name}' bind-mounts a host path ('${source}') — unsupported (no repo on disk; use a named volume)`);
241
+ }
242
+ }
243
+ for (const entry of asArray(service.env_file)) {
244
+ const path = typeof entry === 'string' ? entry : entry?.path;
245
+ if (typeof path === 'string' && isRelativePath(path)) {
246
+ issues.push(`service '${name}' reads a relative env_file ('${path}') — unsupported (no repo on disk)`);
247
+ }
248
+ }
249
+ }
250
+ return issues;
251
+ }
252
+ /**
253
+ * Turn the (already `{{var}}`-rendered) repo compose text into ONE isolation-safe project file:
254
+ * validate it parses + contains the probed service, surface any unsupported references, force all
255
+ * host ports ephemeral, and guarantee the probed service publishes its port. Returning a single
256
+ * rewritten file (rather than a second `-f` overlay) is what lets us STRIP the base's pinned host
257
+ * ports — an overlay can only add, not remove.
258
+ */
259
+ export function prepareComposeProject(renderedText, service, port) {
260
+ let parsed;
261
+ try {
262
+ parsed = parse(renderedText);
263
+ }
264
+ catch (err) {
265
+ return {
266
+ content: renderedText,
267
+ issues: [
268
+ `compose file is not valid YAML: ${err instanceof Error ? err.message : String(err)}`,
269
+ ],
270
+ };
271
+ }
272
+ if (!parsed || typeof parsed !== 'object') {
273
+ return { content: renderedText, issues: ['compose file is empty or not a mapping'] };
274
+ }
275
+ const doc = parsed;
276
+ if (!servicesOf(doc)[service]) {
277
+ return { content: renderedText, issues: [`compose file has no service named '${service}'`] };
278
+ }
279
+ const issues = collectUnsupportedComposeRefs(doc);
280
+ neutralizeHostPorts(doc);
281
+ ensureServicePublishes(doc, service, port);
282
+ return { content: stringify(doc), issues };
283
+ }
284
+ /**
285
+ * Parse the host port out of `docker compose port <svc> <port>` output (e.g. `0.0.0.0:49153`
286
+ * or `[::]:49153`). Returns null when the service publishes no host port for that target.
287
+ */
288
+ export function parseHostPort(output) {
289
+ const line = output
290
+ .split('\n')
291
+ .map((s) => s.trim())
292
+ .filter(Boolean)
293
+ .pop();
294
+ if (!line)
295
+ return null;
296
+ const match = line.match(/:(\d+)\s*$/);
297
+ if (!match)
298
+ return null;
299
+ const n = Number(match[1]);
300
+ return Number.isInteger(n) && n > 0 && n <= 65535 ? n : null;
301
+ }
302
+ /** Parse `docker compose ps --format json` (a JSON array OR newline-delimited objects). */
303
+ export function parseComposePsRows(output) {
304
+ const trimmed = output.trim();
305
+ if (!trimmed)
306
+ return [];
307
+ try {
308
+ const parsed = JSON.parse(trimmed);
309
+ if (Array.isArray(parsed))
310
+ return parsed;
311
+ return [parsed];
312
+ }
313
+ catch {
314
+ // Newline-delimited JSON objects (older compose).
315
+ const rows = [];
316
+ for (const line of trimmed.split('\n')) {
317
+ const s = line.trim();
318
+ if (!s)
319
+ continue;
320
+ try {
321
+ rows.push(JSON.parse(s));
322
+ }
323
+ catch {
324
+ // ignore an unparsable line
325
+ }
326
+ }
327
+ return rows;
328
+ }
329
+ }
330
+ /**
331
+ * Reduce a `docker compose ps -a` snapshot (the `-a` includes stopped containers) into one
332
+ * lifecycle verdict:
333
+ * - empty ⇒ `failed` (the project is gone / never came up);
334
+ * - any `unhealthy` service, or a container `exited`/`dead` with a non-zero code ⇒ `failed`;
335
+ * - a transient state (`created`/`restarting`/`paused`/`removing`) or a `running` service still
336
+ * `starting` its healthcheck ⇒ `provisioning` (so a brief recreate doesn't flip a healthy env
337
+ * to `failed`);
338
+ * - a clean one-shot that `exited (0)` is treated as complete (neither pending nor failing);
339
+ * - otherwise ⇒ `ready`.
340
+ */
341
+ export function classifyComposePs(output) {
342
+ const rows = parseComposePsRows(output);
343
+ if (rows.length === 0)
344
+ return 'failed'; // nothing left ⇒ the stack is gone/crashed
345
+ let anyPending = false;
346
+ for (const row of rows) {
347
+ const state = (row.State ?? '').toLowerCase();
348
+ const health = (row.Health ?? '').toLowerCase();
349
+ if (health === 'unhealthy')
350
+ return 'failed';
351
+ if (state.startsWith('running')) {
352
+ if (health === 'starting')
353
+ anyPending = true;
354
+ }
355
+ else if (state.startsWith('exited') || state.startsWith('dead')) {
356
+ if ((row.ExitCode ?? 0) !== 0)
357
+ return 'failed'; // a real crash
358
+ // exit 0 ⇒ a completed one-shot (migration/seed); not pending, not a failure
359
+ }
360
+ else {
361
+ // created / restarting / paused / removing / … ⇒ still settling
362
+ anyPending = true;
363
+ }
364
+ }
365
+ return anyPending ? 'provisioning' : 'ready';
366
+ }
367
+ /** A short tail of command output, for a deterministic-failure `lastError`. */
368
+ export function tailOutput(output, lines = 12) {
369
+ return output
370
+ .split('\n')
371
+ .map((s) => s.trimEnd())
372
+ .filter(Boolean)
373
+ .slice(-lines)
374
+ .join('\n');
375
+ }
376
+ //# sourceMappingURL=compose-environment.logic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compose-environment.logic.js","sourceRoot":"","sources":["../../../src/modules/compose/compose-environment.logic.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cat-factory/integrations",
3
- "version": "0.38.0",
3
+ "version": "0.39.0",
4
4
  "description": "External-system integration domain logic for the Agent Architecture Board (GitHub, documents, tasks, environments, runners).",
5
5
  "repository": {
6
6
  "type": "git",
@@ -26,8 +26,8 @@
26
26
  "dependencies": {
27
27
  "ai": "^6.0.209",
28
28
  "yaml": "^2.7.0",
29
- "@cat-factory/contracts": "0.57.0",
30
- "@cat-factory/kernel": "0.56.0"
29
+ "@cat-factory/contracts": "0.58.0",
30
+ "@cat-factory/kernel": "0.56.1"
31
31
  },
32
32
  "devDependencies": {
33
33
  "typescript": "7.0.1-rc",