!: :: %behn, agent execution !? 163 :::: |= pit=vase => =~ |% :::::::::::::::::::::::::::::::::::::::::::::::::::::: rest of arvo :::::::::::::::::::::::::::::::::::::::::::::::::::::: ++ hood :: assembly plan $: zus=@ud :: zuse kelvin sur=(list hoot) :: structures lib=(list hoof) :: libraries fan=(list horn) :: resources src=(list hoop) :: program == :: ++ hoof (pair term (unit (pair case ship))) :: resource reference ++ hoot (pair bean hoof) :: structure gate/core ++ hoop :: source in hood $% [%& p=twig] :: direct twig [%| p=beam] :: resource location == :: ++ horn :: resource tree $% [%ape p=twig] :: /~ twig by hand [%arg p=twig] :: /$ argument [%day p=horn] :: /| list by @dr [%dub p=term q=horn] :: /= apply face [%fan p=(list horn)] :: /. list [%for p=path q=horn] :: /, descend [%hel p=@ud q=horn] :: /% propagate heel [%hub p=horn] :: /@ list by @ud [%man p=(map span horn)] :: /* hetero map [%nap p=horn] :: /_ homo map [%now p=horn] :: /& list by @da [%saw p=twig q=horn] :: /; operate on [%see p=beam q=horn] :: /: relative to [%sic p=tile q=horn] :: /^ cast [%toy p=mark] :: /mark/ static == :: ++ silk :: construction layer $& [p=silk q=silk] :: cons $% [%bake p=mark q=beam r=path] :: local synthesis [%boil p=mark q=beam r=path] :: general synthesis [%call p=silk q=silk] :: slam [%cast p=mark q=silk] :: translate [%done p=(set beam) q=cage] :: literal [%dude p=tank q=silk] :: error wrap [%dune p=(set beam) q=(unit cage)] :: unit literal [%mute p=silk q=(list (pair wing silk))] :: mutant [%plan p=beam q=spur r=hood] :: structured build [%reef ~] :: kernel reef [%ride p=twig q=silk] :: silk thru twig [%vale p=mark q=ship r=*] :: validate [our his] == :: ++ volt ?(%low %high) :: voltage ++ torc $|(?(%iron %gold) [%lead p=ship]) :: security control ++ roon :: reverse ames msg $% [%d p=mark q=*] :: diff (diff) [%x ~] :: == :: ++ rook :: forward ames msg $% [%m p=mark q=*] :: message [%s p=path] :: subscribe [%u ~] :: cancel/unsubscribe == :: -- :: |% :::::::::::::::::::::::::::::::::::::::::::::::::::::: local arvo :::::::::::::::::::::::::::::::::::::::::::::::::::::: ++ club :: agent action $% [%peer p=path] :: subscribe [%poke p=cage] :: apply [%pull ~] :: unsubscribe [%pump ~] :: subscription ack == :: ++ culm :: config action $% [%load p=scup] :: load/reload :: [%kick ~] :: restart everything :: [%stop ~] :: toggle suspend :: [%wipe ~] :: destroy all state == :: ++ cuss (pair dude club) :: internal kiss ++ cuft :: internal gift $% [%coup p=(unit tang)] :: poke result [%diff p=cage] :: subscription output [%quit ~] :: close subscription [%reap p=(unit tang)] :: peer result == :: ++ cote :: ++ap note $% [%meta p=@tas q=vase] :: [%send p=ship q=cuss] :: == :: ++ cove (pair duct (mold cote cuft)) :: internal move ++ cute (pair bone (mold cote cuft)) :: internal move ++ dude term :: local identity ++ scup (pair ship desk) :: autoupdate ++ suss (trel dude ,@tas ,@da) :: config report ++ tang (list tank) :: error abstraction -- :: |% :::::::::::::::::::::::::::::::::::::::::::::::::::::: %behn cards :::::::::::::::::::::::::::::::::::::::::::::::::::::: ++ kiss-ames :: $% [%wont p=sock q=path r=*] :: == :: ++ kiss-behn :: incoming request $% [%conf p=dock q=culm] :: configure app [%init p=ship] :: set owner [%deal p=sock q=cuss] :: full transmission [%rote p=sack q=path r=*] :: remote request [%roth p=sack q=path r=*] :: remote response == :: ++ kiss-ford :: $% [%exec p=@p q=(unit silk)] :: make / kill [%wasp p=@p q=@uvH] :: depends query == :: ++ gift-ames :: $% [%woot p=ship q=(unit ares)] :: e2e reaction message == :: ++ gift-behn :: outgoing result $% [%onto p=(each suss tang)] :: about agent [%unto p=cuft] :: within agent [%mack p=(unit tang)] :: message ack == :: ++ gift-ford :: out result <-$ $% [%made p=@uvH q=(each cage tang)] :: computed result [%news ~] :: fresh depends == :: ++ sign-behn :: incoming result $% [%a gift-ames] [%b gift-behn] :: [%f gift-ford] :: == :: ++ note-behn :: outgoing request $? [@tas %meta p=vase] :: $% [%a kiss-ames] :: [%b kiss-behn] :: [%f kiss-ford] :: == == :: ++ move ,[p=duct q=(mold note-behn gift-behn)] :: typed move -- :: |% :::::::::::::::::::::::::::::::::::::::::::::::::::::: %behn state :::::::::::::::::::::::::::::::::::::::::::::::::::::: ++ axle :: all state $: %0 :: state version pol=(map ship mast) :: apps by ship == :: ++ gest :: subscriber data $: sup=(map bone (pair ship path)) :: subscribers pus=(jug path bone) :: srebircsbus qel=(map bone ,@ud) :: queue meter == :: ++ mast :: ship state $: sys=duct :: system duct sap=(map ship scad) :: foreign contacts bum=(map dude seat) :: running agents wub=(map dude sofa) :: waiting queue == :: ++ ffuc :: new cuff $: p=(unit (set ship)) :: disclosing to q=ship :: attributed to == :: ++ prey (pair volt ffuc) :: privilege ++ scad :: foreign connection $: p=@ud :: index q=(map duct ,@ud) :: by duct r=(map ,@ud duct) :: by index == :: ++ scar :: opaque input $: p=@ud :: bone sequence q=(map duct bone) :: by duct r=(map bone duct) :: by bone == :: ++ seat :: agent state $: mom=duct :: control duct liv=? :: unstopped toc=torc :: privilege tyc=stic :: statistics ged=gest :: subscribers hav=vase :: running state pup=scup :: update control zam=scar :: opaque ducts == :: ++ sofa :: queue for blocked $: kys=(qeu (trel duct prey club)) :: queued kisses == :: ++ stic :: statistics $: act=@ud :: change number eny=@uvI :: entropy lat=@da :: time == :: -- :: :::::::::::::::::::::::::::::::::::::::::::::::::::::: vane header :::::::::::::::::::::::::::::::::::::::::::::::::::::: . == =| all=axle :: all vane state |= $: now=@da :: urban time eny=@uvI :: entropy ska=sled :: activate == :: opaque core |% :::::::::::::::::::::::::::::::::::::::::::::::::::::: state machine :::::::::::::::::::::::::::::::::::::::::::::::::::::: ++ mo |_ $: $: our=@p hen=duct moz=(list move) == mast == ++ mo-abed :: initialize |= [our=@p hen=duct] ^+ +> %_ +> our our hen hen +<+ (~(got by pol.all) our) == :: ++ mo-abet :: resolve to ^- [(list move) _+>+] :_ +>+(pol.all (~(put by pol.all) our +<+)) %- flop %+ turn moz |= a=move ?. ?=(%pass -.q.a) a [p.a %pass [(scot %p our) p.q.a] q.q.a] :: ++ mo-conf :: configure |= [dap=dude lum=culm] (mo-boot dap ?:((~(has by bum) dap) %old %new) p.lum) :: ++ mo-pass :: standard pass |= [pax=path noh=note-behn] %_(+> moz :_(moz [hen %pass pax noh])) :: ++ mo-give |= git=gift-behn %_(+> moz :_(moz [hen %give git])) :: ++ mo-okay :: valid agent core |= vax=vase ^- ? (~(nest ut -:!>(*hide)) %| p:(slot 12 vax)) :: ++ mo-boom :: complete new boot |= [dap=dude pup=scup dep=@uvH cux=(each cage tang)] ^+ +> ?- -.cux %| (mo-give %onto %| p.cux) %& ?. (mo-okay q.p.cux) (mo-give %onto %| [%leaf "{}: bogus core"]~) =. +> (mo-bold dap dep) =. +> (mo-born dap pup q.p.cux) =+ old=+>.$ =+ wag=(ap-prop:(ap-abed:ap dap [%high [~ our]]) ~) ?^ -.wag =. +>.$ old (mo-give %onto %| u.-.wag) =. +>.$ ap-abet:+.wag (mo-give:(mo-claw dap) %onto %& dap %boot now) == :: ++ mo-born :: new seat |= [dap=dude pup=scup hav=vase] =+ sat=*seat %_ +>.$ bum %+ ~(put by bum) dap %_ sat mom hen pup pup hav hav p.zam 1 q.zam [[~ 0] ~ ~] r.zam [[0 ~] ~ ~] == == :: ++ mo-boon :: complete old boot |= [dap=dude pup=scup dep=@uvH cux=(each cage tang)] ^+ +> ?. (~(has by bum) dap) ~& [%behn-old-boon dap] +> =. +> (mo-bold dap dep) ?- -.cux %| (mo-give %onto %| p.cux) %& ap-abet:(ap-peep:(ap-abed:ap dap [%high [~ our]]) q.p.cux) == :: ++ mo-bold :: wait for dep |= [dap=dude dep=@uvH] ^+ +> %+ mo-pass [%sys %dep dap ~] [%f %wasp our dep] :: ++ mo-boot :: create ship |= [dap=dude how=?(%new %old) pup=scup] ^+ +> :: ~& [%mo-boot dap how pup] %+ mo-pass [%sys how dap (scot %p p.pup) q.pup ~] ^- note-behn [%f %exec our `[%boil %core [[p.pup q.pup [%da now]] [dap %ape ~]] ~]] :: ++ mo-away :: foreign request |= [him=ship caz=cuss] :: ^+ +> :: ~& [%mo-away him caz] ?: ?=(%pump -.q.caz) :: :: you'd think this would send an ack for the diff :: that caused this pump. it would, but we already :: sent it when we got the diff in ++mo-cyst. then :: we'd have to save the network duct and connect it :: to this returning pump. :: +> =^ num +>.$ (mo-bale him) =+ ^= roc ^- rook ?- -.q.caz %poke [%m p.p.q.caz q.q.p.q.caz] %pull [%u ~] %peer [%s p.q.caz] == %+ mo-pass [%sys %way -.q.caz ~] `note-behn`[%a %wont [our him] [%q %be p.caz ~] [num roc]] :: ++ mo-baal :: error convert a |= art=(unit ares) ^- ares ?~(art ~ ?~(u.art `[%blank ~] u.art)) :: ++ mo-baba :: error convert b |= ars=ares ^- (unit tang) ?~ ars ~ `[[%leaf (trip p.u.ars)] q.u.ars] :: ++ mo-awed :: foreign response |= [him=ship why=?(%peer %poke %pull) art=(unit ares)] ^+ +> :: ~& [%mo-awed him why art] =+ tug=(mo-baba (mo-baal art)) ?- why %peer (mo-give %unto %reap tug) %poke (mo-give %unto %coup tug) %pull ~& [%pull-fail tug] +>.$ == :: ++ mo-bale :: assign outbone |= him=ship ^- [@ud _+>] =+ sad=(fall (~(get by sap) him) `scad`[1 ~ ~]) =+ nom=(~(get by q.sad) hen) ?^ nom [u.nom +>.$] :- p.sad %_ +>.$ sap %+ ~(put by sap) him %_ sad p +(p.sad) q (~(put by q.sad) hen p.sad) r (~(put by r.sad) p.sad hen) == == :: ++ mo-ball :: outbone by index |= [him=ship num=@ud] ^- duct (~(got by r:(~(got by sap) him)) num) :: ++ mo-come :: handle locally |= [her=ship caz=cuss] ^+ +> =+ pry=`prey`[%high [~ her]] (mo-club p.caz pry q.caz) :: ++ mo-coup :: back from mo-away |= [dap=dude him=ship cup=ares] %^ mo-give %unto %coup ?~ cup ~ [~ `tang`[[%leaf (trip p.u.cup)] q.u.cup]] :: ++ mo-cyst :: take in /sys |= [pax=path sih=sign-behn] ^+ +> ?+ -.pax !! %dep :: update ?> ?=([%f %news *] sih) ?> ?=([@ ~] t.pax) =+ sot=(~(get by bum) i.t.pax) ?~ sot ~& [%mo-cyst-none i.t.pax] +>.$ (mo-boot i.t.pax %old pup.u.sot) :: %new ?> ?=([%f %made *] sih) ?> ?=([@ @ @ ~] t.pax) (mo-boom i.t.pax [(slav %p i.t.t.pax) i.t.t.t.pax] +>.sih) :: %old :: reload old ?> ?=([%f %made *] sih) ?> ?=([@ @ @ ~] t.pax) (mo-boon i.t.pax [(slav %p i.t.t.pax) i.t.t.t.pax] +>.sih) :: %red :: diff ack ?> ?=([@ @ @ ~] t.pax) ?> ?=([%a %woot *] sih) =+ :* him=(slav %p i.t.pax) dap=i.t.t.pax num=(slav %ud i.t.t.t.pax) == => .(pax `path`[%req t.pax]) ?~ q.+>.sih (mo-pass [%sys pax] %b %deal [him our] dap %pump ~) ~& [%diff-bad-ack q.+>.sih] :: should not happen =. +>.$ (mo-pass [%sys pax] %b %deal [him our] dap %pull ~) (mo-pass [%sys pax] %a %wont [our him] [%q %bh dap ~] [num %x ~]) :: %rep :: reverse request ?> ?=([@ @ @ ~] t.pax) ?> ?=([%f %made *] sih) =+ :* him=(slav %p i.t.pax) dap=i.t.t.pax num=(slav %ud i.t.t.t.pax) == ?- -.q.+>.sih %| (mo-give %mack `p.q.+>.sih) :: XX should crash %& =. +>.$ (mo-give %mack ~) :: XX pump should ack (mo-give(hen (mo-ball him num)) %unto %diff `cage`p.q.+>.sih) == :: %req :: inbound request ?> ?=([@ @ @ ~] t.pax) =+ :* him=(slav %p i.t.pax) dap=i.t.t.pax num=(slav %ud i.t.t.t.pax) == ?: ?=([%f %made *] sih) ?- -.q.+>.sih %| (mo-give %mack `p.q.+>.sih) :: XX should crash %& (mo-pass [%sys pax] %b %deal [him our] i.t.t.pax %poke p.q.+>.sih) == ?: ?=([%a %woot *] sih) +>.$ :: quit ack, boring ?> ?=([%b %unto *] sih) =+ cuf=`cuft`+>.sih ?- -.cuf %coup (mo-give %mack p.cuf) %diff %+ mo-pass [%sys %red t.pax] [%a %wont [our him] [%q %bh dap ~] [num %d p.p.cuf q.q.p.cuf]] %quit %+ mo-pass [%sys pax] [%a %wont [our him] [%q %bh dap ~] [num %x ~]] %reap (mo-give %mack p.cuf) == :: %way :: outbound request ?> ?=([%a %woot *] sih) ?> ?=([@ ~] t.pax) %- mo-awed :* p.+>.sih (?(%peer %poke %pull) i.t.pax) +>+.sih == == :: ++ mo-cook :: take in /use |= [pax=path hin=(hypo sign-behn)] ^+ +> ?. ?=([@ @ ?(%inn %out) *] pax) ~& [%mo-cook-bad-pax pax] !! =+ dap=`@tas`i.pax =+ pry=`prey`[%high [~ (slav %p i.t.pax)]] =+ pap=(ap-abed:ap dap pry) =+ vax=(slot 3 `vase`hin) ?- i.t.t.pax %inn ap-abet:(ap-pour:pap t.t.t.pax (slot 3 `vase`hin)) %out ?. ?=([%b %unto *] q.hin) ~& [%mo-cook-weird q.hin] ~& [%mo-cook-weird-path pax] +>.$ ap-abet:(ap-pout:pap t.t.t.pax +>.q.hin) == :: ++ mo-claw :: clear queue |= dap=dude ^+ +> ?. (~(has by bum) dap) +> =+ suf=(~(get by wub) dap) =+ neh=hen ?~ suf +>.$ |- ^+ +>.^$ ?: =(~ kys.u.suf) +>.^$(hen neh, wub (~(del by wub) dap)) =^ lep kys.u.suf [p q]:~(get to kys.u.suf) :: ~& [%mo-claw-play dap r.lep] $(+>.^$ ap-abet:(ap-club:(ap-abed:ap(hen p.lep) dap q.lep) r.lep)) :: ++ mo-club :: local action |= [dap=dude pry=prey cub=club] ^+ +> ?: |(!(~(has by bum) dap) (~(has by wub) dap)) :: ~& [%mo-club-qeu dap cub] =+ syf=(fall (~(get by wub) dap) *sofa) +>.$(wub (~(put by wub) dap syf(kys (~(put to kys.syf) [hen pry cub])))) ap-abet:(ap-club:(ap-abed:ap dap pry) cub) :: ++ mo-gawk :: ames forward |= [him=@p dap=dude num=@ud rok=rook] %+ mo-pass [%sys %req (scot %p him) dap (scot %ud num) ~] ^- note-behn ?- -.rok %m [%f %exec our ~ %vale p.rok our q.rok] :: XX use build beak %s [%b %deal [him our] dap %peer p.rok] %u [%b %deal [him our] dap %pull ~] == :: ++ mo-gawd :: ames backward |= [him=@p dap=dude num=@ud ron=roon] ?- -.ron %d %+ mo-pass [%sys %rep (scot %p him) dap (scot %ud num) ~] [%f %exec our ~ %vale p.ron our q.ron] :: %x (mo-give(hen (mo-ball him num)) %unto %quit ~) == :: ++ ap :: agent engine |_ $: $: dap=dude pry=prey ost=bone zip=(list cute) dub=(list (each suss tang)) == seat == :: ++ ap-abed :: initialize |= [dap=dude pry=prey] ^+ +> =: ^dap dap ^pry pry +>+<+ `seat`(~(got by bum) dap) == =+ unt=(~(get by q.zam) hen) =: act.tyc +(act.tyc) eny.tyc (shax (mix (add dap act.tyc) eny)) lat.tyc now == ?^ unt +>.$(ost u.unt) %= +>.$ ost p.zam p.zam +(p.zam) q.zam (~(put by q.zam) hen p.zam) r.zam (~(put by r.zam) p.zam hen) == :: ++ ap-abet :: resolve ^+ +> => ap-abut %_ +> bum (~(put by bum) dap +<+) moz :(weld (turn zip ap-aver) (turn dub ap-avid) moz) == :: ++ ap-abut :: track queue ^+ . =+ [pyz=zip ful=*(set bone)] |- ^+ +> ?~ pyz =+ ded=(~(tap in ful) ~) |- ^+ +>.^$ ?~ ded +>.^$ $(ded t.ded, +>.^$ ap-kill(ost i.ded)) ?. ?=([%give %diff *] q.i.pyz) $(pyz t.pyz) =^ vad +> ap-fill $(pyz t.pyz, ful ?:(vad ful (~(put in ful) p.i.pyz))) :: ++ ap-aver :: cute to move |= cov=cute ^- move =+ fuk=(~(get by r.zam) p.cov) ?~ fuk ~& [%ap-aver-fuk p.cov] !! :- (~(got by r.zam) p.cov) ?- -.q.cov ?(%slip %sick) !! %give [%give %unto p.q.cov] %pass :+ %pass `path`[%use dap p.q.cov] ?- -.q.q.cov %send `note-behn`[%b %deal [our p.q.q.cov] q.q.q.cov] %meta `note-behn`[`@tas`p.q.q.cov %meta `vase`q.q.q.cov] == == :: ++ ap-avid :: onto results |=([a=(each suss tang)] [hen %give %onto a]) :: ++ ap-call :: call into server |= [cog=term arg=vase] ^- [(unit tang) _+>] =. +> ap-hide =+ arm=(ap-farm cog) ?: ?=(%| -.arm) [`p.arm +>.$] =+ zem=(ap-slam cog p.arm arg) ?: ?=(%| -.zem) [`p.zem +>.$] (ap-sake p.zem) :: ++ ap-club :: apply effect |= cub=club ^+ +> ?- -.cub %poke (ap-poke +.cub) %peer (ap-peer +.cub) %pull ap-pull %pump ap-fall == :: ++ ap-diff :: pour a diff |= [her=ship pax=path cag=cage] =. q.cag (spec q.cag) =+ cug=(ap-find [%diff p.cag pax]) ?~ cug (ap-pump:(ap-lame %diff (ap-suck "pour: no diff")) | her pax) =+ ^= arg ^- vase %- slop ?: =(0 p.u.cug) [!>([`@ud`ost `@p`q.q.pry `path`+.pax]) !>(cag)] [!>([`@ud`ost `@p`q.q.pry (slag (dec p.u.cug) `path`+.pax)]) q.cag] =^ cam +>.$ (ap-call q.u.cug arg) ?^ cam (ap-pump:(ap-lame q.u.cug u.cam) | her pax) (ap-pump & her pax) :: ++ ap-pump :: break subscription |= [oak=? her=ship pax=path] =+ way=[(scot %p her) %out pax] :: ~& [%ap-pump-path oak pax] ?: oak (ap-pass way %send her -.pax %pump ~) (ap-pass:(ap-give %quit ~) way %send her -.pax %pull ~) :: ++ ap-fall :: drop from queue ^+ . =+ soy=(~(get by qel.ged) ost) ?: |(?=(~ soy) =(0 u.soy)) ~& [%ap-fill-under [our dap] q.q.pry ost] + =. u.soy (dec u.soy) :: ~& [%ap-fill-sub [[our dap] q.q.pry ost] u.soy] ?: =(0 u.soy) +(qel.ged (~(del by qel.ged) ost)) +(qel.ged (~(put by qel.ged) ost u.soy)) :: ++ ap-farm :: produce arm |= cog=term ^- (each vase tang) =+ puz=(mule |.((~(mint ut p.hav) [%noun [%cnzy cog]]))) ?: ?=(%| -.puz) [%| p.puz] =+ ton=(mock [q.hav q.p.puz] ap-sled) ?- -.ton %0 [%& p.p.puz p.ton] %1 [%| (turn p.ton |=(a=* (smyt (path a))))] %2 [%| p.ton] == :: ++ ap-fill :: add to queue ^- [? _.] =+ suy=(fall (~(get by qel.ged) ost) 0) ?: =(10 suy) ~& [%ap-fill-full [our dap] q.q.pry ost] [%| +] :: ~? !=(10 suy) [%ap-fill-add [[our dap] q.q.pry ost] +(suy)] [%& +(qel.ged (~(put by qel.ged) ost +(suy)))] :: ++ ap-find :: general arm |= [cog=term pax=path] =+ dep=0 |- ^- (unit (pair ,@ud term)) =+ ^= spu ?~ pax ~ $(pax t.pax, dep +(dep), cog (ap-hype cog i.pax)) ?^ spu spu ?.((ap-fond cog) ~ `[dep cog]) :: ++ ap-fond :: check for arm |= cog=term ^- ? (slob cog p.hav) :: ++ ap-give :: return result |= cit=cuft ^+ +> +>(zip :_(zip [ost %give cit])) :: ++ ap-hide :: set up hide %_ . +12.q.hav ^- hide :* :* our dap ~ == ~ sup.ged pus.ged tyc == == :: ++ ap-hype :: hyphenate |=([a=term b=term] `term`(cat 3 a (cat 3 '-' b))) :: ++ ap-move :: process each move |= vax=vase ^- (each cute tang) ?@ q.vax [%| (ap-suck "move: invalid move (atom)")] ?^ -.q.vax [%| (ap-suck "move: invalid move (bone)")] ?@ +.q.vax [%| (ap-suck "move: invalid move (card)")] =+ hun=(~(get by r.zam) -.q.vax) ?. (~(has by r.zam) -.q.vax) [%| (ap-suck "move: invalid card (bone {<-.q.vax>})")] =+ cav=(slot 3 (spec (slot 3 vax))) ?+ +<.q.vax (ap-move-pass -.q.vax +<.q.vax cav) %diff (ap-move-diff -.q.vax cav) %peer (ap-move-peer -.q.vax cav) %pull (ap-move-pull -.q.vax cav) %poke (ap-move-poke -.q.vax cav) %send (ap-move-send -.q.vax cav) %quit (ap-move-quit -.q.vax cav) == :: ++ ap-move-quit :: give quit move |= [sto=bone vax=vase] ^- (each cute tang) ?^ q.vax [%| (ap-suck "move: improper quit")] [%& `cute`[sto %give `cuft`[%quit ~]]] :: ++ ap-move-diff :: give diff move |= [sto=bone vax=vase] ^- (each cute tang) ?. &(?=(^ q.vax) ?=(@ -.q.vax) ((sane %tas) -.q.vax)) [%| (ap-suck "move: improper diff")] [%& sto %give %diff `cage`[-.q.vax (slot 3 vax)]] :: ++ ap-move-mess :: extract path, target |= vax=vase ^- (each (trel path ship term) tang) ?. ?& ?=([p=* [q=@ r=@] s=*] q.vax) (gte 1 (met 7 q.q.vax)) == [%| (ap-suck "move: malformed target")] =+ pux=((soft path) p.q.vax) ?. &(?=(^ pux) (levy u.pux (sane %ta))) [%| (ap-suck "move: malformed path")] [%& [(scot %p q.q.vax) %out r.q.vax u.pux] q.q.vax r.q.vax] :: ++ ap-move-pass :: pass general move |= [sto=bone wut=* vax=vase] ^- (each cute tang) ?. &(?=(@ wut) ((sane %tas) wut)) [%| (ap-suck "move: malformed card")] =+ pux=((soft path) -.q.vax) ?. &(?=(^ pux) (levy u.pux (sane %ta))) [%| (ap-suck "move: malformed path")] =+ huj=(ap-vain wut) ?~ huj [%| (ap-suck "move: unknown note {(trip wut)}")] :^ %& sto %pass :- [(scot %p q.q.pry) %inn u.pux] [%meta u.huj (slop (ap-term %tas wut) (slot 3 vax))] :: ++ ap-move-poke :: pass %poke |= [sto=bone vax=vase] ^- (each cute tang) =+ yep=(ap-move-mess vax) ?: ?=(%| -.yep) yep =+ gaw=(slot 7 vax) ?. &(?=([p=@ q=*] q.gaw) ((sane %tas) p.q.gaw)) [%| (ap-suck "poke: malformed cage")] :^ %& sto %pass :- p.p.yep [%send q.p.yep r.p.yep %poke p.q.gaw (slot 3 (spec gaw))] :: ++ ap-move-peer :: pass %peer |= [sto=bone vax=vase] ^- (each cute tang) =+ yep=(ap-move-mess vax) ?: ?=(%| -.yep) yep =+ pux=((soft path) +>.q.vax) ?. &(?=(^ pux) (levy u.pux (sane %ta))) [%| (ap-suck "peer: malformed path")] :^ %& sto %pass :- p.p.yep [%send q.p.yep r.p.yep %peer u.pux] :: ++ ap-move-pull :: pass %pull |= [sto=bone vax=vase] ^- (each cute tang) =+ yep=(ap-move-mess vax) ?: ?=(%| -.yep) yep ?. =(~ +>.q.vax) [%| (ap-suck "pull: malformed card")] :^ %& sto %pass :- p.p.yep [%send q.p.yep r.p.yep %pull ~] :: ++ ap-move-send :: pass gall action |= [sto=bone vax=vase] ^- (each cute tang) ?. ?& ?=([p=* [q=@ r=@] [s=@ t=*]] q.vax) (gte 1 (met 7 q.q.vax)) ((sane %tas) r.q.vax) == [%| (ap-suck "move: malformed send")] =+ pux=((soft path) p.q.vax) ?. &(?=(^ pux) (levy u.pux (sane %ta))) [%| (ap-suck "move: malformed path")] ?: ?=(%poke s.q.vax) =+ gav=(spec (slot 7 vax)) ?> =(%poke -.q.gav) ?. ?& ?=([p=@ q=*] t.q.vax) ((sane %tas) p.t.q.vax) == [%| (ap-suck "move: malformed poke")] :^ %& sto %pass :- [(scot %p q.q.vax) %out r.q.vax u.pux] ^- cote :: ~& [%ap-move-send `path`[(scot %p q.q.vax) %out r.q.vax u.pux]] [%send q.q.vax r.q.vax %poke p.t.q.vax (slot 3 (spec (slot 3 gav)))] =+ cob=((soft club) [s t]:q.vax) ?~ cob [%| (ap-suck "move: malformed club")] :^ %& sto %pass :- [(scot %p q.q.vax) %out r.q.vax u.pux] :: ~& [%ap-move-send `path`[(scot %p q.q.vax) %out r.q.vax u.pux]] [%send q.q.vax r.q.vax u.cob] :: ++ ap-pass :: request action |= [pax=path coh=cote] ^+ +> +>(zip :_(zip [ost %pass pax coh])) :: ++ ap-peep :: reinstall |= vax=vase ^+ +> (ap-prep(hav vax) `hav) :: ++ ap-peer :: apply %peer |= pax=path ^+ +> =+ cug=(ap-find %peer pax) ?~ cug (ap-peon pax) =^ cam +>.$ %+ ap-call q.u.cug !>([[`@ud`ost `@p`q.q.pry] `path`(slag p.u.cug pax)]) ?^ cam (ap-give %reap cam) (ap-give:(ap-peon pax) %reap ~) :: ++ ap-peon :: add subscriber |= pax=path %_ +>.$ sup.ged (~(put by sup.ged) ost [q.q.pry pax]) pus.ged (~(put ju pus.ged) pax ost) == :: ++ ap-poke :: apply %poke |= cag=cage ^+ +> =+ cug=(ap-find %poke p.cag ~) ?~ cug (ap-give %coup `(ap-suck "no poke arm")) :: ~& [%ap-poke dap p.cag cug] =^ tur +>.$ %+ ap-call q.u.cug %+ slop !>([`@ud`ost `@p`q.q.pry]) ?. =(0 p.u.cug) q.cag (slop (ap-term %tas p.cag) q.cag) (ap-give %coup tur) :: ++ ap-lame :: pour error |= [wut=@tas why=tang] ^+ +> =+ cug=(ap-find /lame) ?~ cug ~& [%ap-lame wut why] +>.$ =^ cam +>.$ %+ ap-call q.u.cug !>([[`@ud`ost `@p`q.q.pry] wut why]) ?^ cam ~&([%ap-lame-lame u.cam] +>.$) +>.$ :: ++ ap-pour :: generic take |= [pax=path vax=vase] ^+ +> ?. &(?=([@ *] q.vax) ((sane %tas) -.q.vax)) (ap-lame %pour (ap-suck "pour: malformed card")) =+ cug=(ap-find [-.q.vax pax]) ?~ cug (ap-lame -.q.vax (ap-suck "pour: no {(trip -.q.vax)}: {}")) =^ cam +>.$ %+ ap-call q.u.cug %+ slop !>([`@ud`ost `@p`q.q.pry `path`(slag p.u.cug pax)]) (slot 3 vax) ?^ cam (ap-lame -.q.vax u.cam) +>.$ :: ++ ap-pout :: specific take |= [pax=path cuf=cuft] ^+ +> ?- -.cuf %coup (ap-punk q.q.pry %coup +.pax `!>(p.cuf)) %diff (ap-diff q.q.pry pax p.cuf) %quit (ap-punk q.q.pry %quit +.pax ~) %reap (ap-punk q.q.pry %reap +.pax `!>(p.cuf)) == :: ++ ap-prep :: install |= vux=(unit vase) ^+ +> =^ gac +>.$ (ap-prop vux) %= +>.$ dub :_(dub ?~(gac [%& dap ?~(vux %boot %bump) now] [%| u.gac])) == :: ++ ap-prop :: install |= vux=(unit vase) ^- [(unit tang) _+>] ?. (ap-fond %prep) ?~ vux `+>.$ ?. (~(nest ut p:(slot 13 hav)) %| p:(slot 13 u.vux)) :_(+>.$ `(ap-suck "prep mismatch")) `+>.$(+13.q.hav +13.q.u.vux) =^ tur +>.$ %+ ap-call %prep %+ slop !>([`@ud`ost `@p`q.q.pry]) ?~(vux !>(~) (slop !>(~) (slot 13 u.vux))) ?~(tur `+>.$ :_(+>.$ `u.tur)) :: ++ ap-pull :: pull inbound =+ wim=(~(get by sup.ged) ost) ?~ wim ~&(%ap-pull-none +) =: sup.ged (~(del by sup.ged) ost) pus.ged (~(del ju pus.ged) q.u.wim ost) qel.ged (~(del by qel.ged) ost) == =+ cug=(ap-find %pull q.u.wim) ?~ cug +> =^ cam +> %+ ap-call q.u.cug !>([[`@ud`ost `@p`q.q.pry] (slag p.u.cug q.u.wim)]) ?^ cam (ap-lame q.u.cug u.cam) +>+ :: ++ ap-kill :: queue kill ~& [%ap-kill dap ost] (ap-give:ap-pull %quit ~) :: ++ ap-punk :: non-diff gall take |= [her=ship cog=term pax=path vux=(unit vase)] ^+ +> =+ cug=(ap-find cog pax) ?~ cug ~& [%ap-punk-none pax] +>.$ =^ cam +>.$ %+ ap-call q.u.cug =+ den=!>([`@ud`ost `@p`q.q.pry (slag p.u.cug pax)]) ?~(vux den (slop den u.vux)) ?^ cam (ap-lame q.u.cug u.cam) +>.$ :: ++ ap-safe :: process move list |= vax=vase ^- (each (list cute) tang) ?~ q.vax [%& ~] ?@ q.vax [%| (ap-suck "move: malformed list")] =+ sud=(ap-move (slot 2 vax)) ?: ?=(%| -.sud) sud =+ res=$(vax (slot 3 vax)) ?: ?=(%| -.res) res [%& p.sud p.res] :: ++ ap-sake :: handle result |= vax=vase ^- [(unit tang) _+>] ?: ?=(@ q.vax) [`(ap-suck "sake: invalid product (atom)") +>.$] =+ muz=(ap-safe (slot 2 vax)) ?: ?=(%| -.muz) [`p.muz +>.$] =+ sav=(ap-save (slot 3 vax)) ?: ?=(%| -.sav) [`p.sav +>.$] :- ~ %_ +>.$ zip (weld (flop p.muz) zip) hav p.sav == :: ++ ap-save :: verify core |= vax=vase ^- (each vase tang) ?. (~(nest ut p.hav) %| p.vax) [%| (ap-suck "invalid core")] [%& vax] :: ++ ap-slam :: virtual slam |= [cog=term gat=vase arg=vase] ^- (each vase tang) =+ wiz=(mule |.((slit p.gat p.arg))) ?: ?=(%| -.wiz) ~& %ap-slam-mismatch ~> %slog.[0 ~(duck ut p.arg)] ~> %slog.[0 ~(duck ut (~(peek ut p.gat) %free 6))] [%| (ap-suck "call: {}: type mismatch")] =+ ton=(mong [q.gat q.arg] ap-sled) ?- -.ton %0 [%& p.wiz p.ton] %1 [%| (turn p.ton |=(a=* (smyt (path a))))] %2 [%| p.ton] == :: ++ ap-sled (mole (slod ska)) :: namespace view ++ ap-suck :: standard tang |= msg=tape ^- tang [%leaf (weld "behn: {}: " msg)]~ :: ++ ap-term :: atomic vase |= [a=@tas b=@] ^- vase [[%cube b %atom a] b] :: ++ ap-vain :: card to vane |= sep=@tas ^- (unit ,@tas) ?+ sep ~& [%ap-vain sep] ~ %cash `%a %conf `%b %deal `%b %exec `%f %flog `%d %mess `%g %nuke `%g %show `%g %took `%g %plug `%c %want `%a == -- -- ++ call :: request |= [hen=duct hic=(hypo (hobo kiss-behn))] ^- [p=(list move) q=_..^$] => .(q.hic ?.(?=(%soft -.q.hic) q.hic ((hard kiss-behn) p.q.hic))) ?- -.q.hic %conf ?. (~(has by pol.all) p.p.q.hic) ~& [%behn-not-ours p.p.q.hic] [~ ..^$] mo-abet:(mo-conf:(mo-abed:mo p.p.q.hic hen) q.p.q.hic q.q.hic) :: %deal =< mo-abet ?. (~(has by pol.all) q.p.q.hic) :: either to us ?> (~(has by pol.all) p.p.q.hic) :: or from us (mo-away:(mo-abed:mo p.p.q.hic hen) q.p.q.hic q.q.hic) (mo-come:(mo-abed:mo q.p.q.hic hen) p.p.q.hic q.q.hic) :: %init ~& [%behn-init p.q.hic] [~ ..^$(pol.all (~(put by pol.all) p.q.hic [hen ~ ~ ~]))] :: %rote :: ~& [%behn-rote p.q.hic] ?. (~(has by pol.all) p.p.q.hic) ~& [%behn-not-ours p.q.hic] [~ ..^$] ?> ?=([@ ~] q.q.hic) =+ dap=i.q.q.hic =+ our=p.p.q.hic =+ him=q.p.q.hic =+ mes=((hard ,[@ud rook]) r.q.hic) =< mo-abet (mo-gawk:(mo-abed:mo our hen) him dap mes) :: %roth :: ~& [%behn-roth p.q.hic] ?. (~(has by pol.all) p.p.q.hic) ~& [%behn-not-ours p.q.hic] [~ ..^$] ?> ?=([@ ~] q.q.hic) =+ dap=i.q.q.hic =+ our=p.p.q.hic =+ him=q.p.q.hic =+ mes=((hard ,[@ud roon]) r.q.hic) =< mo-abet (mo-gawd:(mo-abed:mo our hen) him dap mes) == :: ++ doze :: sleep until |= [now=@da hen=duct] ^- (unit ,@da) ~ :: ++ load :: recreate vane |= old=axle ^+ ..^$ ..^$(all old) :: ++ scry |= [fur=(unit (set monk)) ren=@tas who=ship syd=desk lot=coin tyl=path] ^- (unit (unit (pair mark ,*))) [~ ~] :: ++ stay :: save w/o cache `axle`all :: ++ take :: response |= [tea=wire hen=duct hin=(hypo sign-behn)] ^- [p=(list move) q=_..^$] ~| [%behn-take tea] ?> ?=([@ ?(%sys %use) *] tea) =+ our=(need (slaw %p i.tea)) =+ mow=(mo-abed:mo our hen) ?: ?=(%sys i.t.tea) mo-abet:(mo-cyst:mow t.t.tea q.hin) ?> ?=(%use i.t.tea) mo-abet:(mo-cook:mow t.t.tea hin) --