The component descriptor.
Config file name (e.g., 'jeeves-watcher.config.json').
Zod schema for validating config files.
OptionalcustomCliCommands?: $InferOuterFunctionType<Extension point: add custom CLI commands to the service CLI.
OptionalcustomMerge?: $InferOuterFunctionType<Custom merge function for config apply. Receives the existing config and the patch, returns the merged result. Optional — if omitted, the default deep-merge (object-recursive, array-replacing) is used.
Use this to implement domain-specific merge strategies such as name-based array merging for inference rules.
OptionalcustomPluginTools?: $InferOuterFunctionType<Extension point: return additional plugin tool descriptors.
Default port for the service's HTTP API.
Returns a default config object for init.
Component name (e.g., 'watcher', 'runner', 'server', 'meta').
OptionalonConfigApply?: $InferOuterFunctionType<Service-side callback after config apply. Receives the merged, validated config (not the raw patch). Optional — if omitted, write-only (service picks up changes on restart).
npm package name for the plugin.
In-process service entry point for the CLI start command.
OptionalserviceName?: stringSystem service name. Defaults to jeeves-${name} when not provided.
npm package name for the service.
Returns command + args for launching the service process.
Consumed by service install.
Component version (from package.json).
OptionalconfigPath: string
Optional explicit config file path. When provided, takes precedence over registered and derived paths.
An async handler returning { status, body }.
The handler:
{configRoot}/jeeves-{name}/{configFileName}
(an unreadable file fails with 500 and is left untouched)replace: true)descriptor.configSchemadescriptor.onConfigApply with the validated (parsed) configThe response config is the validated (parsed) config, as before.
Create a framework-agnostic config apply handler.