function commands( repl ) {
	var cmds;

	// Define a list of REPL-specific commands (NOTE: keep in alphabetical order):
	cmds = [];
	cmds.push( [ '__done__', onDone( repl ), false ] );
	cmds.push( [ 'addTheme', onAddTheme( repl ), false ] );
	cmds.push( [ 'alias2pkg', onAlias2Pkg( repl ), false ] );
	cmds.push( [ 'alias2related', onAlias2Related( repl, cmds ), false ] );
	cmds.push( [ 'ans', onAns( repl ), true ] );
	cmds.push( [ 'assignfrom', onAssignfrom( repl ), false ] );
	cmds.push( [ 'assignin', onAssignin( repl ), false ] );
	cmds.push( [ 'citation', onCitation( repl ), false ] );
	cmds.push( [ 'clear', onClear( repl ), false ] );
	cmds.push( [ 'clearHistory', onClearHistory( repl ), false ] );
	cmds.push( [ 'clearUserDocs', onClearUserDocs( repl ), false ] );
	cmds.push( [ 'clearVars', onClearVars( repl ), false ] );
	cmds.push( [ 'clearWorkspace', onClearWorkspace( repl ), false ] );
	cmds.push( [ 'contributors', onContributors( repl ), false ] );
	cmds.push( [ 'copyright', onCopyright( repl ), false ] );
	cmds.push( [ 'credits', onCredits( repl ), false ] );
	cmds.push( [ 'currentWorkspace', onCurrentWorkspace( repl ), true ] );
	cmds.push( [ 'deleteTheme', onDeleteTheme( repl ), false ] );
	cmds.push( [ 'deleteWorkspace', onDeleteWorkspace( repl ), false ] );
	cmds.push( [ 'deeprerequire', onDeeprerequire( repl ), false ] );
	cmds.push( [ 'donate', onDonate( repl ), false ] );
	cmds.push( [ 'evalin', onEvalin( repl, cmds ), false ] );
	cmds.push( [ 'example', onExample( repl, cmds ), false ] );
	cmds.push( [ 'getTheme', onGetTheme( repl ), false ] );
	cmds.push( [ 'help', onHelp( repl, cmds ), false ] );
	cmds.push( [ 'info', onInfo( repl, cmds ), false ] );
	cmds.push( [ 'isKeyword', isKeyword( repl ), false ] );
	cmds.push( [ 'isWorkspace', isWorkspace( repl ), false ] );
	cmds.push( [ 'keybindings', onKeybindings( repl ), false ] );
	cmds.push( [ 'license', onLicense( repl ), false ] );
	cmds.push( [ 'load', onLoad( repl ), false ] );
	cmds.push( [ 'loadWorkspace', onLoadWorkspace( repl ), false ] );
	cmds.push( [ 'pager', onPager( repl ), false ] );
	cmds.push( [ 'presentationStart', onPresentationStart( repl ), false ] );
	cmds.push( [ 'presentationStop', onPresentationStop( repl ), false ] );
	cmds.push( [ 'quit', onQuit( repl ), false ] );
	cmds.push( [ 'renameTheme', onRenameTheme( repl ), false ] );
	cmds.push( [ 'renameWorkspace', onRenameWorkspace( repl ), false ] );
	cmds.push( [ 'rerequire', onRerequire( repl ), false ] );
	cmds.push( [ 'rerun', onRerun( repl ), false ] );
	cmds.push( [ 'reset', onReset( repl ), false ] );
	cmds.push( [ 'setKeybinding', onSetKeybinding( repl ), false ] );
	cmds.push( [ 'settings', onSettings( repl ), false ] );
	cmds.push( [ 'themes', onThemes( repl ), false ] );
	cmds.push( [ 'tutorial', onTutorial( repl ), false ] );
	cmds.push( [ 'userDoc', onUserDoc( repl ), false ] );
	cmds.push( [ 'vars', onVars( repl ), false ] );
	cmds.push( [ 'varsWorkspace', onVarsWorkspace( repl ), false ] );
	cmds.push( [ 'workspace', onWorkspace( repl ), false ] );
	cmds.push( [ 'workspaces', onWorkspaces( repl ), false ] );

	return cmds;
}
Returns a list of REPL-specific commands.

## Notes

-   Each array element is comprised as follows:

    ```text
    [ <command>, <function>, <is_accessor> ]
    ```

    where the first element is the command alias, the second element the command callback, and the third element a boolean indicating whether the callback is an accessor (getter; i.e., the command refers to a property rather than a function to be explicitly invoked).

@private
@param {REPL} repl - REPL instance
@returns {ArrayArray} commands