a comment says: "I'd be a bit wary about calling this "undo" since it does a reset --hard which potentially erases uncommitted changes with no way of getting them back"
jsUndoable is my second attempt at a powerful, reusable, undo library for Javascript. It uses the command pattern and is roughly based on the Cocoa undo manager.