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