- Move plugin load/resolve logic into the `streamlink.session.plugins`
module with the `StreamlinkPlugins` class
- Make `Streamlink.plugins` an instance of this class
- Add the `plugins_builtin` keyword argument to the `Streamlink` class
and set its default value to `True`
- Deprecate the `Streamlink.{{get,load}_plugins,load_builtin_plugins}()`
methods, which are now wrappers for the respective `StreamlinkPlugins`
implementations
- Update `streamlink_cli.main` and all other `Streamlink` session
usages accordingly (in scripts and tests)
- Update session docs
- Move and update plugin load/resolve tests
- Move `StreamlinkOptions` from `streamlink.session`
to `streamlink.session.options`
- Move docstring containing options list from `Streamlink.set_option()`
to `StreamlinkOptions` and add this class to the docs
- Move default options from `Streamlink` constructor
to `StreamlinkOptions._DEFAULTS`, so all options data is defined
in the `streamlink.session.options` module
- Move session options tests to `tests.session.test_options`
and change order of tests
- Make built-in plugins use pluginargument type functions referenced
via name, so the pluginargument data can be fully JSON-serialized
- Add the `type_args`/`type_kwargs` arguments to `@pluginargument()`
which allow the parametrization of the name-referenced type function
- Add a pluginargument type registry to the `streamlink.plugin.plugin`
module and add all functions of the `streamlink.utils.args` module,
as well as the `hours_minutes_seconds{,_float}` functions of
the `streamlink.utils.times` module
- Update docs
- Add tests
- Add `api/options` page and document `Options` class
- Move `Argument` and `Arguments` from plugin page to options page
- Add docstrings for `Streamlink.options` and `Plugin.options`