Extension:WikiLambda

From Linux Web Expert

MediaWiki extensions manual
WikiLambda
Release status: experimental
Implementation Parser function , ContentHandler
Description Providing Wikimedia wikis with a wikitext parser function to call evaluation of functions written, managed, and evaluated on a central wiki.
Author(s) Wikimedia Foundation
Compatibility policy Snapshots releases along with MediaWiki. Master is not backward compatible.
MediaWiki >= 1.42
Database changes Yes
License MIT License
Download
  • $wgWikiLambdaObjectCache
  • $wgWikiLambdaEnableParserFunction
  • $wgWikiLambdaOrchestratorLocation
  • wikilambda-connect-implementation
  • wikilambda-connect-tester
  • wikilambda-create
  • wikilambda-create-boolean
  • wikilambda-create-function
  • wikilambda-create-implementation
  • wikilambda-create-language
  • wikilambda-create-predefined
  • wikilambda-create-programming
  • wikilambda-create-tester
  • wikilambda-create-type
  • wikilambda-create-unit
  • wikilambda-disconnect-implementation
  • wikilambda-disconnect-tester
  • wikilambda-edit
  • wikilambda-edit-argument-label
  • wikilambda-edit-attached-implementation
  • wikilambda-edit-attached-tester
  • wikilambda-edit-boolean
  • wikilambda-edit-builtin-function
  • wikilambda-edit-error-key-label
  • wikilambda-edit-implementation
  • wikilambda-edit-key-label
  • wikilambda-edit-language
  • wikilambda-edit-object-alias
  • wikilambda-edit-object-description
  • wikilambda-edit-object-label
  • wikilambda-edit-object-type
  • wikilambda-edit-predefined
  • wikilambda-edit-programming
  • wikilambda-edit-running-function
  • wikilambda-edit-running-function-definition
  • wikilambda-edit-tester
  • wikilambda-edit-type
  • wikilambda-edit-unit
  • wikilambda-edit-user-function
  • wikilambda-execute
  • wikilambda-execute-unsaved-code
  • wikifunctions-run
Quarterly downloads Lua error in Module:Extension at line 172: bad argument #1 to 'inNamespace' (unrecognized namespace name 'skin').
Public wikis using Lua error in Module:Extension at line 172: bad argument #1 to 'inNamespace' (unrecognized namespace name 'skin').
Translate the WikiLambda extension if it is available at translatewiki.net
Issues Open tasks · Report a bug

The WikiLambda extension provides for a wiki to host functions written, managed, and evaluated by users, which is used to power wikifunctions.org. It forms the core of the "Wikifunctions" software stack, as part of the work towards Abstract Wikipedia. The system is currently in active development, with the front-end written in Vue.js and using the new Codex interface library. Wikifunctions via WikiLambda will later provide Wikimedia wikis with a wikitext parser function to make evaluations from Wikifunctions on their local wiki.

Introduction

File:Wikifunctions - Top-level architectural model.svg
The current working top-level architectural model for how Wikifunctions will work

Wikifunctions is a MediaWiki installation on which function content, but not output, is stored. This content takes the form of programmatic descriptions of each available function ("Functions"), actual user-written code for these functions ("Implementations"), test suites for these functions ("Testers"), and human-facing documentation about these functions, alongside the usual wiki community management content like village pumps, discussion areas, and policy pages.

Requests for function calls can come in directly via a Web request, or via MediaWiki (probably through a parser function like {{#wikifunction:…}}, but this is not yet decided). The function orchestrator determines the specifics of the request, checks the cache to see if the output value has been recently provided, and either returns that or proceeds to trigger an evaluation. To do that, it fetches all relevant content from the cluster, be that published function content (or mid-edit as-yet-unpublished function content being "previewed") from Wikifunctions, or structured content on which functions can operate from Wikidata and Wikimedia Commons. The complete bundle of code to execute and inputs on which to execute are then passed to the appropriate function executor, which then securely tries to execute the input and returns the output (or a failure error). The orchestrator then writes the successful result to the cache and transmits it to the consumer.

The WikiLambda extension is responsible for content management of the content on the Wikifunctions wiki (like the Wikibase Repository extension), providing editing interfaces, restricting users from or warning about certain actions, and providing a reading and test execution interface, and the integration of content requests on all Wikimedia wikis (like the Wikibase Client extension). User-written code is never executed in the context of the production environment, and thus never has access to sensitive content, but is only run in isolated, disposable instances.

Getting started

Install

  • <translate> [[<tvar name=2>Special:ExtensionDistributor/WikiLambda</tvar>|Download]] and move the extracted <tvar name=name>WikiLambda</tvar> folder to your <tvar name=ext>extensions/</tvar> directory.</translate>
    <translate> Developers and code contributors should install the extension [[<tvar name=git>Special:MyLanguage/Download from Git</tvar>|from Git]] instead, using:</translate>cd extensions/
    git clone --recurse-submodules https://gerrit.wikimedia.org/r/mediawiki/extensions/WikiLambda
  • <translate> Only when installing from Git, run <tvar name=composer>Composer</tvar> to install PHP dependencies, by issuing <tvar name=code>composer install --no-dev</tvar> in the extension directory.</translate> <translate> (See <tvar name=phab><translate> task <tvar name=1>T173141</tvar></translate></tvar> for potential complications.)</translate>
  • <translate> Add the following code at the bottom of your <tvar name=1>LocalSettings.php </tvar> file:</translate>
    wfLoadExtension( 'WikiLambda' );
    
  • <translate> Run the [[<tvar name=update>Special:MyLanguage/Manual:Update.php</tvar>|update script]] which will automatically create the necessary database tables that this extension needs.</translate>
  • File:OOjs UI icon check-constructive.svg <translate> Done</translate> – <translate> Navigate to <tvar name=special>Special:Version</tvar> on your wiki to verify that the extension is successfully installed.</translate>

Installing the back-end services

If you wish you install the back-end services to use the WikiLambda software, you must do so and configure them. Instructions are subject to change, and so only provided within the repo.

Testing locally

(TODO)

Code stewardship

  • <translate> Maintained by <tvar name=1>Abstract Wikipedia team</tvar>.</translate>
  • <translate> Live chat ([[<tvar name=1>Special:MyLanguage/MediaWiki on IRC</tvar>|IRC]]): <tvar name=2><span class="plainlinks" style="font-family: monospace,Courier; white-space: pre-wrap !important; word-wrap: break-word; max-width: 1200px; overflow: auto;" title="<translate nowrap> <tvar name=1>#wikipedia-abstract-tech</tvar> on Libera.Chat IRC</translate>">#wikipedia-abstract-tech <translate> connect</translate></tvar></translate>
  • <translate> Issue tracker: [<tvar name=url>https://phabricator.wikimedia.org/tag/wikilambda/</tvar> Phabricator <tvar name=phab>wikilambda</tvar>] ([<tvar name=url2>https://phabricator.wikimedia.org/maniphest/task/edit/form/1/?projects=wikilambda</tvar> Report an issue])</translate>

See also

Subpages