// Copyright 2017 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

library fuchsia.modular;

// Sessionmgr creates an instance of this service and passes it to the
// SessionShell so it can observe Agents for the user.
//
// TODO(alhaad): Add interfaces for modifying Agents for the user.
protocol AgentProvider {
    // Registers a listener for changes in the list of agents.
    Watch(AgentProviderWatcher watcher);
};

// This interface is implemented by clients of AgentProvider and is updated
// whenever there is a change to the list of users.
protocol AgentProviderWatcher {
    // Gives a full list of all agents that are running or scheduled to run.
    // TODO(alhaad): This currently only contains the URL of the agents. It should
    // contain more state information.
    OnUpdate(vector<string> agent_urls);
};
