claude-garage 0.3.3 → 0.3.4

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
@@ -150,7 +150,7 @@ the features the TUI doesn't have yet:
150
150
  notification when no page is open (clickable with
151
151
  [`terminal-notifier`](https://github.com/julienXX/terminal-notifier)).
152
152
 
153
- ### The pit pet 🐈 (web wall)
153
+ ### The pit pet 🐈
154
154
 
155
155
  An optional ASCII companion on the key strip whose mood *is* the wall:
156
156
  asleep when all is quiet, watching while agents run, **sprinting toward the
@@ -177,12 +177,31 @@ state in character:
177
177
  | **Papito** (rubber duck) | deadpan: waddles, **never** bounces, and alerts with a single motionless stare; celebration is exactly one flap |
178
178
  | **Segan** (pit pup) | maximum enthusiasm: fastest runner, biggest bounce, and celebrates with zoomies across the strip |
179
179
 
180
+ **In the TUI** the pet lives at the right end of the bottom strip, beside
181
+ the keys chip, as a one-row sprite (`=o.o=`, `<(o )___`, `(·ᴥ·)`), same
182
+ moods, same manners. It speaks right next to itself:
183
+ `you're doing great!! (·ᴥ·) keys → garage`. Press **`P`** to
184
+ cycle Arthur → Papito → Segan → off; the choice is remembered. Click the
185
+ pet while it's alert to jump to the blocked session, click it otherwise to
186
+ pet it. TUI pets also **talk**: every few minutes, in character, the strip
187
+ gets a line like *"water. now. i'm not asking."* (Arthur), *"acceptable."*
188
+ (Papito) or *"you're doing great!!"* (Segan). They notice long days, late
189
+ nights, and a usage window running hot, and they never interrupt a session
190
+ that needs you. Set `GARAGE_PET_ASCII=1` if your font lacks `ᴥ`.
191
+
180
192
  ## Keybindings
181
193
 
182
194
  The TUI's full keymap (`claude-garage tui`, also shown in-app with `?`).
183
195
  Bindings apply at the garage layer; `Enter` hands your keystrokes to the
184
196
  focused session byte-exact until `Ctrl+G` takes them back.
185
197
 
198
+ **Terminal:** Ghostty, iTerm2, kitty and WezTerm pass every Claude Code
199
+ binding through, Shift+Enter included. macOS Terminal.app speaks neither
200
+ the kitty keyboard protocol nor modifyOtherKeys, so Shift+Enter can't be
201
+ told apart from Enter there; either switch terminals or add a Terminal.app
202
+ key mapping (Settings → Profiles → Keyboard) for Shift+Return that sends
203
+ `\033[13;2u`. Option+Enter and Ctrl+J work everywhere.
204
+
186
205
  | Key | Action |
187
206
  |---|---|
188
207
  | `1`–`9` | focus workspace |
@@ -176,7 +176,8 @@ export async function createSession(id, dir, command, extraArgs = []) {
176
176
  }
177
177
 
178
178
  // p14: Claude Code's Shift+Enter (kitty protocol, ESC[13;2u) only reaches a
179
- // pane if the tmux server has extended keys on and advertises them —
179
+ // pane if the tmux server has extended keys on and advertises them (and,
180
+ // since 0.3.4, re-encodes in csi-u form so Option+Enter survives too) —
180
181
  // exactly the tmux config Claude Code's own terminal docs prescribe. Server
181
182
  // options survive until the tmux server exits, so this runs at daemon boot
182
183
  // AND on every createSession (the server may have been started later by a
@@ -185,6 +186,13 @@ export async function createSession(id, dir, command, extraArgs = []) {
185
186
  export async function ensureExtendedKeys() {
186
187
  try {
187
188
  await run("tmux", ["set-option", "-s", "extended-keys", "on"]);
189
+ // csi-u, not the default xterm `CSI 27;m;k~` form: with extended keys
190
+ // on, tmux re-encodes every modified key for a pane that asked for
191
+ // them — Option+Enter becomes `ESC[27;3;13~`, which Claude Code does
192
+ // not parse, so Option+Enter (its own newline binding on macOS) died
193
+ // inside every garage session. The kitty form (`ESC[13;3u`) is the one
194
+ // Claude Code already understands for Shift+Enter. tmux ≥ 3.5.
195
+ await run("tmux", ["set-option", "-s", "extended-keys-format", "csi-u"]).catch(() => {});
188
196
  const { stdout } = await run("tmux", ["show-options", "-s", "terminal-features"]).catch(
189
197
  () => ({ stdout: "" })
190
198
  );
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-garage",
3
- "version": "0.3.3",
3
+ "version": "0.3.4",
4
4
  "description": "Multiple Claude agents driving you crazy? Park them all in one garage: a needs-input queue that follows you across projects, a full-screen terminal TUI, and a browser wall with diff review. tmux owns the sessions; close the app and nothing dies.",
5
5
  "license": "MIT",
6
6
  "author": "Saiful Islam <saifulislamadar@gmail.com>",
Binary file