clusterio #1180 made controller.hosts a HostManager. The datastore with
set and the update event now lives on controller.hosts.records.
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
clusterio#1140 no longer reports plugins without a web entrypoint as
failing to load, so the empty web modules from 99d47cf1 can go. The
browser tsconfig of these plugins now checks index.ts instead.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
clusterio#999 removed RequestError. Handlers now throw NotFoundError,
ValidationError, ConflictError or UnavailableError, and exp_auto_restart
treats any ClientError from the host as a final refusal.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
clusterio#1130 replaced webpack with Vite and the web interface rejects
webpack-built plugin bundles. Each plugin now builds with clusterioPlugin()
from @clusterio/web_ui/vite.mjs, and the webpack configs and dependencies
are gone.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Commands, Permission Groups, Player Statistics, Reports, Roles, Scenario,
Server UPS and Module Utilities get a readme covering their config,
permissions, commands, web pages and Lua and Node API.
The existing readmes are brought up to date: Auto Restart now that
clusterio marks a restart after a plugin install, Discord Auth gets the
code timeout, command aliases and its Lua API, and the GUI guide says what
the plugin is and has its toolbar examples and an iterator name fixed.
The main readme gets a Plugins section listing each plugin by name and
package with a one line description.
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Each plugin class now has a private constructor and a static async
fromContext(context) that loads its datastores, constructs the instance
and attaches its handlers and hooks. This replaces the public constructor
followed by init(), and AutoRestart's start().
Datastores are loaded before construction and passed to the constructor,
so the definite assignment assertions on them are gone. Tests build the
plugins through fromContext and pass a wrapped logger in the context
instead of overwriting plugin.logger before init().
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
web/index.tsx is empty, so the web UI failed to load the plugin with
"must export either a default function or WebPlugin". Plugins without a
web UI, like clusterio's statistics_exporter, keep the empty file only as
the webpack entry and expose just the plugin info and package.json. That
is still enough for the web UI to show and edit the plugin's controller
config.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Restarts hosts, and optionally the controller, that report a pending
restart once no players have been online for a configurable time. Only
loaded on the controller: it counts players from the users online on
running instances, sends HostRestartRequest through the existing core
path, and starts the instances that were running once the host reports
back. Each host process is asked at most once, keyed on its process
start time, so a stale system info poll cannot trigger a second restart.
Uses the function-style entrypoint clusterio now documents, so it loads
without the deprecated class export warning.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>