@joule-sh/code-linux-x64 0.23.5 → 0.23.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +45 -165
- package/bin/joule +0 -0
- package/bin/joule-daemon +0 -0
- package/bin/relay +0 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,185 +1,65 @@
|
|
|
1
|
-
#
|
|
1
|
+
# joule
|
|
2
2
|
|
|
3
|
-
An
|
|
3
|
+
An AI coding agent that runs in your terminal and can be driven from a browser.
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
it up straight away, because the machine is already signed in to your account,
|
|
7
|
-
and from then on the browser and the terminal are the same session. You start
|
|
8
|
-
work at the desk and keep steering it from a laptop or a phone. It also prints a
|
|
9
|
-
short pairing code, which is how you show that session to somebody else.
|
|
5
|
+
Pre-1.0.
|
|
10
6
|
|
|
11
|
-
|
|
12
|
-
machine**. The browser is a remote control, never an executor.
|
|
13
|
-
|
|
14
|
-
## Status
|
|
7
|
+
## Install
|
|
15
8
|
|
|
16
|
-
|
|
17
|
-
([#1](https://github.com/joule-sh/code/issues/1)), the shared frame protocol
|
|
18
|
-
([#2](https://github.com/joule-sh/code/issues/2)), the release pipeline
|
|
19
|
-
([#13](https://github.com/joule-sh/code/issues/13), install mechanics only).
|
|
20
|
-
Not yet: the turn loop, a model provider, the file and run tools, approval,
|
|
21
|
-
the terminal front end, the relay, and the web page. There is no working demo
|
|
22
|
-
until those land, the install below gets you the v0 skeleton, not a usable
|
|
23
|
-
tool.
|
|
9
|
+
macOS and Linux:
|
|
24
10
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
the Lumen repo uses.
|
|
29
|
-
- [The v0 milestone](https://github.com/joule-sh/code/milestone/1) holds the
|
|
30
|
-
tickets. [#15](https://github.com/joule-sh/code/issues/15) is the plan,
|
|
31
|
-
[#1](https://github.com/joule-sh/code/issues/1) is where the code starts.
|
|
11
|
+
```sh
|
|
12
|
+
curl -fsSL https://raw.githubusercontent.com/joule-sh/code/main/install.sh | sh
|
|
13
|
+
```
|
|
32
14
|
|
|
33
|
-
|
|
15
|
+
Windows, or any platform, from npm:
|
|
34
16
|
|
|
35
17
|
```sh
|
|
36
18
|
npm i -g @joule-sh/code
|
|
37
19
|
```
|
|
38
20
|
|
|
39
|
-
|
|
21
|
+
Both install `joule` and `relay` at the same version, and run every binary
|
|
22
|
+
before reporting success. Runs as `joule`, not `code`. It offers to update
|
|
23
|
+
itself; there is no update command.
|
|
40
24
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
25
|
+
Prebuilt for x86_64 Linux, Apple Silicon macOS, Intel macOS and x86_64 Windows,
|
|
26
|
+
and every release carries the plain archives too, including
|
|
27
|
+
`code-x86_64-windows.zip`. Other platforms need
|
|
28
|
+
[building from source](docs/07-building.md).
|
|
44
29
|
|
|
45
|
-
|
|
46
|
-
run every binary before reporting success. npm pins and uninstalls cleanly;
|
|
47
|
-
the script needs nothing installed first. The npm package is a wrapper whose
|
|
48
|
-
binaries live in `@joule-sh/code-linux-x64`, `@joule-sh/code-darwin-x64`,
|
|
49
|
-
`@joule-sh/code-darwin-arm64` and `@joule-sh/code-win32-x64`, installed as
|
|
50
|
-
optional dependencies so npm takes only the one that matches. `install.sh` has
|
|
51
|
-
no Windows counterpart: npm is the way in there, or the
|
|
52
|
-
`code-x86_64-windows.zip` a release publishes.
|
|
53
|
-
|
|
54
|
-
Installs as `joule`, not `code` - `code` is already taken by VS Code's CLI on
|
|
55
|
-
most machines, and this project would silently shadow or lose to it depending
|
|
56
|
-
on `PATH` order. Prebuilt for x86_64 Linux, Apple Silicon macOS
|
|
57
|
-
(`aarch64-macos`), Intel macOS (`x86_64-macos`) and x86_64 Windows; other
|
|
58
|
-
platforms fail with a clear message and point at building from source below.
|
|
59
|
-
|
|
60
|
-
Every archive carries the garbage collector it needs, so there is no library to
|
|
61
|
-
install alongside it. A macOS binary needs nothing beyond the system's own
|
|
62
|
-
libSystem. A Linux binary is linked statically against musl and needs nothing
|
|
63
|
-
at all - no libc version, no loader, no shared library - so it runs the same on
|
|
64
|
-
Ubuntu 22.04, on a decade-old enterprise release and on Alpine. The installer
|
|
65
|
-
runs each binary before it links anything onto your `PATH`, so an install that
|
|
66
|
-
reports success is one that runs, and an install that cannot says what stopped
|
|
67
|
-
it.
|
|
68
|
-
|
|
69
|
-
## Build from source
|
|
70
|
-
|
|
71
|
-
Requires the [Lumen](https://lumen-lang.org) toolchain (`lumen`, and `zig`
|
|
72
|
-
alongside it on `PATH`, as the release archive ships them). Lumen publishes
|
|
73
|
-
macOS builds too (`lumen-aarch64-macos.tar.gz`, `lumen-x86_64-macos.tar.gz`),
|
|
74
|
-
so this works natively on a Mac.
|
|
75
|
-
|
|
76
|
-
Lumen's allocator links the Boehm collector as a system library. Linux distros
|
|
77
|
-
ship it as `libgc` and a local build needs nothing extra. macOS has no system
|
|
78
|
-
copy, so a Mac build needs Homebrew's and has to point the compiler at it:
|
|
30
|
+
## Start it
|
|
79
31
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
make build LUMEN_FLAGS="--link -L$(brew --prefix bdw-gc)/lib"
|
|
83
|
-
```
|
|
32
|
+
Run `joule` in a directory you want to work in. It reads and edits files, runs
|
|
33
|
+
commands and makes commits there, on your machine.
|
|
84
34
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
Intel build fails without it.
|
|
35
|
+
`/help` lists the commands. `joule --continue` reopens the most recent session
|
|
36
|
+
for that directory.
|
|
88
37
|
|
|
89
|
-
|
|
90
|
-
installed release carries it. macOS uses Homebrew's `libgc.a`. Linux names a
|
|
91
|
-
target instead, which links musl and a collector the compiler builds for that
|
|
92
|
-
target, leaving a binary with nothing to resolve. To reproduce what a Linux
|
|
93
|
-
release ships:
|
|
38
|
+
## Connect a model
|
|
94
39
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
40
|
+
- A joule.sh account - run `/login`
|
|
41
|
+
- Your own provider key - `baseUrl` and `apiKey` in
|
|
42
|
+
`~/.config/joule-code/config.json`
|
|
43
|
+
- Your own server - `--server` or `JOULE_CODE_SERVER`
|
|
99
44
|
|
|
100
|
-
|
|
101
|
-
switch it on a tree that was already built and `make clean` first.
|
|
45
|
+
## The editor extension
|
|
102
46
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
47
|
+
A panel in VS Code. Install
|
|
48
|
+
[`joule-sh.joule-editor`](https://marketplace.visualstudio.com/items?itemName=joule-sh.joule-editor)
|
|
49
|
+
from the marketplace, or the `.vsix` a release attaches. Not on Open VSX.
|
|
50
|
+
Install `joule` first; [editor/README.md](editor/README.md) has the settings.
|
|
51
|
+
|
|
52
|
+
## Share it to a browser
|
|
53
|
+
|
|
54
|
+
`/share` prints a URL and a six-character code. The session appears in the
|
|
55
|
+
console as a conversation you can read and reply in from any browser - nothing
|
|
56
|
+
runs in the browser. A console signed in to the account that shared it needs no
|
|
57
|
+
code.
|
|
109
58
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
and keeps a bounded replay buffer. Nothing more. It never runs a tool, never
|
|
118
|
-
holds a checkout, and stores nothing durable. If the relay dies the terminal
|
|
119
|
-
keeps working; you lose the web view, not the work.
|
|
120
|
-
|
|
121
|
-
Every design question in v0 is answered by pushing state toward the terminal.
|
|
122
|
-
|
|
123
|
-
## Built in Lumen
|
|
124
|
-
|
|
125
|
-
CLI, relay and the page the relay serves. Two binaries, one language.
|
|
126
|
-
|
|
127
|
-
The terminal and the browser each hold one WebSocket to the relay, using the
|
|
128
|
-
`websocket` package from std-contrib. The model is read over SSE with
|
|
129
|
-
`http.stream`, because that is what providers speak. The reasoning, including
|
|
130
|
-
the concurrency problem a blocking `receive()` creates for the terminal, is in
|
|
131
|
-
[spec 003](specs/003-transport/spec.md).
|
|
132
|
-
|
|
133
|
-
## Honest limits (v0)
|
|
134
|
-
|
|
135
|
-
No hosted sandbox, the agent only ever runs on your own machine. No multi-agent,
|
|
136
|
-
no subagents, no MCP. See [docs/00-plan.md](docs/00-plan.md) for the reasoning
|
|
137
|
-
behind each.
|
|
138
|
-
|
|
139
|
-
Conversation history is saved per workspace as you go and picked back up with
|
|
140
|
-
`joule --continue`, which resumes the most recent session for the current
|
|
141
|
-
directory. Model, mode and workspace are not part of what gets saved - they
|
|
142
|
-
are re-resolved fresh from the normal config chain on every launch. There is
|
|
143
|
-
no picker for older sessions yet, only the most recent one.
|
|
144
|
-
|
|
145
|
-
The terminal does its own mouse selection, so the wheel and drag-to-select
|
|
146
|
-
both work at once rather than trading against each other. The wheel scrolls
|
|
147
|
-
the transcript, PageUp/PageDown scroll it too, and dragging over the
|
|
148
|
-
transcript selects the rows the drag covers - drawn in reverse video, with the
|
|
149
|
-
status line saying how many lines are held. The wheel keeps scrolling while a
|
|
150
|
-
drag is in progress: the selection stays on the text it was drawn over rather
|
|
151
|
-
than on the screen rows.
|
|
152
|
-
|
|
153
|
-
Releasing copies. Joule is a local process, so it writes the clipboard itself
|
|
154
|
-
rather than asking your terminal to: `pbcopy` on macOS, `wl-copy` on Wayland,
|
|
155
|
-
`xclip` or `xsel` on X11, `clip.exe` on Windows. That works on every terminal,
|
|
156
|
-
including the ones that refuse OSC 52 clipboard writes by default and the ones
|
|
157
|
-
that never implemented it. The status line then reports a copy that really
|
|
158
|
-
happened: `copied 3 lines - Esc clears`.
|
|
159
|
-
|
|
160
|
-
Over ssh the local clipboard is the wrong one - the one you paste into is at
|
|
161
|
-
your end of the connection - so a remote session falls back to OSC 52
|
|
162
|
-
(`ESC ] 52 ; c ; <base64> BEL`), which travels back over the terminal. So does
|
|
163
|
-
a machine with no clipboard command installed. A terminal that refuses OSC 52
|
|
164
|
-
sends no reply, so there is nothing to detect and nothing to retry, and the
|
|
165
|
-
status line says only what it can stand behind: `asked the terminal for 3
|
|
166
|
-
lines - /mouse off if nothing pasted`. If the clipboard command is there and
|
|
167
|
-
fails, nothing is claimed at all: `no clipboard here - Esc clears - /mouse off
|
|
168
|
-
to select with the terminal`. `/mouse` on its own names which of the three
|
|
169
|
-
this machine will use.
|
|
170
|
-
|
|
171
|
-
Escape clears the selection, typing puts the status line back, and the next
|
|
172
|
-
click starts a new one.
|
|
173
|
-
|
|
174
|
-
A click that does not move copies nothing, the way it behaves in an editor.
|
|
175
|
-
Sign-in codes are never selectable: the row map covers transcript rows only,
|
|
176
|
-
and no selection can start, extend or copy while the input line is capturing.
|
|
177
|
-
|
|
178
|
-
`/mouse off` hands selection back to your terminal's own, for anyone who
|
|
179
|
-
prefers it or whose machine can reach no clipboard at all; the button events
|
|
180
|
-
are then ignored outright. It writes `"mouse": "off"` into `~/.config/joule-code/config.json`,
|
|
181
|
-
`/mouse on` puts it back, and `JOULE_CODE_MOUSE` overrides the file for a
|
|
182
|
-
single run.
|
|
183
|
-
|
|
184
|
-
Copying from a collapsed tool-output group only copies what is visible; the
|
|
185
|
-
rows hidden by the collapse are not part of the selection.
|
|
59
|
+
## Docs
|
|
60
|
+
|
|
61
|
+
- [docs/00-plan.md](docs/00-plan.md): architecture, the decisions and what
|
|
62
|
+
forced them.
|
|
63
|
+
- [docs/06-selection.md](docs/06-selection.md): mouse selection and copy.
|
|
64
|
+
- [docs/07-building.md](docs/07-building.md): building from source.
|
|
65
|
+
- [specs/](specs/): one directory per decided piece.
|
package/bin/joule
CHANGED
|
Binary file
|
package/bin/joule-daemon
CHANGED
|
Binary file
|
package/bin/relay
CHANGED
|
Binary file
|