reviw 0.17.2 → 0.17.3

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 CHANGED
@@ -177,7 +177,7 @@ plugin/
177
177
 
178
178
  | 種類 | 名前 | 説明 |
179
179
  |------|------|------|
180
- | **コマンド** | `/reviw:do` | タスク開始 - worktree作成、計画、todo登録 |
180
+ | **コマンド** | `/reviw:do` | タスク開始 - gwqでworktree作成、計画、todo登録 |
181
181
  | **コマンド** | `/reviw:done` | 完了チェックリスト - 7レビューエージェント実行、エビデンス収集、レビュー開始 |
182
182
  | **エージェント** | `report-builder` | ユーザーレビュー用レポート準備 |
183
183
  | **エージェント** | `review-code-quality` | コード品質: 可読性、DRY、型安全性、エラーハンドリング |
@@ -201,22 +201,22 @@ plugin/
201
201
  適切な環境セットアップで新しいタスクを開始します。
202
202
 
203
203
  **処理内容:**
204
- 1. 分離開発用のgit worktreeを作成(`feature/<name>`、`fix/<name>`など)
204
+ 1. gwqを使用して分離開発用のgit worktreeを作成(`feature/<name>`、`fix/<name>`など)
205
205
  2. エビデンス用の`.artifacts/<feature>/`ディレクトリをセットアップ
206
206
  3. 計画とTODOチェックリスト付きの`REPORT.md`を作成
207
207
  4. 進捗追跡用にTodoWriteにtodoを登録
208
208
 
209
209
  **作成されるディレクトリ構成:**
210
210
  ```
211
- .worktree/<feature>/
211
+ <worktree>/ # 例: ~/src/github.com/owner/myrepo-feature-auth/
212
212
  └── .artifacts/
213
- └── <feature>/
214
- ├── REPORT.md # 計画、進捗、エビデンスリンク
215
- ├── images/ # スクリーンショット
216
- └── videos/ # 動画録画
213
+ └── <feature>/ # 例: auth(feature/authから)
214
+ ├── REPORT.md # 計画、進捗、エビデンスリンク
215
+ ├── images/ # スクリーンショット
216
+ └── videos/ # 動画録画
217
217
  ```
218
218
 
219
- **タスク再開:** セッション開始時またはコンテキスト圧縮後、コマンドは既存のworktreeをチェックし、`REPORT.md`から再開します。
219
+ **タスク再開:** セッション開始時またはコンテキスト圧縮後、コマンドは既存のworktreeを確認(`gwq list`)し、`REPORT.md`から再開します。
220
220
 
221
221
  #### `/reviw:done`
222
222
 
package/README.md CHANGED
@@ -180,7 +180,7 @@ plugin/
180
180
 
181
181
  | Type | Name | Description |
182
182
  |------|------|-------------|
183
- | **Command** | `/reviw:do` | Start a task - create worktree, plan, register todos |
183
+ | **Command** | `/reviw:do` | Start a task - create worktree with gwq, plan, register todos |
184
184
  | **Command** | `/reviw:done` | Complete checklist - run 7 review agents, collect evidence, start review |
185
185
  | **Agent** | `report-builder` | Prepare reports and evidence for user review |
186
186
  | **Agent** | `review-code-quality` | Code quality: readability, DRY, type safety, error handling |
@@ -204,22 +204,22 @@ plugin/
204
204
  Starts a new task with proper environment setup.
205
205
 
206
206
  **What it does:**
207
- 1. Creates a git worktree for isolated development (`feature/<name>`, `fix/<name>`, etc.)
207
+ 1. Creates a git worktree using gwq for isolated development (`feature/<name>`, `fix/<name>`, etc.)
208
208
  2. Sets up `.artifacts/<feature>/` directory for evidence
209
209
  3. Creates `REPORT.md` with plan and TODO checklist
210
210
  4. Registers todos in TodoWrite for progress tracking
211
211
 
212
212
  **Directory structure created:**
213
213
  ```
214
- .worktree/<feature>/
214
+ <worktree>/ # e.g., ~/src/github.com/owner/myrepo-feature-auth/
215
215
  └── .artifacts/
216
- └── <feature>/
217
- ├── REPORT.md # Plan, progress, evidence links
218
- ├── images/ # Screenshots
219
- └── videos/ # Video recordings
216
+ └── <feature>/ # e.g., auth (from feature/auth)
217
+ ├── REPORT.md # Plan, progress, evidence links
218
+ ├── images/ # Screenshots
219
+ └── videos/ # Video recordings
220
220
  ```
221
221
 
222
- **Task resumption:** When a session starts or after context compaction, the command checks for existing worktrees and resumes from `REPORT.md`.
222
+ **Task resumption:** When a session starts or after context compaction, the command checks for existing worktrees (via `gwq list`) and resumes from `REPORT.md`.
223
223
 
224
224
  #### `/reviw:done`
225
225
 
package/cli.cjs CHANGED
@@ -5896,13 +5896,82 @@ function htmlTemplate(dataRows, cols, projectRoot, relativePath, mode, previewHt
5896
5896
  fsContent.style.cursor = 'grab';
5897
5897
  });
5898
5898
 
5899
- // Zoom with mouse wheel - use multiplicative factor
5899
+ // Trackpad/Mouse wheel handling
5900
+ // - ctrlKey true (pinch gesture on trackpad) → zoom
5901
+ // - ctrlKey false (two-finger scroll) → pan
5900
5902
  fsContent.addEventListener('wheel', (e) => {
5901
5903
  e.preventDefault();
5902
- const factor = e.deltaY > 0 ? 0.9 : 1.1;
5903
- zoomAt(factor, e.clientX, e.clientY);
5904
+ if (e.ctrlKey) {
5905
+ // Pinch zoom on trackpad (or Ctrl+wheel on mouse)
5906
+ const factor = e.deltaY > 0 ? 0.9 : 1.1;
5907
+ zoomAt(factor, e.clientX, e.clientY);
5908
+ } else {
5909
+ // Two-finger scroll → pan
5910
+ panX -= e.deltaX;
5911
+ panY -= e.deltaY;
5912
+ updateTransform();
5913
+ }
5914
+ }, { passive: false });
5915
+
5916
+ // Touch support for pinch-to-zoom and two-finger pan
5917
+ let lastTouchDistance = 0;
5918
+ let lastTouchCenter = { x: 0, y: 0 };
5919
+ let touchStartPanX = 0;
5920
+ let touchStartPanY = 0;
5921
+
5922
+ function getTouchDistance(touches) {
5923
+ const dx = touches[0].clientX - touches[1].clientX;
5924
+ const dy = touches[0].clientY - touches[1].clientY;
5925
+ return Math.sqrt(dx * dx + dy * dy);
5926
+ }
5927
+
5928
+ function getTouchCenter(touches) {
5929
+ return {
5930
+ x: (touches[0].clientX + touches[1].clientX) / 2,
5931
+ y: (touches[0].clientY + touches[1].clientY) / 2
5932
+ };
5933
+ }
5934
+
5935
+ fsContent.addEventListener('touchstart', (e) => {
5936
+ if (e.touches.length === 2) {
5937
+ e.preventDefault();
5938
+ lastTouchDistance = getTouchDistance(e.touches);
5939
+ lastTouchCenter = getTouchCenter(e.touches);
5940
+ touchStartPanX = panX;
5941
+ touchStartPanY = panY;
5942
+ }
5943
+ }, { passive: false });
5944
+
5945
+ fsContent.addEventListener('touchmove', (e) => {
5946
+ if (e.touches.length === 2) {
5947
+ e.preventDefault();
5948
+ const currentDistance = getTouchDistance(e.touches);
5949
+ const currentCenter = getTouchCenter(e.touches);
5950
+
5951
+ // Pinch zoom
5952
+ if (lastTouchDistance > 0) {
5953
+ const scale = currentDistance / lastTouchDistance;
5954
+ if (Math.abs(scale - 1) > 0.01) {
5955
+ zoomAt(scale, currentCenter.x, currentCenter.y);
5956
+ lastTouchDistance = currentDistance;
5957
+ }
5958
+ }
5959
+
5960
+ // Two-finger pan
5961
+ const dx = currentCenter.x - lastTouchCenter.x;
5962
+ const dy = currentCenter.y - lastTouchCenter.y;
5963
+ panX += dx;
5964
+ panY += dy;
5965
+ updateTransform();
5966
+
5967
+ lastTouchCenter = currentCenter;
5968
+ }
5904
5969
  }, { passive: false });
5905
5970
 
5971
+ fsContent.addEventListener('touchend', () => {
5972
+ lastTouchDistance = 0;
5973
+ });
5974
+
5906
5975
  // ESC to close
5907
5976
  document.addEventListener('keydown', (e) => {
5908
5977
  if (e.key === 'Escape' && fsOverlay.classList.contains('visible')) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "reviw",
3
- "version": "0.17.2",
3
+ "version": "0.17.3",
4
4
  "description": "Lightweight file reviewer with in-browser comments for CSV, TSV, Markdown, and Git diffs.",
5
5
  "type": "module",
6
6
  "bin": {