Hey Ken, Thanks for putting that together. I think there are some confusing aspects though:
The interfaces are called *Provider, which would lead one to think that the implementations provide something, yet the interfaces only contain setter methods. Also, they live in the "api" package, but when one looks in the "impl" package one sees two classes, similarly named, that don't actually implement the corresponding interfaces. Then, looking at the views, they implement the interfaces, but don't actually do any "providing". The mediators do the providing, but they don't implement the provider interfaces.
In some libraries the word "client" is used. For example: IStyleClient, which is something that can be styled. Of course, there is also the whole "*able" naming scheme: IStyleable.
Haven't thought too much about it, but how about naming/packaging something like this (just an idea):
src
config (I really don't like "cfg"!)
behaviours
messages
IMessageClient
MessageProvider
scores
IScoreClient
ScoreProvider
view
AnotherView - implements IScoreClient, IMessageClient
SomeView - implements IScoreClient
YetAnotherView - implements IMessageClient
Perhaps people who've been using covariant mediation can give some input on the following:
Client naming: *able or *client
Provider/behaviour naming and packaging
As the mediator-view relationship is no longer one-to-one, it's worth thinking about where these things live. Also, I don't think "api" and "impl" make sense here.
Oh yes, one last thing: throw a README in there :)