899028e20f
- RomConfig/RomCache on the kit's ConfigService/CacheStore; RomSync wires the pure domain into the kit SyncEngine (poll/watch/coalesce/fingerprint) and ProviderClient; EngineStatus assembly shared by REST + SSE - makeApi: HttpApiBuilder groups over live service values (handler runtime shares the plugin runtime's singletons) + sseRoute status feed - index.ts: definePluginKit entry (async-main boundary); headless-first (UI serve failure logged, engine continues) - cli.ts on the kit dispatcher: scan/detect/preview offline, sync/uninstall online; set-password is gone with the standalone server - dev.ts: auth-free loopback API server (:5885) — the dev:live proxy target; never bundled - verified live host-less: raw config round-trip on disk, status/platforms/ preview endpoints, soft-fail reconcile without a host - CI: workspace install, per-package typecheck, publish from plugin/ Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
18 lines
641 B
TypeScript
18 lines
641 B
TypeScript
// The plugin's config service — the kit's ConfigService over the contract schema.
|
|
// Raw round-trip by construction: the file on disk is always the authored shape.
|
|
import {
|
|
type ConfigService,
|
|
makeConfigService,
|
|
type PluginInfo,
|
|
} from "@punktfunk/plugin-kit";
|
|
import { RomConfigSchema } from "@rom-manager/contract";
|
|
import { Context, Layer } from "effect";
|
|
|
|
export class RomConfig extends Context.Service<
|
|
RomConfig,
|
|
ConfigService<typeof RomConfigSchema>
|
|
>()("rom-manager/RomConfig") {
|
|
static readonly layer: Layer.Layer<RomConfig, never, PluginInfo> =
|
|
Layer.effect(RomConfig)(makeConfigService({ schema: RomConfigSchema }));
|
|
}
|