πŸ“• Node [[wikilinks everywhere]] pulled by the Agora

Developed by [[@evan]] Boehs, [[unlicense]]d, powered by [[flancia]]

Wikilinks everywhere is a chrome extension that brings [[wikilinks]], and through it the [[internet]], to life. It can be installed on a large number of browsers and services, and will intelligently determine where [[broken]] wikilinks should go to based on your settings.

Sources

You can order or disable any of these sources at will. When a wikilink (regardless of if it is properly linked already) is detected the extension will go through these sources in that order you provided. The default order is explained below.

Options

Global

  • Error codes:
    • Comma separated HTTP status codes
    • Supports nxx
    • Default: 4xx, 5xx

Source specific

  • Ignore errors
    • Checkbox
    • Should error cases be ignored?
    • Default: Unchecked

Actual sources

Note: The last source is the catchall, no matter what it will ignore errors and faithfully complete the link. This means do nothing has importance. Don’t remove or reorder

Existing

If a existing link is already present do nothing

Note: the only difference between the existing source and others is it changes nothing in the browser. By default, if the existing link resolves to global.error, it will move on to the sources below and consider replacing it with them

Note: this might have made no sense. Don’t mess with it, probably, it exists for a reason

Prefix

Things like WP:link for wikipedia, or AG:link for [[anagora]], the schema looks like PREFIX:page.

Options

  • Prefixes
    • A table of prefixes and the corresponding url
      • use {page} to have the provided back link, so with the WP prefix the url would be wikipedia.org/wiki/{page}/
      • DON’T INCLUDE THE : IN THE PREFIX

[[IWLEP]]

The user’s [[IWLEP]] rules. See the IWLEP page for that config, but it is it looks a lot like your config, instead made by the author of the backlink. Don’t worry, it can’t be faked *unless the user gets hacked but lots worse things could happen.

Unprefixed

Iterates through all the listed urls in your order until one does not error, or all error.

{page} is the value between the brackets

Options

Nothing

What does it say on the tin?

Concerns

Bandwidth

We use an extraordinarily large amount of bandwidth, and there is not much that we can do. That being said, the whole web is obese so I highly doubt we end up using more than 0.2 of the bandwidth of a standard blog (1Kb a page so 15kb a wikilink so ~150kb a page). Below is what we tried

βœ”οΈ Request methods

There is no STATUS request so we had to make due with HEAD. This will only fetch the part of the website that has the page name and useful information. It does not get the page contents, saving bucket loads of bandwidth.

πŸ‘·β€β™€οΈ Local catch

Once implemented we will store the last 1000 pages we checked, so if a wikilink is frequencintly used it will only be loaded once

❌ Catch server

This means storing the status code of every website we checked. I don’t really like the idea of storing personal information like that.

Ratelimits

By

Browsers

  • Powercord πŸ”Œ (Discord) Plugin
  • Chrome
  • FireFox πŸ”₯🦊

[[2021-04-14]]

The plan is to get in at least two pomodoros in this to advance it somehow in the direction of a prototype. Will try to build on [[agora ext]].

Wikilinks everywhere

[[wikilinks]]

See also:

By: [[samuel klein]], [[dan whaley]], [[flancian]], your_name_here

Project description

Wikilinks everywhere: a web extension/library/bookmarklet that eagerly or lazily resolves [[wikilinks]] in any web property within a user-chosen context, e.g. an Agora or other distributed knowledge graph.

While using the web, users often need to interact with or refer to their personal knowledge databases (PKB). This means taking notes (about web content or otherwise), and then referring and linking to them (as they can be resolved in their PKB). This process is needlessly cumbersome; users often know precisely which PKB entries they would like to refer to, and can remember their titles, but have no interactive, real time way to insert or resolve these links. Currently they need to go through a multi-step process to fetch them (open database; search for them; select them; get a canonical URL if available; copy/paste it and any relevant information), or they’ll flag the term and remember to revisit it later. Instead, a user could type [[wikilink]], with wikilink standing for the title of the note in question, and depend on a web extension to resolve the note reference to canonical URL either eagerly (at the time of writing) or lazily (at read-time).

Use cases

  • As a writer, I know that a KB entry exists, but don’t have immediate access to it. So, when I am typing I’ll create a stub pointer to a KB entity by typing "[[entity]]". At some point later, those links will be resolved by an asynchronous process.
  • As a writer, I want immediate access to my KB graph, or other public graphs I’m connected to, wherever I am so that as I’m taking notes around the web I can add wikilinks in real time through the wikilink convention "[[entity]]". Real-time KB linking should work w/ type-ahead so that as I’m typing, suggestions of entities that satisfy the characters I’ve typed (from whichever KB) are presented instantaneously, and I can click to confirm.
  • Unresolved [[wikilinks]] as produced by users through the above use case could be resolved socially; that is, the resolution need not be scoped necessarily to a particular personal knowledge graph, but rather to a set of them. This opens up a second use case: that in which a reader of an unresolved [[wiklink]] created by a third party can choose to resolve the wikilink in a user-specified content; by default, their own knowledge base or user chosen set of knowledge bases (Agora).
    • Note that, if the above use cases prove popular/valuable, unresolved [[wikilinks]] may proliferate within certain social circles and drive adoption of the system.

Applications

  • Ex: resolving wikilinks on hypothes.is notes. [default InstantLinks]
  • Ex: resolving wikilinks in Twitter, Facebook, Google Docs/Etherpad — anywhere there is user generated content that happens to make use of them.
  • Make this work with [[w:Wikis]], [[d:Wikidata]], [[f:Files]], and {{t:Templates}}
    • Then make subst: work [like _flattening_ for go-links]
  • Make a default resolution pathway for each source, & a default meta-resolution $path (where to look for the pathway config)
    • $path can include localfile, agora:config, metawiki:config, ul:r …
  • could say: whenever you force flattening of a link [in agora] you could explicitly note this as an addition

Resolution flow

  • The extension should maintain a list of ‘wikilink providers’, that is, sites that are known to offer wikilink resolution as a service.
  • The user can configure resolution priority for providers.
  • The extension may default to resolving wikilinks to the top priority provider in every case, although it may also choose to do background presence checks to link wikilinks at the top priority provider that already hosts a valid node in the wikilink in question.

[[foo]] -> $base_url/foo

Plan

Side projects

  • Chat
    • Zulip streams could map to Agora nodes
    • Related because it’s another type of wikilink integration adapted to a particular website
    • Make use of the magic-hat node-resolution that’s trustworthy.
  • Twitter