So,
Action: Act(Environment|Character)
Reflection: Act(Character|Environment)
An agent has free will iff it engages in action<->reflection cycles.
Also:
An agent A "could have taken" action X vs Y: ActX(Env|CharA) vs ActY(Env|CharB) in the sense that there is a graph "of some sort" linking their CharA to the CharB which could realise ActY.
Eg., Bob can either steal the money or return it. Bob chooses to steal it. Bob is morally responsible for this act because there is a realisable "action<->reflection" path from bob's actual character to the one he should have had. If bob had had this character, he would not have stolen.