@joule-sh/code-darwin-arm64 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 CHANGED
@@ -1,185 +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 and share it. Your own console picks
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
- The agent reads and edits files, runs commands and makes commits **on your
12
- machine**. The browser is a remote control, never an executor.
13
-
14
- ## Status
7
+ ## Install
15
8
 
16
- v0 is in progress. Landed: the repo skeleton and CI
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
- - [docs/00-plan.md](docs/00-plan.md): architecture, the decisions and what
26
- forced them, and the order the work goes in.
27
- - [specs/](specs/): one directory per decided piece, in the same numbered form
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
- ## Install
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
- 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.
40
24
 
41
- ```sh
42
- curl -fsSL https://raw.githubusercontent.com/joule-sh/code/main/install.sh | sh
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
- Both put the same two commands on your `PATH` at the same version, and both
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
- ```sh
81
- brew install bdw-gc
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
- The `-L` is not optional on Intel Macs. Zig ignores `LIBRARY_PATH` on macOS and
86
- only has Apple Silicon's `/opt/homebrew` in its built-in search paths, so an
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
- The release archives link that library statically on both platforms, so an
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
- ```sh
96
- make release LUMEN_TARGET=x86_64-linux-musl
97
- scripts/check_linux_release.sh bin/joule bin/relay bin/joule-daemon
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
- `LUMEN_TARGET` also compiles the vendored `tty_shim.o` for that target, so
101
- switch it on a tree that was already built and `make clean` first.
45
+ ## The editor extension
102
46
 
103
- ```sh
104
- git clone https://github.com/joule-sh/code.git
105
- cd code
106
- make build
107
- ./bin/joule --version
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
- `make test` runs the test suite, `make release` builds the `--release-fast`
111
- binaries the release workflow packages.
112
-
113
- ## The one invariant
114
-
115
- **The terminal is authoritative.** It holds the workspace, the history and the
116
- tool loop. The relay pairs a browser to a terminal, forwards frames both ways,
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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@joule-sh/code-darwin-arm64",
3
- "version": "0.23.5",
3
+ "version": "0.23.6",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",