- lib
- swish
- messages.pl
 - paths.pl -- Setup SWISH search paths
 - config.pl -- Make HTTP locations known to JSON code
 - page.pl -- Provide the SWISH application as Prolog HTML component
 - help.pl -- SWISH help system
 - search.pl -- SWISH search from the navigation bar
 - chat.pl -- The SWISH collaboration backbone
 - storage.pl -- Store files on behalve of web clients
 - gitty.pl -- Single-file GIT like version system
 - gitty_driver_bdb.pl -- Gitty BDB driver
 - gitty_driver_files.pl -- Gitty plain files driver
 - patch.pl -- Run patch program
 - authenticate.pl -- Authentication access for SWISH
 - pep.pl -- SWISH PEP (Policy Enforcement Point)
 - avatar.pl -- Avatar management
 - noble_avatar.pl -- Noble Avatar generator
 - chatstore.pl -- Store chat messages
 - content_filter.pl -- Ban list content filter
 - include.pl -- Support :- include(File) from SWISH
 - swish_csv.pl -- Support CSV output from a Pengines server
 - examples.pl -- Serve example files
 - md_eval.pl -- Provide evaluable markdown
 - profiles.pl
 - highlight.pl -- Highlight token server
 - markdown.pl -- SWISH Notebook markdown support
 - render.pl -- SWISH term-rendering support
 - template_hint.pl -- Generate template hints for CondeMirror
 - trace.pl --
 - projection.pl -- Define the projection
 - jquery.pl -- Call jQuery on the SWISH interface
 - dashboard.pl -- Provide non-programmer query execution
 - bootstrap.pl -- Bootstrap form generator
 - form.pl -- Form handling utilities
 - cp_authenticate.pl -- SWISH login management
 - logging.pl -- Add SWISH query execution to the HTTP log file
 
 
 - swish
 
- ws_authorized(+Action, +WSUser) is semidet
 - True when WSUser is allowed to perform action. WSUser is a dict
containing the user info as provided by chat_add_user_id/3. It
notably has a key 
profile_idif the user is logged on.- To be done
 - - Generalise. Notably, how do we get the identity as authenticate/2 returns?