I understand that BarPeriod sets the sampling rate of the price curve, and run will be executed exactly once for each fully formed bar.

FR1:
In run(), allow access to the individual ticks comprising the bar. For example, if BarPeriod is 60, populate an array of TICKs with one element for each minute that comprises the bar. The reason is to allow custom within-bar statistics.

Short of that,
FR2:
You already compute some basic within-bar statistics for me. For example,
priceHigh() is essentially the max(highs) of all ticks comprising the bar
priceLow() is min(Low)
price is average(something) (By the way, this is underspecified. what is averaged, the O, H, L, or C of each tick?)
MedPrice() is median(something)
TypPrice() is (High + Low + Close)/3
WCLPrice() is also underspecified

These are all operating on within-Bar values. I propose the following additions.
within-bar stddev
variance
percentile or at least 1st and 3rd quantile
bool highFirst, returns true if the highest high came before the lowest low in the bar. else false
var highDelayWithinBar returns proportion of time within the bar that passed before the highest high was reached. i.e. 0.0 if open == high, 1.0 if close == high.
lowDelayWithinBar
and anything else you can think of