I'm all for #3 and #4.
Inputting commands are once of my biggest issues.
I'm limited to 24 commands right now. Which is fantastic, the old version of my terminal program only allowed 12.
But being able to bind a command to a PC keyboard key would be fantastic.
Especially since i can occasionally find some old wireless PS/2 port keyboards still.
Also i'm considering switching to an IR ps2 controller, and having it as basic commands. Or rather basic Variables.
Since the sticks on the ps2 controller are variable, have it 0-100 (center to full tilt)
enableps2
if [ps2(y) < -10 and ps2(x) > 10] then ;10 points as a dead zone
go * -ps2(y) ;have the ps2 command as a variable, since for me -y is up, multiplying a negative ps2(y), would invert it.
turn * ps2(x)
endif
It would be -y 10 points, and +x axis 10 points, so if +X is greater than 10, it leaves the deadzone.
-y axis would work from 0 to -100
+y axis from 0 to 100
same for -x/+x as well as Ry and Rx
move forward and right (not a real command) but you get the idea.
for me forward and right would be a few serout strings and would be a bit more complicated, but i think you get the general idea. Something simple, and easy like that should work
button examples
ps2(LT) left trigger
ps2(RS) right stick
ps2(LLT) lower left trigger
ps2(sb) square button
ps2(cb) circle button
ps2(pu) pov up "the directional pad"
ps2(st) start
ps2(se) select
buttons would = 0 or 1, sticks -100,0,100
People could add controls to bots very easily this way

PS, for my xbox 360 controller using the custom XBCD drivers, the left stick up is -y, and down is +y, that's why forward and right would be -y and +X