More so, does this means that if a profile references more than one plugin, the new 'vaProxy' object will allow access to variables used/created by any other plugin, with potential name conflict/unintended overwriting?
In VA as it stands, all variables are global. The commands are not compiled and everybody can see and step on everything. It's really, really open.
In the previous plugin interface (v3), in order for the plugin to receive ANY variables, you had to first set the variables somewhere in a command and then indicate what variables are going to be pushed over to the plugin via the execute plugin screen. The variable values were then gathered up (in various typed dictionaries), and pushed to the plugin. Then the plugin would use whatever you pushed over, make any additions/subtractions/modifications to the dictionary items and then when the call (invoke, init) went out of scope, the dictionaries were then used to update the variables in VoiceAttack. So, whatever work was done on the dictionaries within the plugin would have been as if the dictionaries were local (because they were). VoiceAttack would just run through the dictionary on return and make all necessary adjustments. I thought that this was good, because it meant that the plugin was totally isolated other than through these very controlled areas.
What v3 did not allow was for was any interaction with VA other than through waiting for a call FROM VA. That means you have to have a command that loops and calls a plugin function continually. Not necessarily a *bad* thing (its the best you can do with a transaction model), but it requires that the user has to do something in order to get the ball rolling. Then, if the user clicks, 'stop running commands', the whole thing comes to a halt and then it requires the user to be involved again. In order to have a clean link between VA and the plugin, the transaction model had to be updated to allow direct access to variables inside of VA and to be able to execute VA's commands. This is where v4 comes in. This way, variable monitoring can be done within the plugin without having to wait for VA to call, and commands can be executed without having a VA loop looking for a specific value to invoke a command (it's actually been whiteboarded for a long time to have command triggers on variable set... not writing that just yet lol).
If you are relying on the content of the dictionaries passed in to indicate context, you're going to need to use either the the context value of vaProxy (set on the, 'execute plugin' screen... uses tokens), or rely on a variable flag (using caution in a multi-threaded environment) for this new interface.
The new interface provides a different way of doing things, and in order to do those things it has to be opened up like it is. It is possible to continue using the old plugin interfaces if you need to, as VA will still recognize them.