diff --git a/pkg/arvo/app/neo.hoon b/pkg/arvo/app/neo.hoon index 3c7bc0b9e0..b0d1cbc5df 100644 --- a/pkg/arvo/app/neo.hoon +++ b/pkg/arvo/app/neo.hoon @@ -33,15 +33,29 @@ [%cd =name:neo] [%poke rout=@tas] [%comm ~] + [%clay ~] == +$ state-0 $: %0 - apex=axal:neo + apex=(axal:neo room:neo) + :: diary=(axal:neo memo:neo) + :: dead=(map @uvH (axal:neo room:neo)) + hear=(jug name:neo sound:neo) =fleet:neo husks=(jug stud:neo name:neo) shells=(map id:sole shell) races=(map id:sole race) + hear=(map name:neo sound:neo) == +++ is-parent-p + |= [parent=path kid=path] + ^- ? + ?~ parent & + ?~ kid | + ?. =(i.parent i.kid) + | + $(parent t.parent, kid t.kid) + ++ is-parent |= [parent=pith kid=pith] ^- ? @@ -150,13 +164,12 @@ =+ .^(neo-vase=vase %ca (welp clay-beak /sur/neo/hoon)) =/ reef=vase (slop !>(..zuse) neo-vase(p [%face %neo p.neo-vase])) =/ =note:neo [(en-pith:name:neo name) %make (clay-lib %ford-reef) `!>(reef) ~] - (on-note pith.name note) + (on-note note) ++ sync-room - |= [=pith:neo src=stud:neo] + |= [=stud:neo =name:neo] ^+ run - =/ =wire sync/(pout pith) - =/ =name:neo (de-pith:name:neo pith) - =. run abet:~(init xeno name) + =/ =wire sync/(pout pith.name) + =. run abet:(~(init xeno name) stud/stud) (emit %pass wire %agent [ship.name dap.bowl] %watch [%sync %init (pout pith.name)]) ++ our-sys-pith `pith:neo`[p/our.bowl ~] :: @@ -167,7 +180,7 @@ !! :: abet:(~(take xeno pith) syn) ?: ?=([%husk @ *] pith) !! :: (~(take husk i.t.pith) (pout t.t.pith) syn) - abet:(take:(abed:arvo our-sys-pith pith) pith syn) + abet:(take-arvo:(abed:arvo our-sys-pith pith) pith syn) :: ++ forward-poke |= [=name:neo pok=*] @@ -182,25 +195,65 @@ %- %*(. slog pri 1) %- lure :+ %rose [ret "Shrubbery" sep] - :~ leaf/"Local" + :* leaf/"Local" (local-axal *pith apex) + leaf/"Remote" + %+ turn ~(tap by fleet) + |= [=ship =brig:neo] + (remote-axal [p/ship]~ brig) == ++ ret [',' (reap 4 ' ')] ++ sep *tape - ++ local-kids - |= [=pith =axal:neo] + ++ remote-kids + |= [=pith =(axal:neo cell:neo)] ^- tank ?: =(~ kid.axal) leaf/"No children" :+ %rose [ret "Kids:" sep] %+ murn ~(tap by kid.axal) - |= [=iota a=axal:neo] + |= [=iota a=(axal:neo cell:neo)] + ^- (unit tank) + ?: &(veb =(pith ~) |(=(iota %src) =(iota %pre))) + ~ + `(remote-axal (snoc pith iota) a) + ++ remote-axal + |= [=pith =(axal:neo cell:neo)] + ^- tank + :+ %rose [ret (en-tape:pith:neo pith) sep] + ^- (list tank) + %- snoc + :_ (remote-kids pith axal) + ^- (list tank) + ?~ fil.axal + ~[leaf/"No data"] + =/ =cell:neo u.fil.axal + ?: =(case.cell 0) + ~[leaf/"No data at this path"] + :~ leaf/"State" + ?: (lth 10.000 (met 3 (jam q.state.cell))) + leaf/"Too large to print" + (sell state.cell) + + leaf/"Case: {(scow %ud case.cell)}" + :: + :: + leaf/"Source: {}" + == + + ++ local-kids + |= [=pith =(axal:neo room:neo)] + ^- tank + ?: =(~ kid.axal) + leaf/"No children" + :+ %rose [ret "Kids:" sep] + %+ murn ~(tap by kid.axal) + |= [=iota a=(axal:neo room:neo)] ^- (unit tank) ?: &(veb =(pith ~) |(=(iota %src) =(iota %pre))) ~ `(local-axal (snoc pith iota) a) ++ local-axal - |= [=pith =axal:neo] + |= [=pith =(axal:neo room:neo)] ^- tank :+ %rose [ret (en-tape:pith:neo pith) sep] ^- (list tank) @@ -209,28 +262,24 @@ ^- (list tank) ?~ fil.axal ~[leaf/"No data"] - =/ =hall:neo u.fil.axal - ?: ?=(%exit -.hall) - :~ leaf/"%link" - leaf/(en-tape:pith:neo +.hall) - == - ?: =(case.icon.hall 0) + =/ =room:neo u.fil.axal + ?: =(case.icon.room 0) ~[leaf/"No data at this path"] :* leaf/"State" - ?: (lth 10.000 (met 3 (jam q.state.icon.hall))) + ?: (lth 10.000 (met 3 (jam q.state.icon.room))) leaf/"Too large to print" - (sell state.icon.hall) + (sell state.icon.room) - leaf/"Case: {(scow %ud case.icon.hall)}" + leaf/"Case: {(scow %ud case.icon.room)}" :: :: - leaf/"Source: {}" + leaf/"Source: {}" ^- (list tank) - ?: =(~ conf.hall) + ?: =(~ conf.room) ~ :_ ~ :+ %rose [" " "Dependencies" sep] - %+ turn ~(tap by conf.hall) + %+ turn ~(tap by conf.room) |= [=term p=^pith] leaf/"{} -> {(en-tape:pith:neo p)}" == @@ -239,6 +288,9 @@ ++ poke |= [=mark =vase] ^+ run + ?: =(%neo-move mark) + =+ !<(=move:neo vase) + (on-move move) ?> ?=(%noun mark) ?: =(%clay q.vase) copy-clay @@ -246,15 +298,27 @@ ?> =(our src):bowl %- (print-dbug veb.q.vase) run + ?: ?=(%out -.q.vase) + =+ ;;(=out:neo +.q.vase) + (do-out out) =+ ;;(=note:neo q.vase) =/ =name:neo (de-pith:name:neo p.note) ?. =(our.bowl ship.name) ?> ?=(%poke -.q.note) (forward-poke name val.q.note) - (on-note pith.name note) + (on-note note) ++ on-note - |= [=pith =note:neo] - abet:(apply:(abed:arvo our-sys-pith pith) note) + |= =note:neo + =/ =name:neo (de-pith:name:neo p.note) + ?> =(our.bowl ship.name) + abet:(apply:(abed:arvo our-sys-pith pith.name) note) +:: +++ on-move + |= =move:neo + ?> ?=(%neo -.q.move) + =/ =name:neo (de-pith:name:neo p.q.move) + ?> =(our.bowl ship.name) + abet:(apply:(abed:arvo p.move pith.name) +.q.move) :: ++ watch |= =(pole knot) @@ -265,16 +329,26 @@ [%init path=*] =/ =pith:neo (pave path.rest.pole) =- (emit %give %fact ~ neo-watch+!>(-)) - =/ ros=(map pith:neo hall:neo) + =/ ros=(map pith:neo room:neo) ~(tar of:neo (dip:of-top pith)) - %+ murn ~(tap by ros) - |= [p=pith:neo =hall:neo] - ^- (unit update:neo) - ?. ?=(%room -.hall) - ~ - `[p [case %init q.state]:icon.hall] + %+ turn ~(tap by ros) + |= [p=pith:neo =room:neo] + ^- update:neo + ?> ?=(%stud -.p.span.room) + [(welp pith p) p.p.span.room [case %init q.state]:icon.room] == == +++ do-out + |= =out:neo + ^+ run + =; new=_run + =. run new + ~& (turn ~(val by fleet) |=(b=brig:neo ~(key by ~(tar of:neo b)))) + run + ?- -.out + %sync (sync-room [stud name]:out) + %stop run + == ++ take-agent |= [=(pole knot) =sign:agent:gall] |^ ^+ run @@ -282,6 +356,7 @@ [%test ~] test-wire [%sync rest=*] (sync (pave rest.pole)) [%forward rest=*] (forward (pave rest.pole)) + [%local rest=*] (take-local-agent (pave rest.pole) sign) == ++ test-wire ?. ?=(%poke-ack -.sign) @@ -320,6 +395,37 @@ run == -- +++ pro + |_ =stud:neo + ++ grab + =/ rom (got:of-top pith) + =+ !<([cac=(unit vase) *] state.icon.rom) + cac + ++ built + (has:of-top pith) + ++ pith + `pith:neo`(pave path) + ++ path + ^- ^path + :- %src + ?@ stud + /std/pro/[stud] + ?: =(our.bowl ship.stud) + /our/[desk.stud]/pro/[mark.stud] + :+ %ext (scot %p ship.stud) + /[desk.stud]/pro/[mark.stud] + ++ exists + (exists-file path) + -- +++ root + /(scot %p our.bowl)/[q.byk.bowl]/(scot %da now.bowl)/neo +++ exists-file + |= pax=path + =/ p=path + (welp root pax) + =. p (snoc p %hoon) + .^(? %cu p) + ++ copy-clay |^ ^+ run =+ .^(paths=(list path) %ct root) @@ -331,16 +437,6 @@ ?~ pat $(paths t.paths) $(paths (snoc t.paths u.pat)) - ++ root - /(scot %p our.bowl)/[q.byk.bowl]/(scot %da now.bowl)/neo - ++ exists-file - |= pax=path - =/ p=path - (welp root pax) - =. p (snoc p %hoon) - ~& exists/p - =- ~&(- -) - .^(? %cu p) ++ lib |_ =name:neo ++ path @@ -354,32 +450,20 @@ ++ exists (exists-file path) -- - ++ pro - |_ =stud:neo - ++ built - ~& built/[stud pith] - ~& keys/~(key by kid:(dip:of-top /src/std/pro)) - =- ~&(- -) - (has:of-top pith) - ++ pith - `pith:neo`(pave path) - ++ path - ^- ^path - :- %src - ?@ stud - /std/pro/[stud] - ?: =(our.bowl ship.stud) - /our/[desk.stud]/pro/[mark.stud] - :+ %ext (scot %p ship.stud) - /[desk.stud]/pro/[mark.stud] - ++ exists - (exists-file path) - -- ++ do-make |= [=pith:neo lib=term sta=(unit vase) =conf:neo] - ~& make/[stud pith conf] =/ =name:neo (de-pith:name:neo pith) - (on-note pith.name pith %make (clay-lib lib) sta conf) + =. run (on-note pith %make (clay-lib lib) sta conf) + ?: =(lib %sym) + run + =/ rom (got:of-top pith.name) + =+ !<([cache=(unit vase) *] state.icon.rom) + ?. !=(~ cache) + ~| conf/conf + !! + run + + ++ slop |= [wer=pith a=pith b=pith] ~| %ford-slop @@ -389,7 +473,6 @@ |= [wer=pith face=pith sut=pith] ~| %ford-face %^ do-make wer %ford-face - ~& face/face `(~(gas by *conf:neo) face/(ours face) sut/(ours sut) ~) ++ same |= [wer=pith from=pith] @@ -419,7 +502,6 @@ ?: =(idx 0) #/src/reef (snoc pat ud/(dec idx)) - ~& make =. run (slop (ours wer) prev (ours fac)) $(pros t.pros, idx +(idx)) @@ -434,12 +516,10 @@ =. pax ?> ?=(^ pax) t.pax - ~& read-file/pax =+ .^(src=@t %cx (welp root pax)) =/ =file:ford ~| parsing/pax (scan (trip src) apex:rein:ford) - ~& pro/pro.file =/ has-imports=? ?& (levy pro.file |=(pro:ford ~(exists pro stud))) (levy lib.file |=(lib:ford ~(exists lib name))) @@ -463,7 +543,7 @@ ++ get-val-at-path |= =pith ^- (unit vase) - ?~ val=(bind (get:of-top pith) de-hall:room:neo) + ?~ val=(get:of-top pith) ~ `state.icon.u.val :: @@ -480,6 +560,7 @@ ^+ run ?~ watch run + ~| hear/pith.i.watch =. run abet:(~(hear xeno [src.bowl pith.i.watch]) +.i.watch) $(watch t.watch) @@ -504,7 +585,7 @@ |_ =stud:neo ++ firm-vase ?> ?=(@ stud) - =/ rom=room:neo (got-room:of-top /src/std/imp/[stud]) + =/ rom=room:neo (got:of-top /src/std/imp/[stud]) =+ !<([cac=(unit vase) *] state.icon.rom) (need cac) ++ firm @@ -549,13 +630,15 @@ |_ =name:neo ++ xeno . ++ abet run - ++ brig (~(gut by fleet) ship.name ~) - ++ cell (~(gut by brig) pith.name *cell:neo) - ++ got (~(got by (~(got by fleet) ship.name)) pith.name) + ++ brig (~(gut by fleet) ship.name *(axal:neo cell:neo)) + ++ cell (~(gut of:neo brig) pith.name *cell:neo) + ++ got (~(got of:neo (~(got by fleet) ship.name)) pith.name) + ++ gut |=(c=cell:neo (~(gut of:neo (~(got by fleet) ship.name)) pith.name c)) + ++ has (~(has of:neo brig) pith.name) ++ put |= =cell:neo =/ =brig:neo brig - =. brig (~(put by brig) pith.name cell) + =. brig (~(put of:neo brig) pith.name cell) =. fleet (~(put by fleet) ship.name brig) xeno ++ wire `^wire`xeno/(pout (en-pith:name:neo name)) @@ -570,19 +653,37 @@ (emit %pass wire %agent dock %watch path) xeno ++ hear - |= [case=@ud =diff:neo] + |= [=stud:neo case=@ud =diff:neo] ^+ xeno ~| hear-name/name - =+ cel=got + =? xeno !has + (init stud/stud) + =+ cel=got =/ firm ~(firm-vase husk p.span.cel) =/ =vase ?: ?=(%poke -.diff) =/ func (slap firm !,(*hoon reduce:form)) !<(vase (slym func p.diff)) - =/ func (slap firm !,(*hoon state)) + =+ ;;(state=stud:neo +:(slap firm !,(*hoon state))) + =/ func (need ~(grab pro stud)) (slym func p.diff) (put cel(case case, state vase)) -- +:: +++ take-local-agent + |= [=pith =sign:agent:gall] + ^+ run + ?+ -.sign !! + %poke-ack + %. run + ?~ p.sign + same + %+ slog + leaf/"Poke-ack failed for shrub {(en-tape:pith:neo pith)}" + u.p.sign + :: + == +:: ++ give-nack |= [src=pith err=tang] %- (slog leaf/(en-tape:pith:neo src) err) @@ -593,17 +694,72 @@ ?: =(/ pith.nam) :: special case outside run run +++ do-hear + |= new=(list name:neo) + ^+ run + ?~ new + run + =. run (take-sound i.new) + $(new t.new) +:: +++ take-sound + |= =name:neo + :: TODO: is ordering important here? + =/ sounds ~(tap in (~(get ju hear) name)) + |- ^+ run + ?~ sounds + run + =; new=_run + $(run new, sounds t.sounds) + ?- -.i.sounds + %dep (dep-change p.i.sounds name q.i.sounds) + %sync (send-sync name) + == +++ dep-change + |= [=term from=name:neo to=pith] + abet:(take-neo:(abed:arvo to to) %conf %val term) +++ give + |= =gift:agent:gall + (emit %give gift) +:: +++ send-sync + |= =name:neo + ^+ run + ?. =(our.bowl ship.name) + ~& sync-for-foreign/ship.name + run + =/ =room:neo (got:of-top pith.name) + =/ =cage + :- %neo-update + !> ^- update:neo + ?> ?=(%stud -.p.span.room) + [pith.name p.p.span.room [case %init q.state]:icon.room] + =; paths=(list path) + ?: =(~ paths) + run + (give %fact paths cage) + =/ target=path + %+ welp /sync/init + (pout pith.name) + =- ~(tap in -) + %- ~(gas in *(set path)) + %+ murn ~(val by sup.bowl) + |= [=ship =path] + ?. (is-parent-p target path) + ~ + `path :: ++ arvo =+ verb=& |_ $: [src=pith init=pith here=pith] - [done=(list note:neo) down=(list note:neo) up=(list move:neo)] + [done=(list note:neo) down=(list note:neo) up=(list move:neo) change=(set pith)] [old=state-0 err=(unit tang)] == ++ abet ?~ err + %- (slog (turn up trace-card)) =. cards (welp cards (turn up deal)) - run + (do-hear (turn ~(tap in change) (lead our.bowl))) =. state old (give-nack src u.err) ++ abed @@ -627,13 +783,27 @@ ~| p.note ?> ?=([[%p @p] *] p.note) +.i.p.note - [%agent [her dap.bowl] %poke noun+!>(+.q.move)] + [%agent [her dap.bowl] %poke neo-move+!>(move)] ++ arvo . ++ emit |=(=note:neo arvo(down [note down])) + ++ trace-card + |= =move:neo + ^- tank + :- %leaf + %+ welp + "{(en-tape:pith:neo p.move)} -> " + ?- -.q.move + %arvo "arvo {<-.+.q.move>}" + %neo + "{(en-tape:pith:neo p.q.move)}: {<-.q.q.move>}" + == ++ trace |= =tang ?. verb same - (slog tang) + %. tang + %* . slog + pri 2 + == ++ inside (cury is-parent init) ++ echo arvo :: TODO walk done ++ work @@ -646,46 +816,47 @@ =/ nex=note:neo i.down =/ new-arvo (apply:arvo(down t.down) nex) :: XX: weird compiler? $(arvo new-arvo, done (snoc done nex)) + ++ take-neo + |= syn=sign-neo:neo + %- (trace leaf/"{(en-tape:pith:neo here)}: take-neo {<-.syn>}" ~) + =^ caz=(list card:neo) arvo + (soft-site |.(si-abet:(si-take-neo:site syn))) + (ingest caz) :: - ++ link - |= [to=pith from=pith src=stud:neo] - ^+ run - =. apex (put:of-top to exit/from) - (sync-room from src) - - ++ take + ++ take-arvo |= [=pith syn=sign-arvo] ^+ arvo - =/ si (si-abed:site pith) =^ caz=(list card:neo) arvo - (soft-site |.(si-abet:(si-take-arvo:si syn))) - (ingest pith caz) + (soft-site |.(si-abet:(si-take-arvo:site syn))) + (ingest caz) ++ poke - |= [=pith val=*] + |= val=* ^- (quip card:neo _arvo) - =/ =name:neo (de-pith:name:neo pith) - ?> =(our.bowl ship.name) - (soft-site |.(si-abet:(si-poke:(si-abed:site pith.name) val))) + (soft-site |.(si-abet:(si-poke:site val))) :: ++ apply |= note=note:neo ^+ arvo ?. =(~ err) arvo - :: %- (trace leaf/"{<-.q.note>} {(spud (pout p.note))}" ~) + =/ =name:neo (de-pith:name:neo p.note) + =. src here + =. here pith.name + %- (trace leaf/"{<-.q.note>} {(spud (pout here))}" ~) =^ caz=(list card:neo) arvo ?+ -.q.note !! - %make (make [p +.q]:note) - %poke (poke [p +.q]:note) - %link - :- ~ - =. run (link [p from.q src.q]:note) - arvo + %make (make +.q:note) + %poke (poke +.q:note) + %link !! + :: :- ~ + ::=. run (link [p from.q src.q]:note) + :: 0arvo == - (ingest p.note caz) + (ingest caz) ++ ingest - |= [=pith caz=(list card:neo)] + |= caz=(list card:neo) ^+ arvo + =/ =pith here =. up %+ welp up %+ murn caz @@ -694,8 +865,10 @@ ?: ?=(%arvo -.card) `[pith card] =/ inside +.card - ~! +.card - ?: (is-parent pith p.card) + =/ =name:neo (de-pith:name:neo p.card) + ?. =(our.bowl ship.name) + `[pith card] + ?. (is-parent pith pith.name) ~ `[pith card] @@ -706,14 +879,16 @@ |= =card:neo ^- (unit note:neo) ?: ?=(%arvo -.card) ~ - ?. (is-parent pith p.card) + =/ =name:neo (de-pith:name:neo p.card) + ?. =(our.bowl ship.name) + ~ + ?. (is-parent pith pith.name) ~ `[p q]:card work :: ++ make - |= [=pith src=code:neo init=(unit vase) =conf:neo] - =/ =name:neo (de-pith:name:neo pith) + |= [src=code:neo init=(unit vase) =conf:neo] =/ =firm:neo ~(firm husk src) :: =. run (~(start husk src) our.bowl pith) =/ =form:neo form:firm @@ -722,8 +897,9 @@ =/ =deps:neo deps:firm ?> =(~ (check-conf conf deps:firm)) =/ =room:neo [span conf icon] - =. apex (put:of-top pith.name room/room) - (soft-site |.(si-abet:si-born:(si-abed:site pith.name))) + =. apex (put:of-top here room) + (soft-site |.(si-abet:si-born:site)) + ++ soft-site |= tap=(trap (quip card:neo _arvo)) ^- (quip card:neo _arvo) @@ -735,33 +911,24 @@ `arvo :: ++ site - |_ [=pith =room:neo cards=(list card:neo)] + =/ =room:neo + (got:of-top here) + =| cards=(list card:neo) + |% ++ site . ++ si-emil |=(caz=(list card:neo) site(cards (welp cards caz))) ++ si-abet - =. apex (put:of-top pith room/room) - :: TODO: process cards + =. apex (put:of-top here room) [cards arvo] :: - ++ si-abed - |= p=^pith - ?< ?=([[%p @] *] p) - =. pith p - =/ r=room:neo (got-room:of-top pith) - site(pith p, room r) - ++ si-init - |= foo=* - ^+ site - =. state.icon.room (init:si-form ~) - site ++ si-resolve-kids ~ ++ si-resolve-deps - %- ~(gas by *(map term [^pith vase])) - ^- (list [term ^pith vase]) + %- ~(gas by *(map term [pith vase])) + ^- (list [term pith vase]) %+ murn ~(tap by deps:si-firm) |= [=term required=? =port:neo] - ^- (unit [^term ^pith vase]) - =/ dep=(unit ^pith) (~(get by conf.room) term) + ^- (unit [^term pith vase]) + =/ dep=(unit pith) (~(get by conf.room) term) ?~ dep ~| invariant-missing-required-conf/term ?< required @@ -775,11 +942,12 @@ `[term u.dep u.val] :: TODO type this w/ port?? ++ si-bowl - [src.bowl our.bowl [p/our.bowl pith] now.bowl si-resolve-deps si-resolve-kids] + [src.bowl our.bowl [p/our.bowl here] now.bowl si-resolve-deps si-resolve-kids] ++ si-form ~(. form:si-firm [si-bowl icon.room]) ++ si-firm q.span.room ++ si-tell =/ paths si-sync-paths + =. change (~(put in change) here) ?: =(paths ~) site =. run @@ -787,7 +955,9 @@ site ++ si-grab-watch ^- watch:neo - [pith [case %init q.state]:icon.room]~ + ?. ?=(%stud -.p.span.room) + *watch:neo + [here p.p.span.room [case %init q.state]:icon.room]~ ++ si-sync-paths ^- (list path) =- ~(tap in -) @@ -800,6 +970,7 @@ ~ `path ++ si-born + ^+ site =. site (si-emil born:si-form) si-tell ++ si-poke @@ -812,9 +983,14 @@ site =. case.icon.room +(case.icon.room) si-tell + :: + ++ si-take-neo + |= syn=sign-neo:neo + ^+ site + site :: (si-emil (take:si-form neo/syn)) ++ si-take-arvo |= syn=sign-arvo - (si-emil (take:si-form arvo/syn)) + site :: (si-emil (take:si-form arvo/syn)) -- -- ++ sock @@ -844,7 +1020,7 @@ ^- (unit room:neo) ?. =(our.bowl ship.name) ~ - (biff (get:of-top pith.name) de-hall-soft:room:neo) + (get:of-top pith.name) ++ kids (desc 0) ++ desc =/ dip @@ -855,17 +1031,13 @@ ^- (list (list dime)) %- zing %+ turn ~(tap by kid.dip) - |= [seg=iota ax=axal:neo] + |= [seg=iota ax=(axal:neo room:neo)] ^- (list (list dime)) =. pith.name (snoc pith.name seg) =/ res ?:(=(depth 0) ~ loop(dip ax, depth +(depth))) ?~ fil.ax :_ res ~[t/(spat (pout pith.name)) t/'Directory' ud/0] - ?. ?=(%room -.u.fil.ax) - res - =/ rom +.u.fil.ax - ~& %found-rom :_ res row:item ++ item @@ -911,7 +1083,8 @@ =/ =shell (~(got by shells) id) |% ++ peel . - ++ abet run(shells (~(put by shells) id shell)) + ++ abet + run(shells (~(put by shells) id shell)) ++ tell ~(. ^tell cwd.shell) ++ race (need race.shell) ++ has-race !=(~ race.shell) @@ -992,7 +1165,7 @@ ?: =(~ kid.dip) ~ %+ turn ~(tap by kid.dip) - |= [seg=iota ax=axal:neo] + |= [seg=iota ax=(axal:neo room:neo)] ^- [@t tank] :_ *tank %+ cat 3 @@ -1015,6 +1188,7 @@ (stag %poke ;~(pfix (jest 'p') ace sym)) :: cd + ;~(pfix wut (cold clay/~ (jest 'clay'))) ;~(pfix hax (cold comm/~ (star prn))) == ++ cd @@ -1063,7 +1237,19 @@ %tree (tree depth.hull) %poke (poke rout.hull) %comm run + %clay clay == + ++ clay + =/ rom (got:of-top pith:get:cwd:peel) + =+ !<([cac=(unit vase) *] state.icon.rom) + =/ desc=@t + ?~ cac + 'No cache' + 'Has cache' + =/ sho=shoe-effect:shoe + [%sole %klr ~[desc]] + (shoe-ef sho) + ++ poke |= rout=@tas ^+ run @@ -1092,7 +1278,7 @@ ++ make-bowl `bowl:pike:neo`[our.bowl get:cwd:peel eny.bowl now.bowl] ++ hike . - ++ start ~& %start ^+(hike (take ~)) + ++ start ^+(hike (take ~)) ++ clot |= =clot:goon:neo ^+ hike @@ -1115,7 +1301,7 @@ %done =/ =pith:neo (en-pith:name:neo get:cwd:peel) =/ =note:neo [pith %poke q.q.value.res] - =. run (poke %noun !>(note)) + =. run (on-note note) =; ef=shoe-effect:shoe =. run (shoe-ef ef) hike diff --git a/pkg/arvo/lib/ford-face.hoon b/pkg/arvo/lib/ford-face.hoon index e4c62b8bbe..e474c3b826 100644 --- a/pkg/arvo/lib/ford-face.hoon +++ b/pkg/arvo/lib/ford-face.hoon @@ -15,6 +15,7 @@ |= =bowl:neo ^- (unit vase) ?~ sut=(get-sut bowl) + ~& missing-sut/were.bowl ~ `u.sut(p [%face (get-face bowl) p.u.sut]) +$ state [cache=(unit vase) ~] diff --git a/pkg/arvo/lib/ford-slop.hoon b/pkg/arvo/lib/ford-slop.hoon index 02e161f71c..137849685c 100644 --- a/pkg/arvo/lib/ford-slop.hoon +++ b/pkg/arvo/lib/ford-slop.hoon @@ -11,8 +11,10 @@ |= =bowl:neo ^- (unit vase) ?~ a=(get-sut %a bowl) + ~& missing-a/were.bowl ~ ?~ b=(get-sut %b bowl) + ~& missing-b/were.bowl ~ `(slop u.a u.b) +$ state [cache=(unit vase) ~] diff --git a/pkg/arvo/lib/hall.hoon b/pkg/arvo/lib/hall.hoon new file mode 100644 index 0000000000..2a8f81efdd --- /dev/null +++ b/pkg/arvo/lib/hall.hoon @@ -0,0 +1,12 @@ +/- neo +|_ =room:neo +++ read + |% + ++ stud *stud:neo + ++ x + ^- ewer + :- stud + state.room + -- +++ + diff --git a/pkg/arvo/lib/pulse.hoon b/pkg/arvo/lib/pulse.hoon index 398d30d240..04fa8fc10b 100644 --- a/pkg/arvo/lib/pulse.hoon +++ b/pkg/arvo/lib/pulse.hoon @@ -69,7 +69,5 @@ :~ [%neo were.bowl %poke %last now.bowl] [%arvo %b %wait (add now.bowl freq.sta)] == - - -- -- diff --git a/pkg/arvo/lib/top.hoon b/pkg/arvo/lib/top.hoon new file mode 100644 index 0000000000..e4c62b8bbe --- /dev/null +++ b/pkg/arvo/lib/top.hoon @@ -0,0 +1,74 @@ +/- neo +=> +|% +++ card card:neo +++ get-face + |= =bowl:neo + ^- @tas + !<(@tas q:(~(got by deps.bowl) %face)) +++ get-sut + |= =bowl:neo + ^- (unit vase) + =+ !<([cac=(unit vase) *] q:(~(got by deps.bowl) %sut)) + cac +++ build + |= =bowl:neo + ^- (unit vase) + ?~ sut=(get-sut bowl) + ~ + `u.sut(p [%face (get-face bowl) p.u.sut]) ++$ state [cache=(unit vase) ~] ++$ poke + $% [%dep ~] + == +-- +^- firm:neo +|% ++$ poke ^poke ++$ state ^state +++ kids ~ +++ deps + =< apex + |% + ++ apex + %- ~(gas by *deps:neo) + :~ sut/sut + face/face + == + ++ sut + [& ,[cache=(unit vase) *] ,*] + ++ face + [& ,@tas ,*] + -- +++ form + ^- form:neo + |_ [=bowl:neo case=@ud state-vase=vase *] + +* sta !<(^state state-vase) + ++ call + |= [old-state=vase act=*] + *(list card) + ++ reduce + |= pok=* + ^- vase + =+ ;;(=^poke pok) + =/ sta sta + =. cache.sta (build bowl) + !>(sta) + ++ init + |= vax=(unit vase) + !>(*^state) + ++ born + =- ~[-] + [%neo were.bowl %poke %dep ~] + ++ echo + |= [=pith val=*] + *(list card:neo) + ++ take + |= =sign:neo + ^- (list card:neo) + ?. ?=([%neo %conf %val @] sign) + !! + =- ~[-] + [%neo were.bowl %poke %dep ~] + -- +-- diff --git a/pkg/arvo/neo/src/our/chat/imp/chat.hoon b/pkg/arvo/neo/src/our/chat/imp/chat.hoon new file mode 100644 index 0000000000..edce92d456 --- /dev/null +++ b/pkg/arvo/neo/src/our/chat/imp/chat.hoon @@ -0,0 +1,85 @@ +/@ message :: message:/~zod/desk/1 <- [p=stud q=*] +/@ chat-diff +/@ chat +/@ sig +=> +|% +++ state chat +++ poke chat-diff +++ card card:neo +-- +^- firm:neo +|% +++ state %chat +++ poke %chat-diff +++ kids + =< apex + |% + ++ apex + %- ~(gas by *kids:neo) + :~ messages + == + ++ messages + :: /messages/[date=@da] + :: /messages/~2023. + :- ~[&/%messages |/%da] + [%message %sig] + -- + +++ deps + =< apex + |% + ++ apex + %- ~(gas by *deps:neo) + :~ open/open + == + ++ open + [required=| %bool %sig] + -- +++ form + ^- form:neo + |_ [=bowl:neo case=@ud state-vase=vase *] + +* sta !<(chat state-vase) + ++ call + |= [old-state=vase act=*] + =+ ;;(=^poke act) + ?: ?=(%dbug -.poke) + ~& dbug/bowl + *(list card) + ?. ?=(%msg -.poke) + *(list card) + =- ~[-] + ^- card + :- %neo + ^- note:neo + :- (welp were.bowl ~[da/now.bowl]) + [%make stud/%message `!>(msg.poke) ~] + ++ reduce + |= pok=* :: XX: vaseify + ^- vase + =+ ;;(=^poke pok) + =/ sta sta + ?. ;;(? +:(~(gut by deps.bowl) %open [*pith &])) + ~&(dropping-poke/poke !>(sta)) + ?> |(=(our src):bowl (~(has in who.sta) src.bowl)) + =- !>(-) + ^- ^state + ?- -.poke + %title sta(title title.poke) + %add sta(who (~(put in who.sta) ship.poke)) + %del sta(who (~(del in who.sta) ship.poke)) + ?(%dbug %msg) sta + == + ++ init + |= old=(unit vase) + !>(*^state) + ++ born *(list card:neo) + ++ echo + :: (echo /messages/~2023 ) + |= [=pith val=*] + *(list card:neo) + ++ take + |= =sign:neo + *(list card:neo) + -- +-- diff --git a/pkg/arvo/neo/src/our/chat/imp/message.hoon b/pkg/arvo/neo/src/our/chat/imp/message.hoon new file mode 100644 index 0000000000..d7834d2895 --- /dev/null +++ b/pkg/arvo/neo/src/our/chat/imp/message.hoon @@ -0,0 +1,50 @@ +/@ message +:: sender ship namesapce (~bus) +:: /messages/1 +:: host ship namespace +:: /chat/foo +:: /chat/foo/messages/1 :: symlink to /+bus/messages/1 +:: +:: /~zod/chat/foo/messages/1 <- [] +:: /~zod/chat/foo/messages/1 <- +:: /~zod/chat/foo/messages/1 <- +:: +:: /~bus/subs/foo -> /~zod/chat/foo +:: +:: [/~bus/subs/foo/messages/1 %make ] +:: possibly optimisticaly update, then forward note to foreign ship +:: +:: %make +:: ^- firm:neo +|% +++ state %message ++$ poke ~ +++ kids *kids:neo +++ deps *deps:neo +++ form + ^- form:neo + |_ [=bowl:neo case=@ud vase-state=vase *] + ++ call + |= [old-state=* act=*] + :: =+ ;;(=action act) + :: ~& call/act + *(list card:neo) + ++ reduce + |= act=* + ^- vase + vase-state + ++ init + |= vas=(unit vase) + ?> ?=(^ vas) + =+ !<(state=message u.vas) + !>(state) + ++ echo + |= [=pith val=*] + *(list card:neo) + ++ born + *(list card:neo) + ++ take + |= =sign:neo + *(list card:neo) + -- +-- diff --git a/pkg/arvo/neo/src/our/chat/pro/chat-diff.hoon b/pkg/arvo/neo/src/our/chat/pro/chat-diff.hoon new file mode 100644 index 0000000000..00304f2d37 --- /dev/null +++ b/pkg/arvo/neo/src/our/chat/pro/chat-diff.hoon @@ -0,0 +1,7 @@ +/@ message +$% [%title title=@t] :: update title + [%add =ship] :: add a ship + [%del =ship] :: delete ship + [%msg msg=message] :: ad a message + [%dbug ~] +== diff --git a/pkg/arvo/neo/src/our/chat/pro/chat.hoon b/pkg/arvo/neo/src/our/chat/pro/chat.hoon new file mode 100644 index 0000000000..a72c8f1a40 --- /dev/null +++ b/pkg/arvo/neo/src/our/chat/pro/chat.hoon @@ -0,0 +1 @@ +,[%0 who=(set ship) title=@t] diff --git a/pkg/arvo/neo/src/std/imp/chat.hoon b/pkg/arvo/neo/src/std/imp/chat.hoon index c2bf8377a0..edce92d456 100644 --- a/pkg/arvo/neo/src/std/imp/chat.hoon +++ b/pkg/arvo/neo/src/std/imp/chat.hoon @@ -1,21 +1,17 @@ -/@ message +/@ message :: message:/~zod/desk/1 <- [p=stud q=*] /@ chat-diff /@ chat /@ sig => |% ++ state chat -++ msg-loc - |= =bowl:neo - ^- path - /(scot %p our.bowl)/base/(scot %da now.bowl)/lib/message/hoon ++ poke chat-diff ++ card card:neo -- ^- firm:neo |% -+$ state %chat -+$ poke %chat-diff +++ state %chat +++ poke %chat-diff ++ kids =< apex |% @@ -23,9 +19,11 @@ %- ~(gas by *kids:neo) :~ messages == - ++ messages + ++ messages + :: /messages/[date=@da] + :: /messages/~2023. :- ~[&/%messages |/%da] - [message sig] + [%message %sig] -- ++ deps @@ -36,7 +34,7 @@ :~ open/open == ++ open - [| ,? ,?] + [required=| %bool %sig] -- ++ form ^- form:neo @@ -57,7 +55,7 @@ :- (welp were.bowl ~[da/now.bowl]) [%make stud/%message `!>(msg.poke) ~] ++ reduce - |= pok=* + |= pok=* :: XX: vaseify ^- vase =+ ;;(=^poke pok) =/ sta sta @@ -77,6 +75,7 @@ !>(*^state) ++ born *(list card:neo) ++ echo + :: (echo /messages/~2023 ) |= [=pith val=*] *(list card:neo) ++ take diff --git a/pkg/arvo/neo/src/std/imp/message.hoon b/pkg/arvo/neo/src/std/imp/message.hoon index f8e5f1e0e2..d7834d2895 100644 --- a/pkg/arvo/neo/src/std/imp/message.hoon +++ b/pkg/arvo/neo/src/std/imp/message.hoon @@ -17,7 +17,7 @@ :: %make :: ^- firm:neo |% -+$ state %message +++ state %message +$ poke ~ ++ kids *kids:neo ++ deps *deps:neo diff --git a/pkg/arvo/sur/neo.hoon b/pkg/arvo/sur/neo.hoon index 07d78def38..64a0239829 100644 --- a/pkg/arvo/sur/neo.hoon +++ b/pkg/arvo/sur/neo.hoon @@ -16,6 +16,25 @@ :: :: |% +:: Total version ++$ ever [node=@ud tree=@ud] +:: $once: reference to version ++$ once $%([%node p=@ud] [%tree p=@ud]) +:: $road: fully qualified path ++$ road [=name =once grab=pith] ++$ tour [=name =ever] +:: +$ pike (each road name) +:: * A `$bolt` is a `[=stud =once]` + ++$ sound + $% [%dep p=term q=pith] + [%sync ~] + == +:: ++$ out + $% [%sync =name =stud] + [%stop =name] + == ++ pave |= p=path ^- pith @@ -23,7 +42,7 @@ |= i=@ta (fall (rush i spot:stip) [%ta i]) :: -++ stip :: typed path parser +++ stip :: typed path parser =< swot |% ++ swot |=(n=nail `(like pith)`(;~(pfix fas (more fas spot)) n)) @@ -240,11 +259,12 @@ ~ `[+.i.pith t.pith] -- -+$ axal - $~ [~ ~] - [fil=(unit hall) kid=(map iota axal)] +++ axal + |$ [item] + [fil=(unit item) kid=(map iota $)] ++ of - |_ fat=axal + =| fat=(axal) + |@ ++ del |= pax=pith ^+ fat @@ -252,6 +272,7 @@ =/ kid (~(get by kid.fat) i.pax) ?~ kid fat fat(kid (~(put by kid.fat) i.pax $(fat u.kid, pax t.pax))) + :: :: Descend to the axal at this path :: ++ dip @@ -263,18 +284,19 @@ $(fat u.kid, pax t.pax) :: ++ gas - |= lit=(list (pair pith hall)) + |* lit=(list (pair pith _?>(?=(^ fil.fat) u.fil.fat))) ^+ fat ?~ lit fat $(fat (put p.i.lit q.i.lit), lit t.lit) - ++ got-room - |= pax=pith - ^- room - (de-hall:room (got pax)) ++ got |= pax=pith ~| missing-room/pax (need (get pax)) + ++ gut + |* [pax=pith dat=*] + => .(dat `_?>(?=(^ fil.fat) u.fil.fat)`dat, pax `pith`pax) + ^+ dat + (fall (get pax) dat) :: ++ get |= pax=pith @@ -308,7 +330,8 @@ fat(kid (~(put by kid.fat) i.pax $(fat u.kid, pax t.pax))) :: ++ put - |= [pax=pith dat=hall] + |* [pax=pith dat=*] + => .(dat `_?>(?=(^ fil.fat) u.fil.fat)`dat, pax `pith`pax) |- ^+ fat ?~ pax fat(fil `dat) =/ kid (~(gut by kid.fat) i.pax ^+(fat [~ ~])) @@ -329,7 +352,7 @@ :: Serialize to map :: ++ tar - (~(gas by *(map pith hall)) tap) + (~(gas by *(map pith _?>(?=(^ fil.fat) u.fil.fat))) tap) -- +$ pate [[%p p=ship] q=pith] ++ petty-port @@ -340,6 +363,7 @@ +$ pish (list dita) +$ conf (map term pith) +$ card + $+ card-neo $% [%arvo note-arvo] [%neo note] == @@ -353,6 +377,7 @@ == +$ update $: =pith + =stud case=@ud =diff == @@ -461,9 +486,8 @@ $+ cell [case=@ud state=vase =span =jail] +$ brig - $+ brig - $~ ~ - (map pith cell) + $+ brig (axal cell) + +$ fleet $+ fleet $~ ~ @@ -499,7 +523,7 @@ +$ bowl $: src=@p our=@p - were=pith + were=pith :: XX: rename to here now=@da deps=(map term (pair pith vase)) kids=(map pith vase)