mirror of
https://github.com/urbit/shrub.git
synced 2024-12-15 04:22:48 +03:00
267 lines
15 KiB
Plaintext
267 lines
15 KiB
Plaintext
::
|
|
:::: /hoon/talk/sur
|
|
!:
|
|
|%
|
|
::
|
|
::TODO use different words for different kinds of burdens
|
|
::
|
|
::> ||
|
|
::> || %wrappers
|
|
::> ||
|
|
::> wrapper molds, for semantic clarity.
|
|
::+|
|
|
::
|
|
::TODO rename
|
|
++ naem term ::< circle name
|
|
++ nick cord ::< local nickname
|
|
::
|
|
::> ||
|
|
::> || %query-models
|
|
::> ||
|
|
::> models relating to queries, their results and updates.
|
|
::+|
|
|
::
|
|
++ query ::> query paths
|
|
$% {$reader $~} ::< shared ui state
|
|
{$burden who/ship} ::< duties to share
|
|
{$report $~} ::< duty reports
|
|
{$circle nom/naem ran/range} ::< story query
|
|
::{$circle nom/naem wat/circle-data} ::< story query
|
|
:: okay, the problem here is that we want to have
|
|
:: separate subscriptions for the different kinds
|
|
:: of story data. we can do that, but then if we
|
|
:: want all data and a specific range for the
|
|
:: messages (very common) then we need to do
|
|
:: three separate subscriptions.
|
|
:: possible solution would be adding range to all
|
|
:: story queries, but that feels weird irt
|
|
:: presence and configs.
|
|
:: (also, that would make for poor query design:
|
|
:: having a ~ halfway through is ugly.)
|
|
::
|
|
:: /circle/name/range
|
|
:: /circle/name/all
|
|
:: /circle/name/grams/range
|
|
:: /circle/name/crowd/local
|
|
:: /circle/name/grams&crowd/range/local
|
|
:: /circle/name/grams
|
|
:: /circle/name/crowd
|
|
::
|
|
::TODO look at graphql and think about doing
|
|
:: multiple queries in a single %peer.
|
|
== ::
|
|
::++ circle-data ::> queried data
|
|
:: $% {$all $~} ::< everything, always
|
|
:: {$grams ran/range} ::< messages (in range)
|
|
:: {$crowd wer/where} ::< presence
|
|
:: {$lobby wer/where} ::< configurations
|
|
:: == ::
|
|
++ range ::> inclusive msg range
|
|
%- unit ::< ~ means everything
|
|
$: hed/place ::< start of range
|
|
tal/(unit place) ::< opt end of range
|
|
== ::
|
|
++ place ::> range indicators
|
|
$% {$da @da} ::< date
|
|
{$ud @ud} ::< message number
|
|
== ::
|
|
::TODO overlaps with agent's ++where
|
|
::++ where ::> data from
|
|
:: %- unit ::< ~ means everywhere
|
|
:: ?($local $remote) ::< local or remote only
|
|
++ prize ::> query result
|
|
$% {$reader prize-reader} ::< /reader
|
|
{$friend cis/(set circle)} ::< /friend
|
|
{$burden sos/(map naem burden)} ::< /burden
|
|
::TODO do we ever use remote things from remote circles?
|
|
{$circle package} ::< /circle
|
|
== ::
|
|
++ prize-reader ::
|
|
$: gys/(jug char audience) ::< glyph bindings
|
|
nis/(map ship nick) ::< local nicknames
|
|
== ::
|
|
++ rumor ::< query result change
|
|
$% {$reader rum/rumor-reader} ::< /reader
|
|
{$friend add/? cir/circle} ::< /friend
|
|
{$burden nom/naem rum/rumor-story} ::< /burden
|
|
{$circle rum/rumor-story} ::< /circle
|
|
== ::
|
|
++ rumor-reader ::< changed ui state
|
|
$% {$glyph diff-glyph} ::< un/bound glyph
|
|
{$nick diff-nick} ::< changed nickname
|
|
== ::
|
|
++ burden ::< full story state
|
|
$: gaz/(list telegram) ::< all messages
|
|
cos/lobby ::< loc & rem configs
|
|
pes/crowd ::< loc & rem presences
|
|
== ::
|
|
++ package ::< story state
|
|
$: nes/(list envelope) ::< messages
|
|
cos/lobby ::< loc & rem configs
|
|
pes/crowd ::< loc & rem presences
|
|
== ::
|
|
++ diff-glyph {bin/? gyf/char aud/audience} ::< un/bound glyph
|
|
++ diff-nick {who/ship nic/nick} ::< changed nickname
|
|
++ diff-story ::> story change
|
|
$% {$new cof/config} ::< new story
|
|
{$bear bur/burden} ::< new inherited story
|
|
{$config cir/circle dif/diff-config} ::< new/changed config
|
|
{$status cir/circle who/ship dif/diff-status} ::< new/changed status
|
|
{$remove $~} ::< removed story
|
|
== ::
|
|
++ rumor-story ::> story rumor
|
|
$? diff-story ::< both in & outward
|
|
$% {$gram nev/envelope} ::< new/changed msgs
|
|
== == ::
|
|
++ diff-config ::> config change
|
|
::TODO maybe just full? think.
|
|
$% {$full cof/config} ::< set w/o side-effects
|
|
{$source add/? src/source} ::< add/rem sources
|
|
{$caption cap/cord} ::< changed description
|
|
{$filter fit/filter} ::< changed filter
|
|
{$secure sec/security} ::< changed security
|
|
{$permit add/? sis/(set ship)} ::< add/rem to b/w-list
|
|
{$remove $~} ::< removed config
|
|
== ::
|
|
++ diff-status ::> status change
|
|
$% {$full sat/status} ::< fully changed status
|
|
{$presence pec/presence} ::< changed presence
|
|
{$human dif/diff-human} ::< changed name
|
|
{$remove $~} ::< removed config
|
|
== ::
|
|
++ diff-human ::> name change
|
|
$% {$full man/human} ::< fully changed name
|
|
{$handle han/(unit cord)} ::< changed handle
|
|
{$true tru/(unit truename)} ::< changed true name
|
|
== ::
|
|
::
|
|
::> ||
|
|
::> || %reader-communication
|
|
::> ||
|
|
::> broker interfaces for readers.
|
|
::+|
|
|
::
|
|
++ action ::> user action
|
|
$% :: circle configuration ::
|
|
{$create nom/naem des/cord sec/security} ::< create circle
|
|
{$delete nom/naem why/(unit cord)} ::< delete + announce
|
|
{$depict nom/naem des/cord} ::< change description
|
|
{$filter nom/naem fit/filter} ::< change message rules
|
|
{$permit nom/naem inv/? sis/(set ship)} ::< invite/banish
|
|
{$source nom/naem sub/? srs/(set source)} ::< un/sub to/from src
|
|
:: messaging ::
|
|
{$convey tos/(list thought)} ::< post exact
|
|
{$phrase aud/audience ses/(list speech)} ::< post easy
|
|
:: personal metadata ::
|
|
{$notify aud/audience pes/presence} ::< our presence update
|
|
{$naming aud/audience man/human} ::< our name update
|
|
:: changing shared ui ::
|
|
{$glyph gyf/char aud/audience bin/?} ::< un/bind a glyph
|
|
{$nick who/ship nic/nick} ::< new identity
|
|
== ::
|
|
::
|
|
::> ||
|
|
::> || %broker-communication
|
|
::> ||
|
|
::> structures for communicating between brokers.
|
|
::+|
|
|
::
|
|
++ command ::> effect on story
|
|
$% {$publish tos/(list thought)} ::< deliver
|
|
{$present nos/(set naem) dif/diff-status} ::< status update
|
|
{$bearing $~} ::< prompt to listen
|
|
== ::
|
|
::
|
|
::> ||
|
|
::> || %circles
|
|
::> ||
|
|
::> messaging targets and their metadata.
|
|
::+|
|
|
::
|
|
++ circle {hos/ship nom/naem} ::< native target
|
|
:: circle configurations. ::
|
|
++ lobby {loc/config rem/(map circle config)} ::< our & srcs configs
|
|
++ config ::> circle config
|
|
$: src/(set source) ::< active sources
|
|
cap/cord ::< description
|
|
fit/filter ::< message rules
|
|
con/control ::< restrictions
|
|
== ::
|
|
++ source {cir/circle ran/range} ::< subscription target
|
|
++ filter ::> content filters
|
|
$: cas/? ::< dis/allow capitals
|
|
utf/? ::< dis/allow non-ascii
|
|
::TODO maybe message length
|
|
== ::
|
|
++ control {sec/security ses/(set ship)} ::< access control
|
|
++ security ::> security mode
|
|
$? $black ::< channel, blacklist
|
|
$white ::< village, whitelist
|
|
$green ::< journal, author list
|
|
$brown ::< mailbox, our r, bl w
|
|
== ::
|
|
:: participant metadata. ::
|
|
::TODO think about naming more
|
|
++ crowd {loc/group rem/(map circle group)} ::< our & srcs presences
|
|
++ group (map ship status) ::< presence map
|
|
++ status {pec/presence man/human} ::< participant
|
|
++ presence ::> status type
|
|
$? $gone ::< absent
|
|
$idle ::< idle
|
|
$hear ::< present
|
|
$talk ::< typing
|
|
== ::
|
|
++ human ::> human identifier
|
|
$: han/(unit cord) ::< handle
|
|
tru/(unit truename) ::< true name
|
|
== ::
|
|
++ truename {fir/cord mid/(unit cord) las/cord} ::< real-life name
|
|
::
|
|
::> ||
|
|
::> || %message-data
|
|
::> ||
|
|
::> structures for containing main message data.
|
|
::+|
|
|
::
|
|
::TODO some structure for extra message state
|
|
:: local (to readers): delivery state, read flags
|
|
:: remote (to halls): sequence nr
|
|
++ envelope {num/@ud gam/telegram} ::< outward message
|
|
++ telegram {aut/ship thought} ::< whose message
|
|
++ thought ::> inner message
|
|
$: uid/serial ::< unique identifier
|
|
aud/audience ::< destinations
|
|
wen/@da ::< timestamp
|
|
sep/speech ::< content
|
|
== ::
|
|
++ speech ::> content body
|
|
$% {$lin pat/? msg/cord} ::< no/@ text line
|
|
{$url url/purf:eyre} ::< parsed url
|
|
{$exp exp/cord res/(list tank)} ::< hoon line
|
|
{$ire top/serial sep/speech} ::< in reply to
|
|
{$fat tac/attache sep/speech} ::< attachment
|
|
{$inv inv/? cir/circle} ::< inv/ban for circle
|
|
{$app app/term msg/cord} ::< app message
|
|
== ::
|
|
++ attache ::> attachment
|
|
$% {$name nom/cord tac/attache} ::< named attachment
|
|
{$text (list cord)} ::< text lines
|
|
{$tank (list tank)} ::< tank list
|
|
== ::
|
|
::
|
|
::> ||
|
|
::> || %message-metadata
|
|
::> ||
|
|
:: structures for containing message metadata.
|
|
::+|
|
|
::
|
|
++ serial @uvH ::< unique identifier
|
|
++ audience (set circle) ::< destinations
|
|
++ tracking (map circle delivery) ::> delivery per target
|
|
++ delivery ::> delivery state
|
|
$? $pending ::< undelivered
|
|
$accepted ::< received
|
|
$rejected ::< denied
|
|
== ::
|
|
--
|