services JSON-RPC surface (GENERATED)
Do not edit by hand. Regenerate with npm run service-contracts:write
(or tsx scripts/verify-service-contracts.ts --write). Extracts the
current sibling services/ tree and cross-checks it against the
Electron bridge. Integration notes live in docs/services-backend.md;
capability status lives in docs/services-parity.md.
Source tree : services/ in this monorepo
Versions : see services/versions.json (product, installer, and per-component)
Legend : ✅ referenced by the bridge · ❌ MISSING (no consumer/caller) · ➖ ignored (see docs/service-contract-exceptions.json)
Notifications emitted but NOT consumed by the bridge
Requests the backend handles but the bridge never calls (unused capability)
⚠️ lmstudio-proxy → node/selected
⚠️ lmstudio-proxy → node/set-local-backend
⚠️ lmstudio-proxy → telemetry/configure
⚠️ lmstudio-proxy → telemetry/status
⚠️ nvpair-engine-manager → engine:describe
⚠️ nvpair-engine-manager → engine:errors
⚠️ nvpair-engine-manager → engine:logs
⚠️ nvpair-engine-manager → engine:restart
⚠️ nvpair-engine-manager → internal:set-reserved-port
⚠️ nvpair-job-scheduler → scheduler:get-interval
⚠️ nvpair-job-scheduler → scheduler:get-status
⚠️ nvpair-job-scheduler → scheduler:set-interval
⚠️ nvpair-job-scheduler → scheduler:tick
⚠️ nvpair-node-info → n/a
⚠️ nvpair-node-settings → settings/get-cluster-auto-sync
⚠️ nvpair-node-settings → settings/get-engine-allow-lan-bind
⚠️ nvpair-node-settings → settings/get-force-ports
⚠️ nvpair-node-settings → settings/get-telemetry-config
⚠️ nvpair-node-settings → settings/set-cluster-auto-sync
⚠️ nvpair-node-settings → settings/set-engine-allow-lan-bind
⚠️ nvpair-node-settings → settings/set-force-ports
⚠️ nvpair-ui-broker → discovery:unsubscribe
⚠️ nvpair-ui-broker → engine:set-reserved-port
⚠️ nvpair-ui-broker → engine:unsubscribe
⚠️ nvpair-ui-broker → internal:set-reserved-port
⚠️ nvpair-ui-broker → metrics:unsubscribe
⚠️ nvpair-ui-broker → proxy:get-status
⚠️ nvpair-ui-broker → proxy:unsubscribe
⚠️ nvpair-ui-broker → settings/get-engine-allow-lan-bind
⚠️ nvpair-ui-broker → workloads:unsubscribe
⚠️ ollama-proxy → node/selected
⚠️ ollama-proxy → node/set-local-backend
⚠️ ollama-proxy → telemetry/configure
⚠️ ollama-proxy → telemetry/status
⚠️ omlx-proxy → node/selected
⚠️ omlx-proxy → node/set-local-backend
⚠️ omlx-proxy → telemetry/configure
⚠️ omlx-proxy → telemetry/status
Backend binaries not listed in modular-binaries.ts
Method
Direction
In bridge?
error
notification (we consume)
✅ yes
errors:clear
notification (we consume)
✅ yes
errors:report
notification (we consume)
✅ yes
node/discovered
notification (we consume)
✅ yes
node/removed
notification (we consume)
✅ yes
node/selection-changed
notification (we consume)
➖ ignored
node/updated
notification (we consume)
✅ yes
proxy/request
notification (we consume)
✅ yes
proxy/request-started
notification (we consume)
➖ ignored
ready
notification (we consume)
✅ yes
workload:progress
notification (we consume)
➖ ignored
node/add-manual
request (we call)
✅ yes
node/remove-manual
request (we call)
✅ yes
node/select
request (we call)
✅ yes
node/selected
request (we call)
⚠️ not called
node/set-local-backend
request (we call)
⚠️ not called
node/set-priority
request (we call)
✅ yes
nodes/list
request (we call)
✅ yes
telemetry/configure
request (we call)
⚠️ not called
telemetry/status
request (we call)
⚠️ not called
Dynamic / unresolved notify sites (verify by hand — npm run service-contracts prints the line numbers):
Method
Direction
In bridge?
cluster:identity-changed
notification (we consume)
✅ yes
cluster:invite-canceled
notification (we consume)
✅ yes
cluster:invite-expired
notification (we consume)
✅ yes
cluster:invite-received
notification (we consume)
✅ yes
cluster:trust-changed
notification (we consume)
➖ ignored
nodes:changed
notification (we consume)
✅ yes
cluster:cancel-invite
request (we call)
✅ yes
cluster:create
request (we call)
✅ yes
cluster:get-node-id
request (we call)
✅ yes
cluster:invite-node
request (we call)
✅ yes
cluster:invite-status
request (we call)
✅ yes
cluster:leave
request (we call)
✅ yes
cluster:respond-to-invite
request (we call)
✅ yes
cluster:set-identity
request (we call)
✅ yes
nodes:get-initial
request (we call)
✅ yes
nodes:remove
request (we call)
✅ yes
Dynamic / unresolved notify sites (verify by hand — npm run service-contracts prints the line numbers):
notifyMethod (var) (httpserver.go, 2 sites)
Method
Direction
In bridge?
engine:install-progress
notification (we consume)
✅ yes
engine:models-changed
notification (we consume)
✅ yes
engine:pull-progress
notification (we consume)
✅ yes
engine:ready
notification (we consume)
✅ yes
engine:remote-progress
notification (we consume)
✅ yes
engine:state-changed
notification (we consume)
✅ yes
errors:clear
notification (we consume)
✅ yes
errors:report
notification (we consume)
✅ yes
engine:action
request (we call)
✅ yes
engine:describe
request (we call)
⚠️ not called
engine:errors
request (we call)
⚠️ not called
engine:get-installed
request (we call)
✅ yes
engine:install
request (we call)
✅ yes
engine:install-tool
request (we call)
✅ yes
engine:logs
request (we call)
⚠️ not called
engine:models
request (we call)
✅ yes
engine:prepare-shutdown
request (we call)
✅ yes
engine:remote-delete-model
request (we call)
✅ yes
engine:remote-get-installed
request (we call)
✅ yes
engine:remote-install
request (we call)
✅ yes
engine:remote-install-tool
request (we call)
✅ yes
engine:remote-load-model
request (we call)
✅ yes
engine:remote-pull-model
request (we call)
✅ yes
engine:remote-start
request (we call)
✅ yes
engine:remote-stop
request (we call)
✅ yes
engine:remote-unload-model
request (we call)
✅ yes
engine:restart
request (we call)
⚠️ not called
engine:set-port
request (we call)
✅ yes
engine:start
request (we call)
✅ yes
engine:status
request (we call)
✅ yes
engine:stop
request (we call)
✅ yes
engine:uninstall
request (we call)
✅ yes
error
request (we call)
✅ yes
internal:set-reserved-port
request (we call)
⚠️ not called
Dynamic / unresolved notify sites (verify by hand — npm run service-contracts prints the line numbers):
method (var) (executor.go)
Method
Direction
In bridge?
errors:update
notification (we consume)
✅ yes
ready
notification (we consume)
✅ yes
errors:clear
request (we call)
✅ yes
errors:get-initial
request (we call)
✅ yes
errors:report
request (we call)
✅ yes
Method
Direction
In bridge?
ready
notification (we consume)
✅ yes
schedule:priority
notification (we consume)
✅ yes
discovery:nodes-changed
request (we call)
✅ yes
scheduler:get-interval
request (we call)
⚠️ not called
scheduler:get-status
request (we call)
⚠️ not called
scheduler:set-interval
request (we call)
⚠️ not called
scheduler:tick
request (we call)
⚠️ not called
workloads:remove
request (we call)
✅ yes
workloads:upsert
request (we call)
✅ yes
Method
Direction
In bridge?
errors:clear
notification (we consume)
✅ yes
errors:report
notification (we consume)
✅ yes
node/discovered
notification (we consume)
✅ yes
node/removed
notification (we consume)
✅ yes
node/telemetry
notification (we consume)
➖ ignored
node/updated
notification (we consume)
✅ yes
ready
notification (we consume)
✅ yes
node/add
request (we call)
✅ yes
node/remove
request (we call)
✅ yes
nodes/list
request (we call)
✅ yes
Method
Direction
In bridge?
n/a
request (we call)
⚠️ not called
Method
Direction
In bridge?
ready
notification (we consume)
✅ yes
Dynamic / unresolved notify sites (verify by hand — npm run service-contracts prints the line numbers):
method (var) (daemon.go, 2 sites)
Method
Direction
In bridge?
connection/cluster-auto-sync
notification (we consume)
➖ ignored
connection/cluster-identity
notification (we consume)
✅ yes
ready
notification (we consume)
✅ yes
settings/telemetry-changed
notification (we consume)
➖ ignored
settings/get-cluster-auto-sync
request (we call)
⚠️ not called
settings/get-cluster-friendly-name
request (we call)
✅ yes
settings/get-cluster-id
request (we call)
✅ yes
settings/get-engine-allow-lan-bind
request (we call)
⚠️ not called
settings/get-force-ports
request (we call)
⚠️ not called
settings/get-telemetry-config
request (we call)
⚠️ not called
settings/set-cluster-auto-sync
request (we call)
⚠️ not called
settings/set-cluster-friendly-name
request (we call)
✅ yes
settings/set-cluster-id
request (we call)
✅ yes
settings/set-engine-allow-lan-bind
request (we call)
⚠️ not called
settings/set-force-ports
request (we call)
⚠️ not called
settings/set-telemetry-config
request (we call)
✅ yes
Client surface: requests are sent to the broker; notifications are consumed from it. Bridge references are informational, not worker/bridge drift.
Method
Direction
In bridge?
app:ready
notification (TUI consumes)
✅ yes
cluster:identity-changed
notification (TUI consumes)
✅ yes
cluster:invite-received
notification (TUI consumes)
✅ yes
discovery:nodes-changed
notification (TUI consumes)
✅ yes
engine:install-progress
notification (TUI consumes)
✅ yes
engine:models-changed
notification (TUI consumes)
✅ yes
engine:pull-progress
notification (TUI consumes)
✅ yes
engine:state-changed
notification (TUI consumes)
✅ yes
errors:update
notification (TUI consumes)
✅ yes
nodes:changed
notification (TUI consumes)
✅ yes
workers:update
notification (TUI consumes)
✅ yes
workloads:remove
notification (TUI consumes)
✅ yes
workloads:upsert
notification (TUI consumes)
✅ yes
broker:resync
request (TUI sends)
✅ yes
cluster:get-node-id
request (TUI sends)
✅ yes
cluster:invite-node
request (TUI sends)
✅ yes
cluster:leave
request (TUI sends)
✅ yes
cluster:respond-to-invite
request (TUI sends)
✅ yes
discovery:get-nodes
request (TUI sends)
✅ yes
discovery:subscribe
request (TUI sends)
✅ yes
engine:action
request (TUI sends)
✅ yes
engine:get-installed
request (TUI sends)
✅ yes
engine:install
request (TUI sends)
✅ yes
engine:models
request (TUI sends)
✅ yes
engine:remote-delete-model
request (TUI sends)
✅ yes
engine:remote-get-installed
request (TUI sends)
✅ yes
engine:remote-pull-model
request (TUI sends)
✅ yes
engine:restart
request (TUI sends)
⚠️ not called
engine:set-port
request (TUI sends)
✅ yes
engine:start
request (TUI sends)
✅ yes
engine:stop
request (TUI sends)
✅ yes
engine:subscribe
request (TUI sends)
✅ yes
engine:uninstall
request (TUI sends)
✅ yes
errors:clear
request (TUI sends)
✅ yes
errors:get-initial
request (TUI sends)
✅ yes
node/add
request (TUI sends)
✅ yes
node/remove
request (TUI sends)
✅ yes
nodes/list
request (TUI sends)
✅ yes
nodes:get-initial
request (TUI sends)
✅ yes
nodes:remove
request (TUI sends)
✅ yes
ping
request (TUI sends)
✅ yes
shutdown
request (TUI sends)
✅ yes
workers:get-status
request (TUI sends)
✅ yes
workers:restart
request (TUI sends)
✅ yes
workloads:get-initial
request (TUI sends)
✅ yes
workloads:subscribe
request (TUI sends)
✅ yes
Dynamic / unresolved request sites (TUI sends; verify computed methods by hand):
engine:remote-* (engines.go)
applog.SetLevelMethod (logs.go)
e.prefix+":subscribe" (proxies.go)
e.prefix+":get-status" (proxies.go)
e.prefix+":nodes/list" (proxies.go)
e.prefix+":node/selected" (proxies.go)
e.prefix+":node/select" (proxies.go)
e.prefix+":set-port" (proxies.go)
method (recovery.go)
settings/get-* (settings.go)
settings/set-* (settings.go, 2 sites)
Method
Direction
In bridge?
app:ready
notification (we consume)
✅ yes
broker:epoch
notification (we consume)
✅ yes
discovery:nodes-changed
notification (we consume)
✅ yes
engine:restore-enabled
notification (we consume)
➖ ignored
engine:settings-reply
notification (we consume)
➖ ignored
errors:clear
notification (we consume)
✅ yes
errors:report
notification (we consume)
✅ yes
errors:update
notification (we consume)
✅ yes
heartbeat
notification (we consume)
✅ yes
metrics:node-metrics
notification (we consume)
✅ yes
proxy:ready
notification (we consume)
✅ yes
workers:update
notification (we consume)
✅ yes
workloads:progress
notification (we consume)
✅ yes
workloads:upsert
notification (we consume)
✅ yes
broker:resync
request (we call)
✅ yes
connection/cluster-auto-sync
request (we call)
➖ ignored
connection/cluster-identity
request (we call)
✅ yes
discovery:get-nodes
request (we call)
✅ yes
discovery:subscribe
request (we call)
✅ yes
discovery:unsubscribe
request (we call)
⚠️ not called
engine:install
request (we call)
✅ yes
engine:set-port
request (we call)
✅ yes
engine:set-reserved-port
request (we call)
⚠️ not called
engine:start
request (we call)
✅ yes
engine:subscribe
request (we call)
✅ yes
engine:unsubscribe
request (we call)
⚠️ not called
errors:get-initial
request (we call)
✅ yes
internal:set-reserved-port
request (we call)
⚠️ not called
metrics:get-node-metrics
request (we call)
✅ yes
metrics:subscribe
request (we call)
✅ yes
metrics:unsubscribe
request (we call)
⚠️ not called
node/add
request (we call)
✅ yes
node/discovered
request (we call)
✅ yes
node/remove
request (we call)
✅ yes
node/removed
request (we call)
✅ yes
node/telemetry
request (we call)
➖ ignored
node/updated
request (we call)
✅ yes
nodes/list
request (we call)
✅ yes
proxy:get-status
request (we call)
⚠️ not called
proxy:set-port
request (we call)
✅ yes
proxy:subscribe
request (we call)
✅ yes
proxy:unsubscribe
request (we call)
⚠️ not called
ready
request (we call)
✅ yes
settings/get-engine-allow-lan-bind
request (we call)
⚠️ not called
telemetry/get-status
request (we call)
✅ yes
telemetry/purge-storage
request (we call)
✅ yes
telemetry/start
request (we call)
✅ yes
telemetry/stop
request (we call)
✅ yes
workers:get-status
request (we call)
✅ yes
workers:restart
request (we call)
✅ yes
workload:progress
request (we call)
➖ ignored
workloads:get-initial
request (we call)
✅ yes
workloads:remove
request (we call)
✅ yes
workloads:subscribe
request (we call)
✅ yes
workloads:unsubscribe
request (we call)
⚠️ not called
Dynamic / unresolved notify sites (verify by hand — npm run service-contracts prints the line numbers):
method (var) (broker.go, 6 sites)
proxy:* (broker.go)
method (var) (clustermanager.go)
method (var) (errors.go)
lmstudio-proxy:* (lmstudioproxy.go)
omlx-proxy:* (omlxproxy.go)
method (var) (proxy.go)
method (var) (rpcworker.go, 2 sites)
WorkerRunning (var) (supervisor.go, 2 sites)
WorkerDegraded (var) (supervisor.go)
WorkerRestarting (var) (supervisor.go)
state (var) (supervisor.go)
method (var) (workloadmanager.go, 2 sites)
Method
Direction
In bridge?
ready
notification (we consume)
✅ yes
workloads:progress
notification (we consume)
✅ yes
workloads:remove
notification (we consume)
✅ yes
workloads:upsert
notification (we consume)
✅ yes
workload:progress
request (we call)
➖ ignored
Method
Direction
In bridge?
error
notification (we consume)
✅ yes
errors:clear
notification (we consume)
✅ yes
errors:report
notification (we consume)
✅ yes
node/discovered
notification (we consume)
✅ yes
node/removed
notification (we consume)
✅ yes
node/selection-changed
notification (we consume)
➖ ignored
node/updated
notification (we consume)
✅ yes
proxy/request
notification (we consume)
✅ yes
proxy/request-started
notification (we consume)
➖ ignored
ready
notification (we consume)
✅ yes
workload:progress
notification (we consume)
➖ ignored
node/add-manual
request (we call)
✅ yes
node/remove-manual
request (we call)
✅ yes
node/select
request (we call)
✅ yes
node/selected
request (we call)
⚠️ not called
node/set-local-backend
request (we call)
⚠️ not called
node/set-priority
request (we call)
✅ yes
nodes/list
request (we call)
✅ yes
telemetry/configure
request (we call)
⚠️ not called
telemetry/status
request (we call)
⚠️ not called
Dynamic / unresolved notify sites (verify by hand — npm run service-contracts prints the line numbers):
Method
Direction
In bridge?
error
notification (we consume)
✅ yes
errors:clear
notification (we consume)
✅ yes
errors:report
notification (we consume)
✅ yes
node/discovered
notification (we consume)
✅ yes
node/removed
notification (we consume)
✅ yes
node/selection-changed
notification (we consume)
➖ ignored
node/updated
notification (we consume)
✅ yes
proxy/request
notification (we consume)
✅ yes
proxy/request-started
notification (we consume)
➖ ignored
ready
notification (we consume)
✅ yes
workload:progress
notification (we consume)
➖ ignored
node/add-manual
request (we call)
✅ yes
node/remove-manual
request (we call)
✅ yes
node/select
request (we call)
✅ yes
node/selected
request (we call)
⚠️ not called
node/set-local-backend
request (we call)
⚠️ not called
node/set-priority
request (we call)
✅ yes
nodes/list
request (we call)
✅ yes
telemetry/configure
request (we call)
⚠️ not called
telemetry/status
request (we call)
⚠️ not called
Dynamic / unresolved notify sites (verify by hand — npm run service-contracts prints the line numbers):