dalten-collective / peat Goto Github PK
View Code? Open in Web Editor NEWpeat-chat peat-chat peat-chat
peat-chat peat-chat peat-chat
If I submit anything other than valid hepped tas-style-names
, the poke fails. Is this expected?
There's a reason for this - not wanting to futz with graph-push-hook to have my will be done.
Deal with it, probably. ๐
Use the included test graphs to complete the following tests.
Each graph attempts to exercise at least some complexity. There are edited posts in the notebooks, comments in links and notebooks, and deletions in all of them. However, our goal is not perfect fidelity of the medium, but "good enough" fidelity. We cannot accommodate all possible erratic kinds of graph-store
content, but we believe we have most of them accurately handled.
%oger
locally on your test ship.|mount %oger
%oger
directory and |commit %oger
|install our %oger
on one test ship then :treaty|publish %oger
on that same ship|install <that-ship> %oger
on another ship, so you have two ships running the same copy of %oger
Copy this format into a comment below this head and enter your results.
a-group
and b-group
[Import ๐ค]
my-chat-123
), enter a-chat
or a-link
or a-note
(depending on which you want you test)a
or b
) from the drop down menumy-new-chat
) type whatever[Import ๐ค]
[Export ๐ฅ]
[Export ๐ฅ]
I could see all of my graphs, including imported ones. This fails unless you trigger a %keys
event, which doesn't happen because I'm not using graph-push-hook
- create a chat naturally through the frontend and it'll kick.
[Export ๐ฅ]
next to a graph, you're able to export it as a file - your dojo will prompt something like:
%oger-import
-import-starting
-group: [entity=~wet name=%b-group]
-resource: [~zod %fukin-notes]
/path/to/pier/.urb/put
directoryname|graph|type|#
formatGive your partner enthusiastic consent!
[Permit โ๏ธ]
@p
[Permit โ๏ธ]
[Permit โ๏ธ]
again, I see the person I entered in a list with a ๐ซ icon next to their name[Remove ๐ซ]
next to their name and confirm that it removes them from that list[Search ๐]
(the main tile, or enter the ship name that you permitted and click search - but you'll have to do it twice then)This is very much like importing - you should be able to understand the interface from here
DM file import will ignore group requirement.
But there is currently no way to export DMs through the UI. need to add this.
Peat has been redesigned in the feature-interface iteration to work using a JavaScript Front End. There are some subscriptions and many json friendly scry endpoints, as documented below
Subscription path is /website
- we should consider that we could have more than one path for this - main data and diffs - if easier to handle. Also maybe other patterns to explore there.
+on-watch
(i.e. first watch):{ 'saved' : <saved> , 'given' : <given>, 'doled' : <doled>, 'known' : <known> }
{
'date-of-last-save-as seconds timestamp' :
{
'entity' : <host>,
'name' : <graph name>,
'frequency' : <frequency of saves>,
'last-index-captured' : <seconds timestamp of last post that was captured (bear in mind this doesn't track necessarily w/ the last time a save was attempted)>
}
}
{
'~sahrer-palnet' :
{
'shape' : <%chat, %link, %publish or %dm>,
'resources' : <array of { 'entity' : '~ship' , 'name' : 'the-graph-name'}>
}
}
{
<'chat' 'link' 'publish' or 'dm'> :
{
'group' : 'ungrouped' // or { 'entity' : '~zod', 'name' : 'a graph' },
'resources' : <array of { 'entity' : '~ship' , 'name' : 'the-graph-name'}>
}
}
[%export *]
- Performed both on one-time export, and on the recurring exports (below, showing a 36 hour backup schedule)
{
'diff-export' :
{
'resource' : { 'entity' : '~zod' , 'name' : '%a-backed-up-chat' },
'frequency' : <'once' _or_ { 'days' : 1, 'hours' : 12, 'minutes' : 0 }>
}
}
[%cancel *]
{
'diff-cancel-export' :
{
'entity' : '~zod',
'name' : 'a-chat'
}
}
[%import *]
{
'diff-import' :
{
'group' : { 'entity': '~zod' , 'name' : 'a-group' },
'resource' : { 'entity': '~zod' , 'name' : 'a-chat' },
'path' : '/our/peat/now/hav/imported-resource'
}
}
[%permit *]
{
'doled' : <same as on-watch, doled sub-element>
}
[%record ~]
- does not fire immediately, instead agent watches another and then gets an
{
'diff-hav' :
{
'ship' : '~host-ship',
'shape' : <%chat %publish %link %dm>,
'resources' : <array of resources as { 'entity' : '~host', 'name' : 'graph-name'}>
}
}
%kil
:
{
'diff-kil' :
{
<same as a hav, but indicating that you no longer have access to those things>
}
}
[%remove *]
<same as permit but indicating a change to dis-include some parties - rather than a true diff>
[%remake *]
- not immediately, on receipt of the facts
{
'diff-remake' :
{
'group' : { 'entity': '~zod' , 'name' : 'a-group' },
'resource' : { 'entity': '~zod' , 'name' : 'a-chat' },
}
}
[%depart *]
{
'diff-left' : '~wet'
}
[%x %saved ~]
- same as on first load[%x %given ~]
- same as on first load[%x %doled ~]
- same as on first load[%x %known ~]
- same as on first load[%x %given @ ~]
- specify a ship and see just the graphs you've had shared with you, from them, paginated by shape[%x %doled @ ~]
- specify a ship and see all graphs you've shared with that ship, paginated by shape[%x %known @ ~]
- specify a shape and see all groups w/ graphs in that shape, and those graphs (As a mapping thereof)shape
, or recipient & shape
, or shape
and (unit resource)
[%x %given @ @ ~]
- specify host (granting access) and shape, see set resources available of that shape from that host[%x %doled @ @ ~]
- specify the recipient and shape, see set resources you've shared w/ that recipient[%x %known @ <~ [@ @ ~]>]
- specify the shape and either no or some group, see the resources in that group, of that shape[%x %hav ~]
- all of the backups that have been committed into the /hav directory of the desk, which is where I expect users to load import files (we'll direct them in the %docs
)[%x admin ~]
- What groups am I an admin in? these are the groups I can add graphs to natively. Otherwise I have to make a new group!To understand the available pokes and the workflow of the system, best that we understand the state:
saved
(map resource [@da @dr])
jag
s are a new structure for hoon that have their own associated library, /lib/jag/hoon
. jag
s are a (map kex (jug key val))
. For each key, you can store a (jug key val)
, meaning multiple subordinate keys and corresponding set
s of val
ues.
given
(jag ship shape resource)
jag
of ship
s who have shared graphs with you to shape
s (or <%chat %link %dm %publish>) of graphs, to set
s of resource
s they shared, in that shape.doled
(jag ship shape resource)
known
note the different structure here (jag shape (unit resource) resource)
Note: Peat takes care of removed graphs by informing people you've shared them with of the loss of that resource
[%export res=resource rec=(unit @dr)]
Note: Minimum 12 hours, can't set the same time twice - must change.
{
'export' :
{
'resource' : { 'entity' : '~zod', 'name' : 'a-chat' }
'frequency' : <either 'fuck-you' or 'anything, literally' or '~d1.h2' etc for a time>
}
}
[%cancel res=resource]
/.urb/put
){
'cancel' : { 'entity' : '~zod' , 'name' : 'a-chat' }
}
Note:
[%x %hav ~]
scry, which provides you all of the backups you've commited to the/=peat=/hav
directory - this is where users should put folders of their backups that they want to import, eventually we'll do that for them.
Note:[%x %admin ~]
scry, which provides you with all groups in which you are an admin, for the purposes ofgro=(each resource term)
.
[%import fol=path gro=(each resource term) wer=term]
fol
should just be the subdirectory of /hav
that they want to import, use the scry!gro
can be either an extant group of which you are an admin{
'import' :
{
'folder': '/a-chat'
'group' : 'new-group',
'new-resource-name': 'new-chat',
}
}
{
'import' :
{
'folder': '/a-chat'
'group' : '~zod old-group',
'new-resource-name': 'new-chat',
}
}
NOTE: Same as remove, so remove is not documented here
[%permit per=(set ship) rys=(set resource)]
rys
of resources you have (you must have them, actively, in graph store) with per
such that they can elect to remake it if they choose - does not force them to take any action{
'permit' :
{
'ships' : <array of '~zod' '~wet'>,
'resources' : <array of { 'entity' : '~zod', 'name' : 'a-chat' }>
}
}
Note: Not a user action, poking it to yourself won't do anything.
Note:
known
has all the graphs you're familiar w/ locally,given
has those you've been... given
Note:[%x %admin ~]
scry, which provides you with all groups in which you are an admin, for the purposes ofgro=(each resource term)
.
[%o p={[p='remake' q=[%o p={[p='group' q=[%s p='~zod group']] [p='new-resource-name' q=[%s p='new-res-name']] [p='remake-resource' q=[%s p='~zod old-res']]}]]}]
[%o p={[p='remake' q=[%o p={[p='group' q=[%s p='~zod group']] [p='new-resource-name' q=[%s p='new-resource']] [p='remake-resource' q=[%s p='~sharer shape ~host resource-name']]}]]}]
If I have a resource in the DOG GROUP
named pet-chat
and I export it, I'll get a .urb/put/pet-chat
directory with some contents.
If I have another resource in the CAT GROUP
named pet-chat
and I export it, what happens to .urb/put/pet-chat
?
We have a delay-card thread for crow that would work fine here, though it could be done more purposefully for this implementation.
Also, I kinda don't want to - it's fine.
/hav
so we don't distribute themSeems to happen with all resource shapes.
example stacktrace response when trying to import a link collection to an existing group I admin:
/app/peat/hoon:<[783 7].[812 9]>
/app/peat/hoon:<[782 7].[812 9]>
/app/peat/hoon:<[780 9].[812 9]>
/app/peat/hoon:<[780 5].[925 7]>
/app/peat/hoon:<[97 11].[97 54]>
/app/peat/hoon:<[96 11].[97 54]>
/app/peat/hoon:<[88 9].[114 11]>
/app/peat/hoon:<[87 6].[115 19]>
/app/peat/hoon:<[86 6].[115 19]>
/app/peat/hoon:<[84 5].[116 7]>
/app/peat/hoon:<[83 5].[116 7]>
/sys/vane/gall/hoon:<[1.372 9].[1.372 37]>
<form location="upload">
works in globbed version for file upload (I had to work around this in funny ways to deal with vite proxying, can't test properly in dev)the things around admin
in this app often only check for name, not also entity. will need to extend that to act on the pair.
DMs don't show up in the UI as something that can be exported. Do we care?
web+urbitgraph://group/~hoster-dozzod-dacwet/urbit-media/graph/~hoster-dozzod-dacwet/dot-7168/170141184505797752106847845419900207104
~ricsul-bilwyt would like an option to export many (maybe all) resources at once.
kicking off many threads may be a good option (and probably the only way to do this i guess). Would likely want to have this work with the filters - that is, apply some filters and then "export all visible" or something.
Graphs shared with us from other users may be partial copies of a large whole. It should be possible to reconcile the best-understanding of a graph, based on multiple shared copies. A (jug [resource shape] ship) is probably sufficient.
Bug report from ~rabsef-bicrym:
((probably not appropriately updating the Known store after import))
console.log
sOr some other way to handle this poor UI.
ideas:
NGINX has a default 1MB upload limit. for a ship on this kind of hosting, uploading a large files of jams will fail.
possible fix: have the front-end upload the jams in x batches under the 1MB limit?
/hav
, from upload
)relies on #28
Once pushing to and pulling from an external source is possible (#28), then we could add shareable "template" resources:
A user could create a notebook or collection - perhaps a template for a knowledge base, or a static list of mental health resources for new groups to start with, whatever people might need - then export this set of resources to S3 and create an instance of a (new concept to be built) Shared Collection and optionally whitelist some ships.
Long ago we had discussed a kind of "automated onboarding" that would allow someone to start a group for X concern (the example at the time was local LGBTQ support groups). By installing Peat and subscribing to some known Shared Collection, a newly-formed entity that wishes to provide these resources could do so by importing from said Shared Collection.
Perhaps the "installing Peat and subscribing..." process could even be automated in a custom pill...
When searching for a resource, the text in the search box does not keep up with my typing speed. Once I stop typing and wait ~1 second, all the input text appears at once.
It seems like everything updates all at once, both search results and the text field.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.