Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Conversation

@ashelkovnykov
Copy link
Collaborator

Resolves #197

click = cli for conn.c & Khan

I didn't know where it should live, so for now I put it into a bin folder in root Vere. Overview:

Usage:
    click [options] <path-to-pier> <hoon> [<dependencies> ...]
    click [options] -i <path-to-file> <path-to-pier> [<dependencies> ...]
    click [-o|-p] -e -i <path-to-file> <path-to-pier>

    Thin client for interacting with running Urbit ship via conn.c

    options:
        -e                  Execute jammed Hoon
        -h                  Show usage info
        -i <path-to-file>   Read input from file
        -j                  Jam only
        -k                  Execute command using "khan-eval" thread
        -o <path-to-file>   Output to file
        -p                  Filter failure stack traces from result and pretty-print them to stderr
        -x                  Jam to hex

Where:

  • -e reuses a pre-jammed noun
  • -j creates a pre-jammed noun
  • -k calls the input Hoon using the "khan-eval" thread, which parses the Hoon as thread code and calls it from a child thread
  • -p returns failed threads as just %.n, printing the stacktrace to stderr instead of returning it to click

Will add a commit with unit tests shortly. The following commands operate correctly:

./bin/click ~/Urbit/test-piers/zod '42'
./bin/click ~/Urbit/test-piers/zod $'(cat 3 \\\'abc\\\' \\\'def\\\')'
./bin/click ~/Urbit/test-piers/zod '(gad 2 2)' '/lib/gad/hoon'
./bin/click -k ~/Urbit/test-piers/zod $'=/  m  (strand ,vase)  ;<  ~  bind:m  (poke [~zod %hood] %helm-hi !>(\\\'\\\'))  (pure:m !>(\\\'success\\\'))'
./bin/click -k -p ~/Urbit/test-piers/zod $'=/  m  (strand ,vase)  ;<  vax=vase  bind:m  (eval-hoon [%zpzp ~] ~)  (pure:m !>(\\\'success\\\'))'

./bin/click -j ~/Urbit/test-piers/zod '42'
./bin/click -jx ~/Urbit/test-piers/zod '42'

./bin/click -o tmp.txt ~/Urbit/test-piers/zod '42'

./bin/click -i txt/cat.txt ~/Urbit/test-piers/zod
./bin/click -k -i txt/poke.txt ~/Urbit/test-piers/zod
./bin/click -k -j -i txt/poke.txt -o /tmp/poke.jam ~/Urbit/test-piers/zod && ./bin/click -e -i /tmp/poke.jam ~/Urbit/test-piers/zod
./bin/click -k -j -i txt/err.txt -o /tmp/err.jam ~/Urbit/test-piers/zod && ./bin/click -e -i /tmp/err.jam -p ~/Urbit/test-piers/zod

@ashelkovnykov ashelkovnykov requested a review from a team as a code owner March 11, 2023 09:35
@mcevoypeter
Copy link

bin/click zod '42' is producing the following error for me:
(Ship side):

$ zod/.run
<snip>
conn: fyrd 0v0
clay: read-at-aeon fail [desk=%base care=%b case=[%da p=~2023.3.13..17.23.46..6ffe] path=/ted-eval]
clay: no files match /mar/ted-eval/hoon
[%error-building-mark %ted-eval]
[%error-building-dais %ted-eval]
conn: bail 1

[%poke %crud]
bar-stack=~[~[//khan/0v1g.bk2l8/1/0v0]]
call: failed
/sys/vane/khan/hoon:<[128 3].[148 5]>
/sys/vane/khan/hoon:<[130 3].[148 5]>
/sys/vane/khan/hoon:<[131 3].[148 5]>
/sys/vane/khan/hoon:<[132 5].[132 41]>
%khan-call-dud
/sys/vane/khan/hoon:<[132 23].[132 40]>
/sys/vane/khan/hoon:<[78 26].[78 28]>
[%mark-invalid %ted-eval]
/sys/vane/khan/hoon:<[78 5].[78 29]>
/sys/vane/khan/hoon:<[77 3].[80 26]>
/sys/vane/khan/hoon:<[75 3].[80 26]>
/sys/vane/khan/hoon:<[74 3].[80 26]>
/sys/vane/khan/hoon:<[143 21].[143 53]>
/sys/vane/khan/hoon:<[143 5].[147 51]>
/sys/vane/khan/hoon:<[142 5].[147 51]>
/sys/vane/khan/hoon:<[141 5].[147 51]>
/sys/vane/khan/hoon:<[140 5].[147 51]>
/sys/vane/khan/hoon:<[133 3].[148 5]>
/sys/vane/khan/hoon:<[131 3].[148 5]>
/sys/vane/khan/hoon:<[130 3].[148 5]>
/sys/vane/khan/hoon:<[128 3].[148 5]>
call: failed
bar-stack=~[~[//khan/0v1g.bk2l8/1/0v0]]
[%poke %fyrd]
conn: bail: %exit
conn: bail 2

[%poke %fyrd]
bar-stack=~[~[//khan/0v1g.bk2l8/1/0v0]]
call: failed
/sys/vane/khan/hoon:<[128 3].[148 5]>
/sys/vane/khan/hoon:<[130 3].[148 5]>
/sys/vane/khan/hoon:<[131 3].[148 5]>
/sys/vane/khan/hoon:<[133 3].[148 5]>
/sys/vane/khan/hoon:<[140 5].[147 51]>
/sys/vane/khan/hoon:<[141 5].[147 51]>
/sys/vane/khan/hoon:<[142 5].[147 51]>
/sys/vane/khan/hoon:<[143 5].[147 51]>
/sys/vane/khan/hoon:<[143 21].[143 53]>
/sys/vane/khan/hoon:<[74 3].[80 26]>
/sys/vane/khan/hoon:<[75 3].[80 26]>
/sys/vane/khan/hoon:<[77 3].[80 26]>
/sys/vane/khan/hoon:<[78 5].[78 29]>
[%mark-invalid %ted-eval]
/sys/vane/khan/hoon:<[78 26].[78 28]>
conn: bail: %exit
conn: %fyrd event on /khan/0v1g.bk2l8/1/0v0 failed

(click side):

$ bin/click zod '2'
loom: mapped 2048MB
loom: mapped 2048MB
lite: arvo formula 2a2274c9
lite: core 4bb376f0
lite: final state 4bb376f0
eval (jam, newt):
lite: arvo formula 2a2274c9
lite: core 4bb376f0
lite: final state 4bb376f0
eval (cue, newt):
[0 %bail [%exit [%rose [[32 0] [91 0] 93 0] [%leaf 37 112 111 107 101 0] [%leaf 37 102 121 114 100 0] 0] [%palm [[61 0] 0 0 0] [%leaf 98 97 114 45 115 116 97 99 107 0] [%rose [[32 0] [126 91 0] 93 0] [%rose [[32 0] [126 91 0] 93 0] [%rose [[47 0] [47 0] 0] [%leaf 0] [%leaf 107 104 97 110 0] [%leaf 48 118 49 103 46 98 107 50 108 56 0] [%leaf 49 0] [%leaf 48 118 48 0] 0] 0] 0] 0] [%leaf 99 97 108 108 58 32 102 97 105 108 101 100 0] [%rose [[58 0] 0 0] [%rose [[47 0] [47 0] 0] [%leaf 115 121 115 0] [%leaf 118 97 110 101 0] [%leaf 107 104 97 110 0] [%leaf 104 111 111 110 0] 0] [%leaf 60 91 49 50 56 32 51 93 46 91 49 52 56 32 53 93 62 0] 0] [%rose [[58 0] 0 0] [%rose [[47 0] [47 0] 0] [%leaf 115 121 115 0] [%leaf 118 97 110 101 0] [%leaf 107 104 97 110 0] [%leaf 104 111 111 110 0] 0] [%leaf 60 91 49 51 48 32 51 93 46 91 49 52 56 32 53 93 62 0] 0] [%rose [[58 0] 0 0] [%rose [[47 0] [47 0] 0] [%leaf 115 121 115 0] [%leaf 118 97 110 101 0] [%leaf 107 104 97 110 0] [%leaf 104 111 111 110 0] 0] [%leaf 60 91 49 51 49 32 51 93 46 91 49 52 56 32 53 93 62 0] 0] [%rose [[58 0] 0 0] [%rose [[47 0] [47 0] 0] [%leaf 115 121 115 0] [%leaf 118 97 110 101 0] [%leaf 107 104 97 110 0] [%leaf 104 111 111 110 0] 0] [%leaf 60 91 49 51 51 32 51 93 46 91 49 52 56 32 53 93 62 0] 0] [%rose [[58 0] 0 0] [%rose [[47 0] [47 0] 0] [%leaf 115 121 115 0] [%leaf 118 97 110 101 0] [%leaf 107 104 97 110 0] [%leaf 104 111 111 110 0] 0] [%leaf 60 91 49 52 48 32 53 93 46 91 49 52 55 32 53 49 93 62 0] 0] [%rose [[58 0] 0 0] [%rose [[47 0] [47 0] 0] [%leaf 115 121 115 0] [%leaf 118 97 110 101 0] [%leaf 107 104 97 110 0] [%leaf 104 111 111 110 0] 0] [%leaf 60 91 49 52 49 32 53 93 46 91 49 52 55 32 53 49 93 62 0] 0] [%rose [[58 0] 0 0] [%rose [[47 0] [47 0] 0] [%leaf 115 121 115 0] [%leaf 118 97 110 101 0] [%leaf 107 104 97 110 0] [%leaf 104 111 111 110 0] 0] [%leaf 60 91 49 52 50 32 53 93 46 91 49 52 55 32 53 49 93 62 0] 0] [%rose [[58 0] 0 0] [%rose [[47 0] [47 0] 0] [%leaf 115 121 115 0] [%leaf 118 97 110 101 0] [%leaf 107 104 97 110 0] [%leaf 104 111 111 110 0] 0] [%leaf 60 91 49 52 51 32 53 93 46 91 49 52 55 32 53 49 93 62 0] 0] [%rose [[58 0] 0 0] [%rose [[47 0] [47 0] 0] [%leaf 115 121 115 0] [%leaf 118 97 110 101 0] [%leaf 107 104 97 110 0] [%leaf 104 111 111 110 0] 0] [%leaf 60 91 49 52 51 32 50 49 93 46 91 49 52 51 32 53 51 93 62 0] 0] [%rose [[58 0] 0 0] [%rose [[47 0] [47 0] 0] [%leaf 115 121 115 0] [%leaf 118 97 110 101 0] [%leaf 107 104 97 110 0] [%leaf 104 111 111 110 0] 0] [%leaf 60 91 55 52 32 51 93 46 91 56 48 32 50 54 93 62 0] 0] [%rose [[58 0] 0 0] [%rose [[47 0] [47 0] 0] [%leaf 115 121 115 0] [%leaf 118 97 110 101 0] [%leaf 107 104 97 110 0] [%leaf 104 111 111 110 0] 0] [%leaf 60 91 55 53 32 51 93 46 91 56 48 32 50 54 93 62 0] 0] [%rose [[58 0] 0 0] [%rose [[47 0] [47 0] 0] [%leaf 115 121 115 0] [%leaf 118 97 110 101 0] [%leaf 107 104 97 110 0] [%leaf 104 111 111 110 0] 0] [%leaf 60 91 55 55 32 51 93 46 91 56 48 32 50 54 93 62 0] 0] [%rose [[58 0] 0 0] [%rose [[47 0] [47 0] 0] [%leaf 115 121 115 0] [%leaf 118 97 110 101 0] [%leaf 107 104 97 110 0] [%leaf 104 111 111 110 0] 0] [%leaf 60 91 55 56 32 53 93 46 91 55 56 32 50 57 93 62 0] 0] [%rose [[32 0] [91 0] 93 0] [%leaf 37 109 97 114 107 45 105 110 118 97 108 105 100 0] [%leaf 37 116 101 100 45 101 118 97 108 0] 0] [%rose [[58 0] 0 0] [%rose [[47 0] [47 0] 0] [%leaf 115 121 115 0] [%leaf 118 97 110 101 0] [%leaf 107 104 97 110 0] [%leaf 104 111 111 110 0] 0] [%leaf 60 91 55 56 32 50 54 93 46 91 55 56 32 50 56 93 62 0] 0] [%rose [[58 0] 0 0] [%rose [[47 0] [47 0] 0] [%leaf 115 121 115 0] [%leaf 118 97 110 101 0] [%leaf 107 104 97 110 0] [%leaf 104 111 111 110 0] 0] [%leaf 60 91 49 51 50 32 50 51 93 46 91 49 51 50 32 52 48 93 62 0] 0] [%leaf 37 107 104 97 110 45 99 97 108 108 45 100 117 100 0] [%rose [[58 0] 0 0] [%rose [[47 0] [47 0] 0] [%leaf 115 121 115 0] [%leaf 118 97 110 101 0] [%leaf 107 104 97 110 0] [%leaf 104 111 111 110 0] 0] [%leaf 60 91 49 51 50 32 53 93 46 91 49 51 50 32 52 49 93 62 0] 0] [%rose [[58 0] 0 0] [%rose [[47 0] [47 0] 0] [%leaf 115 121 115 0] [%leaf 118 97 110 101 0] [%leaf 107 104 97 110 0] [%leaf 104 111 111 110 0] 0] [%leaf 60 91 49 51 49 32 51 93 46 91 49 52 56 32 53 93 62 0] 0] [%rose [[58 0] 0 0] [%rose [[47 0] [47 0] 0] [%leaf 115 121 115 0] [%leaf 118 97 110 101 0] [%leaf 107 104 97 110 0] [%leaf 104 111 111 110 0] 0] [%leaf 60 91 49 51 48 32 51 93 46 91 49 52 56 32 53 93 62 0] 0] [%rose [[58 0] 0 0] [%rose [[47 0] [47 0] 0] [%leaf 115 121 115 0] [%leaf 118 97 110 101 0] [%leaf 107 104 97 110 0] [%leaf 104 111 111 110 0] 0] [%leaf 60 91 49 50 56 32 51 93 46 91 49 52 56 32 53 93 62 0] 0] [%leaf 99 97 108 108 58 32 102 97 105 108 101 100 0] [%palm [[61 0] 0 0 0] [%leaf 98 97 114 45 115 116 97 99 107 0] [%rose [[32 0] [126 91 0] 93 0] [%rose [[32 0] [126 91 0] 93 0] [%rose [[47 0] [47 0] 0] [%leaf 0] [%leaf 107 104 97 110 0] [%leaf 48 118 49 103 46 98 107 50 108 56 0] [%leaf 49 0] [%leaf 48 118 48 0] 0] 0] 0] 0] [%rose [[32 0] [91 0] 93 0] [%leaf 37 112 111 107 101 0] [%leaf 37 99 114 117 100 0] 0] 0] [%exit [%rose [[58 0] 0 0] [%rose [[47 0] [47 0] 0] [%leaf 115 121 115 0] [%leaf 118 97 110 101 0] [%leaf 107 104 97 110 0] [%leaf 104 111 111 110 0] 0] [%leaf 60 91 55 56 32 50 54 93 46 91 55 56 32 50 56 93 62 0] 0] [%rose [[32 0] [91 0] 93 0] [%leaf 37 109 97 114 107 45 105 110 118 97 108 105 100 0] [%leaf 37 116 101 100 45 101 118 97 108 0] 0] [%rose [[58 0] 0 0] [%rose [[47 0] [47 0] 0] [%leaf 115 121 115 0] [%leaf 118 97 110 101 0] [%leaf 107 104 97 110 0] [%leaf 104 111 111 110 0] 0] [%leaf 60 91 55 56 32 53 93 46 91 55 56 32 50 57 93 62 0] 0] [%rose [[58 0] 0 0] [%rose [[47 0] [47 0] 0] [%leaf 115 121 115 0] [%leaf 118 97 110 101 0] [%leaf 107 104 97 110 0] [%leaf 104 111 111 110 0] 0] [%leaf 60 91 55 55 32 51 93 46 91 56 48 32 50 54 93 62 0] 0] [%rose [[58 0] 0 0] [%rose [[47 0] [47 0] 0] [%leaf 115 121 115 0] [%leaf 118 97 110 101 0] [%leaf 107 104 97 110 0] [%leaf 104 111 111 110 0] 0] [%leaf 60 91 55 53 32 51 93 46 91 56 48 32 50 54 93 62 0] 0] [%rose [[58 0] 0 0] [%rose [[47 0] [47 0] 0] [%leaf 115 121 115 0] [%leaf 118 97 110 101 0] [%leaf 107 104 97 110 0] [%leaf 104 111 111 110 0] 0] [%leaf 60 91 55 52 32 51 93 46 91 56 48 32 50 54 93 62 0] 0] [%rose [[58 0] 0 0] [%rose [[47 0] [47 0] 0] [%leaf 115 121 115 0] [%leaf 118 97 110 101 0] [%leaf 107 104 97 110 0] [%leaf 104 111 111 110 0] 0] [%leaf 60 91 49 52 51 32 50 49 93 46 91 49 52 51 32 53 51 93 62 0] 0] [%rose [[58 0] 0 0] [%rose [[47 0] [47 0] 0] [%leaf 115 121 115 0] [%leaf 118 97 110 101 0] [%leaf 107 104 97 110 0] [%leaf 104 111 111 110 0] 0] [%leaf 60 91 49 52 51 32 53 93 46 91 49 52 55 32 53 49 93 62 0] 0] [%rose [[58 0] 0 0] [%rose [[47 0] [47 0] 0] [%leaf 115 121 115 0] [%leaf 118 97 110 101 0] [%leaf 107 104 97 110 0] [%leaf 104 111 111 110 0] 0] [%leaf 60 91 49 52 50 32 53 93 46 91 49 52 55 32 53 49 93 62 0] 0] [%rose [[58 0] 0 0] [%rose [[47 0] [47 0] 0] [%leaf 115 121 115 0] [%leaf 118 97 110 101 0] [%leaf 107 104 97 110 0] [%leaf 104 111 111 110 0] 0] [%leaf 60 91 49 52 49 32 53 93 46 91 49 52 55 32 53 49 93 62 0] 0] [%rose [[58 0] 0 0] [%rose [[47 0] [47 0] 0] [%leaf 115 121 115 0] [%leaf 118 97 110 101 0] [%leaf 107 104 97 110 0] [%leaf 104 111 111 110 0] 0] [%leaf 60 91 49 52 48 32 53 93 46 91 49 52 55 32 53 49 93 62 0] 0] [%rose [[58 0] 0 0] [%rose [[47 0] [47 0] 0] [%leaf 115 121 115 0] [%leaf 118 97 110 101 0] [%leaf 107 104 97 110 0] [%leaf 104 111 111 110 0] 0] [%leaf 60 91 49 51 51 32 51 93 46 91 49 52 56 32 53 93 62 0] 0] [%rose [[58 0] 0 0] [%rose [[47 0] [47 0] 0] [%leaf 115 121 115 0] [%leaf 118 97 110 101 0] [%leaf 107 104 97 110 0] [%leaf 104 111 111 110 0] 0] [%leaf 60 91 49 51 49 32 51 93 46 91 49 52 56 32 53 93 62 0] 0] [%rose [[58 0] 0 0] [%rose [[47 0] [47 0] 0] [%leaf 115 121 115 0] [%leaf 118 97 110 101 0] [%leaf 107 104 97 110 0] [%leaf 104 111 111 110 0] 0] [%leaf 60 91 49 51 48 32 51 93 46 91 49 52 56 32 53 93 62 0] 0] [%rose [[58 0] 0 0] [%rose [[47 0] [47 0] 0] [%leaf 115 121 115 0] [%leaf 118 97 110 101 0] [%leaf 107 104 97 110 0] [%leaf 104 111 111 110 0] 0] [%leaf 60 91 49 50 56 32 51 93 46 91 49 52 56 32 53 93 62 0] 0] [%leaf 99 97 108 108 58 32 102 97 105 108 101 100 0] [%palm [[61 0] 0 0 0] [%leaf 98 97 114 45 115 116 97 99 107 0] [%rose [[32 0] [126 91 0] 93 0] [%rose [[32 0] [126 91 0] 93 0] [%rose [[47 0] [47 0] 0] [%leaf 0] [%leaf 107 104 97 110 0] [%leaf 48 118 49 103 46 98 107 50 108 56 0] [%leaf 49 0] [%leaf 48 118 48 0] 0] 0] 0] 0] [%rose [[32 0] [91 0] 93 0] [%leaf 37 112 111 107 101 0] [%leaf 37 102 121 114 100 0] 0] 0] 0]

@ashelkovnykov
Copy link
Collaborator Author

@mcevoypeter The error message says that you're missing the ted-eval mark which was added in this PR. Looks like that PR is still on binnec, since we missed release last week due to the Volcano Summit. It should go out to marnec tomorrow, and then see release next Tuesday. However, that unfortunately means you'll need to apply that commit locally to your fake ~zod manually for testing click.

@jalehman jalehman requested a review from mopfel-winrux March 16, 2023 15:17
@ashelkovnykov
Copy link
Collaborator Author

Spoke with @mcevoypeter and we agree that we should probably make a new repo, like urbit/utils or urbit/tools where things like this should live.

We might want to hold off on making such a repo until we have another tool, though I could see a case for refactoring Janeway and using it + click as the initial members.

Regardless, I think click should be reviewed and merged here first, then we can pull it out into another repo after it's in an approved state.

@mopfel-winrux
Copy link
Collaborator

The client looks great and works well. I do think utilities like this should be in a separate repo but that can wait until we have more than just one.

@jalehman jalehman requested a review from a team March 24, 2023 15:48
@jalehman jalehman merged commit 0f2ac0e into urbit:develop Mar 24, 2023
@ashelkovnykov ashelkovnykov deleted the click branch March 24, 2023 18:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Khan/Conn: Working client for sending commands and returning output to an urbit from outside of it.

5 participants