What's the harm in allowing the input state for both actions & state to be managed by the input system directly and you merely expose methods for querying this state from other systems?
Your JumpSystem registers the Jump action with the InputSystem. Perhaps the registration is also accompanyed by the default key for SPACE. As a step in your game's startup, you load the player's mappings from a file to override the default input mappings with their custom ones.
At some future frame, your PlayerControllerSystem queries the InputSystem and checks whether the JUMP action is active. If the answer is true, then the player controller system initiates the jump sequence. This might include setting some booleans in the player controller component.
At the end of the frame, the InputSystem clears all actions and sets them back to inactive while leaving the current active status for States as-is so that carries over to the next frame.
In other words, I'm advocating polling input rather than pushing it. Why?
When input is pushed, now each system interested in input should cache those values so that later on when those systems update their state, they can react to that input. They shouldn't react to the input prior to because each system in the game loop typically must update in a deterministic order.
By polling input instead, we avoid having to force systems to maintain input state when it would be dispatched at the top of the game loop. Systems interested in current input state can obtain it when its needed for calculations and furthermore it allows that state to be cleared/managed cleanly from frame to frame.