kajji 0.12.0 → 0.14.0
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 +140 -126
- package/package.json +6 -6
- /package/{script → scripts}/postinstall.mjs +0 -0
package/README.md
CHANGED
|
@@ -2,29 +2,24 @@
|
|
|
2
2
|
<img alt="kajji" src="./assets/kajji.gif">
|
|
3
3
|
</p>
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
# kajji
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
Reviewing local code has never been as prominent as it is today. Coding agents are writing line upon line, and your sorry eyes are the ones that need to trudge through it.
|
|
10
|
-
|
|
11
|
-
Kajji makes this new reality less painful with polished jj navigation and manipulation alongside Shiki-powered diff rendering with syntax highlighting and word-level diffs. To allow for jj's log to get the real estate it deserves when you're looking at the diff, while also allowing the width required for side-by-side diff rendering, kajji has two view modes: normal and diff. Switch with ctrl+x and try it out.
|
|
12
|
-
|
|
13
|
-

|
|
7
|
+
A terminal UI for [jj / Jujutsu](https://github.com/martinvonz/jj): navigate changes, inspect polished diffs, and run common jj workflows with ease and speed.
|
|
14
8
|
|
|
15
|
-
|
|
9
|
+
Kajji gives jj a fast, keyboard-first interface with a commit graph, file tree, operation log, bookmark management, GitHub helpers, revset filtering, and custom diff rendering with syntax highlighting, word-level emphasis, split/unified layouts, wrapping, and binary-file handling.
|
|
16
10
|
|
|
17
|
-
|
|
11
|
+

|
|
18
12
|
|
|
19
13
|
## Installation
|
|
20
14
|
|
|
21
|
-
> **Requirements**: [jj](https://github.com/martinvonz/jj)
|
|
22
|
-
|
|
23
15
|
```bash
|
|
24
|
-
# recommended
|
|
16
|
+
# recommended if you use Homebrew
|
|
17
|
+
brew install eliaskc/tap/kajji
|
|
18
|
+
|
|
19
|
+
# standalone binary installer, no package manager required
|
|
25
20
|
curl -fsSL https://kajji.sh/install.sh | bash
|
|
26
21
|
|
|
27
|
-
# or via package manager
|
|
22
|
+
# or via JavaScript package manager
|
|
28
23
|
npm install -g kajji
|
|
29
24
|
bun install -g kajji
|
|
30
25
|
pnpm add -g kajji
|
|
@@ -35,9 +30,18 @@ npx kajji
|
|
|
35
30
|
bunx kajji
|
|
36
31
|
```
|
|
37
32
|
|
|
33
|
+
To remove kajji and its config/data:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
kajji uninstall # interactive: removes config, data, and the binary
|
|
37
|
+
kajji uninstall --dry-run # show what would be removed
|
|
38
|
+
kajji uninstall --keep-config --keep-data
|
|
39
|
+
kajji uninstall --force # skip the confirmation prompt
|
|
40
|
+
```
|
|
41
|
+
|
|
38
42
|
### From source
|
|
39
43
|
|
|
40
|
-
|
|
44
|
+
Requirements: [Bun](https://bun.sh)
|
|
41
45
|
|
|
42
46
|
```bash
|
|
43
47
|
git clone https://github.com/eliaskc/kajji.git
|
|
@@ -46,43 +50,6 @@ bun install
|
|
|
46
50
|
bun dev
|
|
47
51
|
```
|
|
48
52
|
|
|
49
|
-
## Principles
|
|
50
|
-
|
|
51
|
-
- **Polish & simplicity** - Do less, but do it well.
|
|
52
|
-
- **Intuitive UX** - Sensible defaults, consistent patterns.
|
|
53
|
-
- **Snappy** - If it feels slow, it's a bug.
|
|
54
|
-
|
|
55
|
-
## Features
|
|
56
|
-
|
|
57
|
-
**Core jj operations:**
|
|
58
|
-
|
|
59
|
-
- [x] View commit log with graph
|
|
60
|
-
- [x] View diffs with syntax highlighting and word-level emphasis
|
|
61
|
-
- [x] New / edit / describe / squash / abandon
|
|
62
|
-
- [x] Rebase with revision picker
|
|
63
|
-
- [x] Split (suspends TUI for jj's native split)
|
|
64
|
-
- [x] Undo / redo with preview
|
|
65
|
-
- [x] Bookmarks (create, delete, rename, move)
|
|
66
|
-
- [x] Git fetch / push
|
|
67
|
-
- [x] Operation log with restore
|
|
68
|
-
- [ ] Conflict resolution
|
|
69
|
-
|
|
70
|
-
**TUI polish:**
|
|
71
|
-
|
|
72
|
-
- [x] Vim-style navigation (j/k, ctrl+u/d)
|
|
73
|
-
- [x] Mouse support (click, double-click, horizontal scroll)
|
|
74
|
-
- [x] Collapsible file tree with status colors
|
|
75
|
-
- [x] Help palette with fuzzy search (`?`)
|
|
76
|
-
- [x] Focus modes for normal browsing vs diff viewing
|
|
77
|
-
- [x] Line wrapping toggle (`w`) and split/unified view (`v`)
|
|
78
|
-
- [x] Binary file detection
|
|
79
|
-
- [x] Recent repository switcher
|
|
80
|
-
- [x] Automatic update notifications
|
|
81
|
-
- [x] Revset filtering and fuzzy search
|
|
82
|
-
- [x] JSONC config with live reload and schema autocomplete
|
|
83
|
-
- [x] Open files in editor from file view (`e`/`E`)
|
|
84
|
-
- [ ] Multi-select for batch operations
|
|
85
|
-
|
|
86
53
|
## Usage
|
|
87
54
|
|
|
88
55
|
Run `kajji` in any jj repository:
|
|
@@ -92,7 +59,45 @@ kajji # current directory
|
|
|
92
59
|
kajji /path/to/repo # specific directory
|
|
93
60
|
```
|
|
94
61
|
|
|
95
|
-
|
|
62
|
+
Kajji has two main viewing modes:
|
|
63
|
+
|
|
64
|
+
- **Normal mode** keeps the log, bookmarks, detail, and command log visible.
|
|
65
|
+
- **Diff focus mode** gives the detail pane more space for side-by-side diffs.
|
|
66
|
+
|
|
67
|
+
Toggle between them with `ctrl+x`.
|
|
68
|
+
|
|
69
|
+
## Features
|
|
70
|
+
|
|
71
|
+
**jj workflows**
|
|
72
|
+
|
|
73
|
+
- Commit log with graph and revset filtering
|
|
74
|
+
- File view with tree/list toggle, editor launching, and discard for working-copy files
|
|
75
|
+
- New, edit, describe, squash, abandon, duplicate, rebase, split, resolve
|
|
76
|
+
- Undo, redo, operation log, and restore
|
|
77
|
+
- Bookmark create/delete/rename/forget/set/move plus remote-only filtering
|
|
78
|
+
- Git fetch/push menus
|
|
79
|
+
- Open commits and PRs on GitHub
|
|
80
|
+
- Recent repository switcher
|
|
81
|
+
|
|
82
|
+
**Diff viewing**
|
|
83
|
+
|
|
84
|
+
- Custom unified and split diff renderers
|
|
85
|
+
- Syntax highlighting and word-level change emphasis
|
|
86
|
+
- Line wrapping and horizontal scrolling
|
|
87
|
+
- Hunk and file navigation
|
|
88
|
+
- Optional jj formatter output
|
|
89
|
+
- Binary file detection
|
|
90
|
+
|
|
91
|
+
**TUI polish**
|
|
92
|
+
|
|
93
|
+
- Vim-style navigation plus mouse support
|
|
94
|
+
- Focusable panels and tabs
|
|
95
|
+
- Command palette with fuzzy search (`?` / `ctrl+p`)
|
|
96
|
+
- Context-aware status hints
|
|
97
|
+
- JSONC config with schema autocomplete
|
|
98
|
+
- Automatic update notifications
|
|
99
|
+
|
|
100
|
+
## CLI
|
|
96
101
|
|
|
97
102
|
Kajji includes a small CLI for scripting and agent workflows:
|
|
98
103
|
|
|
@@ -110,90 +115,99 @@ kajji comment delete -r @ --file src/App.tsx
|
|
|
110
115
|
kajji comment delete -r @ --all -y
|
|
111
116
|
```
|
|
112
117
|
|
|
113
|
-
|
|
118
|
+
## Configuration
|
|
114
119
|
|
|
115
120
|
Kajji reads JSONC config from `~/.config/kajji/config.json` (comments and trailing commas are supported).
|
|
116
121
|
|
|
117
122
|
- Open it from the command palette (`?`) with `open config`
|
|
118
|
-
- Changes
|
|
119
|
-
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
|
145
|
-
|
|
|
146
|
-
| `
|
|
147
|
-
| `
|
|
148
|
-
| `
|
|
149
|
-
| `
|
|
150
|
-
|
|
|
151
|
-
| `ctrl+
|
|
152
|
-
| `
|
|
153
|
-
|
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
|
162
|
-
|
|
|
163
|
-
| `
|
|
164
|
-
| `
|
|
165
|
-
| `
|
|
166
|
-
| `
|
|
167
|
-
| `
|
|
168
|
-
| `
|
|
169
|
-
| `
|
|
170
|
-
| `
|
|
171
|
-
| `
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
|
179
|
-
|
|
|
180
|
-
| `
|
|
181
|
-
| `
|
|
182
|
-
| `
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
123
|
+
- Changes made through `open config` are reloaded when you return to kajji
|
|
124
|
+
- The default config includes `$schema: "https://kajji.sh/schema.json"` for editor autocomplete
|
|
125
|
+
|
|
126
|
+
Common settings include:
|
|
127
|
+
|
|
128
|
+
- `ui.themeMode`: `system`, `dark`, or `light`
|
|
129
|
+
- `ui.syntaxTheme.dark` / `ui.syntaxTheme.light`: syntax highlighting theme names
|
|
130
|
+
- `ui.showFileTree`: show files as a tree or flat list
|
|
131
|
+
- `diff.layout`: `auto`, `unified`, or `split`
|
|
132
|
+
- `diff.autoSwitchWidth`: terminal width where `auto` switches to split view
|
|
133
|
+
- `diff.wrap`: wrap long diff lines
|
|
134
|
+
- `diff.useJjFormatter`: use jj's configured diff formatter in the detail pane
|
|
135
|
+
- `hooks`: commands to run before specific operations
|
|
136
|
+
- `whatsNewDisabled` / `autoUpdatesDisabled`: update notification controls
|
|
137
|
+
|
|
138
|
+
## Keybindings
|
|
139
|
+
|
|
140
|
+
Default keybindings are contextual. Press `?` or `ctrl+p` in kajji for the full command list available in the current panel.
|
|
141
|
+
|
|
142
|
+
### Global and navigation
|
|
143
|
+
|
|
144
|
+
| Key | Action |
|
|
145
|
+
| ---------------------- | --------------------------------------- |
|
|
146
|
+
| `q` | Quit |
|
|
147
|
+
| `?` / `ctrl+p` | Command palette |
|
|
148
|
+
| `Tab` / `shift+Tab` | Next / previous panel |
|
|
149
|
+
| `1` / `2` / `3` / `4` | Focus log / refs / detail / command log |
|
|
150
|
+
| `j` / `k` or `↓` / `↑` | Move down / up |
|
|
151
|
+
| `ctrl+d` / `ctrl+u` | Page down / up |
|
|
152
|
+
| `Enter` | Open/drill into the selected item |
|
|
153
|
+
| `Escape` | Back, close, or clear filter |
|
|
154
|
+
| `[` / `]` or `h` / `l` | Previous / next tab |
|
|
155
|
+
| `/` | Filter revisions or bookmarks |
|
|
156
|
+
| `ctrl+r` | Refresh |
|
|
157
|
+
| `ctrl+x` | Toggle normal/diff focus mode |
|
|
158
|
+
| `ctrl+o` | Open recent repository |
|
|
159
|
+
|
|
160
|
+
### jj operations
|
|
161
|
+
|
|
162
|
+
| Key | Action |
|
|
163
|
+
| --------- | ------------------------------------------------------------------------------------------ |
|
|
164
|
+
| `n` / `N` | New change / new menu |
|
|
165
|
+
| `e` | Edit change, or open selected file in editor from file view |
|
|
166
|
+
| `E` | Open all files in editor from file view |
|
|
167
|
+
| `d` | Describe, delete bookmark, restore operation, or discard file changes depending on context |
|
|
168
|
+
| `s` | Squash |
|
|
169
|
+
| `a` | Abandon |
|
|
170
|
+
| `r` | Rebase, or rename bookmark in refs |
|
|
171
|
+
| `S` | Split |
|
|
172
|
+
| `D` | Duplicate |
|
|
173
|
+
| `R` | Resolve conflicts, or toggle remote-only bookmarks in refs |
|
|
174
|
+
| `u` / `U` | Undo / redo |
|
|
175
|
+
| `f` / `F` | Git fetch / fetch menu |
|
|
176
|
+
| `p` / `P` | Git push / push menu |
|
|
177
|
+
|
|
178
|
+
### Diff and files
|
|
179
|
+
|
|
180
|
+
| Key | Action |
|
|
181
|
+
| ---------------------- | ------------------------------------------------------------- |
|
|
182
|
+
| `-` | Toggle file tree/list in file view, or jj formatter in detail |
|
|
183
|
+
| `v` | Toggle split/unified diff |
|
|
184
|
+
| `w` | Toggle diff line wrapping |
|
|
185
|
+
| `h` / `l` or `←` / `→` | Horizontal scroll when wrapping is off |
|
|
186
|
+
| `[` / `]` | Previous / next hunk in custom diff view |
|
|
187
|
+
| `{` / `}` | Previous / next file in custom diff view |
|
|
188
|
+
|
|
189
|
+
### Bookmarks and GitHub
|
|
190
|
+
|
|
191
|
+
| Key | Action |
|
|
192
|
+
| --------- | -------------------------------------------------- |
|
|
193
|
+
| `c` | Create bookmark |
|
|
194
|
+
| `d` | Delete bookmark |
|
|
195
|
+
| `r` | Rename bookmark |
|
|
196
|
+
| `x` | Forget bookmark locally |
|
|
197
|
+
| `b` | Set bookmark on selected revision |
|
|
198
|
+
| `m` | Move bookmark |
|
|
199
|
+
| `o` / `O` | Open selected revision on GitHub (prompt / direct) |
|
|
200
|
+
| `o` | Open selected bookmark's commit or PR on GitHub |
|
|
187
201
|
|
|
188
202
|
## Built With
|
|
189
203
|
|
|
190
|
-
- [OpenTUI](https://github.com/sst/opentui) + [SolidJS](https://www.solidjs.com/) -
|
|
191
|
-
- [Bun](https://bun.sh) -
|
|
204
|
+
- [OpenTUI](https://github.com/sst/opentui) + [SolidJS](https://www.solidjs.com/) - TypeScript TUI framework
|
|
205
|
+
- [Bun](https://bun.sh) - JavaScript runtime and build tooling
|
|
192
206
|
- [jj (Jujutsu)](https://github.com/martinvonz/jj) - Git-compatible VCS
|
|
193
207
|
|
|
194
208
|
## Related Projects
|
|
195
209
|
|
|
196
|
-
- [lazygit](https://github.com/jesseduffield/lazygit) -
|
|
210
|
+
- [lazygit](https://github.com/jesseduffield/lazygit) - Git TUI
|
|
197
211
|
- [jjui](https://github.com/idursun/jjui) - Go-based jj TUI
|
|
198
212
|
- [lazyjj](https://github.com/Cretezy/lazyjj) - Rust-based jj TUI
|
|
199
213
|
|
package/package.json
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "kajji",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.14.0",
|
|
4
4
|
"description": "A terminal UI for Jujutsu: the rudder for your jj",
|
|
5
5
|
"bin": {
|
|
6
6
|
"kajji": "./bin/kajji"
|
|
7
7
|
},
|
|
8
8
|
"scripts": {
|
|
9
|
-
"postinstall": "node ./
|
|
9
|
+
"postinstall": "node ./scripts/postinstall.mjs"
|
|
10
10
|
},
|
|
11
11
|
"optionalDependencies": {
|
|
12
|
-
"kajji-darwin-arm64": "0.
|
|
13
|
-
"kajji-darwin-x64": "0.
|
|
14
|
-
"kajji-linux-x64": "0.
|
|
15
|
-
"kajji-linux-arm64": "0.
|
|
12
|
+
"kajji-darwin-arm64": "0.14.0",
|
|
13
|
+
"kajji-darwin-x64": "0.14.0",
|
|
14
|
+
"kajji-linux-x64": "0.14.0",
|
|
15
|
+
"kajji-linux-arm64": "0.14.0"
|
|
16
16
|
},
|
|
17
17
|
"repository": {
|
|
18
18
|
"type": "git",
|
|
File without changes
|