@akiojin/gwt 9.15.0 → 9.16.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/.husky/pre-push +36 -0
- package/README.ja.md +136 -35
- package/README.md +143 -38
- package/package.json +5 -2
- package/scripts/test_release_assets.cjs +18 -4
- package/scripts/verify-husky-hooks.sh +18 -0
package/.husky/pre-push
CHANGED
|
@@ -11,10 +11,46 @@ unset GIT_DIR GIT_INDEX_FILE GIT_WORK_TREE GIT_PREFIX \
|
|
|
11
11
|
GIT_OBJECT_DIRECTORY GIT_ALTERNATE_OBJECT_DIRECTORIES \
|
|
12
12
|
GIT_NAMESPACE GIT_COMMON_DIR
|
|
13
13
|
|
|
14
|
+
ensure_coverage_tooling() {
|
|
15
|
+
if ! command -v cargo >/dev/null 2>&1; then
|
|
16
|
+
echo "cargo is required for pre-push checks but was not found on PATH." >&2
|
|
17
|
+
exit 1
|
|
18
|
+
fi
|
|
19
|
+
|
|
20
|
+
if cargo llvm-cov --version >/dev/null 2>&1; then
|
|
21
|
+
return
|
|
22
|
+
fi
|
|
23
|
+
|
|
24
|
+
echo "cargo-llvm-cov is not installed. Installing it before coverage check..."
|
|
25
|
+
if ! cargo install cargo-llvm-cov --locked; then
|
|
26
|
+
echo "Failed to install cargo-llvm-cov." >&2
|
|
27
|
+
echo "Run manually: cargo install cargo-llvm-cov --locked" >&2
|
|
28
|
+
exit 1
|
|
29
|
+
fi
|
|
30
|
+
|
|
31
|
+
if command -v rustup >/dev/null 2>&1; then
|
|
32
|
+
echo "Ensuring llvm-tools-preview is available..."
|
|
33
|
+
if ! rustup component add llvm-tools-preview; then
|
|
34
|
+
echo "Warning: failed to install llvm-tools-preview." >&2
|
|
35
|
+
echo "Continuing; cargo llvm-cov will validate llvm tool availability." >&2
|
|
36
|
+
echo "Manual recovery: rustup component add llvm-tools-preview" >&2
|
|
37
|
+
fi
|
|
38
|
+
else
|
|
39
|
+
echo "rustup not found; assuming llvm tools are provided by the active toolchain."
|
|
40
|
+
fi
|
|
41
|
+
|
|
42
|
+
if ! cargo llvm-cov --version >/dev/null 2>&1; then
|
|
43
|
+
echo "cargo-llvm-cov was installed, but cargo llvm-cov is still unavailable." >&2
|
|
44
|
+
echo "Ensure Cargo's bin directory is on PATH, then retry push." >&2
|
|
45
|
+
exit 1
|
|
46
|
+
fi
|
|
47
|
+
}
|
|
48
|
+
|
|
14
49
|
echo "Running CI-equivalent lint checks..."
|
|
15
50
|
|
|
16
51
|
cargo clippy --all-targets --all-features -- -D warnings
|
|
17
52
|
cargo fmt --all -- --check
|
|
53
|
+
ensure_coverage_tooling
|
|
18
54
|
cargo llvm-cov -p gwt-core -p gwt --all-features --json --summary-only --output-path target/coverage-summary.json -- --test-threads=1
|
|
19
55
|
node scripts/check-coverage-threshold.mjs target/coverage-summary.json 90
|
|
20
56
|
bunx --bun markdownlint-cli . --config .markdownlint.json --ignore target --ignore CHANGELOG.md --ignore tasks/todo.md
|
package/README.ja.md
CHANGED
|
@@ -1,7 +1,33 @@
|
|
|
1
1
|
# gwt
|
|
2
2
|
|
|
3
|
-
gwt は
|
|
4
|
-
|
|
3
|
+
gwt は agent-driven development のためのデスクトップ control plane です。
|
|
4
|
+
コーディングエージェント、プロジェクト文脈、共有 coordination、GitHub
|
|
5
|
+
Issue ベースの SPEC、セマンティック検索、managed workflow automation を、
|
|
6
|
+
ネイティブ GUI とブラウザから開ける 1 つの workspace に集約します。
|
|
7
|
+
|
|
8
|
+
Git worktree は gwt の背後にある隔離基盤です。gwt は安全な task ごとの
|
|
9
|
+
Agent workspace を materialize するために worktree を使いますが、利用者の
|
|
10
|
+
主導線は branch 管理ではなく、作業、Issue、SPEC、検索、Board 文脈から始まります。
|
|
11
|
+
|
|
12
|
+
## gwt の特徴
|
|
13
|
+
|
|
14
|
+
- **Agent workspace** — `Claude Code` / `Codex` / `Gemini` / `OpenCode` /
|
|
15
|
+
`Copilot` / custom agent を共有 canvas から起動・再開・状態確認できます。
|
|
16
|
+
- **Shared Board** — user と agent の communication を repo-scoped timeline に集約し、
|
|
17
|
+
`status` / `claim` / `next` / `blocked` / `handoff` / `decision` /
|
|
18
|
+
`question` を扱えます。
|
|
19
|
+
- **Agent 間 coordination** — managed hooks が reasoning milestone の投稿を促し、
|
|
20
|
+
直近の Board 文脈を注入するため、並列 Agent が判断・引き継ぎ・ブロッカー・
|
|
21
|
+
自分宛 request を把握できます。
|
|
22
|
+
- **Semantic Knowledge Bridge** — Issue、SPEC、project source、docs を
|
|
23
|
+
substring だけでなく ChromaDB / multilingual-e5 の semantic index で検索できます。
|
|
24
|
+
- **GitHub Issue-backed SPEC** — `gwt-spec` Issue を正本にしつつ、
|
|
25
|
+
ローカル cache-backed CLI で section 単位に読み書きできます。
|
|
26
|
+
- **Managed workflow skills** — discussion、Issue routing、planning、
|
|
27
|
+
TDD implementation、PR、architecture review、project search、agent 管理用の
|
|
28
|
+
bundled `gwt-*` skills を使えます。
|
|
29
|
+
- **Operator canvas** — Agent、Board、Issue、SPEC、Logs、Memo、Profile、
|
|
30
|
+
File Tree、Branches、PR surface を mission-control 風 workspace に並べられます。
|
|
5
31
|
|
|
6
32
|
## インストール
|
|
7
33
|
|
|
@@ -99,44 +125,81 @@ hook は同期的な `gwt hook ...` dispatch にフォールバックし、複
|
|
|
99
125
|
が完了するまで利用できません。`gwtd daemon status` 自体は Windows
|
|
100
126
|
でも実行可能ですが、daemon が動かないため常に `stopped` を表示します。
|
|
101
127
|
|
|
102
|
-
##
|
|
103
|
-
|
|
104
|
-
1.
|
|
105
|
-
2.
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
- `
|
|
121
|
-
- `
|
|
122
|
-
- `
|
|
123
|
-
-
|
|
124
|
-
|
|
125
|
-
`
|
|
126
|
-
|
|
128
|
+
## Agent Workflow
|
|
129
|
+
|
|
130
|
+
1. プロジェクトを開く、または前回のプロジェクトを復元する
|
|
131
|
+
2. `Board`、`Issue`、`SPEC`、Knowledge search surface で現在の作業、
|
|
132
|
+
関連 owner、過去の判断を把握する
|
|
133
|
+
3. まだ branch ではなく作業単位として曖昧な場合は、Project Bar または
|
|
134
|
+
Command Palette の `Start Work` を選ぶ
|
|
135
|
+
4. `Start Work` から `Agent` を起動する。既知の owner がある場合は
|
|
136
|
+
Issue / SPEC detail から直接 Launch Agent する
|
|
137
|
+
5. 起動確定時にのみ、gwt が背後の `work/YYYYMMDD-HHMM[-n]`
|
|
138
|
+
branch / worktree を materialize する
|
|
139
|
+
6. Agent 実行中は shared Board に status、claim、next、blocked、
|
|
140
|
+
handoff、decision を残して coordination する
|
|
141
|
+
7. Git の確認・filter・cleanup・低レベルな branch/worktree detail が必要な場合だけ
|
|
142
|
+
`Branches` を開く
|
|
143
|
+
|
|
144
|
+
主なウィンドウ:
|
|
145
|
+
|
|
146
|
+
- `Agent` — Start Work / Launch Agent から作成される実 coding-agent process window
|
|
147
|
+
- `Board` — reasoning と coordination のための user / agent shared timeline
|
|
148
|
+
- `Issue` / `SPEC` — semantic search、detail pane、Launch Agent handoff を備えた
|
|
149
|
+
cache-backed Knowledge Bridge
|
|
150
|
+
- `Logs` — project diagnostics と live log surface
|
|
151
|
+
- `Memo` / `Profile` — repo-scoped note と environment/profile 管理
|
|
152
|
+
- `File Tree` — 実リポジトリの read-only tree
|
|
153
|
+
- `Branches` — branch 確認、filter、cleanup、Git detail
|
|
154
|
+
- `Settings` — application と agent の設定
|
|
155
|
+
- `PR` — pull-request workflow surface。詳細な一覧機能は cache-backed PR source の整備に依存します
|
|
156
|
+
|
|
157
|
+
`Agent` は coding agent セッション用の実プロセスウィンドウです。`Board` は
|
|
158
|
+
Agent が status、decision、handoff、request を外部化する coordination surface です。
|
|
159
|
+
`Issue` と `SPEC` は frontend から GitHub API response を直接描画せず、
|
|
160
|
+
ローカル cache と semantic index を使います。
|
|
127
161
|
|
|
128
162
|
Windows の Host 起動では、Launch Agent で Command Prompt、Windows PowerShell、
|
|
129
|
-
PowerShell 7
|
|
130
|
-
Docker 起動では引き続きコンテナ内のシェルを使います。
|
|
163
|
+
PowerShell 7 を選択できます。Docker 起動では引き続きコンテナ内のシェルを使います。
|
|
131
164
|
|
|
132
165
|
ターミナルウィンドウでは、テキストをドラッグ選択してマウスボタンを離すとコピー
|
|
133
166
|
できます。Windows / Linux では `Ctrl+Shift+C` でも現在の選択をコピーできます。
|
|
134
167
|
`Ctrl+C` は実行中のターミナルプロセス向けの割り込みのままです。
|
|
135
168
|
|
|
136
|
-
##
|
|
169
|
+
## Knowledge、Search、Managed Skills
|
|
170
|
+
|
|
171
|
+
gwt は project knowledge を Agent workspace の近くに置きます。
|
|
172
|
+
|
|
173
|
+
- `gwtd issue spec <n>` は GitHub Issue-backed SPEC をローカル cache から読みます。
|
|
174
|
+
- `gwtd issue view <n>` と `gwtd issue comments <n>` は gwt CLI surface から
|
|
175
|
+
cache-backed Issue access を提供します。
|
|
176
|
+
- `gwt-search` は共有 ChromaDB runtime を通じて SPEC、Issue、source files、
|
|
177
|
+
docs を検索します。index が無い場合は必要に応じて build され、desktop app は
|
|
178
|
+
管理対象 Python search runtime を修復できます。
|
|
179
|
+
- Issue / SPEC の Knowledge Bridge window は cache-backed list/detail と、
|
|
180
|
+
semantic ranking、exact match priority、match percentage を組み合わせます。
|
|
181
|
+
|
|
182
|
+
Bundled workflow skills は active worktree の `.claude/skills`、
|
|
183
|
+
`.claude/commands`、`.codex/skills` に materialize されます。公開 entrypoint は
|
|
184
|
+
以下です。
|
|
185
|
+
|
|
186
|
+
- `gwt-discussion` — investigation-first な議論と設計明確化
|
|
187
|
+
- `gwt-register-issue` / `gwt-fix-issue` — Issue intake と Issue 起点の修正
|
|
188
|
+
- `gwt-plan-spec` — 承認済み SPEC の implementation planning
|
|
189
|
+
- `gwt-build-spec` — 承認済み task からの TDD-oriented implementation
|
|
190
|
+
- `gwt-manage-pr` — PR create/check/fix lifecycle
|
|
191
|
+
- `gwt-arch-review` — architecture review と改善 routing
|
|
192
|
+
- `gwt-search` — unified semantic search
|
|
193
|
+
- `gwt-agent` — running agent pane の確認と操作
|
|
194
|
+
|
|
195
|
+
Managed hooks は user hook を保持しながら、Agent state、workflow guardrails、
|
|
196
|
+
Board reminders、discussion/plan/build Stop checks、coordination-event summaries
|
|
197
|
+
を追加します。
|
|
198
|
+
|
|
199
|
+
## ワークスペース基盤
|
|
137
200
|
|
|
138
|
-
|
|
139
|
-
|
|
201
|
+
Agent session の隔離と再現性のため、gwt は各プロジェクトをワークスペース
|
|
202
|
+
ディレクトリ配下の **Nested Bare + Worktree** 構成として管理できます。
|
|
140
203
|
|
|
141
204
|
```
|
|
142
205
|
<workspace>/<project>/
|
|
@@ -177,12 +240,50 @@ bare リポジトリを作り直し、各 worktree を新レイアウトに再
|
|
|
177
240
|
- `Cmd/Ctrl+Shift+Right` と `Cmd/Ctrl+Shift+Left` でフォーカス切替
|
|
178
241
|
- フォーカスされたウィンドウは中央へ寄ります
|
|
179
242
|
|
|
180
|
-
##
|
|
243
|
+
## Operator デザイン言語 (SPEC-2356)
|
|
181
244
|
|
|
182
|
-
|
|
183
|
-
|
|
245
|
+
Operator Design System 採用後、gwt は editorial-industrial 系タイポグラフィ
|
|
246
|
+
(本文 `Mona Sans` / ディスプレイ `Hubot Sans Condensed` / 等幅 `JetBrains Mono`)
|
|
247
|
+
を中核とした単一の mission-control サーフェスとして再設計されました。
|
|
248
|
+
Project Bar / Sidebar Layers / Status Strip / Command Palette / Hotkey
|
|
249
|
+
Overlay / Drawer モーダル / フローティングウィンドウ の全クロームが
|
|
250
|
+
共通トークンを参照し、 2 つの旗艦テーマで提供されます:
|
|
251
|
+
|
|
252
|
+
- **Dark Operator** (Mission Control / carbon + neon) — 既定、 長時間作業向け
|
|
253
|
+
- **Light Operator** (Drafting Table / bone + ink) — 明るい環境向け
|
|
254
|
+
|
|
255
|
+
OS の `prefers-color-scheme` に追従しつつ、 Project Bar の **Theme** トグルで
|
|
256
|
+
`auto → dark → light → auto` を循環できます。 選択はブラウザストレージに
|
|
257
|
+
永続化され、 再起動後も維持されます。 xterm 端末パネルは overall theme に
|
|
258
|
+
追従します。 `prefers-reduced-motion: reduce` を有効にすると Living Telemetry
|
|
259
|
+
の pulse rim・Status Strip の ticking・Mission Briefing intro が静止表現に
|
|
260
|
+
縮退します。 `forced-colors: active` (Windows High Contrast / macOS Increase
|
|
261
|
+
Contrast) では system colors にフォールバックします。
|
|
262
|
+
|
|
263
|
+
### ホットキー
|
|
264
|
+
|
|
265
|
+
| 組合せ | 動作 |
|
|
266
|
+
| --- | --- |
|
|
267
|
+
| `⌘K` / `⌘P` | Command Palette を開く (全サーフェス アクションの fuzzy 検索) |
|
|
268
|
+
| `⌘B` | Board サーフェスを focus |
|
|
269
|
+
| `⌘G` | Git (Branches) サーフェスを focus |
|
|
270
|
+
| `⌘L` | Logs サーフェスを focus |
|
|
271
|
+
| `⌘?` | Hotkey Overlay (cheat sheet) を toggle |
|
|
272
|
+
| `Esc` | 開いている Palette / Overlay / Drawer を閉じる |
|
|
273
|
+
|
|
274
|
+
## SPEC と runtime クイックリファレンス
|
|
275
|
+
|
|
276
|
+
- SPEC の正本: `gwt-spec` ラベル付き GitHub Issue
|
|
184
277
|
- ローカルキャッシュ:
|
|
185
278
|
`~/.gwt/cache/issues/<repo-hash>/`
|
|
279
|
+
- Managed agent integration files:
|
|
280
|
+
`.claude/settings.local.json` と `.codex/hooks.json`
|
|
281
|
+
- SPEC 一覧を読む:
|
|
282
|
+
|
|
283
|
+
```bash
|
|
284
|
+
gwtd issue spec list
|
|
285
|
+
```
|
|
286
|
+
|
|
186
287
|
- SPEC 全体を読む:
|
|
187
288
|
|
|
188
289
|
```bash
|
package/README.md
CHANGED
|
@@ -2,8 +2,35 @@
|
|
|
2
2
|
|
|
3
3
|
[日本語](README.ja.md)
|
|
4
4
|
|
|
5
|
-
gwt is a desktop
|
|
6
|
-
|
|
5
|
+
gwt is a desktop control plane for agent-driven development. It brings coding
|
|
6
|
+
agents, project context, shared coordination, GitHub Issue-backed specs,
|
|
7
|
+
semantic search, and managed workflow automation into one native GUI and
|
|
8
|
+
browser-accessible workspace.
|
|
9
|
+
|
|
10
|
+
Git worktrees are the isolation substrate behind gwt. They let gwt materialize
|
|
11
|
+
safe per-task workspaces for agents, but the product flow starts from work,
|
|
12
|
+
Issues, SPECs, search, and Board context rather than from branch management.
|
|
13
|
+
|
|
14
|
+
## Why gwt
|
|
15
|
+
|
|
16
|
+
- **Agent workspace** — launch, resume, and monitor `Claude Code`, `Codex`,
|
|
17
|
+
`Gemini`, `OpenCode`, `Copilot`, and custom agents from a shared canvas.
|
|
18
|
+
- **Shared Board** — keep user and agent communication in one repo-scoped
|
|
19
|
+
timeline with `status`, `claim`, `next`, `blocked`, `handoff`, `decision`,
|
|
20
|
+
and `question` posts.
|
|
21
|
+
- **Agent-to-agent coordination** — managed hooks remind agents to post
|
|
22
|
+
reasoning milestones and inject recent Board context so parallel agents can
|
|
23
|
+
see decisions, handoffs, blockers, and targeted requests.
|
|
24
|
+
- **Semantic Knowledge Bridge** — search Issues, SPECs, project source files,
|
|
25
|
+
and docs through a ChromaDB / multilingual-e5 index instead of relying only
|
|
26
|
+
on substring matches.
|
|
27
|
+
- **GitHub Issue-backed SPECs** — treat `gwt-spec` Issues as the source of
|
|
28
|
+
truth while reading and editing sections through the local cache-backed CLI.
|
|
29
|
+
- **Managed workflow skills** — use bundled `gwt-*` skills for discussion,
|
|
30
|
+
issue routing, planning, TDD implementation, PR work, architecture review,
|
|
31
|
+
project search, and agent-pane management.
|
|
32
|
+
- **Operator canvas** — arrange Agent, Board, Issue, SPEC, Logs, Memo, Profile,
|
|
33
|
+
File Tree, Branches, and PR surfaces in one mission-control style workspace.
|
|
7
34
|
|
|
8
35
|
## Install
|
|
9
36
|
|
|
@@ -99,45 +126,84 @@ therefore unavailable on Windows pending follow-up work; `gwtd
|
|
|
99
126
|
daemon status` still works there but always reports `stopped` until
|
|
100
127
|
the named-pipe path lands.
|
|
101
128
|
|
|
102
|
-
##
|
|
103
|
-
|
|
104
|
-
1. Open a
|
|
105
|
-
2. Use
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
- `
|
|
121
|
-
|
|
122
|
-
- `Board`
|
|
123
|
-
- `
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
129
|
+
## Agent Workflow
|
|
130
|
+
|
|
131
|
+
1. Open a project directory or restore the previous project.
|
|
132
|
+
2. Use `Board`, `Issue`, `SPEC`, and Knowledge search surfaces to understand
|
|
133
|
+
the current work, related owners, and prior decisions.
|
|
134
|
+
3. Choose `Start Work` from the Project Bar or Command Palette when the task is
|
|
135
|
+
still work-shaped rather than branch-shaped.
|
|
136
|
+
4. Launch an `Agent` from Start Work, or launch directly from an Issue/SPEC
|
|
137
|
+
detail when the owner is already known.
|
|
138
|
+
5. Let gwt materialize the backing `work/YYYYMMDD-HHMM[-n]` branch/worktree
|
|
139
|
+
only when launch is confirmed.
|
|
140
|
+
6. Use the shared Board for status, claims, next steps, blockers, handoffs,
|
|
141
|
+
and decisions while agents run.
|
|
142
|
+
7. Open `Branches` only when you need Git inspection, filtering, cleanup, or
|
|
143
|
+
lower-level branch/worktree details.
|
|
144
|
+
|
|
145
|
+
Common windows include:
|
|
146
|
+
|
|
147
|
+
- `Agent` — live coding-agent process windows created through Start Work or
|
|
148
|
+
Launch Agent
|
|
149
|
+
- `Board` — shared user/agent timeline for reasoning and coordination
|
|
150
|
+
- `Issue` and `SPEC` — cache-backed Knowledge Bridge windows with semantic
|
|
151
|
+
search, detail panes, and Launch Agent handoff
|
|
152
|
+
- `Logs` — project diagnostics and live log surface
|
|
153
|
+
- `Memo` and `Profile` — repo-scoped notes and environment/profile management
|
|
154
|
+
- `File Tree` — live read-only repository tree
|
|
155
|
+
- `Branches` — branch inspection, filtering, cleanup, and Git details
|
|
156
|
+
- `Settings` — application and agent configuration
|
|
157
|
+
- `PR` — pull-request workflow surface; detailed list support depends on the
|
|
158
|
+
cache-backed PR source as it lands
|
|
159
|
+
|
|
160
|
+
`Agent` is the live process window for coding-agent sessions. `Board` is the
|
|
161
|
+
coordination surface agents use to expose status, decisions, handoffs, and
|
|
162
|
+
requests. `Issue` and `SPEC` use the local cache and semantic index rather than
|
|
163
|
+
rendering direct GitHub API responses in the frontend.
|
|
128
164
|
|
|
129
165
|
On Windows Host launches, Launch Agent lets you choose Command Prompt, Windows
|
|
130
|
-
PowerShell, or PowerShell 7.
|
|
131
|
-
|
|
166
|
+
PowerShell, or PowerShell 7. Docker launches continue to use the container
|
|
167
|
+
shell.
|
|
132
168
|
|
|
133
169
|
In terminal windows, drag to select text and release the mouse button to copy.
|
|
134
170
|
On Windows and Linux, `Ctrl+Shift+C` also copies the current terminal
|
|
135
171
|
selection. `Ctrl+C` stays mapped to the running terminal process.
|
|
136
172
|
|
|
137
|
-
##
|
|
173
|
+
## Knowledge, Search, and Managed Skills
|
|
138
174
|
|
|
139
|
-
gwt
|
|
140
|
-
|
|
175
|
+
gwt keeps project knowledge close to the agent workspace:
|
|
176
|
+
|
|
177
|
+
- `gwtd issue spec <n>` reads GitHub Issue-backed SPECs from the local cache.
|
|
178
|
+
- `gwtd issue view <n>` and `gwtd issue comments <n>` provide cache-backed Issue
|
|
179
|
+
access through the gwt CLI surface.
|
|
180
|
+
- `gwt-search` searches SPECs, Issues, source files, and docs through the shared
|
|
181
|
+
ChromaDB runtime. Missing indexes are built on demand, and the desktop app can
|
|
182
|
+
repair the managed Python search runtime when needed.
|
|
183
|
+
- The Issue/SPEC Knowledge Bridge windows combine cache-backed list/detail views
|
|
184
|
+
with semantic ranking, exact-match priority, and match percentages.
|
|
185
|
+
|
|
186
|
+
Bundled workflow skills are materialized into `.claude/skills`,
|
|
187
|
+
`.claude/commands`, and `.codex/skills` for the active worktree. The public
|
|
188
|
+
entrypoints are:
|
|
189
|
+
|
|
190
|
+
- `gwt-discussion` — investigation-first discussion and design clarification
|
|
191
|
+
- `gwt-register-issue` / `gwt-fix-issue` — issue intake and issue-driven fixes
|
|
192
|
+
- `gwt-plan-spec` — implementation planning for an approved SPEC
|
|
193
|
+
- `gwt-build-spec` — TDD-oriented implementation from an approved task
|
|
194
|
+
- `gwt-manage-pr` — PR create/check/fix lifecycle
|
|
195
|
+
- `gwt-arch-review` — architecture review and improvement routing
|
|
196
|
+
- `gwt-search` — unified semantic search
|
|
197
|
+
- `gwt-agent` — running agent-pane inspection and control
|
|
198
|
+
|
|
199
|
+
Managed hooks preserve user hooks while adding gwt runtime behavior for agent
|
|
200
|
+
state, workflow guardrails, Board reminders, discussion/plan/build Stop checks,
|
|
201
|
+
and coordination-event summaries.
|
|
202
|
+
|
|
203
|
+
## Workspace Foundation
|
|
204
|
+
|
|
205
|
+
For isolation and repeatable agent sessions, gwt can manage each project as a
|
|
206
|
+
**Nested Bare + Worktree** layout under your workspace directory:
|
|
141
207
|
|
|
142
208
|
```
|
|
143
209
|
<workspace>/<project>/
|
|
@@ -176,13 +242,52 @@ confirmation modal with three actions:
|
|
|
176
242
|
- Use `Cmd/Ctrl+Shift+Right` and `Cmd/Ctrl+Shift+Left` to cycle focus; the
|
|
177
243
|
focused window is recentered
|
|
178
244
|
|
|
179
|
-
##
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
245
|
+
## Operator Design Language (SPEC-2356)
|
|
246
|
+
|
|
247
|
+
Starting with the Operator Design System update, gwt is themed as a single
|
|
248
|
+
mission-control surface with editorial-industrial typography (`Mona Sans` for
|
|
249
|
+
body, `Hubot Sans` condensed for display, `JetBrains Mono` for terminal /
|
|
250
|
+
counters). Every chrome surface — Project Bar, Sidebar Layers, Status Strip,
|
|
251
|
+
Command Palette, Hotkey Overlay, Drawer modals, floating windows — shares a
|
|
252
|
+
single token system that ships in two flagship themes:
|
|
253
|
+
|
|
254
|
+
- **Dark Operator** (Mission Control / carbon + neon) — the default, optimized
|
|
255
|
+
for long sessions
|
|
256
|
+
- **Light Operator** (Drafting Table / bone + ink) — for bright environments
|
|
257
|
+
|
|
258
|
+
The active theme follows your OS `prefers-color-scheme`, but the **Theme**
|
|
259
|
+
toggle in the Project Bar lets you cycle `auto → dark → light → auto`. The
|
|
260
|
+
choice is persisted in browser storage and survives restarts. xterm terminal
|
|
261
|
+
panes follow the overall theme automatically. `prefers-reduced-motion: reduce`
|
|
262
|
+
disables the Living Telemetry pulse rim, status strip ticking, and Mission
|
|
263
|
+
Briefing intro reveal so the UI stays usable in motion-sensitive environments.
|
|
264
|
+
`forced-colors: active` (Windows High Contrast / macOS Increase Contrast)
|
|
265
|
+
falls back to system colors so accessibility is preserved.
|
|
266
|
+
|
|
267
|
+
### Hotkeys
|
|
268
|
+
|
|
269
|
+
| Combo | Action |
|
|
270
|
+
| --- | --- |
|
|
271
|
+
| `⌘K` / `⌘P` | Open the Command Palette (fuzzy search over all surface actions) |
|
|
272
|
+
| `⌘B` | Focus the Board surface |
|
|
273
|
+
| `⌘G` | Focus the Git (Branches) surface |
|
|
274
|
+
| `⌘L` | Focus the Logs surface |
|
|
275
|
+
| `⌘?` | Toggle the Hotkey Overlay (cheat sheet) |
|
|
276
|
+
| `Esc` | Close any open palette / overlay / drawer |
|
|
277
|
+
|
|
278
|
+
## SPEC and Runtime Quick Reference
|
|
279
|
+
|
|
280
|
+
- SPEC source of truth: GitHub Issues labeled `gwt-spec`
|
|
184
281
|
- Local cache path:
|
|
185
282
|
`~/.gwt/cache/issues/<repo-hash>/`
|
|
283
|
+
- Managed agent integration files:
|
|
284
|
+
`.claude/settings.local.json` and `.codex/hooks.json`
|
|
285
|
+
- List available SPECs:
|
|
286
|
+
|
|
287
|
+
```bash
|
|
288
|
+
gwtd issue spec list
|
|
289
|
+
```
|
|
290
|
+
|
|
186
291
|
- Read a SPEC:
|
|
187
292
|
|
|
188
293
|
```bash
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@akiojin/gwt",
|
|
3
|
-
"version": "9.
|
|
3
|
+
"version": "9.16.0",
|
|
4
4
|
"description": "Desktop GUI for Git worktree management and coding agent launch",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -12,8 +12,10 @@
|
|
|
12
12
|
"dev": "cargo run -p gwt --bin gwt",
|
|
13
13
|
"build": "cargo build --release -p gwt --bin gwt --bin gwtd",
|
|
14
14
|
"test": "cargo test -p gwt-core -p gwt --all-features",
|
|
15
|
-
"test:frontend-bundle": "node --check crates/gwt/web/app.js && node --check crates/gwt/web/branch-cleanup-modal.js && node --check crates/gwt/web/migration-modal.js",
|
|
15
|
+
"test:frontend-bundle": "node --check crates/gwt/web/app.js && node --check crates/gwt/web/branch-cleanup-modal.js && node --check crates/gwt/web/migration-modal.js && node --check crates/gwt/web/theme-manager.js && node --check crates/gwt/web/hotkey.js && node --check crates/gwt/web/operator-shell.js",
|
|
16
16
|
"test:frontend-smoke": "node --test crates/gwt/web/__tests__/branch-cleanup.smoke.test.mjs crates/gwt/web/__tests__/migration-modal.smoke.test.mjs",
|
|
17
|
+
"test:frontend-unit": "node --test crates/gwt/web/__tests__/contrast.test.mjs crates/gwt/web/__tests__/theme-manager.test.mjs crates/gwt/web/__tests__/hotkey.test.mjs crates/gwt/web/__tests__/operator-chrome-structure.test.mjs crates/gwt/web/__tests__/board-surface.test.mjs",
|
|
18
|
+
"test:visual": "playwright test --config crates/gwt/playwright/playwright.config.ts",
|
|
17
19
|
"test:release-assets": "node scripts/test_release_assets.cjs",
|
|
18
20
|
"test:release-flow": "bash scripts/check-release-flow.sh",
|
|
19
21
|
"test:all": "bash scripts/test-all.sh",
|
|
@@ -47,6 +49,7 @@
|
|
|
47
49
|
"devDependencies": {
|
|
48
50
|
"@commitlint/cli": "^20.5.0",
|
|
49
51
|
"@commitlint/config-conventional": "^20.5.0",
|
|
52
|
+
"@playwright/test": "^1.49.1",
|
|
50
53
|
"linkedom": "^0.18.12"
|
|
51
54
|
}
|
|
52
55
|
}
|
|
@@ -89,10 +89,24 @@ run("package scripts keep the GUI front door and release contract explicit", ()
|
|
|
89
89
|
assert.equal(pkg.bin.gwt, "bin/gwt.cjs");
|
|
90
90
|
assert.equal(pkg.bin.gwtd, "bin/gwtd.cjs");
|
|
91
91
|
assert.equal(pkg.scripts["test:release-assets"], "node scripts/test_release_assets.cjs");
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
92
|
+
// SPEC-2356 — the frontend bundle now also covers Operator Design System
|
|
93
|
+
// ESM modules (theme-manager / hotkey / operator-shell). The contract is
|
|
94
|
+
// expressed as required substrings so future modules can extend the chain
|
|
95
|
+
// without rewriting the test, while still keeping the legacy SPEC-2008
|
|
96
|
+
// surfaces (app, branch-cleanup-modal, migration-modal) wired up.
|
|
97
|
+
for (const required of [
|
|
98
|
+
"node --check crates/gwt/web/app.js",
|
|
99
|
+
"node --check crates/gwt/web/branch-cleanup-modal.js",
|
|
100
|
+
"node --check crates/gwt/web/migration-modal.js",
|
|
101
|
+
"node --check crates/gwt/web/theme-manager.js",
|
|
102
|
+
"node --check crates/gwt/web/hotkey.js",
|
|
103
|
+
"node --check crates/gwt/web/operator-shell.js",
|
|
104
|
+
]) {
|
|
105
|
+
assert.ok(
|
|
106
|
+
pkg.scripts["test:frontend-bundle"].includes(required),
|
|
107
|
+
`test:frontend-bundle must include "${required}", got: ${pkg.scripts["test:frontend-bundle"]}`
|
|
108
|
+
);
|
|
109
|
+
}
|
|
96
110
|
assert.equal(pkg.scripts["test:release-flow"], "bash scripts/check-release-flow.sh");
|
|
97
111
|
assert.equal(pkg.scripts.dev, "cargo run -p gwt --bin gwt");
|
|
98
112
|
assert.equal(pkg.scripts.build, "cargo build --release -p gwt --bin gwt --bin gwtd");
|
|
@@ -35,6 +35,19 @@ require_not_contains() {
|
|
|
35
35
|
fi
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
+
require_order() {
|
|
39
|
+
local file="$1"
|
|
40
|
+
local first="$2"
|
|
41
|
+
local second="$3"
|
|
42
|
+
local first_line
|
|
43
|
+
local second_line
|
|
44
|
+
first_line=$(grep -Fn "$first" "$file" | head -n 1 | cut -d: -f1 || true)
|
|
45
|
+
second_line=$(grep -Fn "$second" "$file" | head -n 1 | cut -d: -f1 || true)
|
|
46
|
+
if [ -z "$first_line" ] || [ -z "$second_line" ] || [ "$first_line" -ge "$second_line" ]; then
|
|
47
|
+
fail "Expected '$first' to appear before '$second' in $file"
|
|
48
|
+
fi
|
|
49
|
+
}
|
|
50
|
+
|
|
38
51
|
require_file "$PACKAGE_JSON"
|
|
39
52
|
require_contains "$PACKAGE_JSON" '"prepare": "test -n \"$CI\" || bunx husky install"'
|
|
40
53
|
require_contains "$PACKAGE_JSON" "\"lint:skills\": \"bash scripts/validate-skill-frontmatter.sh\""
|
|
@@ -43,6 +56,11 @@ require_contains "$PACKAGE_JSON" "\"lint:husky\": \"bash scripts/verify-husky-ho
|
|
|
43
56
|
require_file "$PRE_PUSH"
|
|
44
57
|
require_contains "$PRE_PUSH" "cargo clippy --all-targets --all-features -- -D warnings"
|
|
45
58
|
require_contains "$PRE_PUSH" "cargo fmt --all -- --check"
|
|
59
|
+
require_contains "$PRE_PUSH" "ensure_coverage_tooling"
|
|
60
|
+
require_contains "$PRE_PUSH" "rustup component add llvm-tools-preview"
|
|
61
|
+
require_contains "$PRE_PUSH" "cargo install cargo-llvm-cov --locked"
|
|
62
|
+
require_contains "$PRE_PUSH" "cargo llvm-cov --version"
|
|
63
|
+
require_order "$PRE_PUSH" "if cargo llvm-cov --version >/dev/null 2>&1; then" "if command -v rustup >/dev/null 2>&1; then"
|
|
46
64
|
require_contains "$PRE_PUSH" "cargo llvm-cov -p gwt-core -p gwt --all-features --json --summary-only --output-path target/coverage-summary.json"
|
|
47
65
|
require_contains "$PRE_PUSH" "node scripts/check-coverage-threshold.mjs target/coverage-summary.json 90"
|
|
48
66
|
require_contains "$PRE_PUSH" "bunx --bun markdownlint-cli . --config .markdownlint.json --ignore target --ignore CHANGELOG.md --ignore tasks/todo.md"
|