@akiojin/gwt 9.0.4 → 9.2.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.ja.md +106 -146
- package/README.md +103 -143
- package/bin/gwt.cjs +1 -1
- package/package.json +5 -5
- package/rustfmt.toml +0 -2
- package/scripts/check-release-flow.sh +2 -8
- package/scripts/postinstall.js +17 -7
- package/scripts/run-local-backend-tests-on-commit.sh +6 -12
- package/scripts/test-all.sh +1 -5
- package/scripts/check-e2e-coverage-threshold.mjs +0 -238
- package/scripts/run-local-e2e-coverage-on-commit.sh +0 -69
- package/scripts/run-local-e2e-on-commit.sh +0 -60
- package/scripts/verify-ci-node-toolchain.sh +0 -76
- package/scripts/voice-eval.sh +0 -48
- package/vendor/ratatui-core/src/backend/test.rs +0 -1077
- package/vendor/ratatui-core/src/backend.rs +0 -405
- package/vendor/ratatui-core/src/buffer/assert.rs +0 -71
- package/vendor/ratatui-core/src/buffer/buffer.rs +0 -1388
- package/vendor/ratatui-core/src/buffer/cell.rs +0 -377
- package/vendor/ratatui-core/src/buffer.rs +0 -9
- package/vendor/ratatui-core/src/layout/alignment.rs +0 -89
- package/vendor/ratatui-core/src/layout/constraint.rs +0 -526
- package/vendor/ratatui-core/src/layout/direction.rs +0 -63
- package/vendor/ratatui-core/src/layout/flex.rs +0 -212
- package/vendor/ratatui-core/src/layout/layout.rs +0 -2838
- package/vendor/ratatui-core/src/layout/margin.rs +0 -79
- package/vendor/ratatui-core/src/layout/offset.rs +0 -66
- package/vendor/ratatui-core/src/layout/position.rs +0 -253
- package/vendor/ratatui-core/src/layout/rect/iter.rs +0 -356
- package/vendor/ratatui-core/src/layout/rect/ops.rs +0 -136
- package/vendor/ratatui-core/src/layout/rect.rs +0 -1114
- package/vendor/ratatui-core/src/layout/size.rs +0 -147
- package/vendor/ratatui-core/src/layout.rs +0 -333
- package/vendor/ratatui-core/src/lib.rs +0 -82
- package/vendor/ratatui-core/src/style/anstyle.rs +0 -348
- package/vendor/ratatui-core/src/style/color.rs +0 -788
- package/vendor/ratatui-core/src/style/palette/material.rs +0 -608
- package/vendor/ratatui-core/src/style/palette/tailwind.rs +0 -653
- package/vendor/ratatui-core/src/style/palette.rs +0 -6
- package/vendor/ratatui-core/src/style/palette_conversion.rs +0 -82
- package/vendor/ratatui-core/src/style/stylize.rs +0 -668
- package/vendor/ratatui-core/src/style.rs +0 -1069
- package/vendor/ratatui-core/src/symbols/bar.rs +0 -51
- package/vendor/ratatui-core/src/symbols/block.rs +0 -51
- package/vendor/ratatui-core/src/symbols/border.rs +0 -709
- package/vendor/ratatui-core/src/symbols/braille.rs +0 -21
- package/vendor/ratatui-core/src/symbols/half_block.rs +0 -3
- package/vendor/ratatui-core/src/symbols/line.rs +0 -259
- package/vendor/ratatui-core/src/symbols/marker.rs +0 -82
- package/vendor/ratatui-core/src/symbols/merge.rs +0 -748
- package/vendor/ratatui-core/src/symbols/pixel.rs +0 -30
- package/vendor/ratatui-core/src/symbols/scrollbar.rs +0 -46
- package/vendor/ratatui-core/src/symbols/shade.rs +0 -5
- package/vendor/ratatui-core/src/symbols.rs +0 -15
- package/vendor/ratatui-core/src/terminal/frame.rs +0 -192
- package/vendor/ratatui-core/src/terminal/terminal.rs +0 -926
- package/vendor/ratatui-core/src/terminal/viewport.rs +0 -58
- package/vendor/ratatui-core/src/terminal.rs +0 -40
- package/vendor/ratatui-core/src/text/grapheme.rs +0 -84
- package/vendor/ratatui-core/src/text/line.rs +0 -1678
- package/vendor/ratatui-core/src/text/masked.rs +0 -149
- package/vendor/ratatui-core/src/text/span.rs +0 -904
- package/vendor/ratatui-core/src/text/text.rs +0 -1434
- package/vendor/ratatui-core/src/text.rs +0 -64
- package/vendor/ratatui-core/src/widgets/stateful_widget.rs +0 -193
- package/vendor/ratatui-core/src/widgets/widget.rs +0 -174
- package/vendor/ratatui-core/src/widgets.rs +0 -9
package/README.ja.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# gwt
|
|
2
2
|
|
|
3
|
-
gwt は Git worktree
|
|
4
|
-
`
|
|
3
|
+
gwt は Git worktree の管理と、`Claude Code` / `Codex` / `Gemini` /
|
|
4
|
+
`OpenCode` などのコーディングエージェント起動を行うデスクトップ GUI です。
|
|
5
5
|
|
|
6
6
|
## インストール
|
|
7
7
|
|
|
@@ -10,25 +10,19 @@ gwt は Git worktree の管理と、ブランチ単位での
|
|
|
10
10
|
|
|
11
11
|
### macOS
|
|
12
12
|
|
|
13
|
-
インストーラーを実行します。
|
|
14
|
-
|
|
15
13
|
```bash
|
|
16
14
|
curl -fsSL https://raw.githubusercontent.com/akiojin/gwt/main/installers/macos/install.sh | bash
|
|
17
15
|
```
|
|
18
16
|
|
|
19
|
-
|
|
17
|
+
特定バージョンを指定する場合:
|
|
20
18
|
|
|
21
19
|
```bash
|
|
22
20
|
curl -fsSL https://raw.githubusercontent.com/akiojin/gwt/main/installers/macos/install.sh | bash -s -- --version 6.30.3
|
|
23
21
|
```
|
|
24
22
|
|
|
25
|
-
### Windows
|
|
26
|
-
|
|
27
|
-
GitHub Releases からバイナリをダウンロードして `PATH` に配置します。
|
|
23
|
+
### Windows / Linux
|
|
28
24
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
GitHub Releases からバイナリをダウンロードして `PATH` に配置します。
|
|
25
|
+
GitHub Releases からバイナリを取得して `PATH` に配置します。
|
|
32
26
|
|
|
33
27
|
### アンインストール(macOS)
|
|
34
28
|
|
|
@@ -36,168 +30,129 @@ GitHub Releases からバイナリをダウンロードして `PATH` に配置
|
|
|
36
30
|
curl -fsSL https://raw.githubusercontent.com/akiojin/gwt/main/installers/macos/uninstall.sh | bash
|
|
37
31
|
```
|
|
38
32
|
|
|
39
|
-
##
|
|
33
|
+
## 前提
|
|
40
34
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
gwt
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
### ターミナル要件
|
|
48
|
-
|
|
49
|
-
- 256 色対応ターミナル推奨(最新のターミナルはほぼ対応済み)
|
|
50
|
-
- 最小 80x24 のターミナルサイズ
|
|
51
|
-
|
|
52
|
-
## 使い始め方
|
|
53
|
-
|
|
54
|
-
1. Git リポジトリ内で `gwt` を実行します。
|
|
55
|
-
2. サイドバーでブランチと worktree を閲覧します。
|
|
56
|
-
3. ブランチ操作欄から次を行います。
|
|
57
|
-
- worktree の作成/一覧/クリーンアップ
|
|
58
|
-
- エージェント起動
|
|
59
|
-
4. Agent や要約機能を使う場合は、**Settings** で AI プロファイルを設定します。
|
|
60
|
-
|
|
61
|
-
## キーバインド
|
|
62
|
-
|
|
63
|
-
TUI の主要なキーバインドは `Ctrl+G` プレフィックスを使用します。terminal
|
|
64
|
-
text はドラッグ範囲選択した時点で copy されます。
|
|
65
|
-
|
|
66
|
-
| キーバインド | 操作 |
|
|
67
|
-
|---|---|
|
|
68
|
-
| `Ctrl+G`, `c` | 新しいシェルタブ |
|
|
69
|
-
| `Ctrl+G`, `n` | 新しいエージェントタブ |
|
|
70
|
-
| `Ctrl+G`, `1`-`9` | タブ N に切替 |
|
|
71
|
-
| `Ctrl+G`, `]` | 次のタブ |
|
|
72
|
-
| `Ctrl+G`, `[` | 前のタブ |
|
|
73
|
-
| `Ctrl+G`, `x` | 現在のタブを閉じる |
|
|
74
|
-
| `Ctrl+G`, `w` | Worktree 一覧 |
|
|
75
|
-
| `Ctrl+G`, `s` | 設定 |
|
|
76
|
-
| `Ctrl+G`, `?` | ヘルプ / キーバインド一覧 |
|
|
77
|
-
| `Ctrl+G`, `q` | 終了 |
|
|
78
|
-
|
|
79
|
-
terminal text はドラッグで copy できます。ホスト terminal が shortcut を
|
|
80
|
-
転送する環境では、次も使えます。
|
|
81
|
-
|
|
82
|
-
- macOS: `Cmd+C`
|
|
83
|
-
- Linux / Windows: `Ctrl+Shift+C`
|
|
84
|
-
|
|
85
|
-
シェルやエージェント端末で日本語 IME の候補選択を調査する場合は、
|
|
86
|
-
`GWT_INPUT_TRACE_PATH=/tmp/gwt-input-trace.jsonl` を付けて gwt を起動してください。
|
|
87
|
-
JSONL トレースには、生の `crossterm` キーイベント、keybind 判定、PTY に
|
|
88
|
-
転送したバイト列が記録され、実行中に入力モードを切り替える必要はありません。
|
|
89
|
-
|
|
90
|
-
その routed trace と terminal の生入力を比較したい場合は、同じ端末で
|
|
91
|
-
`cargo run -p gwt-tui --example keytest -- --mode raw` を実行してください。
|
|
92
|
-
probe は既定で `/tmp/gwt-crossterm-events.jsonl` に全
|
|
93
|
-
`crossterm::event::Event` を記録し、必要なら位置引数で出力先を
|
|
94
|
-
上書きできます。
|
|
95
|
-
|
|
96
|
-
描画起因の IME 退行を切り分けるため、同じ probe には `--mode redraw` と
|
|
97
|
-
`--mode ratatui` もあります。`redraw` は同じ committed-text surface を
|
|
98
|
-
direct `crossterm` で周期再描画し、`ratatui` は同じ surface を同じ tick
|
|
99
|
-
で ratatui 経由に切り替えます。モード比較時の再描画間隔は
|
|
100
|
-
`--tick-ms <N>` で変更できます。
|
|
101
|
-
|
|
102
|
-
また gwt は起動時に minimal な kitty keyboard enhancement
|
|
103
|
-
(`DISAMBIGUATE_ESCAPE_CODES | REPORT_ALL_KEYS_AS_ESCAPE_CODES |
|
|
104
|
-
REPORT_ALTERNATE_KEYS | REPORT_EVENT_TYPES`) を要求し、終了時に pop します。
|
|
105
|
-
非対応端末では fail-open で従来挙動を維持します。互換端末で発生する
|
|
106
|
-
繰り返しキーイベントも通常の key press と同じ入力経路に残るため、IME の
|
|
107
|
-
候補ページ送り時にイベントが途中で消えにくくなります。さらに terminal pane
|
|
108
|
-
が focus を持つ間は、overlay など明示的に周期 UI が必要な場合を除いて、
|
|
109
|
-
idle な 100 ms tick では TUI を再描画しないため、バックグラウンド redraw に
|
|
110
|
-
よる IME 候補操作の中断を抑えます。一方で PTY output は即座に redraw を要求
|
|
111
|
-
するため、確定文字や通常の shell 出力が次のキー入力まで遅延しません。
|
|
112
|
-
|
|
113
|
-
## 必要環境変数と前提
|
|
114
|
-
|
|
115
|
-
### 必須
|
|
116
|
-
|
|
117
|
-
- `PATH` に `git` があること(Git コマンドが使える状態)
|
|
118
|
-
|
|
119
|
-
### 任意
|
|
120
|
-
|
|
121
|
-
- AI 利用時の認証情報(または Settings のプロファイル設定でも可):
|
|
35
|
+
- `PATH` 上で `git` が使えること
|
|
36
|
+
- GitHub 連携機能を使う場合は `gh auth login` 済みであること
|
|
37
|
+
- エージェント利用時は必要な API キーを設定すること
|
|
122
38
|
- `ANTHROPIC_API_KEY` または `ANTHROPIC_AUTH_TOKEN`
|
|
123
39
|
- `OPENAI_API_KEY`
|
|
124
40
|
- `GOOGLE_API_KEY` または `GEMINI_API_KEY`
|
|
125
|
-
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
埋め込みモデル (約 440MB) を `~/.cache/huggingface/` にダウンロードします。
|
|
135
|
-
SPEC は `gwt-spec` ラベル付き GitHub Issue として格納され、`~/.gwt/cache/issues/<repo-hash>/` に
|
|
136
|
-
キャッシュされます。読み取りは `gwt issue spec <n>`、書き込みは
|
|
137
|
-
`gwt issue spec <n> --edit <section> -f <file>` を使用してください。
|
|
138
|
-
|
|
139
|
-
### Hook 設定ファイルの扱い
|
|
140
|
-
|
|
141
|
-
- gwt は `.claude/settings.local.json` をローカル端末向け設定として再生成し、このファイルの Git 除外も管理します。
|
|
142
|
-
- gwt は `.codex/hooks.json` を作成またはマージしますが、`.gitignore` や `info/exclude` には追加しません。
|
|
143
|
-
- `.codex/hooks.json` を version 管理するかどうかは各リポジトリの判断です。既存ファイルがある場合、gwt は gwt 管理 hook だけを置き換え、ユーザー hook と無関係な top-level 設定は保持します。
|
|
144
|
-
|
|
145
|
-
### GitHub Token(PAT)要件
|
|
146
|
-
|
|
147
|
-
gwt は GitHub 操作に `gh` CLI を使用します。以下で認証してください:
|
|
41
|
+
- shared project index runtime の bootstrap / repair が必要な場合は
|
|
42
|
+
Python 3.9+ が使えること
|
|
43
|
+
|
|
44
|
+
Linux デスクトップ版のビルドには WebKitGTK 系の依存が必要です。CI と同じ依存は
|
|
45
|
+
[docs/docker-usage.md](docs/docker-usage.md) を参照してください。
|
|
46
|
+
|
|
47
|
+
## 使い方
|
|
48
|
+
|
|
49
|
+
ネイティブ GUI を起動します。
|
|
148
50
|
|
|
149
51
|
```bash
|
|
150
|
-
|
|
52
|
+
gwt
|
|
151
53
|
```
|
|
152
54
|
|
|
153
|
-
|
|
55
|
+
起動時には前回の状態を復元するか、新しいプロジェクトディレクトリを開けます。
|
|
56
|
+
同時に WebView 用のローカル HTTP/WebSocket サーバーも起動し、stderr に
|
|
57
|
+
`http://127.0.0.1:<port>/` のような URL を出力します。ネイティブアプリの起動中は、
|
|
58
|
+
同じ URL を通常のブラウザでも開けます。
|
|
154
59
|
|
|
155
|
-
|
|
156
|
-
|---|---|---|
|
|
157
|
-
| **Contents** | Read and Write | リポジトリ参照、ブランチ操作、リリース |
|
|
158
|
-
| **Pull requests** | Read and Write | PR 作成・編集・マージ・レビュー |
|
|
159
|
-
| **Issues** | Read and Write | Issue 作成・編集・コメント |
|
|
160
|
-
| **Metadata** | Read | 暗黙付与 |
|
|
60
|
+
CLI サブコマンドは同じ `gwt` バイナリで処理され、GUI は起動しません。
|
|
161
61
|
|
|
162
|
-
|
|
62
|
+
```bash
|
|
63
|
+
gwt issue spec 1784 --section plan
|
|
64
|
+
gwt pr current
|
|
65
|
+
gwt board show
|
|
66
|
+
gwt hook workflow-policy
|
|
67
|
+
```
|
|
163
68
|
|
|
164
|
-
|
|
69
|
+
## 基本フロー
|
|
70
|
+
|
|
71
|
+
1. リポジトリを開く、または前回のプロジェクトを復元する
|
|
72
|
+
2. キャンバス上に必要なウィンドウを並べる
|
|
73
|
+
3. `Branches` でブランチを選択し、ダブルクリックで Launch Agent を開く
|
|
74
|
+
4. `Shell` または `Agent` ウィンドウを起動する
|
|
75
|
+
5. `File Tree` でリポジトリを閲覧する
|
|
76
|
+
|
|
77
|
+
利用できるウィンドウ:
|
|
78
|
+
|
|
79
|
+
- `Shell`
|
|
80
|
+
- `Agent`
|
|
81
|
+
- `Branches`
|
|
82
|
+
- `File Tree`
|
|
83
|
+
- `Settings`
|
|
84
|
+
- `Memo`
|
|
85
|
+
- `Profile`
|
|
86
|
+
- `Logs`
|
|
87
|
+
- `Issue`
|
|
88
|
+
- `SPEC`
|
|
89
|
+
- `Board`
|
|
90
|
+
- `PR`
|
|
91
|
+
|
|
92
|
+
`Shell` と `Agent` は実プロセスを持つウィンドウです。`File Tree` は実装済みの
|
|
93
|
+
read-only ツリーです。それ以外は現時点では mock surface です。
|
|
94
|
+
|
|
95
|
+
## キャンバス操作
|
|
96
|
+
|
|
97
|
+
- 画面上の zoom ボタンでキャンバスを拡大・縮小
|
|
98
|
+
- 背景ドラッグでキャンバスを移動
|
|
99
|
+
- `Tile` で表示中のウィンドウをグリッド整列
|
|
100
|
+
- `Stack` でタイトルバーを残したまま重ねて表示
|
|
101
|
+
- `Cmd/Ctrl+Shift+Right` と `Cmd/Ctrl+Shift+Left` でフォーカス切替
|
|
102
|
+
- フォーカスされたウィンドウは中央へ寄ります
|
|
103
|
+
|
|
104
|
+
## Managed Hook と SPEC キャッシュ
|
|
105
|
+
|
|
106
|
+
- gwt は `.claude/settings.local.json` を再生成し、`.codex/hooks.json` をマージします
|
|
107
|
+
- SPEC は `gwt-spec` ラベル付き GitHub Issue として管理されます
|
|
108
|
+
- ローカルキャッシュ:
|
|
109
|
+
`~/.gwt/cache/issues/<repo-hash>/`
|
|
110
|
+
- SPEC 全体を読む:
|
|
165
111
|
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
| **Pull requests** | Read |
|
|
170
|
-
| **Issues** | Read |
|
|
171
|
-
| **Metadata** | Read |
|
|
112
|
+
```bash
|
|
113
|
+
gwt issue spec <number>
|
|
114
|
+
```
|
|
172
115
|
|
|
173
|
-
|
|
116
|
+
- セクション単位で読む:
|
|
174
117
|
|
|
175
|
-
|
|
176
|
-
|
|
118
|
+
```bash
|
|
119
|
+
gwt issue spec <number> --section spec|plan|tasks
|
|
120
|
+
```
|
|
177
121
|
|
|
178
|
-
|
|
122
|
+
## ログ
|
|
179
123
|
|
|
180
|
-
|
|
181
|
-
|
|
124
|
+
- アプリログ:
|
|
125
|
+
`~/.gwt/projects/<repo-hash>/logs/gwt.log.YYYY-MM-DD`
|
|
126
|
+
- セッション状態:
|
|
127
|
+
`~/.gwt/session.json`
|
|
128
|
+
- プロジェクト単位のワークスペース状態:
|
|
129
|
+
`~/.gwt/projects/<repo-hash>/workspace.json`
|
|
182
130
|
|
|
183
131
|
## 開発
|
|
184
132
|
|
|
185
133
|
### ビルド
|
|
186
134
|
|
|
187
135
|
```bash
|
|
188
|
-
cargo build -p gwt
|
|
136
|
+
cargo build -p gwt
|
|
189
137
|
```
|
|
190
138
|
|
|
191
|
-
###
|
|
139
|
+
### 実行
|
|
192
140
|
|
|
193
141
|
```bash
|
|
194
|
-
cargo run -p gwt
|
|
142
|
+
cargo run -p gwt
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### macOS 向け `.app` bundle
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
cargo install cargo-bundle
|
|
149
|
+
cargo bundle -p gwt --format osx
|
|
195
150
|
```
|
|
196
151
|
|
|
197
152
|
### テスト
|
|
198
153
|
|
|
199
154
|
```bash
|
|
200
|
-
cargo test -p gwt-core -p gwt-
|
|
155
|
+
cargo test -p gwt-core -p gwt --all-features
|
|
201
156
|
```
|
|
202
157
|
|
|
203
158
|
### Lint
|
|
@@ -217,12 +172,17 @@ cargo fmt
|
|
|
217
172
|
```text
|
|
218
173
|
├── Cargo.toml # ワークスペース設定
|
|
219
174
|
├── crates/
|
|
220
|
-
│ ├── gwt
|
|
221
|
-
│ ├── gwt-
|
|
222
|
-
│ └── gwt-
|
|
223
|
-
└── package.json #
|
|
175
|
+
│ ├── gwt/ # Desktop GUI + WebView server + CLI dispatch
|
|
176
|
+
│ ├── gwt-core/ # コアライブラリ
|
|
177
|
+
│ └── gwt-github/ # GitHub Issue SPEC cache / update layer
|
|
178
|
+
└── package.json # npm package metadata and postinstall
|
|
224
179
|
```
|
|
225
180
|
|
|
181
|
+
## SPEC
|
|
182
|
+
|
|
183
|
+
詳細仕様は `gwt-spec` ラベル付き GitHub Issue にあります。ローカルキャッシュ経由で
|
|
184
|
+
`gwt issue spec <n>` を使って確認できます。
|
|
185
|
+
|
|
226
186
|
## ライセンス
|
|
227
187
|
|
|
228
188
|
MIT
|
package/README.md
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
[日本語](README.ja.md)
|
|
4
4
|
|
|
5
|
-
gwt is a
|
|
6
|
-
|
|
5
|
+
gwt is a desktop GUI for managing Git worktrees and launching coding agents
|
|
6
|
+
such as `Claude Code`, `Codex`, `Gemini`, and `OpenCode`.
|
|
7
7
|
|
|
8
8
|
## Install
|
|
9
9
|
|
|
@@ -13,8 +13,6 @@ your `PATH`.
|
|
|
13
13
|
|
|
14
14
|
### macOS
|
|
15
15
|
|
|
16
|
-
Run the installer:
|
|
17
|
-
|
|
18
16
|
```bash
|
|
19
17
|
curl -fsSL https://raw.githubusercontent.com/akiojin/gwt/main/installers/macos/install.sh | bash
|
|
20
18
|
```
|
|
@@ -25,11 +23,7 @@ Install a specific version:
|
|
|
25
23
|
curl -fsSL https://raw.githubusercontent.com/akiojin/gwt/main/installers/macos/install.sh | bash -s -- --version 6.30.3
|
|
26
24
|
```
|
|
27
25
|
|
|
28
|
-
### Windows
|
|
29
|
-
|
|
30
|
-
Download the binary from GitHub Releases and add it to your `PATH`.
|
|
31
|
-
|
|
32
|
-
### Linux
|
|
26
|
+
### Windows / Linux
|
|
33
27
|
|
|
34
28
|
Download the binary from GitHub Releases and add it to your `PATH`.
|
|
35
29
|
|
|
@@ -39,169 +33,130 @@ Download the binary from GitHub Releases and add it to your `PATH`.
|
|
|
39
33
|
curl -fsSL https://raw.githubusercontent.com/akiojin/gwt/main/installers/macos/uninstall.sh | bash
|
|
40
34
|
```
|
|
41
35
|
|
|
42
|
-
##
|
|
43
|
-
|
|
44
|
-
Launch the TUI in the current directory:
|
|
36
|
+
## Requirements
|
|
45
37
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
### Terminal requirements
|
|
51
|
-
|
|
52
|
-
- 256-color terminal recommended (most modern terminals support this)
|
|
53
|
-
- Minimum 80x24 terminal size
|
|
54
|
-
|
|
55
|
-
## First-time usage
|
|
56
|
-
|
|
57
|
-
1. Run `gwt` in a Git repository.
|
|
58
|
-
2. Browse branches and worktrees in the sidebar.
|
|
59
|
-
3. Use branch actions to:
|
|
60
|
-
- create/list/clean worktrees
|
|
61
|
-
- launch an agent
|
|
62
|
-
4. Open **Settings** to set up AI profile settings if you use Agent or
|
|
63
|
-
summary features.
|
|
64
|
-
|
|
65
|
-
## Key bindings
|
|
66
|
-
|
|
67
|
-
Most TUI key bindings use the `Ctrl+G` prefix. Dragging terminal text copies
|
|
68
|
-
the selection immediately.
|
|
69
|
-
|
|
70
|
-
| Key binding | Action |
|
|
71
|
-
|---|---|
|
|
72
|
-
| `Ctrl+G`, `c` | New shell tab |
|
|
73
|
-
| `Ctrl+G`, `n` | New agent tab |
|
|
74
|
-
| `Ctrl+G`, `1`-`9` | Switch to tab N |
|
|
75
|
-
| `Ctrl+G`, `]` | Next tab |
|
|
76
|
-
| `Ctrl+G`, `[` | Previous tab |
|
|
77
|
-
| `Ctrl+G`, `x` | Close current tab |
|
|
78
|
-
| `Ctrl+G`, `w` | Worktree list |
|
|
79
|
-
| `Ctrl+G`, `s` | Settings |
|
|
80
|
-
| `Ctrl+G`, `?` | Help / key binding reference |
|
|
81
|
-
| `Ctrl+G`, `q` | Quit |
|
|
82
|
-
|
|
83
|
-
Drag across terminal text to copy it. When the host terminal forwards the
|
|
84
|
-
shortcut, the platform copy shortcut also works:
|
|
85
|
-
|
|
86
|
-
- macOS: `Cmd+C`
|
|
87
|
-
- Linux / Windows: `Ctrl+Shift+C`
|
|
88
|
-
|
|
89
|
-
To investigate Japanese IME candidate selection in a shell or agent terminal,
|
|
90
|
-
launch gwt with `GWT_INPUT_TRACE_PATH=/tmp/gwt-input-trace.jsonl`. The JSONL
|
|
91
|
-
trace records raw `crossterm` key events, keybind decisions, and forwarded PTY
|
|
92
|
-
bytes without adding a runtime input-mode toggle.
|
|
93
|
-
|
|
94
|
-
To compare that routed trace with raw terminal input, run
|
|
95
|
-
`cargo run -p gwt-tui --example keytest -- --mode raw` in the same terminal.
|
|
96
|
-
The probe logs every raw `crossterm::event::Event` to
|
|
97
|
-
`/tmp/gwt-crossterm-events.jsonl` by default, or to the positional output path
|
|
98
|
-
you pass.
|
|
99
|
-
|
|
100
|
-
To isolate redraw-related IME regressions, the same probe also supports
|
|
101
|
-
`--mode redraw` and `--mode ratatui`. `redraw` repaints the same committed-text
|
|
102
|
-
surface on a periodic tick using direct `crossterm` commands, while `ratatui`
|
|
103
|
-
uses the same surface through ratatui on the same tick. Use `--tick-ms <N>` to
|
|
104
|
-
change the redraw interval when comparing modes.
|
|
105
|
-
|
|
106
|
-
gwt also requests minimal kitty keyboard enhancements during terminal startup
|
|
107
|
-
(`DISAMBIGUATE_ESCAPE_CODES | REPORT_ALL_KEYS_AS_ESCAPE_CODES |
|
|
108
|
-
REPORT_ALTERNATE_KEYS | REPORT_EVENT_TYPES`) and pops them on shutdown.
|
|
109
|
-
Unsupported terminals fail open and continue with existing behavior. Repeated
|
|
110
|
-
key events from compatible terminals now stay on the same input path as normal
|
|
111
|
-
key presses, which matters when IME candidate navigation advances to another
|
|
112
|
-
page. While the terminal pane owns focus, idle 100 ms ticks now avoid repainting
|
|
113
|
-
the TUI unless an overlay or other explicit periodic UI surface still needs
|
|
114
|
-
animation, which reduces IME candidate interruption from background redraws.
|
|
115
|
-
PTY output still requests an immediate redraw, so committed text and normal
|
|
116
|
-
shell output are not delayed until the next keypress.
|
|
117
|
-
|
|
118
|
-
## Environment and requirements
|
|
119
|
-
|
|
120
|
-
### Required
|
|
121
|
-
|
|
122
|
-
- `git` command available in `PATH`.
|
|
123
|
-
|
|
124
|
-
### Optional (depends on use)
|
|
125
|
-
|
|
126
|
-
- AI provider keys in environment variables (or saved in gwt profile settings):
|
|
38
|
+
- `git` available in `PATH`
|
|
39
|
+
- `gh auth login` completed for GitHub-backed features
|
|
40
|
+
- AI provider credentials when you use agents:
|
|
127
41
|
- `ANTHROPIC_API_KEY` or `ANTHROPIC_AUTH_TOKEN`
|
|
128
42
|
- `OPENAI_API_KEY`
|
|
129
43
|
- `GOOGLE_API_KEY` or `GEMINI_API_KEY`
|
|
130
|
-
-
|
|
131
|
-
- Python 3.9+ on `PATH` when gwt needs to bootstrap or repair the shared project-index runtime
|
|
132
|
-
(for example during startup or repository initialization).
|
|
133
|
-
gwt bootstraps `~/.gwt/runtime/chroma-venv` automatically, then reuses that managed runtime.
|
|
134
|
-
On Windows, make sure either `python` or `py -3` works in Command Prompt or PowerShell.
|
|
135
|
-
- Vector index data (SPECs / Issues / source files) is stored under `~/.gwt/index/<repo-hash>/`.
|
|
136
|
-
Issues and SPECs are repo-scoped and shared across worktrees; source files are worktree-scoped.
|
|
137
|
-
The TUI runs a per-Worktree filesystem watcher and refreshes the Issue index asynchronously
|
|
138
|
-
(15-minute TTL) at startup. The first search after a fresh install downloads the
|
|
139
|
-
`intfloat/multilingual-e5-base` embedding model (~440 MB) into `~/.cache/huggingface/`.
|
|
140
|
-
SPECs live as GitHub Issues labeled `gwt-spec` and are cached locally at
|
|
141
|
-
`~/.gwt/cache/issues/<repo-hash>/`; use `gwt issue spec <n>` to read and `gwt issue spec <n> --edit <section> -f <file>` to write.
|
|
44
|
+
- Python 3.9+ when gwt needs to bootstrap or repair the shared project index runtime
|
|
142
45
|
|
|
143
|
-
|
|
46
|
+
Linux desktop builds also require WebKitGTK-related system packages. See
|
|
47
|
+
[docs/docker-usage.md](docs/docker-usage.md) for the dependency set used in CI.
|
|
144
48
|
|
|
145
|
-
|
|
146
|
-
- gwt creates or merges `.codex/hooks.json`, but does not add it to `.gitignore` or `info/exclude`.
|
|
147
|
-
- Whether `.codex/hooks.json` is version-controlled is a repository decision. When the file already exists, gwt replaces only gwt-managed hook entries and keeps user hooks plus unrelated top-level settings.
|
|
148
|
-
|
|
149
|
-
### GitHub Token (PAT) requirements
|
|
49
|
+
## Usage
|
|
150
50
|
|
|
151
|
-
|
|
51
|
+
Launch the native GUI:
|
|
152
52
|
|
|
153
53
|
```bash
|
|
154
|
-
|
|
54
|
+
gwt
|
|
155
55
|
```
|
|
156
56
|
|
|
157
|
-
|
|
57
|
+
At startup you can restore the previous session or open a new project
|
|
58
|
+
directory. The app also starts a local HTTP/WebSocket server for the WebView
|
|
59
|
+
surface and prints a URL such as `http://127.0.0.1:<port>/` to stderr. You can
|
|
60
|
+
open that URL in a regular browser while the native app is running.
|
|
158
61
|
|
|
159
|
-
|
|
160
|
-
|---|---|---|
|
|
161
|
-
| **Contents** | Read and Write | Repository browsing, branch operations, releases |
|
|
162
|
-
| **Pull requests** | Read and Write | PR create / edit / merge / review |
|
|
163
|
-
| **Issues** | Read and Write | Issue create / edit / comment |
|
|
164
|
-
| **Metadata** | Read | Implicitly granted |
|
|
62
|
+
CLI subcommands run in the same binary without opening a GUI window:
|
|
165
63
|
|
|
166
|
-
|
|
64
|
+
```bash
|
|
65
|
+
gwt issue spec 1784 --section plan
|
|
66
|
+
gwt pr current
|
|
67
|
+
gwt board show
|
|
68
|
+
gwt hook workflow-policy
|
|
69
|
+
```
|
|
167
70
|
|
|
168
|
-
|
|
71
|
+
## Main Workflow
|
|
72
|
+
|
|
73
|
+
1. Open a repository directory or restore the previous project.
|
|
74
|
+
2. Use the canvas to arrange floating windows.
|
|
75
|
+
3. Open `Branches`, select a branch, and double-click to open Launch Agent.
|
|
76
|
+
4. Start `Shell` or `Agent` windows on the selected branch/worktree.
|
|
77
|
+
5. Inspect the repository with the read-only `File Tree` window.
|
|
78
|
+
|
|
79
|
+
Available windows include:
|
|
80
|
+
|
|
81
|
+
- `Shell`
|
|
82
|
+
- `Agent`
|
|
83
|
+
- `Branches`
|
|
84
|
+
- `File Tree`
|
|
85
|
+
- `Settings`
|
|
86
|
+
- `Memo`
|
|
87
|
+
- `Profile`
|
|
88
|
+
- `Logs`
|
|
89
|
+
- `Issue`
|
|
90
|
+
- `SPEC`
|
|
91
|
+
- `Board`
|
|
92
|
+
- `PR`
|
|
93
|
+
|
|
94
|
+
`Shell` and `Agent` are live process windows. `File Tree` is a live read-only
|
|
95
|
+
tree view. The remaining windows are currently mock surfaces where production
|
|
96
|
+
behavior has not been wired yet.
|
|
97
|
+
|
|
98
|
+
## Canvas Operations
|
|
99
|
+
|
|
100
|
+
- Zoom the canvas with the on-screen zoom buttons
|
|
101
|
+
- Pan the canvas by dragging the background
|
|
102
|
+
- Use `Tile` to arrange windows on a grid
|
|
103
|
+
- Use `Stack` to cascade windows with overlap
|
|
104
|
+
- Use `Cmd/Ctrl+Shift+Right` and `Cmd/Ctrl+Shift+Left` to cycle focus; the
|
|
105
|
+
focused window is recentered
|
|
106
|
+
|
|
107
|
+
## Managed Hooks and SPEC Cache
|
|
108
|
+
|
|
109
|
+
- gwt regenerates `.claude/settings.local.json` and merges `.codex/hooks.json`
|
|
110
|
+
for managed hooks
|
|
111
|
+
- SPECs are stored as GitHub Issues labeled `gwt-spec`
|
|
112
|
+
- Local cache path:
|
|
113
|
+
`~/.gwt/cache/issues/<repo-hash>/`
|
|
114
|
+
- Read a SPEC:
|
|
169
115
|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
| **Pull requests** | Read |
|
|
174
|
-
| **Issues** | Read |
|
|
175
|
-
| **Metadata** | Read |
|
|
116
|
+
```bash
|
|
117
|
+
gwt issue spec <number>
|
|
118
|
+
```
|
|
176
119
|
|
|
177
|
-
|
|
120
|
+
- Read one section:
|
|
178
121
|
|
|
179
|
-
|
|
180
|
-
|
|
122
|
+
```bash
|
|
123
|
+
gwt issue spec <number> --section spec|plan|tasks
|
|
124
|
+
```
|
|
181
125
|
|
|
182
|
-
|
|
126
|
+
## Logs
|
|
183
127
|
|
|
184
|
-
|
|
185
|
-
|
|
128
|
+
- App logs:
|
|
129
|
+
`~/.gwt/projects/<repo-hash>/logs/gwt.log.YYYY-MM-DD`
|
|
130
|
+
- Session state:
|
|
131
|
+
`~/.gwt/session.json`
|
|
132
|
+
- Project workspace state:
|
|
133
|
+
`~/.gwt/projects/<repo-hash>/workspace.json`
|
|
186
134
|
|
|
187
135
|
## Development
|
|
188
136
|
|
|
189
137
|
### Build
|
|
190
138
|
|
|
191
139
|
```bash
|
|
192
|
-
cargo build -p gwt
|
|
140
|
+
cargo build -p gwt
|
|
193
141
|
```
|
|
194
142
|
|
|
195
|
-
### Run
|
|
143
|
+
### Run
|
|
196
144
|
|
|
197
145
|
```bash
|
|
198
|
-
cargo run -p gwt
|
|
146
|
+
cargo run -p gwt
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### Build a macOS app bundle
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
cargo install cargo-bundle
|
|
153
|
+
cargo bundle -p gwt --format osx
|
|
199
154
|
```
|
|
200
155
|
|
|
201
156
|
### Test
|
|
202
157
|
|
|
203
158
|
```bash
|
|
204
|
-
cargo test -p gwt-core -p gwt-
|
|
159
|
+
cargo test -p gwt-core -p gwt --all-features
|
|
205
160
|
```
|
|
206
161
|
|
|
207
162
|
### Lint
|
|
@@ -216,17 +171,22 @@ cargo clippy --all-targets --all-features -- -D warnings
|
|
|
216
171
|
cargo fmt
|
|
217
172
|
```
|
|
218
173
|
|
|
219
|
-
## Project
|
|
174
|
+
## Project Structure
|
|
220
175
|
|
|
221
176
|
```text
|
|
222
177
|
├── Cargo.toml # Workspace configuration
|
|
223
178
|
├── crates/
|
|
224
|
-
│ ├── gwt
|
|
225
|
-
│ ├── gwt-
|
|
226
|
-
│ └── gwt-
|
|
227
|
-
└── package.json #
|
|
179
|
+
│ ├── gwt/ # Desktop GUI + WebView server + CLI dispatch
|
|
180
|
+
│ ├── gwt-core/ # Core library
|
|
181
|
+
│ └── gwt-github/ # GitHub Issue SPEC cache / update layer
|
|
182
|
+
└── package.json # npm package metadata and postinstall
|
|
228
183
|
```
|
|
229
184
|
|
|
185
|
+
## Specs
|
|
186
|
+
|
|
187
|
+
Detailed requirements live in GitHub Issues labeled `gwt-spec`. Use
|
|
188
|
+
`gwt issue spec <n>` to inspect them locally through the cache-backed CLI.
|
|
189
|
+
|
|
230
190
|
## License
|
|
231
191
|
|
|
232
192
|
MIT
|
package/bin/gwt.cjs
CHANGED
|
@@ -13,7 +13,7 @@ const os = require("os");
|
|
|
13
13
|
|
|
14
14
|
const REPO = "akiojin/gwt";
|
|
15
15
|
const BIN_DIR = __dirname;
|
|
16
|
-
const BIN_NAME = process.platform === "win32" ? "gwt
|
|
16
|
+
const BIN_NAME = process.platform === "win32" ? "gwt.exe" : "gwt";
|
|
17
17
|
const BIN_PATH = path.join(BIN_DIR, BIN_NAME);
|
|
18
18
|
|
|
19
19
|
function releaseAssetName() {
|
package/package.json
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@akiojin/gwt",
|
|
3
|
-
"version": "9.0
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "9.2.0",
|
|
4
|
+
"description": "Desktop GUI for Git worktree management and coding agent launch",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
7
|
"gwt": "bin/gwt.cjs"
|
|
8
8
|
},
|
|
9
9
|
"scripts": {
|
|
10
10
|
"postinstall": "node scripts/postinstall.js",
|
|
11
|
-
"dev": "cargo run -p gwt
|
|
12
|
-
"build": "cargo build --release -p gwt
|
|
13
|
-
"test": "cargo test -p gwt-core -p gwt
|
|
11
|
+
"dev": "cargo run -p gwt",
|
|
12
|
+
"build": "cargo build --release -p gwt",
|
|
13
|
+
"test": "cargo test -p gwt-core -p gwt --all-features",
|
|
14
14
|
"test:all": "bash scripts/test-all.sh",
|
|
15
15
|
"prepare": "test -n \"$CI\" || bunx husky install",
|
|
16
16
|
"lint:skills": "bash scripts/validate-skill-frontmatter.sh",
|