feat: Effect services + HttpApi implementation + kit entry/CLI/dev server
- 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>
This commit is contained in:
+10
-9
@@ -2,7 +2,8 @@
|
||||
// the derived types keep the original domain names so the pure core reads unchanged.
|
||||
import { Schema } from "effect";
|
||||
|
||||
export const Os = Schema.Literals(["linux", "windows", "mac"]);
|
||||
/** Host OS as the launch/quoting domain sees it (macOS hosts use the linux lane). */
|
||||
export const Os = Schema.Literals(["linux", "windows"]);
|
||||
export type Os = typeof Os.Type;
|
||||
|
||||
/** Default emulator + core for a platform (operator-overridable per platform / per game). */
|
||||
@@ -50,13 +51,13 @@ export const DetectedEmulator = Schema.Struct({
|
||||
name: Schema.String,
|
||||
template: Schema.String,
|
||||
supportsArchives: Schema.Boolean,
|
||||
contested: Schema.optionalKey(Schema.Boolean),
|
||||
contested: Schema.optional(Schema.Boolean),
|
||||
exeToken: Schema.String,
|
||||
exePath: Schema.optionalKey(Schema.String),
|
||||
appId: Schema.optionalKey(Schema.String),
|
||||
exePath: Schema.optional(Schema.String),
|
||||
appId: Schema.optional(Schema.String),
|
||||
via: Schema.Literals(["path", "file", "flatpak"]),
|
||||
coresDir: Schema.optionalKey(Schema.String),
|
||||
cores: Schema.optionalKey(Schema.Array(Schema.String)),
|
||||
coresDir: Schema.optional(Schema.String),
|
||||
cores: Schema.optional(Schema.Array(Schema.String)),
|
||||
});
|
||||
export type DetectedEmulator = typeof DetectedEmulator.Type;
|
||||
|
||||
@@ -96,9 +97,9 @@ export const EngineStatus = Schema.Struct({
|
||||
os: Os,
|
||||
artProvider: Schema.NullOr(Schema.String),
|
||||
syncing: Schema.Boolean,
|
||||
lastSync: Schema.optionalKey(LastSync),
|
||||
lastReport: Schema.optionalKey(SyncReport),
|
||||
detectedAt: Schema.optionalKey(Schema.Number),
|
||||
lastSync: Schema.optional(LastSync),
|
||||
lastReport: Schema.optional(SyncReport),
|
||||
detectedAt: Schema.optional(Schema.Number),
|
||||
paths: Schema.Struct({
|
||||
dir: Schema.String,
|
||||
config: Schema.String,
|
||||
|
||||
Reference in New Issue
Block a user