@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.
Files changed (67) hide show
  1. package/README.ja.md +106 -146
  2. package/README.md +103 -143
  3. package/bin/gwt.cjs +1 -1
  4. package/package.json +5 -5
  5. package/rustfmt.toml +0 -2
  6. package/scripts/check-release-flow.sh +2 -8
  7. package/scripts/postinstall.js +17 -7
  8. package/scripts/run-local-backend-tests-on-commit.sh +6 -12
  9. package/scripts/test-all.sh +1 -5
  10. package/scripts/check-e2e-coverage-threshold.mjs +0 -238
  11. package/scripts/run-local-e2e-coverage-on-commit.sh +0 -69
  12. package/scripts/run-local-e2e-on-commit.sh +0 -60
  13. package/scripts/verify-ci-node-toolchain.sh +0 -76
  14. package/scripts/voice-eval.sh +0 -48
  15. package/vendor/ratatui-core/src/backend/test.rs +0 -1077
  16. package/vendor/ratatui-core/src/backend.rs +0 -405
  17. package/vendor/ratatui-core/src/buffer/assert.rs +0 -71
  18. package/vendor/ratatui-core/src/buffer/buffer.rs +0 -1388
  19. package/vendor/ratatui-core/src/buffer/cell.rs +0 -377
  20. package/vendor/ratatui-core/src/buffer.rs +0 -9
  21. package/vendor/ratatui-core/src/layout/alignment.rs +0 -89
  22. package/vendor/ratatui-core/src/layout/constraint.rs +0 -526
  23. package/vendor/ratatui-core/src/layout/direction.rs +0 -63
  24. package/vendor/ratatui-core/src/layout/flex.rs +0 -212
  25. package/vendor/ratatui-core/src/layout/layout.rs +0 -2838
  26. package/vendor/ratatui-core/src/layout/margin.rs +0 -79
  27. package/vendor/ratatui-core/src/layout/offset.rs +0 -66
  28. package/vendor/ratatui-core/src/layout/position.rs +0 -253
  29. package/vendor/ratatui-core/src/layout/rect/iter.rs +0 -356
  30. package/vendor/ratatui-core/src/layout/rect/ops.rs +0 -136
  31. package/vendor/ratatui-core/src/layout/rect.rs +0 -1114
  32. package/vendor/ratatui-core/src/layout/size.rs +0 -147
  33. package/vendor/ratatui-core/src/layout.rs +0 -333
  34. package/vendor/ratatui-core/src/lib.rs +0 -82
  35. package/vendor/ratatui-core/src/style/anstyle.rs +0 -348
  36. package/vendor/ratatui-core/src/style/color.rs +0 -788
  37. package/vendor/ratatui-core/src/style/palette/material.rs +0 -608
  38. package/vendor/ratatui-core/src/style/palette/tailwind.rs +0 -653
  39. package/vendor/ratatui-core/src/style/palette.rs +0 -6
  40. package/vendor/ratatui-core/src/style/palette_conversion.rs +0 -82
  41. package/vendor/ratatui-core/src/style/stylize.rs +0 -668
  42. package/vendor/ratatui-core/src/style.rs +0 -1069
  43. package/vendor/ratatui-core/src/symbols/bar.rs +0 -51
  44. package/vendor/ratatui-core/src/symbols/block.rs +0 -51
  45. package/vendor/ratatui-core/src/symbols/border.rs +0 -709
  46. package/vendor/ratatui-core/src/symbols/braille.rs +0 -21
  47. package/vendor/ratatui-core/src/symbols/half_block.rs +0 -3
  48. package/vendor/ratatui-core/src/symbols/line.rs +0 -259
  49. package/vendor/ratatui-core/src/symbols/marker.rs +0 -82
  50. package/vendor/ratatui-core/src/symbols/merge.rs +0 -748
  51. package/vendor/ratatui-core/src/symbols/pixel.rs +0 -30
  52. package/vendor/ratatui-core/src/symbols/scrollbar.rs +0 -46
  53. package/vendor/ratatui-core/src/symbols/shade.rs +0 -5
  54. package/vendor/ratatui-core/src/symbols.rs +0 -15
  55. package/vendor/ratatui-core/src/terminal/frame.rs +0 -192
  56. package/vendor/ratatui-core/src/terminal/terminal.rs +0 -926
  57. package/vendor/ratatui-core/src/terminal/viewport.rs +0 -58
  58. package/vendor/ratatui-core/src/terminal.rs +0 -40
  59. package/vendor/ratatui-core/src/text/grapheme.rs +0 -84
  60. package/vendor/ratatui-core/src/text/line.rs +0 -1678
  61. package/vendor/ratatui-core/src/text/masked.rs +0 -149
  62. package/vendor/ratatui-core/src/text/span.rs +0 -904
  63. package/vendor/ratatui-core/src/text/text.rs +0 -1434
  64. package/vendor/ratatui-core/src/text.rs +0 -64
  65. package/vendor/ratatui-core/src/widgets/stateful_widget.rs +0 -193
  66. package/vendor/ratatui-core/src/widgets/widget.rs +0 -174
  67. 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
- `Claude Code` / `Codex` / `Gemini` / `OpenCode` 起動を行うターミナル (TUI) ツールです。
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
- ### Linux
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
- カレントディレクトリで TUI を起動します。
42
-
43
- ```bash
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
- - `bunx` / `npx`(ローカル起動のフォールバックに利用)
126
- - gwt が shared project-index runtime を bootstrap / repair するとき
127
- (起動時やリポジトリ初期化時など)には `PATH` 上に Python 3.9+ が必要です。
128
- gwt `~/.gwt/runtime/chroma-venv` を自動作成し、その後は managed runtime を再利用します。
129
- Windows では Command Prompt / PowerShell で `python` または `py -3` が通る状態にしてください。
130
- - ベクトル索引データ (Issue / SPEC / ソースファイル) は `~/.gwt/index/<repo-hash>/` 配下に
131
- 保存されます。Issue および SPEC はリポジトリ単位で共有、ソースファイルは Worktree 単位です。
132
- TUI は Worktree ごとにファイルシステム watcher を常駐させ、Issue 索引は起動時に
133
- 15 TTL で非同期リフレッシュします。初回検索時に `intfloat/multilingual-e5-base`
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
- gh auth login
52
+ gwt
151
53
  ```
152
54
 
153
- #### Fine-grained PAT 推奨権限
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
- 閲覧のみ(PR 作成やブランチ管理なし)の場合:
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
- | **Contents** | Read |
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
- - `GWT_AGENT_AUTO_INSTALL_DEPS` (`true` / `false`)
176
- - `GWT_DOCKER_FORCE_HOST` (`true` / `false`)
118
+ ```bash
119
+ gwt issue spec <number> --section spec|plan|tasks
120
+ ```
177
121
 
178
- ### ログとプロファイリング
122
+ ## ログ
179
123
 
180
- 通常ログはプロジェクトごとに `~/.gwt/logs/<repo-hash>/gwt.log.YYYY-MM-DD` へ JSON Lines 形式で保存されます。パフォーマンスプロファイリングは **Settings > Profiling** で有効化できます。
181
- ログ仕様の詳細は [#1758](https://github.com/akiojin/gwt/issues/1758) を参照してください。
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-tui
136
+ cargo build -p gwt
189
137
  ```
190
138
 
191
- ### 実行(開発)
139
+ ### 実行
192
140
 
193
141
  ```bash
194
- cargo run -p gwt-tui
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-tui
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-core/ # コアライブラリ(Git操作・PTY管理・設定)
221
- │ ├── gwt-github/ # GitHub Issue SOT for SPEC 管理 (SPEC-12)
222
- │ └── gwt-tui/ # ratatui TUI フロントエンド + CLI (`gwt issue spec ...`)
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 terminal-based (TUI) tool for managing Git worktrees and launching
6
- coding agents (`Claude Code`, `Codex`, `Gemini`, `OpenCode`) on a project basis.
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
- ## Usage
43
-
44
- Launch the TUI in the current directory:
36
+ ## Requirements
45
37
 
46
- ```bash
47
- gwt
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
- - `bunx` or `npx` for local agent launch fallback.
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
- ### Hook file ownership
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
- - gwt regenerates `.claude/settings.local.json` as a local machine file and manages its Git exclusion.
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
- gwt uses `gh` CLI for GitHub operations. Authenticate with:
51
+ Launch the native GUI:
152
52
 
153
53
  ```bash
154
- gh auth login
54
+ gwt
155
55
  ```
156
56
 
157
- #### Fine-grained PAT recommended permissions
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
- | Permission | Access | Used for |
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
- #### Read-only minimum
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
- For browse-only usage (no PR creation or branch management):
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
- | Permission | Access |
171
- |---|---|
172
- | **Contents** | Read |
173
- | **Pull requests** | Read |
174
- | **Issues** | Read |
175
- | **Metadata** | Read |
116
+ ```bash
117
+ gwt issue spec <number>
118
+ ```
176
119
 
177
- ### Optional advanced toggles
120
+ - Read one section:
178
121
 
179
- - `GWT_AGENT_AUTO_INSTALL_DEPS` (`true` / `false`)
180
- - `GWT_DOCKER_FORCE_HOST` (`true` / `false`)
122
+ ```bash
123
+ gwt issue spec <number> --section spec|plan|tasks
124
+ ```
181
125
 
182
- ### Logging and profiling
126
+ ## Logs
183
127
 
184
- Normal logs are stored per project as JSON Lines under `~/.gwt/logs/<repo-hash>/gwt.log.YYYY-MM-DD`. Performance profiling can be enabled in **Settings > Profiling**.
185
- See [#1758](https://github.com/akiojin/gwt/issues/1758) for the logging specification.
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-tui
140
+ cargo build -p gwt
193
141
  ```
194
142
 
195
- ### Run (development)
143
+ ### Run
196
144
 
197
145
  ```bash
198
- cargo run -p gwt-tui
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-tui
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 structure
174
+ ## Project Structure
220
175
 
221
176
  ```text
222
177
  ├── Cargo.toml # Workspace configuration
223
178
  ├── crates/
224
- │ ├── gwt-core/ # Core library (Git operations, PTY management, config)
225
- │ ├── gwt-github/ # GitHub Issue SOT for SPEC management (SPEC-12)
226
- │ └── gwt-tui/ # ratatui TUI frontend + CLI dispatch (`gwt issue spec ...`)
227
- └── package.json # Development scripts
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-tui.exe" : "gwt-tui";
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",
4
- "description": "TUI for Git worktree management and coding agent launch",
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-tui",
12
- "build": "cargo build --release -p gwt-tui",
13
- "test": "cargo test -p gwt-core -p gwt-tui --all-features",
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",
package/rustfmt.toml CHANGED
@@ -3,6 +3,4 @@ edition = "2021"
3
3
  max_width = 100
4
4
  tab_spaces = 4
5
5
  use_small_heuristics = "Default"
6
- imports_granularity = "Crate"
7
- group_imports = "StdExternalCrate"
8
6
  reorder_imports = true