Description
Plugin Development Hot Reload provides a local execution harness for building Dots SDK plugins against a real daemon. It reads and validates a plugin manifest, loads the declared source entry, collects formal extension registrations, applies them before runtime composition, and registers templates after the first workspace is provisioned. Watch mode reloads changed source through versioned import specifiers instead of requiring a manual daemon restart for every edit.
The harness preserves the platform’s extension contract rather than treating arbitrary code as a plugin. Manifest slots are mapped to shipped SDK registration helpers, unsupported or inert declarations are reported, and reload failures do not silently pretend the plugin is active. A fresh unprovisioned instance delays template registration until the first owner exists.
Selling Points
- Lets plugin authors exercise extensions against the same local API and data plane users run.
- Shortens the edit-test loop with watched reloads instead of full process restarts.
- Validates manifests and registration slots early, catching incompatible plugin declarations before distribution.
- Preserves first-run behavior, so development works on both established and freshly provisioned local instances.
- Reports unsupported declarations rather than silently ignoring plugin capabilities.
User Story
An external developer opens a plugin repository and runs the plugin development command with watch enabled. Dots boots the local daemon in the foreground, validates the manifest, registers the plugin’s behaviors and templates, and reloads the source when they save. They can call the extension through normal API or UI surfaces and see honest errors when a declared slot has no effect.
Extension Surface
This feature is pluggable by definition. packages/local-runtime/src/client/start-plugin-dev.ts loads a user-owned manifest and source entry, while packages/local-runtime/src/runtime/plugin-extensions.ts collects SDK-defined registrations. packages/local-runtime/src/runtime/extensions.ts applies formal extension categories to the runtime. Authors add implementations without modifying Dots core, using the shipped plugin manifest and registration protocol.
Capabilities & Limits
- Loads plugin manifests and source from a local checkout into a foreground daemon.
- Registers supported SDK extensions before composition and templates after provisioning.
- Watches source changes and reloads with cache-busting import specifiers.
- Limit: only declared, supported SDK slots take effect; arbitrary imports do not become runtime capabilities.
- Limit: plugin source runs in the local development process and is not the sandboxed marketplace-install path.
Implementation Map
packages/local-runtime/src/client/start-plugin-dev.tspackages/local-runtime/src/runtime/plugin-extensions.tspackages/local-runtime/src/runtime/extensions.tspackages/local-runtime/src/daemon/boot.ts