menuAgentVmRegister function
Registers the VM service extensions menuAgentVmCommandsExtension and
menuAgentVmRunExtension of menuAgent (once), reachable from the Dart
tooling of a debug run (dart run --enable-vm-service, flutter run):
the app-agent MCP server (tekartik_app_agent_mcp) app_connect then
lists menu and menu_line as tools.
Returns false when the extensions are already registered by someone else (an app using tekartik_app_agent): its commands are kept.
Implementation
bool menuAgentVmRegister() {
if (_vmRegistered) {
return true;
}
final agent = menuAgent;
try {
registerExtension(menuAgentVmCommandsExtension, (method, parameters) async {
return ServiceExtensionResponse.result(
jsonEncode({'commands': agent.describe()}),
);
});
} on ArgumentError {
return false;
}
registerExtension(menuAgentVmRunExtension, (method, parameters) async {
final name = parameters['name'];
if (name == null) {
return ServiceExtensionResponse.error(
ServiceExtensionResponse.invalidParams,
'missing name',
);
}
Map<String, Object?>? args;
final argsText = parameters['args'];
if (argsText != null && argsText.isNotEmpty) {
try {
args = (jsonDecode(argsText) as Map).cast<String, Object?>();
} catch (e) {
return ServiceExtensionResponse.error(
ServiceExtensionResponse.invalidParams,
'invalid args $e',
);
}
}
return ServiceExtensionResponse.result(
jsonEncode(await agent.run(name, args)),
);
});
_vmRegistered = true;
return true;
}