Commit Graph

120 Commits

Author SHA1 Message Date
Fang
6ac52b5523
chat-cli: set sane display width, if zero
Under mysterious conditions, chat-cli might get into a state where its
rendering width is set to zero. This makes sure we set it back to 80
if that's the case.

This commit is mostly just precaution.
2020-03-16 17:43:46 +01:00
Fang
123213b3be
chat-cli: ensure bound map is sorted
During upgrade, we gassed _in_ a map, instead of _by_, causing it to use
set-style sorting, leading to incorrect lookups.

This fixes that upgrade logic, and re-builds the map for existing instances.
2020-03-13 21:45:49 +01:00
Fang
064131e530
chat-cli: render incoming invites
Also removes message from invites sent from chat-cli,
and refactors a scry.
2020-03-11 21:52:26 +01:00
Fang
dfacd619eb
chat-cli: more-conventional state naming 2020-03-11 00:42:04 +01:00
Fang
22cc6ae629
chat-cli: support un- *and* managed chats
Re-enables chat creation, touches up invite logic, and makes everything
work with the new "un/managed" attribute of chats.

Changes the +target type, so requires state transition. We use that
opportunity to clean up our messages mirror (memory reclamation).

"Unmanaged" chats should work the same as they did before.
Group-based chats are secondary citizens, but supported by prepending
"group " to whatever target you want to use. ie:
;join group ~marzod/secret-club  ::  join a group-based chat
;group ~marzod/secret-club       ::  target a group-based chat

The latter case should be rarely needed, as glyphs remember this
attribute of their bound target.

Creating a group alongside a chat is supported through:
;create village-with-group /cool-kids

You can then invite to that group (and by extension the associated chat)
by doing:
;invite group /cool-kids ~rinsed-walrus
2020-03-11 00:40:21 +01:00
Fang
4740fdd493
chat-cli: use example of state instead of type
This prepares us for versioned state, and is more consistent with modern
app code style.
2020-03-10 23:56:24 +01:00
Fang
2c1539742b
chat-cli: add scry helper 2020-03-10 23:31:18 +01:00
Logan Allen
0d69e17f3b apps: main backend integration between metadata and chat 2020-02-26 14:10:32 -08:00
Isaac Visintainer
00a9eb9eab Merge branch 'master' into os1-rc 2020-02-19 16:04:21 -08:00
Fang
d840c384e1
chat-cli: remove r/w specifiers for invite and banish
No longer supported. As such, we also don't include that in the
permission path anymore.
2020-02-12 15:53:44 +01:00
Fang
27be1861db
chat-cli: no longer allows %mailbox and %journal chats
Also adds in some casts to ensure sane action data. The chat-view-action
changed in this commit should've been nest-failing.
2020-02-11 20:39:14 +01:00
Logan Allen
543420b68e chat: cleanup to change api to accept path instead of ship, path 2020-02-04 15:30:02 -08:00
Fang
da6f27c55c
dbug: augment various apps with /lib/dbug
Also includes lib/verb where it wasn't being used yet.
2020-01-21 12:36:03 -08:00
Jared Tobin
8afad66138
Merge branch 'm/chat-cli-reconnect' (#2147)
* m/chat-cli-reconnect:
  chat-cli: reconnect with actual bowl

Signed-off-by: Jared Tobin <jared@tlon.io>
2020-01-07 04:25:14 +08:00
Fang
0ff2f44f31
chat-cli: reconnect with actual bowl
Fixes a bug introduced in 4798b9d.

This, uh, fell into the same old case of using an arm from a |_ without
initializing that core with a sample first. In this case, that resulted
in the bowl in connect being the default bowl here. This is fine for
~zod, since it's the default ship, but gives incorrect behavior for
anyone else.
2020-01-07 04:21:49 +08:00
Fang
ae8a57ca25
gall: (list path) in %fact and %kick
Instead of providing a (unit path), allows for (list path), which better
supports the "update to path and subpath cases".

For example, if /things wants updates about everything, and
/things/specific wants updates about the specific thing, they'll both
need to receive a %fact when the specific thing changes.
Previously, these would have been two separate moves. Now, gall handles
the multi-targeting for you.
2019-12-23 13:37:32 +01:00
Fang
ea7c1db61c
various: use =/ in place of =+ ^-
Also faceless =; where appropriate.
2019-12-21 14:29:14 -03:30
Fang
4798b9df1f
chat-cli: reconnect to chat-store on-kick
Also reconnects on-load, if no chat-store subscription appears to be
open. This should resolve any current disconnects.
2019-12-21 13:02:33 +01:00
Fang
c814114d93
chat-cli: add trace printf for tuba crashes 2019-12-21 12:59:45 +01:00
Fang
5cd8d98dd6
chat-cli: don't pass mark into +poke-noun 2019-12-21 12:58:22 +01:00
Joe Bryan
c8958a2553 chat: give terminal bell on tab in an empty buffer 2019-12-06 12:03:32 -08:00
Joe Bryan
706d25ba79 chat: don't crash on tab in an empty buffer 2019-12-06 12:02:59 -08:00
Liam Fitzgerald
3f31904595 chat-cli: update tab-complete to static gall 2019-12-05 08:54:18 +10:00
Liam Fitzgerald
bcd94868cb Merge branch 'master' into tab-complete-chat 2019-12-05 08:40:41 +10:00
Fang
e882cd1346
chat-cli: our-self with bowl set
We were calling it directly, rather than through the (initialized) tc core,
causing the bowl in its context to be the *bowl, resulting in [~zod /] audience.
2019-12-04 01:09:39 +01:00
Liam Fitzgerald
9e6b08bbf1 chat-cli: autocomplete on empty command 2019-11-28 15:44:02 +10:00
Liam Fitzgerald
4acc1fe948 chat-cli: use tall-form cencab 2019-11-28 15:23:18 +10:00
Liam Fitzgerald
a53b4861a9 chat-cli: clarify tab completion suggestions 2019-11-28 15:21:51 +10:00
Liam Fitzgerald
6a17812ecc chat-cli: address style issues 2019-11-28 15:15:58 +10:00
Liam Fitzgerald
afc6c11580 chat-cli: add tab autocomplete
adds tab autocomplete with a static list of the chat-cli commands
2019-11-27 18:10:22 +10:00
Logan Allen
6b54bde272 chat-cli: fixed chat-cli bugs 2019-11-26 17:42:24 -08:00
Philip Monk
4d1457bbaa
Merge remote-tracking branch 'origin/master' into philip/mall-real 2019-11-24 00:01:04 -08:00
Fang
1245eb9238
chat-cli: update for sole changes
Now accounts for the leading session identifier in sole-action.
2019-11-23 21:49:23 -08:00
Fang
9da38d21db
chat-cli: use name:title 2019-11-22 13:01:33 +01:00
Fang
78e819fc17
chat-cli: make compatible with sole changes
Still supports only drum's session though.
2019-11-21 19:03:41 +01:00
Fang
8c948725b1
chat-cli: forward-port #1941 2019-11-21 19:03:25 +01:00
Philip Monk
6a406e6b29
gall: mall -> gall 2019-11-18 20:36:21 -08:00
Philip Monk
9862dccc0e
mall: age -> app 2019-11-18 19:28:59 -08:00
Jared Tobin
053c784de6
Merge branch 'chat-history' (#1948)
* chat-history:
  chat: added temporary chat-two-update mark with new %messages type
  chat: oust correctness fix and js style fix
  chat-store: factored out functions used in both message and messages
  chat: style fixes
  chat: fixes to cli parser and increased page size in hook
  chat-js: updated to support %messages events
  sur: added rw-security to replace chat-security
  chat: add history functionality. optionally request backlog.

Signed-off-by: Jared Tobin <jared@tlon.io>
2019-11-19 10:47:40 +08:00
Logan Allen
8421e236df chat: added temporary chat-two-update mark with new %messages type 2019-11-15 15:27:50 -08:00
Logan Allen
223fc8c5b4 chat: fixes to cli parser and increased page size in hook 2019-11-14 13:38:53 -08:00
Logan Allen
dcde20c86c sur: added rw-security to replace chat-security 2019-11-14 10:42:55 -08:00
Logan Allen
9cacb12dbc chat: add history functionality. optionally request backlog. 2019-11-14 10:42:52 -08:00
Fang
b31d5a6dc7
chat-cli: send invites on-;invite
This augments permission management with invite sending, when setting "positive"
permissions. This matches talk's behavior.

Also implements +full:tr, which renders as ~ship/path, even for local targets.
2019-11-13 00:09:18 +01:00
Philip Monk
ae295d445a
mall: rm old apps for easier merging 2019-11-09 16:53:42 -08:00
Jared Tobin
988b3a4785
Merge branch 'philip/tab-complete' (#1899)
* philip/tab-complete:
  auto: gain and lose types on ?:
  auto: handle tab in middle of symbol
  auto: support forks
  auto: support autocomplete inside wings
  auto: fix some crashes on strange wet gates
  auto: support multiline tab completion
  auto: don't look in context of non-gold cores
  easy-print: don't crash if type-check crashes
  dojo, drum: change %tab sole-effect to use tanks
  dojo, auto: move insert-magic logic to lib/auto
  dojo, drum: give tab completion as true output
  dojo: add a better function printer
  dojo: add tab completion

Signed-off-by: Jared Tobin <jared@tlon.io>
2019-11-03 22:09:55 +08:00
Matilde Park
47f0067458
chat-cli: Update ;help link
The link used here resolves with a 301 to the proper page for messaging usage, but not actually the 'messaging' section of that page. This commit provides a more direct link to the exact instructions.
2019-11-02 22:52:06 -04:00
Philip Monk
76b917f426
dojo: add tab completion
This is initial support for type-aware tab completion.  When you hit tab, it tries to complete the word you're in the middle of using a face or arm in the subject at that point in the code.  It also shows all possible matches and their associated types.  It's nearly instantaneous.  Notes:

- It advances to the longest common prefix, so if you hit tab on `ab` and the only possible results are `abcde` and `abcdz`, then it'll write `abcd` and print both out (with their types).

- If there are fewer than ten matches, it prints the type along with the face.  Printing types is too slow to use all the time, but with 10 it's essentially instantaneous.

- The match closest in the subject to you (i.e. smallest axis number) is displayed lowest (closest to your focus).

Examples below, where `<TAB>` represents me hitting tab while my cursor is at that position (the line with the `<TAB>` is not preserved in the actual output).

```
~zod:dojo> eth<TAB>
-----
ethereum        #t/<11.qcl {<3.ltb 27.ipf 7.ecf 36.uek 92.bjk 247.ows 51.mvt 126.xjf 41.mac 1.ane $141> <21.yeb 27.ipf 7.ecf 36.uek 92.bjk 247.ows 51.mvt 126.xjf 41.mac 1.ane $141>}>
ethereum-types  #t/<3.ltb 27.ipf 7.ecf 36.uek 92.bjk 247.ows 51.mvt 126.xjf 41.mac 1.ane $141>
~zod:dojo> ethereum
~zod:dojo> |=  zong=@ud  z<TAB>
-----
zing  #t/<1.dqs {* <126.xjf 41.mac 1.ane $141>}>
zap   #t/<1.iot {tub/{p/{p/@ud q/@ud} q/""} <1.rff {daf/@t <247.ows 51.mvt 126.xjf 41.mac 1.ane $141>}>}>
zuse  #t/$309
zong  #t/@ud
~zod:dojo> |=  zong=@ud  zo<TAB>
-----
zong  #t/@ud
~zod:dojo> |=  zong=@ud  zong
~zod:dojo> <TAB>
hoon-version
trel
quip
pole
unit
qual
lone
... about 600 more lines ...
unity
html
zuse
eny
now
our
~zod:dojo>
```

Functionally, this is in a state where I'd be comfortable shipping it.  It doesn't interfere with anything if you don't press tab, and it's perfectly OTA-able.  I do think its output is a little verbose, but that can be tuned over time as people try it and determine what feels good in practice.

Additional notes:

- There are plenty of similar systems for other languages, but my most direct inspiration is Idris's editor tools.  This is implemented for the dojo, but I actually want it in my editor, which is why the meat is all defind in a library.  I've only tested on dojo one-liners, so I don't know the performance on large blocks of code.

- The default type printer isn't great for this use case.  In particular,
	- Cores should not print anything about their context
  - The `#t/` should go away
  - If it looks like a gate, we should print its return value
  - Maybe special handling for molds, but if the above is done, then for example `bone` is  `* -> @ud`.

- The worst part about our wing ordering is that it really screws up tab completion.  You want to do `point.owner-address` instead of `owner-address.point` because that lets you type `point.ow<TAB>`.  I weakly prefer reading it how we do it now, but it's really not great.  You could do an (dojo-specific?) alternate syntax of `point;owner-address`; this is a simple transformation.

- Regardless of the above, this should handle the case where we're in the middle of defining a wing; it doesn't right now.

- When a variable is shadowed, we show both of them.  We should probably show the shadowed one with a `^`.

- We probably shouldn't print out hundreds of results.  Maybe just the closest 50 with ellipses.

- This gets you any face in your subject, regardless of whether its type is reasonable.  We could limit that some by copying the `gol` logic in mint, so that if the pseudo-backward-inference engine happens to know what type it should be, you can filter the tab results according to if they nest in that type.  This would be "strongly type-aware".
2019-10-30 23:19:25 -07:00
Fang
544d636701
chat-cli: minor code style fixes 2019-10-23 20:40:58 +02:00
Fang
10b2643a50
chat-cli: update prompt on ;join
Fixes #1841.
2019-10-18 15:04:34 +02:00
Logan Allen
b12e305c9c apps: added permission hook and chat-view %join action 2019-10-11 14:09:30 -07:00
Fang
4e963ff23a
chat-cli: maintain sane glyph binding state
This ensures that `binds` is updated to match overwrites in `bounds`.
2019-10-10 23:49:36 +02:00
Fang
31b7331e1e
chat-cli: support per-target glyph unbinding 2019-10-10 23:40:08 +02:00
Fang
e01d59ae4c
chat-cli: properly decode double-bound glyphs
Resolves glyph to most recently seen target.
2019-10-10 22:40:37 +02:00
Fang
cf24f4a80e
chat-cli: try not to double-bind glyphs
Try to use the default glyph.
If that is already in use, random available glyph.
If there's none available, the default glyph.
2019-10-10 22:38:36 +02:00
Fang
86f37ede6c
chat-cli: Remove prep printf 2019-10-09 15:04:51 +02:00
Fang
4dea1068b2
chat-cli: Add clarity 2019-10-09 00:06:39 +02:00
Fang
24859907aa
chat-cli: Cosmetic improvements
Better variable naming. Trailing newline.
2019-10-08 23:00:46 +02:00
Fang
0da8e1efb3
chat-cli: Properly support deleting local chats
Since the current implementation of ;leave is silently destroying state
instead of unsubscribing, we disallow running ;leave on local chats and
provide an explicit ;delete instead.
2019-10-08 22:28:56 +02:00
Fang
42aa035530
chat-cli: Subscribe to /updates instead of /all
On first boot (and debug poke) we scry for /all to ensure we know all
messages.
2019-10-08 22:06:45 +02:00
Fang
9532857ef5
chat: Move eval logic into lib 2019-10-08 22:06:28 +02:00
Fang
c7fbad61ee
chat-cli: Simplify message command type & logic
By dropping support for •-separated multi-messaging, we can simplify
the parsing and handling of message sending inputs.
2019-10-08 20:01:46 +02:00
Fang
dac51a9ed8
chat-cli: Implement permission management
Set security type during ;create. Use ;invite and ;banish to dis/allow
ships from reading and/or writing.

Talks to the group-store to modify permission groups. Scries into
permission-store to check for white- vs blacklist.
2019-10-08 20:01:21 +02:00
Fang
9c562f4c62
chat-cli: Match store and hook's path handling
Now prefixes the host ship to the path, and parses it back out, only
when appropriate.
2019-10-08 16:18:20 +02:00
Fang
10b17ff127
chat-cli: Update prompt on-create
Creating a mailbox would refresh the prompt before setting a new
audience, instead of after. This change corrects the behavior.

Also updates glyph binding code and print style.
2019-10-08 16:15:19 +02:00
Fang
12050d44a8
chat-cli: Add debug poke for connecting to store 2019-10-07 20:46:35 +02:00
Fang
03b5a1cd71
chat-cli: Support %url and %me message types 2019-10-07 20:45:58 +02:00
Fang
c0d07fa14a
chat-cli: Clean up code
Renames, refactors, and occasionally rewrites many of the arms used
within the application. Splits +sh into +sh-in and +sh-out, improves
naming for rendering cores, moves arms around for better organization,
and adds descriptions to all arms.
2019-10-07 16:31:10 +02:00
Fang
7911061dab
chat-cli: Make more fully-featured
Brings it largely up to parity with Talk, save for features relating to:
- presence & nicknames
- circle management (permissions, sources)
- deprecated message types

In addition to implementing remaining functionality for basic usage
patterns, makes the following changes:
- glyphs per target, not multiple targets
- assume /~ship/path paths are created/used by the chat-hook

Code cleanup pending.
2019-10-07 16:09:22 +02:00
Fang
07454e2327
apps: Add WIP chat-cli 2019-10-07 16:09:14 +02:00