Move inspect.signature(func) calls from inside wrapper functions to the
outer decorator function so the introspection cost is paid once at
decoration time instead of on every invocation.
- logged_command: sig, param_names, and exclude_set computed at decoration time;
wrapper.__signature__ reuses the pre-computed sig
- cached_api_call: sig moved to decorator scope; bound_args still computed
per-call (requires runtime args)
- cached_single_item: same as cached_api_call
Closes#97
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>