We update the sole protocol to more cleanly support multiple sessions.
Primarily, the "sole id" is updated to be a [@p @ta] instead of a @ta,
and it is now generated based off the connected dill session, rather
than statically.
This change ripples out to applications that support the sole protocol:
the subscription path becomes /sole/[ship]/[session] (as opposed to
/sole/[per-ship-constant]), and %sole-action pokes include the new id as
well.
For shoe agents, this means (at the very least) updating the function
signatures of the shoe arms.
/lib/sole has been updated to include helper functions for parsing a
sole-id from a subscription path, and turning a sole-id into its
corresponding path. It also has a function to aid in migrating old
sole-ids.
Existing sole agents are made to kick any known open sessions, forcing a
resubscribe by drum, so that they may use exclusively the new format
going forward. Third-party agents are recommended to do the same.
Note that some functionality, such as |link, still operates exclusively
on the default session. Improvements in this area to follow soon.
The +command-parser must now produce both a flag and a command noun.
If the flag is true, instantly runs the command from the noun.
If false, maintains standard behavior and only runs it on-return.
Deals with sole events, deferring to the underlying app only for higher-
level sole-handling logic.
Currently doesn't offer fancy printing logic, but can easily be extended
to do so.
Passes sole-ids on to the underlying app in all arms so that it may run
session-specific logic wherever it desires.