aizuchi 0.4.0 → 0.7.2
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/CHANGELOG.md +139 -0
- package/README.ja.md +213 -0
- package/README.md +232 -170
- package/dist/bin/aizuchi.js +48 -11
- package/dist/server/app.js +139 -11
- package/dist/server/lib/docs.js +209 -2
- package/dist/server/lib/files.js +18 -4
- package/dist/server/lib/fs-safe.js +81 -21
- package/dist/server/lib/proposal.js +35 -4
- package/dist/server/lib/related-docs-validate.js +37 -0
- package/dist/server/lib/task-ops.js +31 -7
- package/dist/server/lib/trash.js +21 -0
- package/dist/shared/activity-heatmap.js +39 -0
- package/dist/shared/ai-health.js +78 -0
- package/dist/shared/related-docs.js +5 -59
- package/dist/shared/schema.js +27 -5
- package/dist/shared/stats.js +17 -8
- package/dist/shared/task-setters.js +144 -0
- package/dist/web/assets/index-CiZ-pdUZ.css +1 -0
- package/dist/web/assets/index-U2se0dzu.js +99 -0
- package/dist/web/index.html +2 -2
- package/package.json +6 -3
- package/templates/claude-rules.md +5 -0
- package/dist/web/assets/index-BYfu8Hdw.js +0 -93
- package/dist/web/assets/index-DiMXsTSP.css +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,145 @@
|
|
|
5
5
|
|
|
6
6
|
## [Unreleased]
|
|
7
7
|
|
|
8
|
+
## [0.7.2] - 2026-07-15
|
|
9
|
+
|
|
10
|
+
v0.7.1 に続く改善リリース (資料ファイル名の国際化 + 追加のセキュリティ堅牢化 + UI 競合修正)。
|
|
11
|
+
|
|
12
|
+
### Added (追加)
|
|
13
|
+
|
|
14
|
+
- 資料 (`docsWriteDirs`) のファイル名・フォルダ名に、日本語・全角・空白などの Unicode 文字を使える
|
|
15
|
+
ようにしました (これまでは ASCII のみ)。
|
|
16
|
+
|
|
17
|
+
### Security (セキュリティ)
|
|
18
|
+
|
|
19
|
+
- 資料のファイル名・フォルダ名の検証を Unicode プロパティベース (`\p{Cc}\p{Cf}\p{Zl}\p{Zp}` + `u`
|
|
20
|
+
フラグ) に強化し、不可視文字 (bidi 制御・zero-width・tag 文字 U+E0000-E007F・SOFT HYPHEN 等) を用いた
|
|
21
|
+
ファイル名偽装 (Trojan Source / homograph) を拒否するようにしました。新規作成する中間フォルダ名も同じ
|
|
22
|
+
規則で検証します。単体絵文字・国旗・VS16 付き絵文字などの表示可能な文字は引き続き許可します
|
|
23
|
+
(`127.0.0.1` 単一信頼ユーザー前提のため実害は限定的ですが、AI 生成パスの混入・多人数運用への防御を強化)。
|
|
24
|
+
|
|
25
|
+
### Fixed (修正)
|
|
26
|
+
|
|
27
|
+
- 設定・タスク・資料の保存で、mtime 競合以外の理由による 409 応答が競合ダイアログに渡ってクラッシュ
|
|
28
|
+
しうる問題を防ぎました (409 応答の形を検証し、競合形のときだけ競合ダイアログを表示します)。
|
|
29
|
+
- ボードのライブ更新で、古い応答が新しい状態を上書きしうる競合を、世代番号の比較を純関数に切り出して
|
|
30
|
+
防ぎました (内部堅牢化)。
|
|
31
|
+
- ごみ箱 (`.kanban/.trash`) への退避処理のベストエフォート経路を共通ヘルパに集約しました (内部整理)。
|
|
32
|
+
|
|
33
|
+
## [0.7.1] - 2026-07-10
|
|
34
|
+
|
|
35
|
+
プロジェクト全体レビューで見つかった不具合の修正リリース (セキュリティ + バグ修正)。
|
|
36
|
+
|
|
37
|
+
### Security (セキュリティ)
|
|
38
|
+
|
|
39
|
+
- AI 用 CLI (`aizuchi task move / done / block / revise / log / comment`) のファイル読込を、HTTP API と
|
|
40
|
+
同じ hardened な読込 (symlink 非追従 + パス封じ込め) に統一しました。これまで CLI 経路だけがタスク
|
|
41
|
+
ファイルを生の読込で扱っており、タスクファイルが外部への symlink だった場合にその内容がごみ箱
|
|
42
|
+
(`.kanban/.trash`) へコピーされうる非対称がありました (重要度: Critical・`127.0.0.1` 単一信頼ユーザー
|
|
43
|
+
前提で実害は限定的)。symlink のタスクファイルは「見つからない」として拒否されます。
|
|
44
|
+
|
|
45
|
+
### Fixed (修正)
|
|
46
|
+
|
|
47
|
+
- 承認トレース (`[approve]`) の検出を作業ログの承認記録に限定し、やりとりコメントや `aizuchi log` の自由
|
|
48
|
+
入力で提案モード違反の警告を無害化できてしまう穴を塞ぎました。
|
|
49
|
+
- AI 用 CLI でのタスク起票時にも、関連資料 (`related_docs`) の許可ディレクトリ検証を行うようにしました
|
|
50
|
+
(HTTP API と対称化)。
|
|
51
|
+
- 統計の完了日時の集計を、作業ログの時刻が最大の完了記録を採用する方式に統一しました (バックフィル
|
|
52
|
+
されたログ行で完了日を取り違えないように)。
|
|
53
|
+
- `status` が `pending` のとき `blocked_reason` が空白のみでも無効として扱うようにしました。
|
|
54
|
+
- 設定ファイルビューで、ファイルを連続で切り替えたときに表示中のファイルと内容が食い違う競合を防ぎました。
|
|
55
|
+
|
|
56
|
+
(内部: テスト追加・ドキュメント整合・依存ツール整理などの保守性改善も含みます)
|
|
57
|
+
|
|
58
|
+
## [0.7.0] - 2026-06-17
|
|
59
|
+
|
|
60
|
+
「固める」リリース。ユーザー向けの新機能追加はなく、セキュリティ・保守性・配布を整えました。
|
|
61
|
+
|
|
62
|
+
### Security (セキュリティ)
|
|
63
|
+
|
|
64
|
+
- ファイルの書込・読込で、対象の **親ディレクトリ symlink の TOCTOU race** に対する封じ込め (containment) の
|
|
65
|
+
再検査を追加。並行してローカルにファイルを書ける攻撃者が、書込/読込対象の親ディレクトリを外部への symlink に
|
|
66
|
+
すり替えてプロジェクト外へ書込/読出しできる経路 (重要度: Important) を塞ぎました。`127.0.0.1` 限定・単一信頼
|
|
67
|
+
ユーザー前提のため実害は限定的ですが、「書込・読込はプロジェクト配下のみ」という封じ込めを、時間軸を突く攻撃に
|
|
68
|
+
対しても保つよう強化しています。
|
|
69
|
+
- 資料 (ドキュメント) の削除を、タスク削除と同じ **「ごみ箱へ退避できた時だけ消す」fail-closed** に統一しました
|
|
70
|
+
(退避できない場合は削除を中止)。
|
|
71
|
+
- ごみ箱への退避 ID に資料のパスを含め、別ディレクトリにある同名資料の退避世代が混ざらないよう修正しました。
|
|
72
|
+
|
|
73
|
+
### Changed (変更)
|
|
74
|
+
|
|
75
|
+
- raw frontmatter の 1 フィールド書換ロジックを共通化しました (依存 / 優先度 / 関連資料の 3 箇所)。挙動は変わらない
|
|
76
|
+
内部リファクタです。
|
|
77
|
+
- 保守性ツールチェーンとして **biome** (lint / format) を導入しました (`npm run lint` / `npm run format`)。
|
|
78
|
+
|
|
79
|
+
### Docs (ドキュメント)
|
|
80
|
+
|
|
81
|
+
- README を **英語主体** にし (npm ページ向け)、日本語版を `README.ja.md` に分離しました。冒頭で言語を切り替えられます。
|
|
82
|
+
|
|
83
|
+
## [0.6.0] - 2026-06-17
|
|
84
|
+
|
|
85
|
+
複数人・複数 AI での運用と、「見たいものへの集中」を助ける機能を加えたリリース。
|
|
86
|
+
|
|
87
|
+
### Added (追加)
|
|
88
|
+
|
|
89
|
+
- **「自分宛」フィルタ**: ヘッダーで自分 (担当メンバー) を選び、ワンタップで「今、自分に来ているタスク」だけに
|
|
90
|
+
絞り込めるように。担当が自分のもの・本文で自分が `@メンション` されたもの・自分が起票して承認待ち (proposed) の
|
|
91
|
+
ものをまとめて表示します。複数人 / 複数 AI で動かしているとき、自分のキューを朝一で確認できます。選択は
|
|
92
|
+
このブラウザだけに保存され、タスクファイルは変更しません。
|
|
93
|
+
- **ピン留め / フォーカス**: 注目したいタスクをカードや詳細から 📌 でピン留めし、ホームの先頭に固定表示。
|
|
94
|
+
完了・アーカイブ済みになったピンは自動で隠れます。「次の一手 (クリティカルパス)」の自動集計とは別に、
|
|
95
|
+
自分で選んだ注目タスクをいつでも見られます。
|
|
96
|
+
- **カードからのクイックコメント**: 詳細パネルを開かずに、カードから直接 `## やりとり` へひとことコメントを
|
|
97
|
+
追記できるように。AI とのやり取りの往復が一段速くなります。
|
|
98
|
+
- **AI 稼働ヒートマップ**: 統計ビューに、作業ログの時刻を曜日 × 時間帯で集計したヒートマップを追加。
|
|
99
|
+
「AI がいつ動いているか」を一目で把握できます (表示のみ)。
|
|
100
|
+
- **タスクの完全削除**: タスク詳細に「完全に削除」を追加 (アーカイブが第一候補、削除は危険操作として分離・
|
|
101
|
+
確認付き)。削除するタスクは消す前に必ずごみ箱 (`.kanban/.trash`) へ退避するので、あとから復元できます。
|
|
102
|
+
退避に失敗した場合は削除を中止します (取り返しのつかない消失を防ぐため)。
|
|
103
|
+
|
|
104
|
+
### Changed (変更)
|
|
105
|
+
|
|
106
|
+
- 長いリスト (アーカイブ / ごみ箱 / 日次ダイジェスト) の描画を `content-visibility` で最適化し、項目が
|
|
107
|
+
多いときのスクロールを軽くしました。表示内容は変わりません。
|
|
108
|
+
|
|
109
|
+
## [0.5.0] - 2026-06-17
|
|
110
|
+
|
|
111
|
+
資料 (ドキュメント) をボード上で作って育てられるようにし、依存・優先度のその場編集や AI 参加者の状態把握を加えたリリース。
|
|
112
|
+
|
|
113
|
+
### Added (追加)
|
|
114
|
+
|
|
115
|
+
- **関連資料の作成・編集・削除**: これまで読むだけだった「関連資料」を、ボード上で新規作成・編集・削除できるように。
|
|
116
|
+
保存先は新しい設定 `docsWriteDirs` に列挙したディレクトリのみ (既定は空 = 機能オフ・読取専用の `docsDirs` と分離)。
|
|
117
|
+
保存はアトミック (一時ファイル→rename)、上書きは保存時刻 (mtime) 比較で競合を検知、削除は `.kanban/.trash` へ退避して
|
|
118
|
+
から消す (復元可能)。保存ダイアログで親フォルダ選択 + 新規フォルダ作成 + ファイル名指定。資料から直接タスクを起票する
|
|
119
|
+
導線付き。パスは正規化 + symlink 解決後にプロジェクト配下のみ許可 (パストラバーサル対策)。
|
|
120
|
+
- **資料エディタのシンタックスハイライト**: Markdown を編集中、見出し・太字・コード・リスト・リンクなどが色分け表示
|
|
121
|
+
されるように。依存ライブラリを足さない自前実装で、ハイライトは本文を一切書き換えない。
|
|
122
|
+
- **資料エディタの横並び表示**: 編集とプレビューをタブ切替だけでなく **横に並べて同時に** 見られるように (既定)。
|
|
123
|
+
入力に追従するライブプレビュー付き。画面が狭いときは自動で縦積みに切り替わる。全幅の編集 / プレビューも選べる。
|
|
124
|
+
- **依存・優先度のその場編集**: タスク詳細の「メタ」タブで depends_on (依存) と priority をクリック操作で編集できるように。
|
|
125
|
+
クリティカルパスを見ながらその場で依存関係や優先度を組み替えられる。保存は既存の競合検知に乗る。
|
|
126
|
+
- **AI オンボーディング診断パネル**: 参加している AI メンバーごとに、タスクの書式ミス・未登録メンバーの使用・設定の問題を
|
|
127
|
+
「直し方」付きで一覧表示する読取専用パネル。AI が規約どおりに参加できているかを人間が把握できる。
|
|
128
|
+
- **設定画面でのディレクトリ編集**: 資料の読取先 (`docsDirs`) と書込先 (`docsWriteDirs`) を設定画面の GUI から
|
|
129
|
+
追加・削除できるように。これまで config.json を手で編集する必要があった資料機能の有効化が、画面から行える。
|
|
130
|
+
- キーボードショートカットのヘルプ (`?`) に **「AI への導入指示をコピー」ボタン**を追加。AI エージェント
|
|
131
|
+
(Claude 等) にこのプロジェクトへ AIzuchi 経由で参加してもらうための指示文を、プロジェクト名・AI メンバー ID・
|
|
132
|
+
起票モード (free / proposal) を反映してワンクリックでコピーできる。新規プロジェクトのオンボーディングが速くなる。
|
|
133
|
+
- **`serve` のポート自動フォールバック**: 起点ポート (既定 `5151`) が使用中のとき、自動で次の空きポート
|
|
134
|
+
(`5152`, `5153`…) を探して起動するように。複数プロジェクトを同時に `serve` してもポート衝突で止まらない。
|
|
135
|
+
起点と違うポートで起動した場合はその旨をログに出す。起点は毎回 `5151` から試すため、次回起動時に空いていれば
|
|
136
|
+
`5151` に戻る (状態は保存しない)。`--port` を明示した場合のみ従来どおり固定 (使用中ならエラー終了)。
|
|
137
|
+
バインド先は `127.0.0.1` 固定のまま変えない (N-1)。
|
|
138
|
+
|
|
139
|
+
### Changed (変更)
|
|
140
|
+
|
|
141
|
+
- マイルストーンの「対応履歴」の行で、タイトル列を固定幅にして**本文 (サマリ) の開始位置を全行で揃える**ように。
|
|
142
|
+
これまではタイトルの文字数ぶんだけ幅が変わり本文の左端がバラついていた。収まらないタイトルは `…` で省略し、
|
|
143
|
+
全文は hover (title 属性) とクリックで確認できる。マイルストーン所属タスク一覧 (status を出す行) は対象外。
|
|
144
|
+
- アクセシビリティ改善: いくつかの入力欄 (コメント投稿者・コメント入力・メンバー種別・詳細 JSON エディタ) に
|
|
145
|
+
適切なラベル (aria-label) を付与し、ブラウザ開発者ツールのフォーム警告を解消。
|
|
146
|
+
|
|
8
147
|
## [0.4.0] - 2026-06-16
|
|
9
148
|
|
|
10
149
|
「今どうなっているか・次に何をすべきか」の見通しと、堅牢性・操作性を高めるリリース。
|
package/README.ja.md
ADDED
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
[English](README.md) | 日本語
|
|
2
|
+
|
|
3
|
+
# AIzuchi
|
|
4
|
+
|
|
5
|
+
**AI進捗管理カンバンダッシュボード**(npm / CLI 名: `aizuchi`)
|
|
6
|
+
|
|
7
|
+
CLI 型 AI コーディングエージェント(Claude Code 等)に作業を委任するプロジェクトで、人間が
|
|
8
|
+
ブラウザ上のカンバンボードからタスクの進捗を一望・操作するためのローカル専用ツールです。
|
|
9
|
+
タスクは `.kanban/` 配下のプレーンテキスト(Markdown + YAML frontmatter)が唯一の正で、
|
|
10
|
+
AI も人間も通常のファイル読み書きだけで参加できます。
|
|
11
|
+
|
|
12
|
+
「相槌(あいづち)」=対話せずに通じ合う、AI との意思疎通を表す命名です。
|
|
13
|
+
|
|
14
|
+
- **ローカル限定**: `127.0.0.1` のみにバインドし、外部送信・テレメトリは一切しません。
|
|
15
|
+
- **ファイルが唯一の正**: DB を使いません。git 管理でき、サーバー停止中も読めます。
|
|
16
|
+
- **規約ベースの AI 連携**: AI は専用 API なしで、ファイル読み書きだけで参加します。
|
|
17
|
+
|
|
18
|
+
変更履歴は [CHANGELOG.md](CHANGELOG.md) を参照してください。
|
|
19
|
+
|
|
20
|
+
## 必要環境
|
|
21
|
+
|
|
22
|
+
- Node.js **20.1 以上**(`fs.readdir` の `recursive` を使うため)
|
|
23
|
+
- macOS / Linux / WSL(Windows ネイティブはベストエフォート)
|
|
24
|
+
|
|
25
|
+
## クイックスタート
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
# 対象プロジェクトのディレクトリ直下で実行する
|
|
29
|
+
npx aizuchi init # .kanban/ を生成 + CLAUDE.md へ運用規約をマーカー区切りで追記
|
|
30
|
+
npx aizuchi # = serve。http://127.0.0.1:5151 でボードを起動(Ctrl+C で終了)
|
|
31
|
+
|
|
32
|
+
# 複数プロジェクトをまとめて見る(read-only 集約・既定ポート 5152)
|
|
33
|
+
npx aizuchi overview <dir...> # 例: npx aizuchi overview ~/proj-a ~/proj-b
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
- `init` は既存ファイルを壊しません。既に `.kanban/` があれば安全に中断します。
|
|
37
|
+
CLAUDE.md は末尾にマーカー(`<!-- aizuchi:begin -->`〜`<!-- aizuchi:end -->`)区切りで追記し、
|
|
38
|
+
再実行時は同区間だけを置き換えます(冪等)。撤去は `.kanban/` 削除とマーカー区間削除だけで完了します。
|
|
39
|
+
- `--port <番号>` でポート変更、`--member <ID>` で AI のメンバー ID 指定(config.members に未登録なら
|
|
40
|
+
`ai` 種別で追加)、`--yes` で確認プロンプト省略。
|
|
41
|
+
- `overview` は各 dir の `.kanban` を読み取り専用で集約表示します(編集・起票・D&D なし)。
|
|
42
|
+
`.kanban` の無い dir や同一 dir の重複指定は明確なエラーで起動を拒否します。既定ポートは
|
|
43
|
+
serve(5151)と衝突しない 5152 で、`--port <番号>` で変更できます。
|
|
44
|
+
- `127.0.0.1` 以外にはバインドせず、外部へのネットワーク送信は一切行いません。
|
|
45
|
+
|
|
46
|
+
## できること
|
|
47
|
+
|
|
48
|
+
ブラウザのボードで AI への委任を一望・操作します。エディタや AI がファイルを書き換えると、
|
|
49
|
+
watcher → SSE で開いているボードへ約 1 秒以内に反映されます(ライブ更新)。
|
|
50
|
+
UI 表示言語は英語 / 日本語(en / ja・既定 en)を切り替えられます。
|
|
51
|
+
|
|
52
|
+
### ボード運用
|
|
53
|
+
|
|
54
|
+
- **ドラッグ&ドロップ**: カラム移動で frontmatter の `status` / `updated` だけをピンポイント書換(本文は保全)。
|
|
55
|
+
Pending へ移すと種別(decision / external / dependency)と理由を尋ねるダイアログが出ます。
|
|
56
|
+
- **検索フィルタ**: タイトル / ラベル / 担当でカードを絞り込み。
|
|
57
|
+
- **Saved Views(保存済みビュー)**: 絞り込み条件を config に名前付きで保存し、chip からワンクリックで適用。
|
|
58
|
+
- **新着ハイライト**: 画面を見ていない間に AI が動かしたタスク(status 変化 / 作業ログ追記 / 新規)を
|
|
59
|
+
カードのハイライトと「新着」バッジで可視化。カードを開くと既読化、ヘッダから一括既読も可能。
|
|
60
|
+
- **停滞バッジ**: 一定期間更新が止まったタスクにバッジを表示(閾値は status 別に設定可能)。
|
|
61
|
+
- **差し戻し(やり直しを依頼)**: カード / 詳細から理由を添えて `todo` へ戻し、作業ログに記録。
|
|
62
|
+
直近の差し戻し理由は再依頼の指示コピーに自動で載ります。
|
|
63
|
+
- **複数選択の一括指示コピー**: 複数選択モードでカードを選び、依存関係のトポロジカル順に並べた
|
|
64
|
+
1 つの指示文へまとめてクリップボードへコピー(AI へのバッチ委任を 1 操作で)。
|
|
65
|
+
- **ドラッグ横パン**: カラムの空白部分を掴んで横スクロール(カード等のインタラクティブ要素からの操作は除外)。
|
|
66
|
+
|
|
67
|
+
### 見通し
|
|
68
|
+
|
|
69
|
+
- **クリティカルパス**: `depends_on` の DAG をトポロジカル深さで列配置し、クリティカルパスを強調。
|
|
70
|
+
循環は検出して警告し、再編成の指示コピーも提供。
|
|
71
|
+
- **マイルストーン**: 予定表(milestone 別・done/total 付き)と対応履歴(月別)の 2 ペイン表示。
|
|
72
|
+
- **日次ダイジェスト**: 日付別に作業ログをまとめて表示。
|
|
73
|
+
- **統計**: 完了数推移 / サイクルタイム / ステータス滞留 / member 別完了数 / ボトルネック /
|
|
74
|
+
停滞中(静かな)タスクの一覧。
|
|
75
|
+
|
|
76
|
+
### 管理と健全性
|
|
77
|
+
|
|
78
|
+
- **アーカイブ検索 + 復元**: done タスクを archive へ退避し、一覧・検索・プレビュー。
|
|
79
|
+
「ボードに戻す」で `tasks/` へ復元(unarchive)。
|
|
80
|
+
- **ごみ箱(.trash 退避 + 復元)**: タスクを破壊的に書き換える直前に旧版を `.kanban/.trash/` へ
|
|
81
|
+
自動退避する安全網。一覧・現行との差分プレビュー・復元が可能(誤上書きからの回復)。
|
|
82
|
+
- **AI 設定ファイル管理**: `aiConfigPaths` で許可したファイル(CLAUDE.md / settings 等)を
|
|
83
|
+
GUI から編集(JSON 構文チェック・`.bak` バックアップ・パーミッション保全)。
|
|
84
|
+
- **git 履歴連携(read-only)**: 詳細パネルのコミットタブで、タスク ID を含むコミット履歴を表示。
|
|
85
|
+
`git log` を read-only で実行するだけで、fetch / pull 等の外部通信はしません。
|
|
86
|
+
|
|
87
|
+
### AI 連携規約 + CLI
|
|
88
|
+
|
|
89
|
+
- **規約ベースの連携**: `init` が CLAUDE.md に運用規約(着手 / 進捗 / 完了 / ブロック / 起票 / 書式)を
|
|
90
|
+
マーカー区切りで追記。AI は専用 API なしでファイルを読み書きするだけで参加できます。
|
|
91
|
+
- **提案ワークフロー**: `aiTaskCreation` が `proposal` のとき、AI 起票は `proposed` で入り、
|
|
92
|
+
承認 / 却下を経て `todo` へ。モード違反は警告で検知。
|
|
93
|
+
- **AI 用 CLI(必須でない安全弁)**: 書込系 `aizuchi task add / move <id> <status> / done <id> /
|
|
94
|
+
block <id> --type --reason / log <id> "msg" / comment <id> "msg" / revise <id> --reason` と、
|
|
95
|
+
読取系 `list [--status S] [--assignee M] / show <id> / next`(着手可能なタスクを依存解決順に提示)を提供。
|
|
96
|
+
いずれも既存のスキーマ検証・採番直列化・行置換検証を再利用します(生ファイル編集も従来どおり可・`--json` 対応)。
|
|
97
|
+
|
|
98
|
+
### そのほか
|
|
99
|
+
|
|
100
|
+
- **複数案件横断 overview**: `aizuchi overview <dir...>` で複数 `.kanban` を read-only 集約表示。
|
|
101
|
+
- **コマンドパレット ⌘K**: ビュー切替 / タスク検索ジャンプ / 起票 / 設定を 1 操作で。
|
|
102
|
+
- **タスク詳細**: Markdown プレビュー / 本文編集(保存時に競合検知 → 行差分提示)/
|
|
103
|
+
作業ログ・やりとり(双方向コメント)のタイムライン。
|
|
104
|
+
- **警告バナー**: 壊れた frontmatter・重複 ID・未登録メンバー・不正な config を表示(ボードは落ちません)。
|
|
105
|
+
|
|
106
|
+
## 開発
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
npm install # 依存インストール
|
|
110
|
+
npm run dev # 開発: Vite + API を 1 プロセスで起動(http://127.0.0.1:5173 など)
|
|
111
|
+
npm run build # web を dist/web にビルド + server/shared を dist にコンパイル
|
|
112
|
+
npm run serve # ビルド済み dist を 1 プロセスで配信(= node dist/bin/aizuchi.js serve)
|
|
113
|
+
npm test # vitest
|
|
114
|
+
npm run typecheck # tsc(server)+ tsc -p web/tsconfig.json(web)
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
- 開発時は Vite の `configureServer` に Hono アプリをマウントし、`npm run dev` 一発で SPA と API の
|
|
118
|
+
両方が立ち上がります(proxy も concurrently も不要)。
|
|
119
|
+
- 別プロジェクトを開発対象にしたい場合は `AIZUCHI_DEV_ROOT=/path/to/project npm run dev`。
|
|
120
|
+
|
|
121
|
+
## 構成
|
|
122
|
+
|
|
123
|
+
```
|
|
124
|
+
┌──────────── 1 プロセス (Node.js) ────────────┐
|
|
125
|
+
ブラウザ ──HTTP──▶│ 静的配信 (dist/web) REST API SSE │
|
|
126
|
+
(React SPA) ◀SSE─│ server/static.ts server/app.ts events │──watch/read/write──▶ .kanban/
|
|
127
|
+
│ chokidar watcher (server/watcher) │ (プレーンテキスト)
|
|
128
|
+
└────────────────────────────────────────────┘ ▲
|
|
129
|
+
AI / 人間が直接編集 or CLI
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
```
|
|
133
|
+
aizuchi/
|
|
134
|
+
├── bin/aizuchi.ts # CLI エントリ(init / serve / task / overview)。dist/bin/aizuchi.js にコンパイル
|
|
135
|
+
├── server/ # Hono アプリ・watcher・静的配信・ファイル I/O
|
|
136
|
+
│ ├── app.ts # REST API(board / tasks / events)+ Host 検証 + onError
|
|
137
|
+
│ ├── overview.ts # 複数 .kanban の read-only 集約(aizuchi overview・既定ポート 5152)
|
|
138
|
+
│ ├── board.ts # .kanban 読込・zod 検証・警告生成
|
|
139
|
+
│ ├── watcher.ts # chokidar(debounce 200ms)→ SSE
|
|
140
|
+
│ ├── static.ts # ビルド済み SPA の配信(トラバーサル拒否)
|
|
141
|
+
│ └── lib/ # task-file / pinpoint / id / fs-safe / time / git / trash / task-ops
|
|
142
|
+
├── web/ # Vite + React SPA(ビルド成果物を dist/web に同梱)
|
|
143
|
+
│ └── src/ # App / useBoard / components / lib
|
|
144
|
+
├── shared/ # task / config の zod スキーマ・型・行 LCS diff(server / web 共有)
|
|
145
|
+
├── templates/ # config.json / claude-rules.md(init が生成)
|
|
146
|
+
└── docs/ # decisions.md ほか
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
## データ仕様(抜粋)
|
|
150
|
+
|
|
151
|
+
- タスク = `.kanban/tasks/<ID>.md`(1 タスク 1 ファイル、**ID=ファイル名**)。
|
|
152
|
+
- frontmatter: `id` / `title` / `status` / `assignee` / `created_by` / `priority` / `labels` /
|
|
153
|
+
`blocked_type` / `blocked_reason` / `depends_on` / `milestone` / `created` / `updated`。
|
|
154
|
+
- `status`: `proposed` / `backlog` / `todo` / `in_progress` / `pending` / `done`。
|
|
155
|
+
- 日時は ISO 8601(タイムゾーン付き、例: `2026-06-10T10:00:00+09:00`)。UTC へ変換しません。
|
|
156
|
+
- 設定は `.kanban/config.json`(プロジェクト名・ID 接頭辞・ポート・メンバー・カラム・マイルストーン・
|
|
157
|
+
タスクテンプレート・保存済みビュー・停滞閾値・言語 ほか)。設定ゼロでも既定値で動作します。
|
|
158
|
+
|
|
159
|
+
各フィールドの enum 値・必須条件など完全な frontmatter スキーマは、`aizuchi init` が `CLAUDE.md` に追記する運用規約(frontmatter スキーマ表)に記載されます。init 後すぐ手元で確認できます。
|
|
160
|
+
|
|
161
|
+
## 手動確認チェックリスト(受け入れ基準 / DoD)
|
|
162
|
+
|
|
163
|
+
`npm run build` 後に対象プロジェクトで `node dist/bin/aizuchi.js init` → `... serve` を実行し、ブラウザで確認します。
|
|
164
|
+
|
|
165
|
+
- [ ] **init**: `node bin/aizuchi.js init` で `.kanban/`(config.json・tasks/・archive/・README)が生成され、
|
|
166
|
+
CLAUDE.md にマーカーコメント区切りで運用規約が追記される(既存があれば末尾追記、再実行は同区間のみ置換、
|
|
167
|
+
既存 `.kanban/` があれば安全に中断)。
|
|
168
|
+
- [ ] **serve**: `node bin/aizuchi.js serve` で `http://127.0.0.1:5151` にボードが表示される。127.0.0.1 以外に
|
|
169
|
+
バインドしない。
|
|
170
|
+
- [ ] **起票**: 追加モーダルからタスクを作成すると `tasks/TASK-00X.md` が生成され、ID が連番になる
|
|
171
|
+
(起票者は members から選択、その ID が `created_by` に入る)。
|
|
172
|
+
- [ ] **D&D**: カラム移動で frontmatter の `status` / `updated` だけが変わる(`git diff` で本文保全を確認)。
|
|
173
|
+
- [ ] **ライブ反映**: エディタで直接タスクファイルを書き換えると 1 秒以内にボードへ反映される。
|
|
174
|
+
- [ ] **保留表示**: pending カードに保留種別(色分けバッジ)と理由が表示され、in_progress カードに
|
|
175
|
+
「最終更新 ◯分前」が表示される。
|
|
176
|
+
- [ ] **警告**: frontmatter を壊したファイルを置くと警告バナーに表示され、ボード自体は落ちない。
|
|
177
|
+
- [ ] **詳細**: タスク詳細でプレビュー・編集・作業ログのタイムラインが使える。保存時に外部変更と競合したら
|
|
178
|
+
上書き確認(差分提示)が出る。
|
|
179
|
+
- [ ] **アーカイブ / ごみ箱**: done をアーカイブ → アーカイブビューから復元できる。破壊的書換の前に
|
|
180
|
+
`.kanban/.trash/` へ退避され、ごみ箱から復元できる。
|
|
181
|
+
- [ ] **ネットワーク**: 動作中、外部へのネットワーク通信が一切発生しない。
|
|
182
|
+
- [ ] **終了**: ブラウザでボードを開いたまま `Ctrl+C` で serve が速やかに終了する。
|
|
183
|
+
- [ ] **再現性**: 本 README の手順だけで第三者が環境構築〜起動まで再現できる。
|
|
184
|
+
|
|
185
|
+
## アクセシビリティ
|
|
186
|
+
|
|
187
|
+
キーボードとスクリーンリーダーでの操作を考慮しています。
|
|
188
|
+
|
|
189
|
+
- **キーボード操作**: フォームやボタンは Tab で移動・操作できます。コマンドパレット(⌘K / Ctrl+K)から
|
|
190
|
+
ビュー切替・タスク検索ジャンプ・起票・設定をキーボードだけで実行できます。
|
|
191
|
+
- **キーボードでのカード移動**: カードにフォーカスして **Space で掴み**、矢印キーでカラム間を移動、
|
|
192
|
+
再度 Space で確定(Enter はカード詳細を開く)。ポインタ D&D と同じ status 更新経路・Pending 行きは保留ダイアログを起動。
|
|
193
|
+
- **モーダル**: 開いた時に内部へフォーカスを移し、Tab / Shift+Tab はダイアログ内をループ(focus trap)、
|
|
194
|
+
Escape で閉じ、閉じたら元の要素へフォーカスを戻します。
|
|
195
|
+
- **ARIA / 役割**: カラムやカード、ツールバー、ダイアログに `role` と `aria-label` を付与しています。
|
|
196
|
+
|
|
197
|
+
## 技術スタック
|
|
198
|
+
|
|
199
|
+
Node.js 20.1+ / Hono + @hono/node-server / chokidar / SSE / React 18 + TypeScript + Vite /
|
|
200
|
+
@dnd-kit / react-markdown + remark-gfm / gray-matter / zod / CSS Modules / vitest。
|
|
201
|
+
|
|
202
|
+
### 主要スタックに追加した依存とその理由
|
|
203
|
+
|
|
204
|
+
- **@hono/node-server** — Hono を Node ランタイムで起動し、ビルド済み SPA を静的配信するため
|
|
205
|
+
- **js-yaml (+ @types/js-yaml)** — gray-matter に `JSON_SCHEMA` エンジンを注入し、`+09:00` 付き日時を Date 化せず文字列のまま往復させるため(gray-matter 内蔵の旧 3.x に transitive 依存しない)
|
|
206
|
+
- **@vitejs/plugin-react** — Vite で React(JSX / Fast Refresh)を使うため
|
|
207
|
+
- **@dnd-kit/utilities** — @dnd-kit ファミリ。D&D の CSS transform 補助
|
|
208
|
+
- **tsx** — 開発時に TypeScript サーバーを直接実行するため(本番は dist のコンパイル済み JS を使用)
|
|
209
|
+
- **typescript / vitest / @types/\*** — 型安全とテストの基盤
|
|
210
|
+
|
|
211
|
+
## ライセンス
|
|
212
|
+
|
|
213
|
+
MIT
|