6.0 KiB
Server Plugin and Instance Lifecycle Contract
Installed Server Plugin
An installed game management plugin is reusable. It defines a server type, but it is not a server instance.
The plugin marketplace API is a platform-facing projection over this installed registry metadata. It is not a package store, billing system, provider marketplace, or cloud host sales surface.
States
installed: plugin manifest and schemas are valid.disabled: plugin cannot create new servers but existing instances remain inspectable.invalid: plugin failed validation and cannot create or manage instances.updating: plugin version is being changed.
Server Instance
A server instance is created from one installed game management plugin and is later bound to the generated Run endpoint when that Run registers. Platform stores the instance and projections; Run owns observed lifecycle execution on the machine.
States
draft: instance record exists and is awaiting Run-owned lifecycle bootstrap or reports.installing: Run reports that plugin-owned install/bootstrap work is active.ready: install/bootstrap succeeded without starting a supervised process, and the server can start.running: server process is running.stopped: server process is stopped.failed: last lifecycle operation failed.deleted: instance is no longer active.
Invariants
- One
GamePlugininstallation may own manyServerInstancerecords. - A
ServerInstancemust keep its own config version, artifacts, jobs, log streams, and permissions. - Updating a plugin must not silently mutate existing server instances without a recorded reconcile job.
- Deleting a plugin must be blocked or explicitly require handling existing server instances first.
Lifecycle Actions
create: validate plugin and create the instance record without requiring a run endpoint, deployment target, or runtime profile.start: record/authorize operator intent and route bounded control to the bound Run when applicable; generated Run startup is driven by its package-local autonomous lifecycle plan.stop: record/authorize operator intent and route bounded control to the bound Run when applicable.restart: dispatch stop/start or plugin-defined restart job.update: dispatch server update job and record version/result.delete: stop server when needed, preserve or remove artifacts according to policy, mark deleted.
Implemented Workflow Routes
GET /api/v1/plugin-marketplace/pluginslists plugin marketplace summaries from registry metadata with status, server type, capability, and keyword filters.GET /api/v1/plugin-marketplace/plugins/{id}returns one registry-backed marketplace detail.POST /api/v1/plugin-marketplace/plugins/{id}/stateapplies metadata-onlyinstall,enable, ordisablestate changes.POST /api/v1/server-instances/workflows/createvalidates an installed plugin, server name, idempotency key, and plugin-declared create inputs when provided. It creates the instance without requiring a deployment target, run endpoint, or runtime profile. Generated Run packages carry the autonomous lifecycle plan that Run consumes on startup; registration confirms binding/auth and does not enqueue bootstrap lifecycle jobs.POST /api/v1/server-instances/{id}/startvalidates the instance isreadyorstopped, checks the expected config version, verifies the plugin start action and run endpointprocess.startcapability, and queues a start job.POST /api/v1/server-instances/{id}/stopvalidates the instance isrunning, checks the expected config version, verifies the plugin stop action and run endpointprocess.stopcapability, and queues a stop job.- Server-scoped raw config read/diff/approve routes are not product APIs. AI-assisted configuration uses reviewable AI config-diff approvals and typed dispatch metadata without returning raw config text to plugin pages.
POST /api/v1/file-operations/dispatchqueues scopedfiles.readorfiles.writejobs for logical server/plugin file keys after role and permission checks.GET /api/v1/metrics/server-instancesreturns bounded per-server metrics for instances visible to the authenticated user.
Workflow route responses include the accepted action, bounded server instance metadata, and bounded job metadata. They do not expose run session tokens, host paths, raw credentials, direct sockets, AI provider keys, or plugin action file contents.
Server metrics responses are bounded and platform-mediated. They do not expose host filesystem paths, run sockets, raw credentials, direct storage backends, or AI provider keys.
Config write approval and file dispatch are platform-mediated. They carry logical keys such as server.properties or logs/latest.log, scoped refs such as input://... or artifact://..., and bounded job metadata only. They do not mutate local files in the platform process and do not expose raw host paths, run credentials, direct sockets, AI provider keys, or inline large payloads.
Marketplace state actions update only registry install state. They do not download packages, dispatch run jobs, execute plugin bridge code, write server files, expose package bytes, or contact external services. Package acquisition and runtime execution remain deferred to explicit future changes.
Lifecycle Projection
Platform-visible lifecycle state is a projection from Run-reported facts. Terminal run job results update the associated server instance when the job capability is a lifecycle capability for explicit Platform-authorized operations:
process.install+succeededmarks the instanceready.process.start+succeededmarks the instancerunning.process.stop+succeededmarks the instancestopped.process.install,process.start, orprocess.stop+failedorcancelledmarks the instancefailed.
Active start and stop jobs do not introduce separate starting or stopping states in this change. Operators can inspect pending job state through the job list while the instance remains in its last terminal server state.