feat: uninstallModule + daemonPaths wrappers (v0.9.0)

HubClient gains:
- daemonPaths() — typed access to the new DaemonPaths RPC.
- uninstallModule(name) — typed wrapper for UninstallModule.

Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
This commit is contained in:
flemming-it 2026-05-07 17:46:32 +02:00
parent 6dc058344b
commit 90405e6fc3
5 changed files with 340 additions and 1 deletions

View file

@ -54,6 +54,8 @@ typedef ListSystemAiCuratedModelsResponse =
pb.ListSystemAiCuratedModelsResponse;
typedef CuratedModel = pb.CuratedModel;
typedef ClearEventLogResponse = pb.ClearEventLogResponse;
typedef DaemonPathsResponse = pb.DaemonPathsResponse;
typedef UninstallModuleResponse = pb.UninstallModuleResponse;
typedef ModuleInfoResponse = pb.ModuleInfoResponse;
typedef FlowSummary = pb.FlowSummary;
typedef StoreEntry = pb.StoreEntry;
@ -208,6 +210,22 @@ class HubClient {
return _admin.channelStatus(Empty());
}
/// Filesystem paths the daemon owns (log file, db, config,
/// flows, modules, pid). Studio's Doctor page surfaces these
/// as "Open in file manager" buttons so Windows operators can
/// inspect everything without a shell.
Future<DaemonPathsResponse> daemonPaths() {
return _admin.daemonPaths(Empty());
}
/// Remove an installed module by name. Wipes the module
/// directory + re-scans the registry; writes a
/// `module.uninstalled` audit event. Returned response carries
/// the version that was removed.
Future<UninstallModuleResponse> uninstallModule(String name) {
return _admin.uninstallModule(pb.UninstallModuleRequest(name: name));
}
/// Read-only system-AI status. `enabled=false` lets Studio
/// render "configure in Settings" without making a request.
Future<SystemAiStatusResponse> systemAiStatus() {