mirror of
https://github.com/ilyakooo0/urbit.git
synced 2024-12-25 16:05:27 +03:00
Merge remote-tracking branch 'origin/master' into philip/snap
This commit is contained in:
commit
ed3b028d9a
46
pkg/arvo/gen/ames-flows.hoon
Normal file
46
pkg/arvo/gen/ames-flows.hoon
Normal file
@ -0,0 +1,46 @@
|
||||
:: print [len] %ames flows, sorted by number-per-ship
|
||||
::
|
||||
:- %say
|
||||
|= [[now=@da eny=@uvJ bec=beak] arg=$@(~ [len=@ ~]) ~]
|
||||
:- %noun
|
||||
::
|
||||
=; flows
|
||||
^- (list [=ship open=[out-open=@ out-closing=@ in=@ nax=@] corked=@])
|
||||
=/ len ?^(arg len.arg 50)
|
||||
(scag len (sort flows |=([[@ [a=@ud *] *] @ [b=@ud *] *] (gth a b))))
|
||||
::
|
||||
=/ peers-map
|
||||
.^ (map ship ?(%alien %known))
|
||||
%ax /(scot %p p.bec)//(scot %da now)/peers
|
||||
==
|
||||
=/ peers=(list ship)
|
||||
%+ murn ~(tap by peers-map)
|
||||
|= [=ship val=?(%alien %known)]
|
||||
?: =(ship p.bec)
|
||||
~ :: this is weird, but we saw it
|
||||
?- val
|
||||
%alien ~
|
||||
%known (some ship)
|
||||
==
|
||||
::
|
||||
^- (list [=ship open=[out-open=@ out-closing=@ in=@ nax=@] corked=@])
|
||||
%+ turn peers
|
||||
|= =ship
|
||||
=+ .^ =ship-state:ames
|
||||
%ax /(scot %p p.bec)//(scot %da now)/peers/(scot %p ship)
|
||||
==
|
||||
=/ =peer-state:ames ?>(?=(%known -.ship-state) +.ship-state)
|
||||
=/ corked ~(wyt in corked.peer-state)
|
||||
=- [ship - corked]
|
||||
::
|
||||
=+ %+ roll ~(tap in ~(key by snd.peer-state))
|
||||
|= [b=bone [out=(list bone) in=(list bone) nax=(list bone)]]
|
||||
=/ m (mod b 4)
|
||||
?+ m ~|([%odd-bone b] !!)
|
||||
%0 [[b out] in nax]
|
||||
%1 [out [b in] nax]
|
||||
%3 [out in [b nax]]
|
||||
==
|
||||
=/ [out-closing=(list bone) out-open=(list bone)]
|
||||
(skid out ~(has ^in closing.peer-state))
|
||||
[(lent out-open) (lent out-closing) (lent in) (lent nax)]
|
20
pkg/arvo/gen/ames-timers.hoon
Normal file
20
pkg/arvo/gen/ames-timers.hoon
Normal file
@ -0,0 +1,20 @@
|
||||
:: print [len] %ames message-pump timers, sorted by number-per-ship
|
||||
::
|
||||
:- %say
|
||||
|= [[now=@da eny=@uvJ bec=beak] arg=$@(~ [len=@ ~]) ~]
|
||||
:- %noun
|
||||
::
|
||||
=; who
|
||||
^- (list [@ta @ud])
|
||||
=/ len ?^(arg len.arg 50)
|
||||
(scag len (sort ~(tap by who) |=([[@ a=@ud] @ b=@ud] (gth a b))))
|
||||
::
|
||||
=| who=(map @ta @ud)
|
||||
=/ tim .^((list (pair @da duct)) bx+/(scot %p p.bec)//(scot %da now)/debug/timers)
|
||||
|- ^+ who
|
||||
?~ tim who
|
||||
?. &(?=(^ q.i.tim) ?=([%ames %pump ^] i.q.i.tim))
|
||||
$(tim t.tim)
|
||||
=* her i.t.t.i.q.i.tim
|
||||
=/ i (~(gut by who) her 0)
|
||||
$(tim t.tim, who (~(put by who) her +(i)))
|
10
pkg/arvo/gen/gall-nonces.hoon
Normal file
10
pkg/arvo/gen/gall-nonces.hoon
Normal file
@ -0,0 +1,10 @@
|
||||
:: +gall-nonces: print %gall agent subscription nonces, highest-last
|
||||
::
|
||||
:- %say
|
||||
|= [[now=@da eny=@uvJ bec=beak] ~ ~]
|
||||
:- %noun
|
||||
^- (list [dude:gall @ud])
|
||||
%+ sort
|
||||
%~ tap by
|
||||
.^((map dude:gall @ud) %gf /(scot %p p.bec)//(scot %da now))
|
||||
|=([[* a=@ud] [* b=@ud]] (lth a b))
|
8
pkg/arvo/gen/hood/doff.hoon
Normal file
8
pkg/arvo/gen/hood/doff.hoon
Normal file
@ -0,0 +1,8 @@
|
||||
:- %say
|
||||
|= $: [now=@da eny=@uvJ bec=beak]
|
||||
~
|
||||
[dude=_`dude:gall`%$ ship=_`@p`(bex 128)]
|
||||
==
|
||||
=/ darg=(unit dude:gall) ?:(=(%$ dude) ~ `dude)
|
||||
=/ sarg=(unit ^ship) ?:(=((bex 128) ship) ~ `ship)
|
||||
[%helm-doff darg sarg]
|
8
pkg/arvo/gen/hood/gall-sift.hoon
Normal file
8
pkg/arvo/gen/hood/gall-sift.hoon
Normal file
@ -0,0 +1,8 @@
|
||||
:: Helm: Set Gall Verbosity by Agent
|
||||
::
|
||||
/? 310
|
||||
::
|
||||
:- %say
|
||||
|= [^ dudes=(list dude:gall) ~]
|
||||
:- %helm-gall-sift
|
||||
dudes
|
11
pkg/arvo/gen/hood/gall-verb.hoon
Normal file
11
pkg/arvo/gen/hood/gall-verb.hoon
Normal file
@ -0,0 +1,11 @@
|
||||
:: Helm: Adjust Gall verbosity
|
||||
::
|
||||
:: List of diagnostic flags is in verb:gall in zuse.hoon, documented in
|
||||
:: gall.hoon
|
||||
::
|
||||
/? 310
|
||||
::
|
||||
:- %say
|
||||
|= [^ veb=(list verb:gall) ~]
|
||||
:- %helm-gall-verb
|
||||
veb
|
@ -77,7 +77,8 @@
|
||||
::
|
||||
++ de-gill :: gill from wire
|
||||
|= way=wire ^- gill:gall
|
||||
?>(?=([@ @ ~] way) [(slav %p i.way) i.t.way])
|
||||
~| way
|
||||
?>(?=([@ @ *] way) [(slav %p i.way) i.t.way])
|
||||
--
|
||||
:: TODO: remove .ost
|
||||
::
|
||||
|
@ -230,6 +230,14 @@
|
||||
|= veb=(list verb:ames) =< abet
|
||||
(emit %pass /helm %arvo %a %spew veb)
|
||||
::
|
||||
++ poke-gall-sift
|
||||
|= dudes=(list dude:gall) =< abet
|
||||
(emit %pass /helm %arvo %g %sift dudes)
|
||||
::
|
||||
++ poke-gall-verb
|
||||
|= veb=(list verb:gall) =< abet
|
||||
(emit %pass /helm %arvo %g %spew veb)
|
||||
::
|
||||
++ poke-ames-wake
|
||||
|= ~ =< abet
|
||||
(emit %pass /helm %arvo %a %stir '')
|
||||
@ -252,6 +260,11 @@
|
||||
=< abet
|
||||
(emit %pass /helm/cors/reject %arvo %e %reject-origin origin)
|
||||
::
|
||||
++ poke-doff
|
||||
|= [dude=(unit dude:gall) ship=(unit ship)]
|
||||
=< abet
|
||||
(emit %pass /helm/doff %arvo %g %doff dude ship)
|
||||
::
|
||||
++ poke
|
||||
|= [=mark =vase]
|
||||
?> ?| ?=(%helm-hi mark)
|
||||
@ -269,6 +282,9 @@
|
||||
%helm-code =;(f (f !<(_+<.f vase)) poke-code)
|
||||
%helm-cors-approve =;(f (f !<(_+<.f vase)) poke-cors-approve)
|
||||
%helm-cors-reject =;(f (f !<(_+<.f vase)) poke-cors-reject)
|
||||
%helm-doff =;(f (f !<(_+<.f vase)) poke-doff)
|
||||
%helm-gall-sift =;(f (f !<(_+<.f vase)) poke-gall-sift)
|
||||
%helm-gall-verb =;(f (f !<(_+<.f vase)) poke-gall-verb)
|
||||
%helm-hi =;(f (f !<(_+<.f vase)) poke-hi)
|
||||
%helm-knob =;(f (f !<(_+<.f vase)) poke-knob)
|
||||
%helm-pans =;(f (f !<(_+<.f vase)) poke-pans)
|
||||
|
12
pkg/arvo/mar/aqua/effect.hoon
Normal file
12
pkg/arvo/mar/aqua/effect.hoon
Normal file
@ -0,0 +1,12 @@
|
||||
/- *aquarium
|
||||
|_ af=aqua-effect
|
||||
++ grad %noun
|
||||
++ grow
|
||||
|%
|
||||
++ noun af
|
||||
--
|
||||
++ grab
|
||||
|%
|
||||
++ noun aqua-effect
|
||||
--
|
||||
--
|
@ -351,6 +351,7 @@
|
||||
:: %hear: packet from unix
|
||||
:: %heed: track peer's responsiveness; gives %clog if slow
|
||||
:: %jilt: stop tracking peer's responsiveness
|
||||
:: %cork: request to delete message flow
|
||||
:: %plea: request to send message
|
||||
::
|
||||
:: System and Lifecycle Tasks
|
||||
@ -367,6 +368,7 @@
|
||||
$% [%hear =lane =blob]
|
||||
[%heed =ship]
|
||||
[%jilt =ship]
|
||||
[%cork =ship]
|
||||
$>(%plea vane-task)
|
||||
::
|
||||
$>(%born vane-task)
|
||||
@ -511,6 +513,9 @@
|
||||
:: entry and emit a nack to the local vane that asked us to send
|
||||
:: the message.
|
||||
:: heeds: listeners for %clog notifications
|
||||
:: closing: bones closed on the sender side
|
||||
:: corked: bones closed on both sender and receiver
|
||||
:: krocs: bones that need to be sent again to the publisher
|
||||
::
|
||||
+$ peer-state
|
||||
$: $: =symmetric-key
|
||||
@ -526,6 +531,9 @@
|
||||
rcv=(map bone message-sink-state)
|
||||
nax=(set [=bone =message-num])
|
||||
heeds=(set duct)
|
||||
closing=(set bone)
|
||||
corked=(set bone)
|
||||
krocs=(set bone)
|
||||
==
|
||||
:: $qos: quality of service; how is our connection to a peer doing?
|
||||
::
|
||||
@ -1651,15 +1659,18 @@
|
||||
[%jolt =desk =dude] :: (re)start agent
|
||||
[%idle =dude] :: suspend agent
|
||||
[%nuke =dude] :: delete agent
|
||||
[%doff dude=(unit dude) ship=(unit ship)] :: kill subscriptions
|
||||
[%rake dude=(unit dude) all=?] :: reclaim old subs
|
||||
$>(%init vane-task) :: set owner
|
||||
$>(%trim vane-task) :: trim state
|
||||
$>(%vega vane-task) :: report upgrade
|
||||
$>(%plea vane-task) :: network request
|
||||
[%spew veb=(list verb)] :: set verbosity
|
||||
[%sift dudes=(list dude)] :: per agent
|
||||
== ::
|
||||
+$ bitt (map duct (pair ship path)) :: incoming subs
|
||||
+$ boat :: outgoing subs
|
||||
%+ map [=wire =ship =term] ::
|
||||
[acked=? =path] ::
|
||||
+$ boat (map [=wire =ship =term] [acked=? =path]) :: outgoing subs
|
||||
+$ boar (map [=wire =ship =term] nonce=@) :: and their nonces
|
||||
+$ bowl :: standard app state
|
||||
$: $: our=ship :: host
|
||||
src=ship :: guest
|
||||
@ -1695,6 +1706,9 @@
|
||||
$% [%raw-fact =mark =noun]
|
||||
sign:agent
|
||||
==
|
||||
:: TODO: add more flags?
|
||||
::
|
||||
+$ verb ?(%odd)
|
||||
::
|
||||
:: +agent: app core
|
||||
::
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -2178,7 +2178,7 @@
|
||||
:: XX cancel active too if =(0 trim-priority) ?
|
||||
::
|
||||
?: ?=(%trim -.task)
|
||||
=/ event-args [[eny duct now rof] server-state.ax]
|
||||
=* event-args [[eny duct now rof] server-state.ax]
|
||||
=* by-channel by-channel:(per-server-event event-args)
|
||||
=* channel-state channel-state.server-state.ax
|
||||
::
|
||||
|
@ -4,17 +4,47 @@
|
||||
::
|
||||
::::
|
||||
|= our=ship
|
||||
:: veb: verbosity flags
|
||||
::
|
||||
=/ veb-all-off
|
||||
:: TODO: add more flags?
|
||||
::
|
||||
:* odd=`?`%.n :: unusual events
|
||||
==
|
||||
=, gall
|
||||
=>
|
||||
|%
|
||||
+| %helpers
|
||||
:: +trace: print if .verb is set and we're tracking .dude
|
||||
::
|
||||
++ trace
|
||||
|= [verb=? =dude dudes=(set dude) print=tang]
|
||||
^+ same
|
||||
?. verb
|
||||
same
|
||||
?. => [dude=dude dudes=dudes in=in]
|
||||
~+ |(=(~ dudes) (~(has in dudes) dude))
|
||||
same
|
||||
(slog print)
|
||||
::
|
||||
:: $bug: debug printing configuration
|
||||
::
|
||||
:: veb: verbosity toggles
|
||||
:: dudes: app filter; if ~, print for all
|
||||
::
|
||||
+$ bug
|
||||
$: veb=_veb-all-off
|
||||
dudes=(set dude)
|
||||
==
|
||||
::
|
||||
+| %main
|
||||
::
|
||||
:: $move: Arvo-level move
|
||||
::
|
||||
+$ move [=duct move=(wind note-arvo gift-arvo)]
|
||||
:: $state-8: overall gall state, versioned
|
||||
:: $state-9: overall gall state, versioned
|
||||
::
|
||||
+$ state-8 [%8 state]
|
||||
+$ state-9 [%9 state]
|
||||
:: $state: overall gall state
|
||||
::
|
||||
:: system-duct: TODO document
|
||||
@ -22,6 +52,7 @@
|
||||
:: contacts: other ships we're in communication with
|
||||
:: yokes: running agents
|
||||
:: blocked: moves to agents that haven't been started yet
|
||||
:: bug: debug printing configuration
|
||||
::
|
||||
+$ state
|
||||
$: system-duct=duct
|
||||
@ -29,13 +60,8 @@
|
||||
contacts=(set ship)
|
||||
yokes=(map term yoke)
|
||||
blocked=(map term (qeu blocked-move))
|
||||
=bug
|
||||
==
|
||||
:: $watches: subscribers and publications
|
||||
::
|
||||
:: TODO: rename this, to $ties?
|
||||
:: TODO: rename $boat and $bitt and document
|
||||
::
|
||||
+$ watches [inbound=bitt outbound=boat]
|
||||
:: $routes: new cuff; TODO: document
|
||||
::
|
||||
+$ routes
|
||||
@ -45,19 +71,26 @@
|
||||
:: $yoke: agent runner state
|
||||
::
|
||||
:: control-duct: TODO document
|
||||
:: live: is this agent running? TODO document better
|
||||
:: run-nonce: unique for each rebuild
|
||||
:: sub-nonce: app-wide global %watch nonce
|
||||
:: live: is this agent running? TODO document boarer
|
||||
:: stats: TODO document
|
||||
:: watches: incoming and outgoing subscription state
|
||||
:: bitt: incoming subscriptions
|
||||
:: boat: outgoing subscriptions
|
||||
:: boar: and their nonces
|
||||
:: agent: agent core
|
||||
:: beak: compilation source
|
||||
:: marks: mark conversion requests
|
||||
::
|
||||
+$ yoke
|
||||
$: control-duct=duct
|
||||
nonce=@t
|
||||
live=? ::TODO remove, replaced by -.agent
|
||||
run-nonce=@t
|
||||
sub-nonce=_1
|
||||
live=?
|
||||
=stats
|
||||
=watches
|
||||
=bitt
|
||||
=boat
|
||||
=boar
|
||||
agent=(each agent vase)
|
||||
=beak
|
||||
marks=(map duct mark)
|
||||
@ -108,6 +141,7 @@
|
||||
%poke
|
||||
%leave
|
||||
%missing
|
||||
%cork
|
||||
==
|
||||
:: |migrate: data structures for upgrades
|
||||
::
|
||||
@ -116,21 +150,25 @@
|
||||
:: $spore: structures for update, produced by +stay
|
||||
::
|
||||
+$ spore
|
||||
$: %8
|
||||
$: %9
|
||||
system-duct=duct
|
||||
outstanding=(map [wire duct] (qeu remote-request))
|
||||
contacts=(set ship)
|
||||
eggs=(map term egg)
|
||||
blocked=(map term (qeu blocked-move))
|
||||
=bug
|
||||
==
|
||||
:: $egg: migratory agent state; $yoke with .old-state instead of .agent
|
||||
::
|
||||
+$ egg
|
||||
$: control-duct=duct
|
||||
nonce=@t
|
||||
run-nonce=@t
|
||||
sub-nonce=@
|
||||
live=?
|
||||
=stats
|
||||
=watches
|
||||
=bitt
|
||||
=boat
|
||||
=boar
|
||||
old-state=(each vase vase)
|
||||
=beak
|
||||
marks=(map duct mark)
|
||||
@ -139,6 +177,7 @@
|
||||
:: pupal gall core, on upgrade
|
||||
::
|
||||
=< =* adult-gate .
|
||||
=| spore-tag=@ud
|
||||
=| =spore
|
||||
|= [now=@da eny=@uvJ rof=roof]
|
||||
=* pupal-gate .
|
||||
@ -164,10 +203,12 @@
|
||||
[^duct %pass /whiz/gall %$ %whiz ~]~
|
||||
=/ adult adult-core
|
||||
=. state.adult
|
||||
[%8 system-duct outstanding contacts yokes=~ blocked]:spore
|
||||
=/ mo-core (mo-abed:mo:adult duct)
|
||||
=. mo-core
|
||||
[%9 system-duct outstanding contacts yokes=~ blocked bug]:spore
|
||||
=/ mo-core (mo-abed:mo:adult system-duct.state.adult)
|
||||
=/ apps=(list [dap=term =egg]) ~(tap by eggs.spore)
|
||||
:: upgrade %base apps and suspend others
|
||||
::
|
||||
=. mo-core
|
||||
|- ^+ mo-core
|
||||
?~ apps mo-core
|
||||
?. =(%base q.beak.egg.i.apps)
|
||||
@ -223,9 +264,10 @@
|
||||
::
|
||||
++ load
|
||||
|^ |= old=spore-any
|
||||
=? old ?=(%7 -.old)
|
||||
(spore-7-to-8 old)
|
||||
?> ?=(%8 -.old)
|
||||
=. spore-tag `@ud`-.old
|
||||
=? old ?=(%7 -.old) (spore-7-to-8 old)
|
||||
=? old ?=(%8 -.old) (spore-8-to-9 old)
|
||||
?> ?=(%9 -.old)
|
||||
=. spore old
|
||||
?. =(~ eggs.spore)
|
||||
pupal-gate
|
||||
@ -234,32 +276,78 @@
|
||||
state spore(eggs *(map term yoke))
|
||||
==
|
||||
::
|
||||
+$ spore-any $%(^spore spore-7)
|
||||
+$ spore-any $%(^spore spore-8 spore-7)
|
||||
+$ spore-7
|
||||
$: %7
|
||||
wipe-eyre-subs=_| ::NOTE band-aid for #3196
|
||||
system-duct=duct
|
||||
outstanding=(map [wire duct] (qeu remote-request))
|
||||
contacts=(set ship)
|
||||
eggs=(map term egg)
|
||||
eggs=(map term egg-7)
|
||||
blocked=(map term (qeu blocked-move))
|
||||
==
|
||||
::
|
||||
+$ spore-8
|
||||
$: %8
|
||||
system-duct=duct
|
||||
outstanding=(map [wire duct] (qeu remote-request))
|
||||
contacts=(set ship)
|
||||
eggs=(map term egg-8)
|
||||
blocked=(map term (qeu blocked-move))
|
||||
==
|
||||
::
|
||||
+$ egg-7 egg-8
|
||||
+$ egg-8
|
||||
$: control-duct=duct
|
||||
run-nonce=@t
|
||||
live=?
|
||||
=stats
|
||||
watches=watches-8
|
||||
old-state=(each vase vase)
|
||||
=beak
|
||||
marks=(map duct mark)
|
||||
==
|
||||
::
|
||||
+$ watches-8 [inbound=bitt outbound=boat-8]
|
||||
+$ boat-8 (map [wire ship term] [acked=? =path])
|
||||
::
|
||||
++ spore-7-to-8
|
||||
|= old=spore-7
|
||||
^- ^spore
|
||||
^- spore-8
|
||||
:- %8
|
||||
=. eggs.old
|
||||
%- ~(urn by eggs.old)
|
||||
|= [a=term e=egg]
|
||||
|= [a=term e=egg-7]
|
||||
::NOTE kiln will kick off appropriate app revival
|
||||
e(old-state [%| p.old-state.e])
|
||||
+>.old
|
||||
::
|
||||
++ spore-8-to-9
|
||||
|= old=spore-8
|
||||
^- ^spore
|
||||
=- old(- %9, eggs -, blocked [blocked.old *bug])
|
||||
%- ~(run by eggs.old)
|
||||
|= =egg-8
|
||||
^- egg
|
||||
=/ [=bitt =boat =boar] (watches-8-to-9 watches.egg-8)
|
||||
:* control-duct.egg-8
|
||||
run-nonce.egg-8
|
||||
sub-nonce=1
|
||||
live.egg-8
|
||||
stats.egg-8
|
||||
bitt boat boar
|
||||
[old-state beak marks]:egg-8
|
||||
==
|
||||
::
|
||||
++ watches-8-to-9
|
||||
|= watches-8
|
||||
^- [bitt boat boar]
|
||||
[inbound outbound (~(run by outbound) |=([acked=? =path] nonce=0))]
|
||||
--
|
||||
--
|
||||
:: adult gall vane interface, for type compatibility with pupa
|
||||
::
|
||||
=| state=state-8
|
||||
=| state=state-9
|
||||
|= [now=@da eny=@uvJ rof=roof]
|
||||
=* gall-payload .
|
||||
=< ~% %gall-wrap ..mo ~
|
||||
@ -280,6 +368,12 @@
|
||||
++ mo
|
||||
~% %gall-mo +> ~
|
||||
|_ [hen=duct moves=(list move)]
|
||||
::
|
||||
++ trace
|
||||
|= [verb=? =dude print=tang]
|
||||
^+ same
|
||||
(^trace verb dude dudes.bug.state print)
|
||||
::
|
||||
:: +mo-abed: initialise state with the provided duct
|
||||
:: +mo-abet: finalize, reversing moves
|
||||
:: +mo-pass: prepend a standard %pass to the current list of moves
|
||||
@ -288,8 +382,9 @@
|
||||
++ mo-core .
|
||||
++ mo-abed |=(hun=duct mo-core(hen hun))
|
||||
++ mo-abet [(flop moves) gall-payload]
|
||||
++ mo-pass |=(p=[wire note-arvo] mo-core(moves [[hen pass+p] moves]))
|
||||
++ mo-give |=(g=gift mo-core(moves [[hen give+g] moves]))
|
||||
++ mo-pass |=(p=[wire note-arvo] mo-core(moves [[hen pass+p] moves]))
|
||||
++ mo-slip |=(p=note-arvo mo-core(moves [[hen slip+p] moves]))
|
||||
++ mo-past
|
||||
|= =(list [wire note-arvo])
|
||||
?~ list
|
||||
@ -317,6 +412,30 @@
|
||||
=/ =case [%da now]
|
||||
=/ =wire /sys/cor/[dap]/(scot %p ship)/[desk]/(scot case)
|
||||
(mo-pass wire %c %warp ship desk ~ %sing %a case /app/[dap]/hoon)
|
||||
:: +mo-doff: kill all outgoing subscriptions
|
||||
::
|
||||
++ mo-doff
|
||||
|= [dude=(unit dude) ship=(unit ship)]
|
||||
^+ mo-core
|
||||
=/ apps=(list (pair term yoke))
|
||||
?~ dude ~(tap by yokes.state)
|
||||
(drop (bind (~(get by yokes.state) u.dude) (lead u.dude)))
|
||||
|- ^+ mo-core
|
||||
?~ apps mo-core
|
||||
=/ ap-core (ap-yoke:ap p.i.apps [~ our] q.i.apps)
|
||||
$(apps t.apps, mo-core ap-abet:(ap-doff:ap-core ship))
|
||||
:: +mo-rake: send %cork's for old subscriptions if needed
|
||||
::
|
||||
++ mo-rake
|
||||
|= [dude=(unit dude) all=?]
|
||||
^+ mo-core
|
||||
=/ apps=(list (pair term yoke))
|
||||
?~ dude ~(tap by yokes.state)
|
||||
(drop (bind (~(get by yokes.state) u.dude) (lead u.dude)))
|
||||
|- ^+ mo-core
|
||||
?~ apps mo-core
|
||||
=/ ap-core (ap-yoke:ap p.i.apps [~ our] q.i.apps)
|
||||
$(apps t.apps, mo-core ap-abet:(ap-rake:ap-core all))
|
||||
:: +mo-receive-core: receives an app core built by %ford.
|
||||
::
|
||||
:: Presuming we receive a good core, we first check to see if the agent
|
||||
@ -357,7 +476,7 @@
|
||||
control-duct hen
|
||||
beak bek
|
||||
agent &+agent
|
||||
nonce (scot %uw (end 5 (shas %yoke-nonce eny)))
|
||||
run-nonce (scot %uw (end 5 (shas %yoke-nonce eny)))
|
||||
==
|
||||
::
|
||||
=/ old mo-core
|
||||
@ -457,8 +576,12 @@
|
||||
=. outstanding.state
|
||||
=/ stand
|
||||
(~(gut by outstanding.state) [wire hen] *(qeu remote-request))
|
||||
(~(put by outstanding.state) [wire hen] (~(put to stand) -.deal))
|
||||
(mo-pass wire note-arvo)
|
||||
%+ ~(put by outstanding.state) [wire hen]
|
||||
(~(gas to stand) ?.(?=(%leave -.deal) ~[-.deal] ~[%leave %cork]))
|
||||
=. mo-core (mo-pass wire note-arvo)
|
||||
?. ?=(%leave -.deal)
|
||||
mo-core
|
||||
(mo-pass wire [%a [%cork ship]])
|
||||
:: +mo-track-ship: subscribe to ames and jael for notices about .ship
|
||||
::
|
||||
++ mo-track-ship
|
||||
@ -680,7 +803,12 @@
|
||||
(~(put to *(qeu remote-request)) %missing)
|
||||
~| [full-wire=full-wire hen=hen stand=stand]
|
||||
=^ rr stand ~(get to stand)
|
||||
[rr (~(put by outstanding.state) [full-wire hen] stand)]
|
||||
~? &(=(rr %cork) ?=(^ stand))
|
||||
[%outstanding-queue-not-empty wire hen]
|
||||
:- rr
|
||||
?: ?=(%cork rr)
|
||||
(~(del by outstanding.state) [full-wire hen])
|
||||
(~(put by outstanding.state) [full-wire hen] stand)
|
||||
:: non-null case of wire is old, remove on next breach after
|
||||
:: 2019/12
|
||||
::
|
||||
@ -696,7 +824,8 @@
|
||||
%watch (mo-give %unto %watch-ack err)
|
||||
%poke (mo-give %unto %poke-ack err)
|
||||
%leave mo-core
|
||||
%missing (mo-give:(mo-give %unto %watch-ack err) %unto %poke-ack err)
|
||||
%cork mo-core
|
||||
%missing ~>(%slog.[3 'gall: missing'] mo-core)
|
||||
==
|
||||
::
|
||||
[%ames %boon *]
|
||||
@ -705,7 +834,19 @@
|
||||
::
|
||||
!!
|
||||
=/ =ames-response ;;(ames-response payload.sign-arvo)
|
||||
(mo-handle-ames-response ames-response)
|
||||
:: %d: diff; ask clay to validate .noun as .mark
|
||||
:: %x: kick; tell agent the publisher canceled the subscription, and
|
||||
:: cork; tell ames to close the associated flow.
|
||||
::
|
||||
?- -.ames-response
|
||||
%d (mo-give %unto %raw-fact mark.ames-response noun.ames-response)
|
||||
%x =. mo-core (mo-give %unto %kick ~)
|
||||
=. outstanding.state
|
||||
=/ key [[%sys wire] hen]
|
||||
%+ ~(put by outstanding.state) key
|
||||
(~(put to (~(gut by outstanding.state) key ~)) %cork)
|
||||
(mo-pass [%sys wire] %a %cork ship)
|
||||
==
|
||||
::
|
||||
[%ames %lost *]
|
||||
:: note this should only happen on reverse bones, so only facts
|
||||
@ -738,9 +879,18 @@
|
||||
?~ yoke
|
||||
%- (slog leaf+"gall: {<dap>} dead, got {<+<.sign-arvo>}" ~)
|
||||
mo-core
|
||||
?. =(nonce.u.yoke i.t.wire)
|
||||
?. =(run-nonce.u.yoke i.t.wire)
|
||||
%- (slog leaf+"gall: got old {<+<.sign-arvo>} for {<dap>}" ~)
|
||||
mo-core
|
||||
:: if agent must be running, revive all needed agents then apply
|
||||
::
|
||||
?: ?& ?=(%| -.agent.u.yoke)
|
||||
?=(?(%dojo %hood) dap)
|
||||
==
|
||||
=. mo-core (mo-pass /nowhere %g %jolt %base %hood)
|
||||
=. mo-core (mo-pass /nowhere %g %jolt %base %dojo)
|
||||
(mo-pass use+wire %b %huck sign-arvo)
|
||||
::
|
||||
?. ?=([?(%gall %behn) %unto *] sign-arvo)
|
||||
?: ?=(%| -.agent.u.yoke)
|
||||
%- (slog leaf+"gall: {<dap>} dozing, dropping {<+<.sign-arvo>}" ~)
|
||||
@ -917,8 +1067,17 @@
|
||||
=/ running (~(get by yokes.state) agent)
|
||||
=/ is-running ?~(running %| ?=(%& -.agent.u.running))
|
||||
=/ is-blocked (~(has by blocked.state) agent)
|
||||
:: agent is running; deliver move normally
|
||||
::
|
||||
?. |(!is-running is-blocked)
|
||||
(mo-apply agent routes deal)
|
||||
:: if agent must be running, revive all needed agents then apply
|
||||
::
|
||||
?: ?=(?(%hood %dojo) agent)
|
||||
=. mo-core (mo-pass /nowhere %g %jolt %base %hood)
|
||||
=. mo-core (mo-pass /nowhere %g %jolt %base %dojo)
|
||||
(mo-slip %g %deal [ship our] agent deal)
|
||||
::
|
||||
?: |(!is-running is-blocked)
|
||||
=/ blocked=(qeu blocked-move)
|
||||
=/ waiting (~(get by blocked.state) agent)
|
||||
=/ deals (fall waiting *(qeu blocked-move))
|
||||
@ -929,7 +1088,6 @@
|
||||
%_ mo-core
|
||||
blocked.state (~(put by blocked.state) agent blocked)
|
||||
==
|
||||
(mo-apply agent routes deal)
|
||||
:: +mo-handle-ames-request: handle %ames request message.
|
||||
::
|
||||
++ mo-handle-ames-request
|
||||
@ -950,18 +1108,28 @@
|
||||
%u [%leave ~]
|
||||
==
|
||||
(mo-pass wire %g %deal [ship our] agent-name deal)
|
||||
:: +mo-handle-ames-response: handle ames response message.
|
||||
:: +mo-spew: handle request to set verbosity toggles on debug output
|
||||
::
|
||||
++ mo-handle-ames-response
|
||||
|= =ames-response
|
||||
++ mo-spew
|
||||
|= verbs=(list verb)
|
||||
^+ mo-core
|
||||
:: %d: diff; ask clay to validate .noun as .mark
|
||||
:: %x: kick; tell agent the publisher canceled the subscription
|
||||
:: start from all %.n's, then flip requested toggles
|
||||
::
|
||||
?- -.ames-response
|
||||
%d (mo-give %unto %raw-fact mark.ames-response noun.ames-response)
|
||||
%x (mo-give %unto %kick ~)
|
||||
=. veb.bug.state
|
||||
%+ roll verbs
|
||||
|= [=verb acc=_veb-all-off]
|
||||
^+ veb.bug.state
|
||||
?- verb
|
||||
%odd acc(odd %.y)
|
||||
==
|
||||
mo-core
|
||||
:: +mo-sift: handle request to filter debug output by agent
|
||||
::
|
||||
++ mo-sift
|
||||
|= dudes=(list dude)
|
||||
^+ mo-core
|
||||
=. dudes.bug.state (sy dudes)
|
||||
mo-core
|
||||
:: +ap: agent engine
|
||||
::
|
||||
:: An inner, agent-level core. The sample refers to the agent we're
|
||||
@ -976,6 +1144,19 @@
|
||||
agent-config=(list (each suss tang))
|
||||
=yoke
|
||||
==
|
||||
::
|
||||
++ trace
|
||||
|= [verb=? print=tang]
|
||||
^+ same
|
||||
(^trace verb agent-name print)
|
||||
::
|
||||
++ ap-nonce-wire
|
||||
|= [=wire =dock]
|
||||
^+ wire
|
||||
=/ nonce=@ (~(got by boar.yoke) wire dock)
|
||||
?: =(0 nonce) wire
|
||||
[(scot %ud nonce) wire]
|
||||
::
|
||||
++ ap-core .
|
||||
:: +ap-abed: initialise state for an agent, with the supplied routes.
|
||||
::
|
||||
@ -1036,11 +1217,9 @@
|
||||
::
|
||||
++ ap-nuke
|
||||
^+ ap-core
|
||||
=/ out=(list [[=wire =ship =term] ? =path])
|
||||
~(tap by outbound.watches.yoke)
|
||||
=/ inbound-paths=(set path)
|
||||
%- silt
|
||||
%+ turn ~(tap by inbound.watches.yoke)
|
||||
%+ turn ~(tap by bitt.yoke)
|
||||
|= [=duct =ship =path]
|
||||
path
|
||||
=/ will=(list card:agent:gall)
|
||||
@ -1048,9 +1227,9 @@
|
||||
?: =(~ inbound-paths)
|
||||
~
|
||||
[%give %kick ~(tap in inbound-paths) ~]~
|
||||
%+ turn ~(tap by outbound.watches.yoke)
|
||||
|= [[=wire =ship =term] ? =path]
|
||||
[%pass wire %agent [ship term] %leave ~]
|
||||
%+ turn ~(tap by boat.yoke)
|
||||
|= [[=wire =dock] ? =path]
|
||||
[%pass (ap-nonce-wire wire dock) %agent dock %leave ~]
|
||||
=^ maybe-tang ap-core (ap-ingest ~ |.([will *agent]))
|
||||
ap-core
|
||||
:: +ap-from-internal: internal move to move.
|
||||
@ -1133,12 +1312,13 @@
|
||||
tang.neet
|
||||
==
|
||||
=. wire
|
||||
:^ %use agent-name run-nonce.yoke
|
||||
?- -.neet
|
||||
%agent [%out (scot %p ship.neet) name.neet wire]
|
||||
%huck [%out (scot %p ship.neet) name.neet wire]
|
||||
%arvo [(scot %p attributing.agent-routes) wire]
|
||||
==
|
||||
=. wire [%use agent-name nonce.yoke wire]
|
||||
::
|
||||
=/ =note-arvo
|
||||
?- -.neet
|
||||
%arvo note-arvo.neet
|
||||
@ -1152,8 +1332,7 @@
|
||||
++ ap-breach
|
||||
|= =ship
|
||||
^+ ap-core
|
||||
=/ in=(list [=duct =^ship =path])
|
||||
~(tap by inbound.watches.yoke)
|
||||
=/ in=(list [=duct =^ship =path]) ~(tap by bitt.yoke)
|
||||
|- ^+ ap-core
|
||||
?^ in
|
||||
=? ap-core =(ship ship.i.in)
|
||||
@ -1161,14 +1340,15 @@
|
||||
core(agent-duct agent-duct)
|
||||
$(in t.in)
|
||||
::
|
||||
=/ out=(list [[=wire =^ship =term] ? =path])
|
||||
~(tap by outbound.watches.yoke)
|
||||
=/ out=(list [=wire =^ship =term])
|
||||
~(tap ^in ~(key by boat.yoke))
|
||||
|- ^+ ap-core
|
||||
?~ out
|
||||
ap-core
|
||||
=? ap-core =(ship ship.i.out)
|
||||
=/ core
|
||||
=. agent-duct system-duct.state
|
||||
=. wire.i.out (ap-nonce-wire i.out)
|
||||
=/ way [%out (scot %p ship) term.i.out wire.i.out]
|
||||
(ap-specific-take way %kick ~)
|
||||
core(agent-duct agent-duct)
|
||||
@ -1184,8 +1364,7 @@
|
||||
|= =ship
|
||||
^+ ap-core
|
||||
::
|
||||
=/ in=(list [=duct =^ship =path])
|
||||
~(tap by inbound.watches.yoke)
|
||||
=/ in=(list [=duct =^ship =path]) ~(tap by bitt.yoke)
|
||||
|- ^+ ap-core
|
||||
?~ in ap-core
|
||||
::
|
||||
@ -1206,7 +1385,7 @@
|
||||
?~ target-paths
|
||||
?~ target-ship
|
||||
~[agent-duct]
|
||||
%+ murn ~(tap by inbound.watches.yoke)
|
||||
%+ murn ~(tap by bitt.yoke)
|
||||
|= [=duct =ship =path]
|
||||
^- (unit ^duct)
|
||||
?: =(target-ship `ship)
|
||||
@ -1221,7 +1400,7 @@
|
||||
++ ap-ducts-from-path
|
||||
|= [target-path=path target-ship=(unit ship)]
|
||||
^- (list duct)
|
||||
%+ murn ~(tap by inbound.watches.yoke)
|
||||
%+ murn ~(tap by bitt.yoke)
|
||||
|= [=duct =ship =path]
|
||||
^- (unit ^duct)
|
||||
?: ?& =(target-path path)
|
||||
@ -1284,15 +1463,6 @@
|
||||
?: ?=(%& -.res)
|
||||
``want^p.res
|
||||
((slog leaf+"peek failed tube from {(trip have)} to {(trip want)}" ~) ~)
|
||||
:: +ap-update-subscription: update subscription.
|
||||
::
|
||||
++ ap-update-subscription
|
||||
~/ %ap-update-subscription
|
||||
|= [is-ok=? =other=ship other-agent=term =wire]
|
||||
^+ ap-core
|
||||
?: is-ok
|
||||
ap-core
|
||||
(ap-kill-down wire [other-ship other-agent])
|
||||
:: +ap-move: send move
|
||||
::
|
||||
++ ap-move
|
||||
@ -1316,8 +1486,8 @@
|
||||
attributing.agent-routes :: guest
|
||||
agent-name :: agent
|
||||
== ::
|
||||
:* wex=outbound.watches.yoke :: outgoing
|
||||
sup=inbound.watches.yoke :: incoming
|
||||
:* wex=boat.yoke :: outgoing
|
||||
sup=bitt.yoke :: incoming
|
||||
== ::
|
||||
:* act=change.stats.yoke :: tick
|
||||
eny=eny.stats.yoke :: nonce
|
||||
@ -1353,8 +1523,7 @@
|
||||
|= pax=path
|
||||
^+ ap-core
|
||||
=/ incoming [attributing.agent-routes pax]
|
||||
=. inbound.watches.yoke
|
||||
(~(put by inbound.watches.yoke) agent-duct incoming)
|
||||
=. bitt.yoke (~(put by bitt.yoke) agent-duct incoming)
|
||||
=^ maybe-tang ap-core
|
||||
%+ ap-ingest %watch-ack |.
|
||||
(on-watch:ap-agent-core pax)
|
||||
@ -1404,6 +1573,7 @@
|
||||
=/ other-agent i.t.t.wire
|
||||
=/ =dock [other-ship other-agent]
|
||||
=/ agent-wire t.t.t.wire
|
||||
=/ nonce=@ 0
|
||||
::
|
||||
=^ =sign:agent ap-core
|
||||
?. ?=(%raw-fact -.unto)
|
||||
@ -1424,48 +1594,106 @@
|
||||
%- ap-move :_ ~
|
||||
:^ hen %pass /nowhere
|
||||
[%c %warp our q.beak.yoke ~ %sing %b case /[mark.unto]]
|
||||
|^ ^+ ap-core
|
||||
:: %poke-ack has no nonce; ingest directly
|
||||
::
|
||||
:: if subscription ack or close, handle before calling user code
|
||||
?: ?=(%poke-ack -.sign)
|
||||
ingest-and-check-error
|
||||
:: if .agent-wire matches, it's an old pre-nonce subscription
|
||||
::
|
||||
=? outbound.watches.yoke ?=(%kick -.sign)
|
||||
%- ~(del by outbound.watches.yoke)
|
||||
[agent-wire dock]
|
||||
?: ?& ?=(%watch-ack -.sign)
|
||||
!(~(has by outbound.watches.yoke) [agent-wire dock])
|
||||
?: (~(has by boat.yoke) sub-key)
|
||||
run-sign
|
||||
:: if an app happened to use a null wire, no-op
|
||||
::
|
||||
?: =(~ agent-wire)
|
||||
on-missing
|
||||
=/ has-nonce=(unit @ud) (slaw %ud (head agent-wire))
|
||||
?: &(?=(~ has-nonce) ?=(%kick -.sign))
|
||||
on-weird-kick
|
||||
:: pop nonce off .agent-wire and match against stored subscription
|
||||
::
|
||||
?> ?=(^ has-nonce)
|
||||
=: nonce u.has-nonce
|
||||
agent-wire (tail agent-wire)
|
||||
==
|
||||
%- %: slog
|
||||
?~ got=(~(get by boar.yoke) sub-key)
|
||||
on-missing
|
||||
?: =(nonce.u.got nonce)
|
||||
run-sign
|
||||
(on-bad-nonce nonce.u.got)
|
||||
::
|
||||
++ sub-key [agent-wire dock]
|
||||
++ ingest (ap-ingest ~ |.((on-agent:ap-agent-core agent-wire sign)))
|
||||
++ run-sign
|
||||
?- -.sign
|
||||
%poke-ack !!
|
||||
%fact
|
||||
=^ tan ap-core ingest
|
||||
?~ tan ap-core
|
||||
=. ap-core (ap-kill-down sub-key)
|
||||
(ap-error -.sign leaf/"take %fact failed, closing subscription" u.tan)
|
||||
::
|
||||
%kick
|
||||
=: boar.yoke (~(del by boar.yoke) sub-key)
|
||||
boat.yoke (~(del by boat.yoke) sub-key)
|
||||
==
|
||||
ingest-and-check-error
|
||||
::
|
||||
%watch-ack
|
||||
?. (~(has by boat.yoke) sub-key)
|
||||
%. ap-core
|
||||
%+ trace odd.veb.bug.state :~
|
||||
leaf+"{<agent-name>}: got ack for nonexistent subscription"
|
||||
leaf+"{<dock>}: {<agent-wire>}"
|
||||
>wire=wire<
|
||||
~
|
||||
==
|
||||
ap-core
|
||||
=? boar.yoke ?=(^ p.sign) (~(del by boar.yoke) sub-key)
|
||||
::
|
||||
=? outbound.watches.yoke ?=(%watch-ack -.sign)
|
||||
?^ p.sign
|
||||
%- ~(del by outbound.watches.yoke)
|
||||
[agent-wire dock]
|
||||
%+ ~(jab by outbound.watches.yoke) [agent-wire dock]
|
||||
|= [acked=? =path]
|
||||
=. .
|
||||
?. acked
|
||||
.
|
||||
%- =/ =tape
|
||||
"{<agent-name>}: received 2nd watch-ack on {<wire dock path>}"
|
||||
(slog leaf+tape ~)
|
||||
.
|
||||
[& path]
|
||||
=. boat.yoke
|
||||
?^ p.sign (~(del by boat.yoke) sub-key)
|
||||
::
|
||||
=^ maybe-tang ap-core
|
||||
%+ ap-ingest ~ |.
|
||||
(on-agent:ap-agent-core agent-wire sign)
|
||||
:: if failed %fact handling, kill subscription
|
||||
%+ ~(jab by boat.yoke) sub-key
|
||||
|= val=[acked=? =path]
|
||||
%. val(acked &)
|
||||
%^ trace &(odd.veb.bug.state acked.val)
|
||||
leaf/"{<agent-name>} 2nd watch-ack on {<val>}" ~
|
||||
::
|
||||
=? ap-core ?=(%fact -.sign)
|
||||
(ap-update-subscription =(~ maybe-tang) p.dock q.dock agent-wire)
|
||||
?^ maybe-tang
|
||||
(ap-error -.sign leaf/"closing subscription" u.maybe-tang)
|
||||
ap-core
|
||||
ingest-and-check-error
|
||||
==
|
||||
::
|
||||
++ on-missing
|
||||
%. ap-core
|
||||
%+ trace odd.veb.bug.state :~
|
||||
leaf+"{<agent-name>}: got {<-.sign>} for nonexistent subscription"
|
||||
leaf+"{<dock>}: {<[nonce=nonce agent-wire]>}"
|
||||
>wire=wire<
|
||||
==
|
||||
::
|
||||
++ on-weird-kick
|
||||
%. run-sign
|
||||
%+ trace odd.veb.bug.state :~
|
||||
leaf+"{<agent-name>}: got %kick for nonexistent subscription"
|
||||
leaf+"{<dock>}: {<agent-wire>}"
|
||||
>wire=wire<
|
||||
==
|
||||
::
|
||||
++ on-bad-nonce
|
||||
|= stored-nonce=@
|
||||
%. ap-core
|
||||
%- slog :~
|
||||
=/ nonces [expected=stored-nonce got=nonce]
|
||||
=/ ok |(?=(?(%fact %kick) -.sign) =(~ p.sign))
|
||||
leaf+"{<agent-name>}: stale {<-.sign>} {<nonces>} ok={<ok>}"
|
||||
::
|
||||
leaf+"{<dock>}: {<agent-wire>}"
|
||||
>wire=wire<
|
||||
==
|
||||
::
|
||||
++ ingest-and-check-error
|
||||
^+ ap-core
|
||||
=^ tan ap-core ingest
|
||||
?~(tan ap-core (ap-error -.sign leaf/"take {<-.sign>} failed" u.tan))
|
||||
--
|
||||
:: +ap-install: install wrapper.
|
||||
::
|
||||
++ ap-install
|
||||
@ -1499,24 +1727,18 @@
|
||||
::
|
||||
++ ap-silent-delete
|
||||
^+ ap-core
|
||||
::
|
||||
%= ap-core
|
||||
inbound.watches.yoke
|
||||
(~(del by inbound.watches.yoke) agent-duct)
|
||||
==
|
||||
ap-core(bitt.yoke (~(del by bitt.yoke) agent-duct))
|
||||
:: +ap-load-delete: load delete.
|
||||
::
|
||||
++ ap-load-delete
|
||||
^+ ap-core
|
||||
::
|
||||
=/ maybe-incoming
|
||||
(~(get by inbound.watches.yoke) agent-duct)
|
||||
=/ maybe-incoming (~(get by bitt.yoke) agent-duct)
|
||||
?~ maybe-incoming
|
||||
ap-core
|
||||
::
|
||||
=/ incoming u.maybe-incoming
|
||||
=. inbound.watches.yoke
|
||||
(~(del by inbound.watches.yoke) agent-duct)
|
||||
=. bitt.yoke (~(del by bitt.yoke) agent-duct)
|
||||
::
|
||||
=^ maybe-tang ap-core
|
||||
%+ ap-ingest ~ |.
|
||||
@ -1550,12 +1772,76 @@
|
||||
:: Must process leave first in case kick handler rewatches.
|
||||
::
|
||||
++ ap-kill-down
|
||||
|= [=wire =dock]
|
||||
|= [sub-wire=wire =dock]
|
||||
^+ ap-core
|
||||
::
|
||||
=. ap-core
|
||||
(ap-pass wire %agent dock %leave ~)
|
||||
(ap-pass wire %huck dock %b %huck `sign-arvo`[%gall %unto %kick ~])
|
||||
:: we take care to include the nonce in the "kernel-facing" wire
|
||||
::
|
||||
(ap-pass (ap-nonce-wire sub-wire dock) %agent dock %leave ~)
|
||||
(ap-pass sub-wire %huck dock %b %huck `sign-arvo`[%gall %unto %kick ~])
|
||||
:: +ap-doff: kill old-style outgoing subscriptions
|
||||
::
|
||||
++ ap-doff
|
||||
|= ship=(unit ship)
|
||||
^+ ap-core
|
||||
=/ subs ~(tap in ~(key by boat.yoke))
|
||||
|- ^+ ap-core
|
||||
?~ subs ap-core
|
||||
=+ [wyr dok]=i.subs
|
||||
?: &(?=(^ ship) !=(u.ship ship.dok))
|
||||
$(subs t.subs)
|
||||
:: if we haven't created new-style (nonced) subscriptions yet,
|
||||
:: kick the old-style (nonceless) one that's in use right now.
|
||||
::
|
||||
::NOTE yes, still safe for pre-release ships with nonce=1,
|
||||
:: this makes a new flow but cleans it up right away.
|
||||
::
|
||||
=? ap-core (gte 1 (~(got by boar.yoke) wyr dok))
|
||||
(ap-pass wyr %agent dok %leave ~)
|
||||
$(subs t.subs)
|
||||
:: +ap-rake: clean up the dead %leave's
|
||||
::
|
||||
++ ap-rake
|
||||
|= all=?
|
||||
=/ subs ~(tap in ~(key by boat.yoke))
|
||||
|^ ^+ ap-core
|
||||
?~ subs ap-core
|
||||
=/ [=wire =dock] i.subs
|
||||
=/ non (~(got by boar.yoke) wire dock)
|
||||
?: &(!all =(0 non))
|
||||
$(subs t.subs)
|
||||
?~ per=(scry-peer-state p.dock)
|
||||
$(subs t.subs)
|
||||
::
|
||||
=/ dud=(set duct)
|
||||
=/ mod=^wire
|
||||
:* %gall %use agent-name run-nonce.yoke
|
||||
%out (scot %p p.dock) q.dock
|
||||
'0' wire
|
||||
==
|
||||
%- ~(rep by by-duct.ossuary.u.per)
|
||||
|= [[=duct =bone] out=(set duct)]
|
||||
^+ out
|
||||
?. ?& ?=([* [%gall %use @ @ %out @ @ @ *] *] duct)
|
||||
=(mod i.t.duct(i.t.t.t.t.t.t.t '0'))
|
||||
==
|
||||
out
|
||||
?: (~(has in closing.u.per) bone) out
|
||||
~> %slog.0^leaf+"gall: rake {<i.t.duct>}"
|
||||
(~(put in out) duct)
|
||||
::
|
||||
%- ap-move
|
||||
(turn ~(tap in dud) |=(d=duct [+.d %pass -.d %a %cork p.dock]))
|
||||
::
|
||||
++ scry-peer-state
|
||||
|= her=ship
|
||||
~+ ^- (unit peer-state:ames)
|
||||
=/ sky (rof [~ ~] %ax [our %$ da+now] /peers/(scot %p her))
|
||||
?: |(?=(~ sky) ?=(~ u.sky))
|
||||
~
|
||||
=/ sat !<(ship-state:ames q.u.u.sky)
|
||||
?>(?=(%known -.sat) (some +.sat))
|
||||
--
|
||||
:: +ap-mule: run virtualized with intercepted scry, preserving type
|
||||
::
|
||||
:: Compare +mute and +mule. Those pass through scry, which
|
||||
@ -1622,10 +1908,9 @@
|
||||
::
|
||||
=. agent.yoke &++.p.result
|
||||
=/ moves (zing (turn -.p.result ap-from-internal))
|
||||
=. inbound.watches.yoke
|
||||
(ap-handle-kicks moves)
|
||||
=. bitt.yoke (ap-handle-kicks moves)
|
||||
(ap-handle-peers moves)
|
||||
:: +ap-handle-kicks: handle cancels of inbound.watches
|
||||
:: +ap-handle-kicks: handle cancels of bitt.watches
|
||||
::
|
||||
++ ap-handle-kicks
|
||||
~/ %ap-handle-kicks
|
||||
@ -1641,8 +1926,8 @@
|
||||
::
|
||||
=/ quit-map=bitt
|
||||
(malt (turn quits |=(=duct [duct *[ship path]])))
|
||||
(~(dif by inbound.watches.yoke) quit-map)
|
||||
:: +ap-handle-peers: handle new outbound.watches
|
||||
(~(dif by bitt.yoke) quit-map)
|
||||
:: +ap-handle-peers: handle new boat.watches
|
||||
::
|
||||
++ ap-handle-peers
|
||||
~/ %ap-handle-peers
|
||||
@ -1656,34 +1941,59 @@
|
||||
?: ?=([* %pass * %g %deal * * %leave *] move)
|
||||
=/ =wire p.move.move
|
||||
?> ?=([%use @ @ %out @ @ *] wire)
|
||||
=/ short-wire t.t.t.t.t.t.wire
|
||||
=/ =dock [q.p q]:q.move.move
|
||||
=. outbound.watches.yoke
|
||||
(~(del by outbound.watches.yoke) [short-wire dock])
|
||||
=/ sys-wire=^wire (scag 6 `^wire`wire)
|
||||
=/ sub-wire=^wire (slag 6 `^wire`wire)
|
||||
::
|
||||
?. (~(has by boat.yoke) sub-wire dock)
|
||||
%. $(moves t.moves)
|
||||
%^ trace odd.veb.bug.state
|
||||
leaf/"gall: {<agent-name>} missing subscription, got %leave" ~
|
||||
=/ nonce=@ (~(got by boar.yoke) sub-wire dock)
|
||||
=. p.move.move
|
||||
%+ weld sys-wire
|
||||
(ap-nonce-wire sub-wire dock)
|
||||
=: boat.yoke (~(del by boat.yoke) [sub-wire dock])
|
||||
boar.yoke (~(del by boar.yoke) [sub-wire dock])
|
||||
==
|
||||
:: if nonce = 0, this was a pre-nonce subscription so later
|
||||
:: subscriptions need to start subscribing on the next nonce
|
||||
::
|
||||
=? sub-nonce.yoke =(nonce 0) +(sub-nonce.yoke)
|
||||
$(moves t.moves, new-moves [move new-moves])
|
||||
?. ?=([* %pass * %g %deal * * ?(%watch %watch-as) *] move)
|
||||
$(moves t.moves, new-moves [move new-moves])
|
||||
=/ =wire p.move.move
|
||||
?> ?=([%use @ @ %out @ @ *] wire)
|
||||
=/ short-wire t.t.t.t.t.t.wire
|
||||
=/ =dock [q.p q]:q.move.move
|
||||
=/ =path
|
||||
?- -.r.q.move.move
|
||||
%watch path.r.q.move.move
|
||||
%watch-as path.r.q.move.move
|
||||
==
|
||||
?: (~(has by outbound.watches.yoke) short-wire dock)
|
||||
=/ sys-wire=^wire (scag 6 `^wire`wire)
|
||||
=/ sub-wire=^wire (slag 6 `^wire`wire)
|
||||
=/ [=dock =deal] [[q.p q] r]:q.move.move
|
||||
::
|
||||
?: (~(has by boat.yoke) sub-wire dock)
|
||||
=. ap-core
|
||||
=/ =tang
|
||||
~[leaf+"subscribe wire not unique" >agent-name< >short-wire< >dock<]
|
||||
=/ have
|
||||
(~(got by outbound.watches.yoke) short-wire dock)
|
||||
~[leaf+"subscribe wire not unique" >agent-name< >sub-wire< >dock<]
|
||||
=/ have (~(got by boat.yoke) sub-wire dock)
|
||||
%- (slog >out=have< tang)
|
||||
(ap-error %watch-not-unique tang) :: reentrant, maybe bad?
|
||||
$(moves t.moves)
|
||||
=. outbound.watches.yoke
|
||||
(~(put by outbound.watches.yoke) [short-wire dock] [| path])
|
||||
$(moves t.moves, new-moves [move new-moves])
|
||||
::
|
||||
::NOTE 0-check guards against pre-release bug
|
||||
=? p.move.move !=(0 sub-nonce.yoke)
|
||||
(weld sys-wire [(scot %ud sub-nonce.yoke) sub-wire])
|
||||
%_ $
|
||||
moves t.moves
|
||||
new-moves [move new-moves]
|
||||
sub-nonce.yoke +(sub-nonce.yoke)
|
||||
::
|
||||
boat.yoke
|
||||
%+ ~(put by boat.yoke) [sub-wire dock]
|
||||
:- acked=|
|
||||
path=?+(-.deal !! %watch path.deal, %watch-as path.deal)
|
||||
::
|
||||
boar.yoke
|
||||
(~(put by boar.yoke) [sub-wire dock] sub-nonce.yoke)
|
||||
==
|
||||
--
|
||||
--
|
||||
:: +call: request
|
||||
@ -1726,6 +2036,10 @@
|
||||
%jolt mo-abet:(mo-jolt:mo-core dude.task our desk.task)
|
||||
%idle mo-abet:(mo-idle:mo-core dude.task)
|
||||
%nuke mo-abet:(mo-nuke:mo-core dude.task)
|
||||
%doff mo-abet:(mo-doff:mo-core +.task)
|
||||
%rake mo-abet:(mo-rake:mo-core +.task)
|
||||
%spew mo-abet:(mo-spew:mo-core veb.task)
|
||||
%sift mo-abet:(mo-sift:mo-core dudes.task)
|
||||
%trim [~ gall-payload]
|
||||
%vega [~ gall-payload]
|
||||
==
|
||||
@ -1797,6 +2111,28 @@
|
||||
acc
|
||||
(~(put in acc) [dude -.agent.yoke])
|
||||
::
|
||||
?: ?& =(%f care)
|
||||
=(~ path)
|
||||
=([%$ %da now] coin)
|
||||
=(our ship)
|
||||
==
|
||||
:+ ~ ~
|
||||
:- %nonces !> ^- (map dude @)
|
||||
(~(run by yokes.state) |=(yoke sub-nonce))
|
||||
::
|
||||
?: ?& =(%n care)
|
||||
?=([@ @ ^] path)
|
||||
=([%$ %da now] coin)
|
||||
=(our ship)
|
||||
==
|
||||
?~ yok=(~(get by yokes.state) dap)
|
||||
[~ ~]
|
||||
=/ [=^ship =term =wire]
|
||||
[(slav %p i.path) i.t.path t.t.path]
|
||||
?~ nonce=(~(get by boar.u.yok) [wire ship term])
|
||||
[~ ~]
|
||||
[~ ~ atom+!>(u.nonce)]
|
||||
::
|
||||
?. =(our ship)
|
||||
~
|
||||
?. =([%$ %da now] coin)
|
||||
|
@ -353,10 +353,14 @@
|
||||
!> [~[/g/talk] %give %boon [%post 'first1']]
|
||||
!> (snag 0 `(list move:ames)`moves6)
|
||||
==
|
||||
:: +test-comet-message-flow: galaxy<->comet comms
|
||||
::
|
||||
:: same as test-message-flow, but ~nec will send a sendkeys packet to
|
||||
:: request comet's self-attestation directly
|
||||
::
|
||||
++ test-comet-message-flow ^- tang
|
||||
:: same as test-message-flow, but ~nec will send a sendkeys packet to request
|
||||
:: comet's self-attestation directly
|
||||
::=^ * nec (call nec ~[//nemo] %spew ~[%snd %rcv %odd %msg])
|
||||
::=^ * comet (call comet ~[//nemo] %spew ~[%snd %rcv %odd %msg])
|
||||
::
|
||||
=^ moves0 nec (call nec ~[/g/talk] %plea our-comet %g /talk [%get %post])
|
||||
=^ moves1 comet (call comet ~[//unix] %hear (snag-packet 0 moves0))
|
||||
@ -371,27 +375,34 @@
|
||||
:^ comet /public-keys ~[//unix]
|
||||
^- sign:ames
|
||||
[%jael %public-keys %full [n=[~nec point] ~ ~]]
|
||||
:: give comet's self-attestation to ~nec; at this point, we have established
|
||||
:: a channel, and can proceed as usual
|
||||
:: give comet's self-attestation to ~nec; at this point, we have
|
||||
:: established a channel, and can proceed as usual
|
||||
::
|
||||
=/ post [%post 'first1!!']
|
||||
=^ moves3 nec (call nec ~[//unix] %hear (snag-packet 0 moves2))
|
||||
%+ weld
|
||||
%- expect-fail |.
|
||||
(call nec ~[//unix] %hear (snag-packet 1 moves2))
|
||||
::
|
||||
=^ moves4 comet (call comet ~[//unix] %hear (snag-packet 0 moves3))
|
||||
=^ moves5 comet (take comet /bone/~nec/0/1 ~[//unix] %g %done ~)
|
||||
=^ moves5 comet (take comet /bone/~nec/1/1 ~[//unix] %g %done ~)
|
||||
=^ moves6 nec (call nec ~[//unix] %hear (snag-packet 0 moves5))
|
||||
=^ moves7 comet (take comet /bone/~nec/0/1 ~[//unix] %g %boon [%post 'first1!!'])
|
||||
=^ moves7 comet (take comet /bone/~nec/1/1 ~[//unix] %g %boon post)
|
||||
=^ moves8 nec (call nec ~[//unix] %hear (snag-packet 0 moves7))
|
||||
::
|
||||
;: weld
|
||||
%+ expect-eq
|
||||
!> [~[//unix] %pass /qos %d %flog %text "; ~nec is your neighbor"]
|
||||
!> =- [~[//unix] %pass /qos %d %flog %text -]
|
||||
"; ~nec is your neighbor"
|
||||
!> (snag 0 `(list move:ames)`moves4)
|
||||
::
|
||||
%+ expect-eq
|
||||
!> [~[//unix] %pass /qos %d %flog %text "; {<our-comet>} is your neighbor"]
|
||||
!> =- [~[//unix] %pass /qos %d %flog %text -]
|
||||
"; {<our-comet>} is your neighbor"
|
||||
!> (snag 0 `(list move:ames)`moves6)
|
||||
::
|
||||
%+ expect-eq
|
||||
!> [~[/g/talk] %give %boon [%post 'first1!!']]
|
||||
!> [~[/g/talk] %give %boon post]
|
||||
!> (snag 0 `(list move:ames)`moves8)
|
||||
==
|
||||
::
|
||||
|
@ -66,7 +66,7 @@
|
||||
::
|
||||
++ rest
|
||||
|= p=@da
|
||||
(arvo %b %wait p)
|
||||
(arvo %b %rest p)
|
||||
::
|
||||
++ warp
|
||||
|= [wer=ship =riff:clay]
|
||||
|
@ -27,6 +27,7 @@
|
||||
%da s+(scot %da p.c)
|
||||
%tas s+(scot %tas p.c)
|
||||
%ud (numb p.c)
|
||||
%uv s+(scot %uv p.c)
|
||||
==
|
||||
++ foreign-desk
|
||||
|= [s=^ship =desk]
|
||||
|
Loading…
Reference in New Issue
Block a user