Skip to content

Commit 32b425e

Browse files
committed
refactor(hosted-runtime): isolate installer composition
1 parent 7edd14c commit 32b425e

8 files changed

Lines changed: 60 additions & 33 deletions

File tree

src/features/hosted-opencode-runtime/core/domain/hostedOpenCodeRuntimeLock.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,22 @@ export const HOSTED_OPENCODE_RUNTIME_PLATFORM_KEYS = [
1818
export type HostedOpenCodeRuntimePlatformKey =
1919
(typeof HOSTED_OPENCODE_RUNTIME_PLATFORM_KEYS)[number];
2020

21+
export const HOSTED_OPENCODE_CURRENT_MANIFEST_SCHEMA_VERSION = 2 as const;
22+
23+
export interface HostedOpenCodeCurrentManifestV2 {
24+
readonly schemaVersion: 2;
25+
readonly runtime: 'opencode';
26+
readonly version: string;
27+
readonly tag: string;
28+
readonly platform: HostedOpenCodeRuntimePlatformKey;
29+
readonly binaryPath: string;
30+
readonly assetUrl: string;
31+
readonly archiveSha256: string;
32+
readonly binarySha256: string;
33+
readonly sourceCommit: string;
34+
readonly installedAt: string;
35+
}
36+
2137
export interface HostedOpenCodeRuntimeAvailableArtifact {
2238
readonly status: 'available';
2339
readonly file: string;
Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
export {
2-
hostedOpenCodeRuntimePlatformKey,
3-
type HostedOpenCodeRuntimeArtifact,
4-
type HostedOpenCodeRuntimeAvailableArtifact,
5-
type HostedOpenCodeRuntimeLockV2,
6-
type HostedOpenCodeRuntimePlatformKey,
2+
HOSTED_OPENCODE_CURRENT_MANIFEST_SCHEMA_VERSION,
73
HOSTED_OPENCODE_RUNTIME_LOCK_SCHEMA_VERSION,
84
HOSTED_OPENCODE_RUNTIME_PLATFORM_KEYS,
95
HOSTED_OPENCODE_RUNTIME_SOURCE,
106
HOSTED_OPENCODE_RUNTIME_VERSION,
7+
type HostedOpenCodeCurrentManifestV2,
8+
type HostedOpenCodeRuntimeArtifact,
9+
type HostedOpenCodeRuntimeAvailableArtifact,
10+
type HostedOpenCodeRuntimeLockV2,
11+
type HostedOpenCodeRuntimePlatformKey,
12+
hostedOpenCodeRuntimePlatformKey,
1113
parseHostedOpenCodeRuntimeLock,
1214
} from './core/domain/hostedOpenCodeRuntimeLock';

src/features/hosted-opencode-runtime/main/composition/hostedOpenCodeRuntimeComposition.ts

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,16 @@
1-
import {
2-
type HostedOpenCodeCurrentManifestV2,
3-
installHostedOpenCodeRuntime,
4-
resolveHostedOpenCodeRuntimeBinary,
5-
} from '../infrastructure/HostedOpenCodeRuntimeInstaller';
1+
import type { HostedOpenCodeCurrentManifestV2 } from '@features/hosted-opencode-runtime';
2+
3+
export interface HostedOpenCodeRuntimeInstallRequest {
4+
readonly runtimeRoot: string;
5+
readonly lock: unknown;
6+
readonly platform?: NodeJS.Platform;
7+
readonly arch?: string;
8+
}
9+
10+
export interface HostedOpenCodeRuntimeInstallerPort {
11+
install(input: HostedOpenCodeRuntimeInstallRequest): Promise<HostedOpenCodeCurrentManifestV2>;
12+
resolveBinary(input: HostedOpenCodeRuntimeInstallRequest): Promise<string>;
13+
}
614

715
export interface HostedOpenCodeRuntimeComposition {
816
install(): Promise<HostedOpenCodeCurrentManifestV2>;
@@ -14,6 +22,7 @@ export interface HostedOpenCodeRuntimeCompositionInput {
1422
readonly loadLock: () => Promise<unknown>;
1523
readonly platform?: NodeJS.Platform;
1624
readonly arch?: string;
25+
readonly installer: HostedOpenCodeRuntimeInstallerPort;
1726
}
1827

1928
export function createHostedOpenCodeRuntimeComposition(
@@ -27,10 +36,10 @@ export function createHostedOpenCodeRuntimeComposition(
2736
});
2837
return Object.freeze({
2938
async install() {
30-
return installHostedOpenCodeRuntime(await common());
39+
return input.installer.install(await common());
3140
},
3241
async resolveBinary() {
33-
return resolveHostedOpenCodeRuntimeBinary(await common());
42+
return input.installer.resolveBinary(await common());
3443
},
3544
});
3645
}

src/features/hosted-opencode-runtime/main/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,6 @@ export {
22
createHostedOpenCodeRuntimeComposition,
33
type HostedOpenCodeRuntimeComposition,
44
type HostedOpenCodeRuntimeCompositionInput,
5+
type HostedOpenCodeRuntimeInstallerPort,
6+
type HostedOpenCodeRuntimeInstallRequest,
57
} from './composition/hostedOpenCodeRuntimeComposition';

src/main/composition/hosted/hostedOpenCodeRuntimeComposition.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,11 @@ import {
33
type HostedOpenCodeRuntimeComposition as FeatureHostedOpenCodeRuntimeComposition,
44
} from '@features/hosted-opencode-runtime/main';
55

6+
import {
7+
installHostedOpenCodeRuntime,
8+
resolveHostedOpenCodeRuntimeBinary,
9+
} from './infrastructure/HostedOpenCodeRuntimeInstaller';
10+
611
export type HostedOpenCodeRuntimeComposition = FeatureHostedOpenCodeRuntimeComposition;
712

813
export function createHostedOpenCodeRuntimeComposition(input: {
@@ -11,5 +16,11 @@ export function createHostedOpenCodeRuntimeComposition(input: {
1116
readonly platform?: NodeJS.Platform;
1217
readonly arch?: string;
1318
}): HostedOpenCodeRuntimeComposition {
14-
return createFeatureHostedOpenCodeRuntimeComposition(input);
19+
return createFeatureHostedOpenCodeRuntimeComposition({
20+
...input,
21+
installer: {
22+
install: installHostedOpenCodeRuntime,
23+
resolveBinary: resolveHostedOpenCodeRuntimeBinary,
24+
},
25+
});
1526
}

src/features/hosted-opencode-runtime/main/infrastructure/HostedOpenCodeRuntimeInstaller.ts renamed to src/main/composition/hosted/infrastructure/HostedOpenCodeRuntimeInstaller.ts

Lines changed: 4 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,37 +3,24 @@ import { promises as fs } from 'node:fs';
33
import path from 'node:path';
44

55
import {
6-
hostedOpenCodeRuntimePlatformKey,
6+
HOSTED_OPENCODE_CURRENT_MANIFEST_SCHEMA_VERSION,
7+
type HostedOpenCodeCurrentManifestV2,
78
type HostedOpenCodeRuntimeAvailableArtifact,
89
type HostedOpenCodeRuntimeLockV2,
910
type HostedOpenCodeRuntimePlatformKey,
11+
hostedOpenCodeRuntimePlatformKey,
1012
parseHostedOpenCodeRuntimeLock,
11-
} from '../../core/domain/hostedOpenCodeRuntimeLock';
13+
} from '@features/hosted-opencode-runtime';
1214
import { atomicWriteAsync, renamePathWithRetry } from '@main/utils/atomicWrite';
1315
import { execCli } from '@main/utils/childProcess';
1416

1517
import { extractHostedOpenCodeBinary } from './hostedOpenCodeArchive';
1618

17-
export const HOSTED_OPENCODE_CURRENT_MANIFEST_SCHEMA_VERSION = 2 as const;
1819
const MAX_ARCHIVE_BYTES = 250 * 1024 * 1024;
1920
const FETCH_TIMEOUT_MS = 60_000;
2021
const VERSION_TIMEOUT_MS = 30_000;
2122
const installInFlight = new Map<string, Promise<HostedOpenCodeCurrentManifestV2>>();
2223

23-
export interface HostedOpenCodeCurrentManifestV2 {
24-
readonly schemaVersion: 2;
25-
readonly runtime: 'opencode';
26-
readonly version: string;
27-
readonly tag: string;
28-
readonly platform: HostedOpenCodeRuntimePlatformKey;
29-
readonly binaryPath: string;
30-
readonly assetUrl: string;
31-
readonly archiveSha256: string;
32-
readonly binarySha256: string;
33-
readonly sourceCommit: string;
34-
readonly installedAt: string;
35-
}
36-
3724
export interface HostedOpenCodeRuntimeInstallerOptions {
3825
readonly runtimeRoot: string;
3926
readonly lock: unknown;

src/features/hosted-opencode-runtime/main/infrastructure/hostedOpenCodeArchive.ts renamed to src/main/composition/hosted/infrastructure/hostedOpenCodeArchive.ts

File renamed without changes.

test/features/hosted-opencode-runtime/HostedOpenCodeRuntimeInstaller.test.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@ import path from 'node:path';
55
import { gzipSync } from 'node:zlib';
66

77
import {
8+
type HostedOpenCodeRuntimeLockV2,
89
hostedOpenCodeRuntimePlatformKey,
910
parseHostedOpenCodeRuntimeLock,
10-
type HostedOpenCodeRuntimeLockV2,
1111
} from '../../../src/features/hosted-opencode-runtime';
12+
import { extractHostedOpenCodeBinary } from '../../../src/main/composition/hosted/infrastructure/hostedOpenCodeArchive';
1213
import {
1314
installHostedOpenCodeRuntime,
1415
resolveHostedOpenCodeRuntimeBinary,
15-
} from '../../../src/features/hosted-opencode-runtime/main/infrastructure/HostedOpenCodeRuntimeInstaller';
16-
import { extractHostedOpenCodeBinary } from '../../../src/features/hosted-opencode-runtime/main/infrastructure/hostedOpenCodeArchive';
16+
} from '../../../src/main/composition/hosted/infrastructure/HostedOpenCodeRuntimeInstaller';
1717

1818
const SOURCE = {
1919
repository: '777genius/opencode-anomaly',

0 commit comments

Comments
 (0)