New features:
- Public API for the primitives consumers were re-deriving: find_uuids/is_uuid
locate channel UUIDs without a regex, for_each_peer_uuid[_with] walks the
variables that name another leg, parse_bridge_args/BridgeInfo read a dial
string, log_rotation_stamp/normalize_entry_timestamp put a rotated filename
and an entry timestamp into one comparable form, decode_log_line exposes the
UTF-8 boundary.
- fslog search: --on DATE and --today, repeatable --category, multi-needle
matching, and a parallel byte prescan that skips files which cannot contain a
full UUID or Call-ID. FSLOG_CONFIRM_SIZE moves the large-scan threshold.
- An empty search reports the span of log files on hand, so "not in these logs"
is distinguishable from "already rotated away".
Output:
- A dialplan block prints its channel once, on the header; every line under it
starts with what differs. Continuation lines no longer repeat the entry's own
UUID and the Dialplan:/Chatplan: channel.
- Continuation lines render inline under --blocks instead of collapsing to a
count, UUIDs embedded in a message take their per-call color, and
bridge()/att_xfer() dial strings expand into variables, failover groups and
endpoints.
- Time leads each entry and shares the level's color; the line-kind column is
gone. File and date markers print as a rule.
Bug fixes:
- bridge() naming origination_uuid in {} all-endpoint scope left the B-leg
unlinked; only the per-endpoint [] scope was read.
- fslog tail and monitor stopped on a codepoint mod_logfile truncated, and
could emit a line the writer had not finished.
- normalize_entry_timestamp panicked on non-ASCII input.
- fslog --related dropped peer legs whose file never mentioned the seed.
- A CHANNEL_DATA variable left open at end of block could lose its value.
- An expanded block no longer also prints a count of the lines it rendered.