Summary
Remote LAN mode renders all “capable” desktop tabs, but the LAN command dispatcher only implements a subset of their backend commands.
Evidence
web/src/App.tsx sets capable = desktop || remote, exposing Local, Image, Inpaint, Classify, Train, Feedback, and Memory views remotely.
The LAN dispatcher supports core chat/image/memory/settings operations, but frontend wrappers also invoke commands that are absent remotely, including portions of:
- vision load/classify;
- jobs and datasets;
- video generation;
- user-vector operations;
- incognito and LAN controls.
These actions fail as unknown commands instead of being hidden or negotiated.
Proposed resolution
- Return command-level capabilities from
app_info.
- Render tabs/actions from those capabilities rather than a single
remote boolean.
- Add a contract test comparing frontend command wrappers to Tauri and LAN dispatch coverage.
Implementing the missing LAN routes can follow separately; capability negotiation is still needed for desktop/remote version skew.
Acceptance criteria
- A remote user cannot select an action known to be unsupported by the connected backend.
- Capability data is versioned or backward-compatible.
- Contract tests flag newly added frontend wrappers without a corresponding dispatcher or explicit desktop-only declaration.
Summary
Remote LAN mode renders all “capable” desktop tabs, but the LAN command dispatcher only implements a subset of their backend commands.
Evidence
web/src/App.tsxsetscapable = desktop || remote, exposing Local, Image, Inpaint, Classify, Train, Feedback, and Memory views remotely.The LAN dispatcher supports core chat/image/memory/settings operations, but frontend wrappers also invoke commands that are absent remotely, including portions of:
These actions fail as unknown commands instead of being hidden or negotiated.
Proposed resolution
app_info.remoteboolean.Implementing the missing LAN routes can follow separately; capability negotiation is still needed for desktop/remote version skew.
Acceptance criteria