menuAgentVmRegister function

bool menuAgentVmRegister()

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;
}