remove all old shell-related js files
diff --git a/planetstack/core/static/shell/constants.js b/planetstack/core/static/shell/constants.js
deleted file mode 100644
index 97b690a..0000000
--- a/planetstack/core/static/shell/constants.js
+++ /dev/null
@@ -1,39 +0,0 @@
-// TryMongo

-//

-// Copyright (c) 2009 Kyle Banker

-// Licensed under the MIT Licence.

-// http://www.opensource.org/licenses/mit-license.php

-

-var DefaultInputHtml = function(stack) {

-    var linePrompt = "";

-    if(stack == 0) {

-      linePrompt += "<span class='prompt'> ></span>";

-    }

-    else {

-      for(var i=0; i <= stack; i++) {

-        linePrompt += "<span class='prompt'>.</span>";

-      }

-    }

-    return "<div class='terminal_line'>" +

-           linePrompt +

-           "<input type='text' class='readLine active' />" +

-           "</div>";

-}

-

-var EnterKeyCode     = 13;

-var UpArrowKeyCode   = 38;

-var DownArrowKeyCode = 40;

-

-var PTAG = function(str) {

-  return '<pre class="terminal_help">' + str + '</pre>';

-}

-

-var BR = function() {

-  return "<br/>";

-}

-

-var JavascriptKeywords = ['abstract', 'boolean', 'break', 'byte', 'case', 'catch', 'char', 'class', 'const', 'continue', 'debugger', 'default', 'delete', 'do', 'double', 'else', 'enum', 'export', 'extends', 'false', 'final', 'finally', 'float', 'for', 'function', 'goto', 'if', 'implements', 'import', 'in', 'instanceof', 'int', 'interface', 'long', 'native', 'new', 'null', 'package', 'private', 'protected', 'public', 'return', 'short', 'static', 'super', 'switch', 'synchronized', 'this', 'throw', 'throws', 'transient', 'true', 'try', 'typeof', 'var', 'void', 'volatile', 'while', 'with', 'alert', 'date', 'eval'];

-

-var JavascriptClassNames = ['Array', 'String', 'Object']

-

-var MongoKeywords = ['help','tutorial','next','back','t0','t1','t2','t3','t4'];

diff --git a/planetstack/core/static/shell/object_id.js b/planetstack/core/static/shell/object_id.js
deleted file mode 100644
index 15cbbb9..0000000
--- a/planetstack/core/static/shell/object_id.js
+++ /dev/null
@@ -1,12 +0,0 @@
-var ObjectIdCounter = 0;
-
-var ObjectId = function() {
-  this.counter = (ObjectIdCounter += 1);
-  this.str     = this.counter;
-  this.initialize();
-  return this.counter;
-};
-
-ObjectId.prototype.initialize = function() {
-  return this.counter;
-}
diff --git a/planetstack/core/static/shell/opencloud.js b/planetstack/core/static/shell/opencloud.js
deleted file mode 100644
index 7b39308..0000000
--- a/planetstack/core/static/shell/opencloud.js
+++ /dev/null
@@ -1,64 +0,0 @@
-var opencloud_data = [];
-var opencloud_data_received = false;
-
-function updateOpenCloud(onLoaded) {
-    $.ajax({url: "/admin/shelldata",
-        dataType: "json",
-        type: "GET",
-        success: function(data) {
-            opencloud_data = data;
-            if (!opencloud_data_received) {
-                opencloud_data_received = true;
-                if (onLoaded!=null) {
-                    onLoaded();
-                }
-            }
-            // do this again in 30 seconds
-            setTimeout(function() {updateOpenCloud(onLoaded)}, 10000);
-        },
-        error: function() {
-            console.log("something went wrong. trying again");
-            // do this again in 30 seconds
-            setTimeout(function() {updateOpenCloud(onLoaded)}, 10000);
-        }
-    });
-}
-
-function OpenCloudModel(name) {
-    this.all = function() { return opencloud_data[name]; };
-
-    this.match = function(filterDict,obj) {
-                   for (var k in filterDict) {
-                       if (obj[k] == filterDict[k]) {
-                           return true;
-                       }
-                   }
-                   return false;
-                 };
-
-    this.filter = function(filterDict) {
-                   result = []
-                   all_objs = this.all()
-                   for (var k in all_objs) {
-                        obj = all_objs[k];
-                        if (this.match(filterDict, obj)) {
-                            result.push(obj);
-                        }
-                   }
-                   return result;
-                 };
-
-    this.get = function(filterDict) {
-                   return this.filter(filterDict)[0];
-                 };
-
-    this.__str__ = function() { return '["all", "filter", "get"]' };
-}
-
-function OpenCloud() {
-    this.slices = new OpenCloudModel("slices");
-    this.slivers = new OpenCloudModel("slivers");
-    this.nodes = new OpenCloudModel("nodes");
-    this.sites = new OpenCloudModel("sites");
-    this.__str__ = function() { return '["slices", "slivers", "nodes", "sites"]'; }
-};
diff --git a/planetstack/core/static/shell/opencloud_shell.js b/planetstack/core/static/shell/opencloud_shell.js
deleted file mode 100644
index 62a8a0a..0000000
--- a/planetstack/core/static/shell/opencloud_shell.js
+++ /dev/null
@@ -1,409 +0,0 @@
-// TryMongo
-//
-// Copyright (c) 2009 Kyle Banker
-// Licensed under the MIT Licence.
-// http://www.opensource.org/licenses/mit-license.php
-
-// Readline class to handle line input.
-var ReadLine = function(options) {
-  this.options      = options || {};
-  this.htmlForInput = this.options.htmlForInput;
-  this.inputHandler = this.options.handler || this.mockHandler;
-  this.scoper       = this.options.scoper;
-  this.terminal     = $(this.options.terminalId || "#terminal");
-  this.lineClass    = this.options.lineClass || '.readLine';
-  this.history      = [];
-  this.historyPtr   = 0;
-
-  this.initialize();
-};
-
-ReadLine.prototype = {
-
-  initialize: function() {
-    this.addInputLine();
-  },
-
-  // Enter a new input line with proper behavior.
-  addInputLine: function(stackLevel) {
-    stackLevel = stackLevel || 0;
-    this.terminal.append(this.htmlForInput(stackLevel));
-    var ctx = this;
-    ctx.activeLine = $(this.lineClass + '.active');
-
-    // Bind key events for entering and navigting history.
-    ctx.activeLine.bind("keydown", function(ev) {
-      switch (ev.keyCode) {
-        case EnterKeyCode:
-          ctx.processInput(this.value); 
-          break;
-        case UpArrowKeyCode: 
-          ctx.getCommand('previous');
-          break;
-        case DownArrowKeyCode: 
-          ctx.getCommand('next');
-          break;
-      }
-    });
-
-    this.activeLine.focus();
-  },
-
-  // Returns the 'next' or 'previous' command in this history.
-  getCommand: function(direction) {
-    if(this.history.length === 0) {
-      return;
-    }
-    this.adjustHistoryPointer(direction);
-    this.activeLine[0].value = this.history[this.historyPtr];
-    $(this.activeLine[0]).focus();
-    //this.activeLine[0].value = this.activeLine[0].value;
-  },
-
-  // Moves the history pointer to the 'next' or 'previous' position. 
-  adjustHistoryPointer: function(direction) {
-    if(direction == 'previous') {
-      if(this.historyPtr - 1 >= 0) {
-        this.historyPtr -= 1;
-      }
-    }
-    else {
-      if(this.historyPtr + 1 < this.history.length) {
-        this.historyPtr += 1;
-      }
-    }
-  },
-
-  // Return the handler's response.
-  processInput: function(value) {
-    var response = this.inputHandler.apply(this.scoper, [value]);
-    this.insertResponse(response.result);
-
-    // Save to the command history...
-    if((lineValue = value.trim()) !== "") {
-      this.history.push(lineValue);
-      this.historyPtr = this.history.length;
-    }
-
-    // deactivate the line...
-    this.activeLine.value = "";
-    this.activeLine.attr({disabled: true});
-    this.activeLine.removeClass('active');
-
-    // and add add a new command line.
-    this.addInputLine(response.stack);
-  },
-
-  insertResponse: function(response) {
-    if((response.length < 1) || (response=='"donotprintme"') || (response=='donotprintme')) {
-      this.activeLine.parent().append("<p class='response'></p>");
-    }
-    else {
-      this.activeLine.parent().append("<p class='response'>" + response + "</p>");
-    }
-  },
-
-  // Simply return the entered string if the user hasn't specified a smarter handler.
-  mockHandler: function(inputString) {
-    return function() {
-      this._process = function() { return inputString; };
-    };
-  }
-};
-
-var MongoHandler = function() {
-  this._currentCommand = "";
-  this._rawCommand     = "";
-  this._commandStack   = 0;
-  this._tutorialPtr    = 0;
-  this._tutorialMax    = 4;
-
-  this._mongo          = {};
-  this._mongo.test     = [];
-  this.collections     = [];
-};
-
-MongoHandler.prototype = {
-
-  _process: function(inputString, errorCheck) {
-    this._rawCommand += ' ' + inputString;
-
-    try {
-      inputString += '  '; // fixes certain bugs with the tokenizer.
-      var tokens    = inputString.tokens();
-      var mongoFunc = this._getCommand(tokens);
-      if(this._commandStack === 0 && inputString.match(/^\s*$/)) {
-        return {stack: 0, result: ''};
-      }
-      else if(this._commandStack === 0 && mongoFunc) {
-        this._resetCurrentCommand();
-        return {stack: 0, result: mongoFunc.apply(this, [tokens])};
-      }
-      else {
-        return this._evaluator(tokens);
-      }
-    }
-
-    catch(err) {
-        this._resetCurrentCommand();
-        console.trace();
-        return {stack: 0, result: "JS Error: " + err};
-    }
-  },
-
-  // Calls eval on the input string when ready.
-  _evaluator: function(tokens) {
-    isAssignment = tokens.length>=2 && tokens[0].type=="name" && tokens[1].type=="operator" && tokens[1].value=="=";
-
-    this._currentCommand += " " + this._massageTokens(tokens);
-    if(this._shouldEvaluateCommand(tokens))  {
-        xos = new OpenCloud();
-        print = this.print;
-
-        // So this eval statement is the heart of the REPL.
-        var result = eval(this._currentCommand.trim());
-        if(result === undefined) {
-          throw('result is undefined');
-        } else if (typeof(result) === 'function') {
-          throw('result is a function. did you mean to call it?');
-        } else {
-          result = $htmlFormat(result);
-        }
-        this._resetCurrentCommand();
-        if (isAssignment) {
-            return {stack: this._commandStack, result: ""};
-        } else {
-            return {stack: this._commandStack, result: result};
-        }
-      }
-
-    else {
-      return {stack: this._commandStack, result: ""};
-    }
-  },
-
-  _resetCurrentCommand: function() {
-    this._currentCommand = '';
-    this._rawCommand     = '';
-  },
-
-  // Evaluate only when we've exited any blocks.
-  _shouldEvaluateCommand: function(tokens) {
-    for(var i=0; i < tokens.length; i++) {
-      var token = tokens[i];
-      if(token.type == 'operator') {
-        if(token.value == '(' || token.value == '{') {
-          this._commandStack += 1;
-        }
-        else if(token.value == ')' || token.value == '}') {
-          this._commandStack -= 1;
-        }
-      }
-    }
-
-    if(this._commandStack === 0) {
-      return true;
-    }
-    else {
-      return false;
-    }
-  },
-
-  _massageTokens: function(tokens) {
-    for(var i=0; i < tokens.length; i++) {
-      if(tokens[i].type == 'name') {
-        if(tokens[i].value == 'var') {
-          tokens[i].value = '';
-        }
-      }
-    }
-    return this._collectTokens(tokens);
-  },
-
-  // Collects tokens into a string, placing spaces between variables.
-  // This methods is called after we scope the vars.
-  _collectTokens: function(tokens) {
-    var result = "";
-    for(var i=0; i < tokens.length; i++) {
-      if(tokens[i].type == "name" && tokens[i+1] && tokens[i+1].type == 'name') {
-        result += tokens[i].value + ' ';
-      }
-      else if (tokens[i].type == 'string') {
-        result += "'" + tokens[i].value + "'";
-      }
-      else {
-        result += tokens[i].value;
-      }
-    }
-    return result;
-  },
-
-  // print output to the screen, e.g., in a loop
-  // TODO: remove dependency here
-  print: function() {
-   $('.readLine.active').parent().append('<p>' + JSON.stringify(arguments[0]) + '</p>');
-   return "donotprintme";
-  },
-
-  /* MongoDB     */
-  /* ________________________________________ */
-
-  // help command
-  _help: function() {
-      return PTAG('HELP') +
-             PTAG('xos                                 list xos API object types') +
-             PTAG('xos.slices                          list methods to can call on slices') +
-             PTAG('xos.slices.all()                    get all slices') +
-             PTAG('xos.slices.filter({key: "value"})   filter using dictionary') +
-             PTAG('xos.slices.get({key: "value"})      get using dictionary')
-
-  },
-
-  _tutorial: function() {
-    this._tutorialPtr = 0;
-    return PTAG("This is a self-guided tutorial on the xos shell.") +
-           PTAG("The tutorial is simple, more or less a few basic commands to try.") +
-           PTAG("To go directly to any part tutorial, enter one of the commands t0, t1, t2...t10") +
-           PTAG("Otherwise, use 'next' and 'back'. Start by typing 'next' and pressing enter.");
-  },
-
-  // go to the next step in the tutorial.
-  _next: function() {
-    if(this._tutorialPtr < this._tutorialMax) {
-      return this['_t' + (this._tutorialPtr + 1)]();
-    }
-    else {
-      return "You've reached the end of the tutorial. To go to the beginning, type 'tutorial'";
-    }
-  },
-
-  // go to the previous step in the tutorial.
-  _back: function() {
-    if(this._tutorialPtr > 1) {
-      return this['_t' + (this._tutorialPtr - 1)]();
-    }
-    else {
-      return this._tutorial();
-    }
-  },
-
-  _t1: function() {
-    this._tutorialPtr = 1;
-    return PTAG('1. JavaScript Shell') +
-           PTAG('The first thing to notice is that the MongoDB shell is JavaScript-based.') +
-           PTAG('So you can do things like:') +
-           PTAG('  a = 5; ') +
-           PTAG('  a * 10; ') +
-           PTAG('  print(a); ') +
-           PTAG("  for(i=0; i<10; i++) { print('hello'); }; ") +
-           PTAG("Try a few JS commands; when you're ready to move on, enter 'next'");
-
-  },
-
-  _t2: function() {
-    this._tutorialPtr = 2;
-    return PTAG('2. List some objects') +
-           PTAG('Try these:') +
-           PTAG('    xos.slices.all();') +
-           PTAG('    xos.slivers.all();') +
-           PTAG('    xos.sites.all();') +
-           PTAG('    xos.nodes.all();');
-
-  },
-
-  _t3: function() {
-    this._tutorialPtr = 3;
-    return PTAG('3. Filter some objects') +
-           PTAG('Try these:') +
-           PTAG('    xos.slices.get({name: "HyperCache"});');
-           PTAG('    xos.nodes.filter({site_id: xos.sites.get({name: "Princeton"})["id"]});');
-
-  },
-
-  _t4: function() {
-    this._tutorialPtr = 4;
-    return PTAG('4. Available xos objects and methods') +
-           PTAG('Try these:') +
-           PTAG('    xos;') +
-           PTAG('    xos.nodes;');
-
-  },
-
-  _getCommand: function(tokens) {
-    if(tokens[0] && ArrayInclude(MongoKeywords,(tokens[0].value + '').toLowerCase())) {
-      switch(tokens[0].value.toLowerCase()) {
-        case 'help':
-          return this._help;
-
-        case 'tutorial':
-          return this._tutorial;
-        case 'next':
-          return this._next;
-        case 'back':
-          return this._back;
-        case 't0':
-          return this._tutorial;
-        case 't1':
-          return this._t1;
-        case 't2':
-          return this._t2;
-        case 't3':
-          return this._t3;
-        case 't4':
-          return this._t4;
-      }
-    }
-  }
-};
-
-function replaceAll(find, replace, str) {
-  return str.replace(new RegExp(find, 'g'), replace);

-}
-
-/* stackoverflow: http://stackoverflow.com/questions/4810841/how-can-i-pretty-print-json-using-javascript */
-function syntaxHighlight(json) {
-    if ( json.hasOwnProperty("__str__")) {
-        return syntaxHighlight(json.__str__());
-    }
-    if (typeof json != 'string') {

-         json = JSON.stringify(json, undefined, "\t");

-    }

-    json = json.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');

-    return json.replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?)/g, function (match) {

-        var cls = 'terminal_number';

-        if (/^"/.test(match)) {

-            if (/:$/.test(match)) {

-                cls = 'terminal_key';

-            } else {

-                cls = 'terminal_string';

-            }

-        } else if (/true|false/.test(match)) {

-            cls = 'terminal_boolean';

-        } else if (/null/.test(match)) {

-            cls = 'terminal_null';

-        }

-        return '<span class="' + cls + '">' + match + '</span>';

-    });

-}
-
-$htmlFormat = function(obj) {
-  //JSON.stringify(obj,undefined,2)
-  result=replaceAll("\t","&nbsp;",replaceAll("\n","<br>",syntaxHighlight(obj))); //tojson(obj, ' ', ' ', true);
-  return result;
-}
-
-function startTerminal() {
-  var mongo       = new MongoHandler();
-  var terminal    = new ReadLine({htmlForInput: DefaultInputHtml,
-                                  handler: mongo._process,
-                                  scoper: mongo});
-  $("#terminal_help1").show();
-  $("#terminal_help2").show();
-  $("#terminal_wait").hide();
-
-  $("#terminal").bind('click', function() { $(".readLine.active").focus(); });
-};
-
-$(document).ready(function() {
-    updateOpenCloud(onLoaded = startTerminal);
-});
diff --git a/planetstack/core/static/shell/shell_utils.js b/planetstack/core/static/shell/shell_utils.js
deleted file mode 100644
index 8ed5f4f..0000000
--- a/planetstack/core/static/shell/shell_utils.js
+++ /dev/null
@@ -1,548 +0,0 @@
-DB = function() {
-}
-
-print = function(msg) {
-  //console.log(msg);
-}
-
-
-friendlyEqual = function( a , b ){
-    if ( a == b )
-        return true;
-
-    if ( tojson( a ) == tojson( b ) )
-        return true;
-
-    return false;
-}
-
-
-doassert = function( msg ){
-    print( "assert: " + msg );
-    throw msg;
-}
-
-assert = function( b , msg ){
-    if ( assert._debug && msg ) print( "in assert for: " + msg );
-
-    if ( b )
-        return;
-    
-    doassert( "assert failed : " + msg );
-}
-
-assert.eq = function( a , b , msg ){
-    if ( assert._debug && msg ) print( "in assert for: " + msg );
-
-    if ( a == b )
-        return;
-
-    if ( ( a != null && b != null ) && friendlyEqual( a , b ) )
-        return;
-
-    doassert( "[" + tojson( a ) + "] != [" + tojson( b ) + "] are not equal : " + msg );
-}
-
-assert.neq = function( a , b , msg ){
-    if ( assert._debug && msg ) print( "in assert for: " + msg );
-    if ( a != b )
-        return;
-
-    doassert( "[" + a + "] != [" + b + "] are equal : " + msg );
-}
-
-assert.soon = function( f, msg, timeout, interval ) {
-    if ( assert._debug && msg ) print( "in assert for: " + msg );
-
-    var start = new Date();
-    timeout = timeout || 30000;
-    interval = interval || 200;
-    var last;
-    while( 1 ) {
-        
-        if ( typeof( f ) == "string" ){
-            if ( eval( f ) )
-                return;
-        }
-        else {
-            if ( f() )
-                return;
-        }
-        
-        if ( ( new Date() ).getTime() - start.getTime() > timeout )
-            doassert( "assert.soon failed: " + f + ", msg:" + msg );
-        sleep( interval );
-    }
-}
-
-assert.throws = function( func , params , msg ){
-    if ( assert._debug && msg ) print( "in assert for: " + msg );
-    try {
-        func.apply( null , params );
-    }
-    catch ( e ){
-        return e;
-    }
-
-    doassert( "did not throw exception: " + msg );
-}
-
-assert.commandWorked = function( res , msg ){
-    if ( assert._debug && msg ) print( "in assert for: " + msg );
-
-    if ( res.ok == 1 )
-        return;
-    
-    doassert( "command failed: " + tojson( res ) + " : " + msg );
-}
-
-assert.commandFailed = function( res , msg ){
-    if ( assert._debug && msg ) print( "in assert for: " + msg );
-
-    if ( res.ok == 0 )
-        return;
-    
-    doassert( "command worked when it should have failed: " + tojson( res ) + " : " + msg );
-}
-
-assert.isnull = function( what , msg ){
-    if ( assert._debug && msg ) print( "in assert for: " + msg );
-
-    if ( what == null )
-        return;
-    
-    doassert( "supposed to null (" + ( msg || "" ) + ") was: " + tojson( what ) );
-}
-
-assert.lt = function( a , b , msg ){
-    if ( assert._debug && msg ) print( "in assert for: " + msg );
-
-    if ( a < b )
-        return;
-    doassert( a + " is not less than " + b + " : " + msg );
-}
-
-assert.gt = function( a , b , msg ){
-    if ( assert._debug && msg ) print( "in assert for: " + msg );
-
-    if ( a > b )
-        return;
-    doassert( a + " is not greater than " + b + " : " + msg );
-}
-
-Object.extend = function( dst , src , deep ){
-    for ( var k in src ){
-        var v = src[k];
-        if ( deep && typeof(v) == "object" ){
-            v = Object.extend( typeof ( v.length ) == "number" ? [] : {} , v , true );
-        }
-        dst[k] = v;
-    }
-    return dst;
-}
-
-argumentsToArray = function( a ){
-    var arr = [];
-    for ( var i=0; i<a.length; i++ )
-        arr[i] = a[i];
-    return arr;
-}
-
-isString = function( x ){
-    return typeof( x ) == "string";
-}
-
-isNumber = function(x){
-    return typeof( x ) == "number";
-}
-
-isObject = function( x ){
-    return typeof( x ) == "object";
-}
-
-String.prototype.trim = function() {
-    return this.replace(/^\s+|\s+$/g,"");
-}
-String.prototype.ltrim = function() {
-    return this.replace(/^\s+/,"");
-}
-String.prototype.rtrim = function() {
-    return this.replace(/\s+$/,"");
-}
-
-Date.timeFunc = function( theFunc , numTimes ){
-
-    var start = new Date();
-    
-    numTimes = numTimes || 1;
-    for ( var i=0; i<numTimes; i++ ){
-        theFunc.apply( null , argumentsToArray( arguments ).slice( 2 ) );
-    }
-
-    return (new Date()).getTime() - start.getTime();
-}
-
-Date.prototype.tojson = function(){
-    return "\"" + this.toString() + "\"";
-}
-
-RegExp.prototype.tojson = RegExp.prototype.toString;
-
-Array.contains = function( a  , x ){
-    for ( var i=0; i<a.length; i++ ){
-        if ( a[i] == x )
-            return true;
-    }
-    return false;
-}
-
-Array.unique = function( a ){
-    var u = [];
-    for ( var i=0; i<a.length; i++){
-        var o = a[i];
-        if ( ! Array.contains( u , o ) ){
-            u.push( o );
-        }
-    }
-    return u;
-}
-
-Array.shuffle = function( arr ){
-    for ( var i=0; i<arr.length-1; i++ ){
-        var pos = i+Math.floor(Math.random()*(arr.length-i));
-        var save = arr[i];
-        arr[i] = arr[pos];
-        arr[pos] = save;
-    }
-    return arr;
-}
-
-
-Array.tojson = function( a , indent , x , html){
-    if (!indent) 
-        indent = "";
-    var spacer = "";
-    if(html) {
-      spacer = "<br/>";
-      indent = " &nbsp; "
-    }
-
-    var s = spacer + "[ " + spacer;
-    indent += " ";
-    for ( var i=0; i<a.length; i++){
-        s += indent + tojson( a[i], indent );
-        if ( i < a.length - 1 ){
-            s += "," + spacer;
-        }
-    }
-    if ( a.length == 0 ) {
-        s += indent;
-    }
-
-    indent = indent.substring(1);
-    s += spacer + " "+"]";
-    return s;
-}
-
-Array.fetchRefs = function( arr , coll ){
-    var n = [];
-    for ( var i=0; i<arr.length; i ++){
-        var z = arr[i];
-        if ( coll && coll != z.getCollection() )
-            continue;
-        n.push( z.fetch() );
-    }
-    
-    return n;
-}
-
-Array.sum = function( arr ){
-    if ( arr.length == 0 )
-        return null;
-    var s = arr[0];
-    for ( var i=1; i<arr.length; i++ )
-        s += arr[i];
-    return s;
-}
-
-Array.avg = function( arr ){
-    if ( arr.length == 0 )
-        return null;
-    return Array.sum( arr ) / arr.length;
-}
-
-Array.stdDev = function( arr ){
-    var avg = Array.avg( arr );
-    var sum = 0;
-
-    for ( var i=0; i<arr.length; i++ ){
-        sum += Math.pow( arr[i] - avg , 2 );
-    }
-
-    return Math.sqrt( sum / arr.length );
-}
-
-if ( ! ObjectId.prototype )
-    ObjectId.prototype = {}
-
-ObjectId.prototype.toString = function(){
-    return this.str;
-}
-
-ObjectId.prototype.tojson = function(){
-    return "ObjectId(\"" + this.str + "\")";
-}
-
-ObjectId.prototype.isObjectId = true;
-
-tojson = function( x, indent , nolint , html){
-    if ( x == null )
-        return "null";
-    
-    if ( x == undefined )
-        return "undefined";
-    
-    if (!indent) 
-        indent = "";
-
-    switch ( typeof x ){
-        
-    case "string": {
-        var s = "\"";
-        for ( var i=0; i<x.length; i++ ){
-            if ( x[i] == '"' ){
-                s += "\\\"";
-            }
-            else
-                s += x[i];
-        }
-        return s + "\"";
-    }
-        
-    case "number": 
-    case "boolean":
-        return "" + x;
-            
-    case "object":{
-        var s = tojsonObject( x, indent , nolint , html);
-        if ( ( nolint == null || nolint == true ) && s.length < 80 && ( indent == null || indent.length == 0 ) ){
-            s = s.replace( /[\s\r\n ]+/gm , " " );
-        }
-        return s;
-    }
-        
-    case "function":
-        return x.toString();
-        
-
-    default:
-        throw "tojson can't handle type " + ( typeof x );
-    }
-    
-}
-
-tojsonObject = function( x, indent , nolint , html){
-    if(html) {
-      var lineEnding = "<br/>";
-      var tabSpace   = "&nbsp;";
-    }
-    else {
-      var lineEnding = nolint ? " " : "\n";
-      var tabSpace = nolint ? "" : "\t";
-    }
-
-    assert.eq( ( typeof x ) , "object" , "tojsonObject needs object, not [" + ( typeof x ) + "]" );
-
-    if (!indent)
-        indent = "";
-
-    if ( x.hasOwnProperty("__str__")) {
-        return x.__str__();
-    }
-
-    if ( typeof( x.tojson ) == "function" && x.tojson != tojson ) {
-        return x.tojson(indent,nolint,html);
-    }
-
-    if ( typeof( x.constructor.tojson ) == "function" && x.constructor.tojson != tojson ) {
-        return x.constructor.tojson( x, indent , nolint, html );
-    }
-
-    if ( x.toString() == "[object MaxKey]" )
-        return "{ $maxKey : 1 }";
-    if ( x.toString() == "[object MinKey]" )
-        return "{ $minKey : 1 }";
-
-    var s = "{" + lineEnding;
-
-    // push one level of indent
-    indent += tabSpace;
-
-    var total = 0;
-    for ( var k in x ) total++;
-    if ( total == 0 ) {
-        s += indent + lineEnding;
-    }
-
-    var keys = x;
-    if ( typeof( x._simpleKeys ) == "function" )
-        keys = x._simpleKeys();
-    var num = 1;
-    for ( var k in keys ){
-        var val = x[k];
-
-        s += indent + "\"" + k + "\" : " + tojson( val, indent , nolint );
-        if (num != total) {
-            s += ",";
-            num++;
-        }
-        s += lineEnding;
-    }
-
-    // pop one level of indent
-    indent = indent.substring(1);
-    return s + indent + "}";
-}
-
-shellPrint = function( x ){
-    it = x;
-    if ( x != undefined )
-        shellPrintHelper( x );
-}
-
-printjson = function(x){
-    print( tojson( x ) );
-}
-
-shellPrintHelper = function( x ){
-
-    if ( typeof( x ) == "undefined" ){
-
-        return;
-    }
-    
-    if ( x == null ){
-        print( "null" );
-        return;
-    }
-
-    if ( typeof x != "object" ) 
-        return print( x );
-    
-    var p = x.shellPrint;
-    if ( typeof p == "function" )
-        return x.shellPrint();
-
-    var p = x.tojson;
-    if ( typeof p == "function" )
-        print( x.tojson() );
-    else
-        print( tojson( x ) );
-}
-
-shellHelper = function( command , rest , shouldPrint ){
-    command = command.trim();
-    var args = rest.trim().replace(/;$/,"").split( "\s+" );
-    
-    if ( ! shellHelper[command] )
-        throw "no command [" + command + "]";
-    
-    var res = shellHelper[command].apply( null , args );
-    if ( shouldPrint ){
-        shellPrintHelper( res );
-    }
-    return res;
-}
-
-help = shellHelper.help = function(){
-    print( "HELP" );
-    print( "\t" + "show dbs                     show database names");
-    print( "\t" + "show collections             show collections in current database");
-    print( "\t" + "show users                   show users in current database");
-    print( "\t" + "show profile                 show most recent system.profile entries with time >= 1ms");
-    print( "\t" + "use <db name>                set curent database to <db name>" );
-    print( "\t" + "db.help()                    help on DB methods");
-    print( "\t" + "db.foo.help()                help on collection methods");
-    print( "\t" + "db.foo.find()                list objects in collection foo" );
-    print( "\t" + "db.foo.find( { a : 1 } )     list objects in foo where a == 1" );
-    print( "\t" + "it                           result of the last line evaluated; use to further iterate");
-}
-
-if ( typeof( Map ) == "undefined" ){
-    Map = function(){
-        this._data = {};
-    }
-}
-
-Map.hash = function( val ){
-    if ( ! val )
-        return val;
-
-    switch ( typeof( val ) ){
-    case 'string':
-    case 'number':
-    case 'date':
-        return val.toString();
-    case 'object':
-    case 'array':
-        var s = "";
-        for ( var k in val ){
-            s += k + val[k];
-        }
-        return s;
-    }
-
-    throw "can't hash : " + typeof( val );
-}
-
-Map.prototype.put = function( key , value ){
-    var o = this._get( key );
-    var old = o.value;
-    o.value = value;
-    return old;
-}
-
-Map.prototype.get = function( key ){
-    return this._get( key ).value;
-}
-
-Map.prototype._get = function( key ){
-    var h = Map.hash( key );
-    var a = this._data[h];
-    if ( ! a ){
-        a = [];
-        this._data[h] = a;
-    }
-    
-    for ( var i=0; i<a.length; i++ ){
-        if ( friendlyEqual( key , a[i].key ) ){
-            return a[i];
-        }
-    }
-    var o = { key : key , value : null };
-    a.push( o );
-    return o;
-}
-
-Map.prototype.values = function(){
-    var all = [];
-    for ( var k in this._data ){
-        this._data[k].forEach( function(z){ all.push( z.value ); } );
-    }
-    return all;
-}
-
-if ( typeof( gc ) == "undefined" ){
-    gc = function(){
-    }
-}
-   
-
-Math.sigFig = function( x , N ){
-    if ( ! N ){
-        N = 3;
-    }
-    var p = Math.pow( 10, N - Math.ceil( Math.log( Math.abs(x) ) / Math.log( 10 )) );
-    return Math.round(x*p)/p;
-}
-
diff --git a/planetstack/core/static/shell/tokens.js b/planetstack/core/static/shell/tokens.js
deleted file mode 100644
index 49c246e..0000000
--- a/planetstack/core/static/shell/tokens.js
+++ /dev/null
@@ -1,268 +0,0 @@
-// tokens.js
-// 2009-05-17
-
-// (c) 2006 Douglas Crockford
-
-// Produce an array of simple token objects from a string.
-// A simple token object contains these members:
-//      type: 'name', 'string', 'number', 'operator'
-//      value: string or number value of the token
-//      from: index of first character of the token
-//      to: index of the last character + 1
-
-// Comments of the // type are ignored.
-
-// Operators are by default single characters. Multicharacter
-// operators can be made by supplying a string of prefix and
-// suffix characters.
-// characters. For example,
-//      '<>+-&', '=>&:'
-// will match any of these:
-//      <=  >>  >>>  <>  >=  +: -: &: &&: &&
-
-
-
-String.prototype.tokens = function (prefix, suffix) {
-    var c;                      // The current character.
-    var from;                   // The index of the start of the token.
-    var i = 0;                  // The index of the current character.
-    var length = this.length;
-    var n;                      // The number value.
-    var q;                      // The quote character.
-    var str;                    // The string value.
-
-    var result = [];            // An array to hold the results.
-
-    var make = function (type, value) {
-
-// Make a token object.
-
-        return {
-            type: type,
-            value: value,
-            from: from,
-            to: i
-        };
-    };
-
-// Begin tokenization. If the source string is empty, return nothing.
-
-    if (!this) {
-        return;
-    }
-
-// If prefix and suffix strings are not provided, supply defaults.
-
-    if (typeof prefix !== 'string') {
-        prefix = '<>+-&';
-    }
-    if (typeof suffix !== 'string') {
-        suffix = '=>&:';
-    }
-
-
-// Loop through this text, one character at a time.
-
-    c = this.charAt(i);
-    while (c) {
-        from = i;
-
-// Ignore whitespace.
-
-        if (c <= ' ') {
-            i += 1;
-            c = this.charAt(i);
-
-// name.
-
-        } else if (c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z') {
-            str = c;
-            i += 1;
-            for (;;) {
-                c = this.charAt(i);
-                if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') ||
-                        (c >= '0' && c <= '9') || c === '_') {
-                    str += c;
-                    i += 1;
-                } else {
-                    break;
-                }
-            }
-            result.push(make('name', str));
-
-// number.
-
-// A number cannot start with a decimal point. It must start with a digit,
-// possibly '0'.
-
-        } else if (c >= '0' && c <= '9') {
-            str = c;
-            i += 1;
-
-// Look for more digits.
-
-            for (;;) {
-                c = this.charAt(i);
-                if (c < '0' || c > '9') {
-                    break;
-                }
-                i += 1;
-                str += c;
-            }
-
-// Look for a decimal fraction part.
-
-            if (c === '.') {
-                i += 1;
-                str += c;
-                for (;;) {
-                    c = this.charAt(i);
-                    if (c < '0' || c > '9') {
-                        break;
-                    }
-                    i += 1;
-                    str += c;
-                }
-            }
-
-// Look for an exponent part.
-
-            if (c === 'e' || c === 'E') {
-                i += 1;
-                str += c;
-                c = this.charAt(i);
-                if (c === '-' || c === '+') {
-                    i += 1;
-                    str += c;
-                    c = this.charAt(i);
-                }
-                if (c < '0' || c > '9') {
-                    make('number', str).error("Bad exponent");
-                }
-                do {
-                    i += 1;
-                    str += c;
-                    c = this.charAt(i);
-                } while (c >= '0' && c <= '9');
-            }
-
-// Make sure the next character is not a letter.
-
-            if (c >= 'a' && c <= 'z') {
-                str += c;
-                i += 1;
-                make('number', str).error("Bad number");
-            }
-
-// Convert the string value to a number. If it is finite, then it is a good
-// token.
-
-            n = +str;
-            if (isFinite(n)) {
-                result.push(make('number', n));
-            } else {
-                make('number', str).error("Bad number");
-            }
-
-// string
-
-        } else if (c === '\'' || c === '"') {
-            str = '';
-            q = c;
-            i += 1;
-            for (;;) {
-                c = this.charAt(i);
-                if (c < ' ') {
-                    make('string', str).error(c === '\n' || c === '\r' || c === '' ?
-                        "Unterminated string." :
-                        "Control character in string.", make('', str));
-                }
-
-// Look for the closing quote.
-
-                if (c === q) {
-                    break;
-                }
-
-// Look for escapement.
-
-                if (c === '\\') {
-                    i += 1;
-                    if (i >= length) {
-                        make('string', str).error("Unterminated string");
-                    }
-                    c = this.charAt(i);
-                    switch (c) {
-                    case 'b':
-                        c = '\b';
-                        break;
-                    case 'f':
-                        c = '\f';
-                        break;
-                    case 'n':
-                        c = '\n';
-                        break;
-                    case 'r':
-                        c = '\r';
-                        break;
-                    case 't':
-                        c = '\t';
-                        break;
-                    case 'u':
-                        if (i >= length) {
-                            make('string', str).error("Unterminated string");
-                        }
-                        c = parseInt(this.substr(i + 1, 4), 16);
-                        if (!isFinite(c) || c < 0) {
-                            make('string', str).error("Unterminated string");
-                        }
-                        c = String.fromCharCode(c);
-                        i += 4;
-                        break;
-                    }
-                }
-                str += c;
-                i += 1;
-            }
-            i += 1;
-            result.push(make('string', str));
-            c = this.charAt(i);
-
-// comment.
-
-        } else if (c === '/' && this.charAt(i + 1) === '/') {
-            i += 1;
-            for (;;) {
-                c = this.charAt(i);
-                if (c === '\n' || c === '\r' || c === '') {
-                    break;
-                }
-                i += 1;
-            }
-
-// combining
-
-        } else if (prefix.indexOf(c) >= 0) {
-            str = c;
-            i += 1;
-            while (i < length) {
-                c = this.charAt(i);
-                if (suffix.indexOf(c) < 0) {
-                    break;
-                }
-                str += c;
-                i += 1;
-            }
-            result.push(make('operator', str));
-
-// single-character operator
-
-        } else {
-            i += 1;
-            result.push(make('operator', c));
-            c = this.charAt(i);
-        }
-    }
-    return result;
-};
-
diff --git a/planetstack/core/static/shell/utils.js b/planetstack/core/static/shell/utils.js
deleted file mode 100644
index 1ded27e..0000000
--- a/planetstack/core/static/shell/utils.js
+++ /dev/null
@@ -1,81 +0,0 @@
-// Try Mongo
-//
-// Copyright (c) 2009 Kyle Banker
-// Licensed under the MIT licence.
-// http://www.opensource.org/licenses/mit-license.php
-
-// extending array like this is breaking datatables
-
-/*Array.prototype.include = function(value) {
-  for(var i=0; i < this.length; i++) {
-    if(this[i] == value) {
-      return this[i];
-    }
-  }
-  return false;
-};
-
-Array.prototype.empty = function() {
-  return (this.length == 0);
-};*/
-
-function ArrayInclude(arr,value) {
-  for(var i=0; i < arr.length; i++) {
-    if(arr[i] == value) {
-      return arr[i];
-    }
-  }
-  return false;
-};
-
-Function.prototype.bind = function() {
-  var __method = this, object = arguments[0], args = [];
-
-  for(i = 1; i < arguments.length; i++) {
-   args.push(arguments[i]);
-  }
-
- return function() {
- return __method.apply(object, args);
- };
-}; 
-
-String.prototype.trim = function() {
-  return this.replace(/^\s+|\s+$/g,"");
-};
-
-// Prints javascript types as readable strings.
-Inspect = function(obj) {
-  if(typeof(obj) != 'object') {
-    return obj;
-  }
-
-  else if (obj instanceof Array) {
-    var objRep = [];
-    for(var prop in obj) { 
-      if(obj.hasOwnProperty(prop)) {
-        objRep.push(obj[prop]); 
-      }
-    }
-    return '[' + objRep.join(', ') + ']';
-  }
-
-  else {
-    var objRep = [];
-    for(var prop in obj) {
-      if(obj.hasOwnProperty(prop)) {
-        objRep.push(prop + ': ' + ((typeof(obj[prop]) == 'object') ? Inspect(obj[prop]) : obj[prop]));
-      }
-    }
-    return '{' + objRep.join(', ') + '}';
-  }
-};
-
-// Prints an array of javascript objects.
-CollectionInspect = function(coll) {
-  var str = '';
-  for(var i=0; i<coll.length; i++) {
-    str += Inspect(coll[i]) + '<br />'; 
-  }
-  return str;
-};