diff options
Diffstat (limited to 'packages/exec-backend/src/extension.ts')
| -rw-r--r-- | packages/exec-backend/src/extension.ts | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/packages/exec-backend/src/extension.ts b/packages/exec-backend/src/extension.ts new file mode 100644 index 0000000..c07b7a8 --- /dev/null +++ b/packages/exec-backend/src/extension.ts @@ -0,0 +1,48 @@ +import type { Extension, Manifest } from "@dispatch/kernel"; +import type { ExecBackend } from "./backend.js"; +import { localExecBackend } from "./local.js"; +import type { ExecBackendResolver } from "./service.js"; +import { execBackendHandle } from "./service.js"; + +export const manifest: Manifest = { + id: "exec-backend", + name: "Exec Backend", + version: "0.0.0", + apiVersion: "^0.1.0", + trust: "bundled", + activation: "eager", + contributes: { services: ["exec-backend/resolver"] }, +}; + +/** + * The resolver provided by this extension. + * + * - `computerId` undefined → `LocalExecBackend` (today's local behavior). + * - `computerId` set → throws. Remote execution is wired by `host-bin` + the + * `ssh` package in a later wave (`SshExecBackend` implements the same + * `ExecBackend` interface). For now only the local path exists — failing + * loudly here is safer than silently running locally when remote was requested. + */ +function resolveBackend(computerId?: string): ExecBackend { + if (computerId === undefined) return localExecBackend; + throw new Error( + `Remote execution (computerId="${computerId}") is not yet configured. ` + + "The SSH backend will be wired by the ssh package.", + ); +} + +/** + * Factory: create the `exec-backend` core extension. + * + * `activate` provides the local-only `ExecBackendResolver` via the typed + * service handle. Remote resolution is added in a later wave. + */ +export function createExecBackendExtension(): Extension { + return { + manifest, + activate(host) { + const resolver: ExecBackendResolver = resolveBackend; + host.provideService(execBackendHandle, resolver); + }, + }; +} |
