aizuchi 0.1.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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Megaphone Tokyo
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,149 @@
1
+ # AIzuchi
2
+
3
+ **AI進捗管理カンバンダッシュボード**(npm / CLI 名: `aizuchi`)
4
+
5
+ CLI 型 AI コーディングエージェント(Claude Code 等)に作業を委任するプロジェクトで、人間が
6
+ ブラウザ上のカンバンボードからタスクの進捗を一望・操作するためのローカル専用ツールです。
7
+ タスクは `.kanban/` 配下のプレーンテキスト(Markdown + YAML frontmatter)が唯一の正で、
8
+ AI も人間も通常のファイル読み書きだけで参加できます。
9
+
10
+ 「相槌(あいづち)」=対話せずに通じ合う、AI との意思疎通を表す命名です。
11
+
12
+ - **ローカル限定**: `127.0.0.1` のみにバインドし、外部送信・テレメトリは一切しません。
13
+ - **ファイルが唯一の正**: DB を使いません。git 管理でき、サーバー停止中も読めます。
14
+ - **規約ベースの AI 連携**: AI は専用 API なしで、ファイル読み書きだけで参加します。
15
+
16
+ ## 必要環境
17
+
18
+ - Node.js **20.1 以上**(`fs.readdir` の `recursive` を使うため)
19
+ - macOS / Linux / WSL(Windows ネイティブはベストエフォート)
20
+
21
+ ## クイックスタート
22
+
23
+ ```bash
24
+ # 対象プロジェクトのディレクトリ直下で実行する
25
+ npx aizuchi init # .kanban/ を生成 + CLAUDE.md へ運用規約をマーカー区切りで追記
26
+ npx aizuchi # = serve。http://127.0.0.1:5151 でボードを起動(Ctrl+C で終了)
27
+
28
+ # 複数プロジェクトをまとめて見る(read-only 集約・既定ポート 5152)
29
+ npx aizuchi overview <dir...> # 例: npx aizuchi overview ~/proj-a ~/proj-b
30
+ ```
31
+
32
+ - `init` は既存ファイルを壊しません。既に `.kanban/` があれば安全に中断します。
33
+ CLAUDE.md は末尾にマーカー(`<!-- aizuchi:begin -->`〜`<!-- aizuchi:end -->`)区切りで追記し、
34
+ 再実行時は同区間だけを置き換えます(冪等)。撤去は `.kanban/` 削除とマーカー区間削除だけで完了します。
35
+ - `--port <番号>` でポート変更、`--member <ID>` で AI のメンバー ID 指定(config.members に未登録なら
36
+ `ai` 種別で追加)、`--yes` で確認プロンプト省略。
37
+ - `overview` は各 dir の `.kanban` を読み取り専用で集約表示します(編集・起票・D&D なし)。
38
+ `.kanban` の無い dir や同一 dir の重複指定は明確なエラーで起動を拒否します。既定ポートは
39
+ serve(5151)と衝突しない 5152 で、`--port <番号>` で変更できます。
40
+ - `127.0.0.1` 以外にはバインドせず、外部へのネットワーク送信は一切行いません。
41
+
42
+ ## できること(Phase 1 / MVP)
43
+
44
+ - **カンバンボード**: config の `columns` どおりにカラム表示。カードに ID・タイトル・担当(human/ai の種別を
45
+ 色で区別)・優先度・ラベル・最終更新からの経過時間を表示。
46
+ - **ドラッグ&ドロップ**: カラム移動で frontmatter の `status` / `updated` だけをピンポイント書換(本文は保全)。
47
+ Pending へ移すと種別(decision / external / dependency)と理由を尋ねるダイアログが出ます。
48
+ - **ライブ反映**: エディタや AI がファイルを変更すると、watcher → SSE で開いているボードへ約 1 秒以内に反映。
49
+ - **タスク追加**: モーダルからタイトル・起票者・担当・優先度・ラベルを入力して起票(ID はサーバーが採番)。
50
+ - **タスク詳細**: Markdown プレビュー / 本文編集(保存時に競合検知 → 差分提示)/ 作業ログのタイムライン表示。
51
+ - **警告バナー**: 壊れた frontmatter・重複 ID・未登録メンバー・不正な config を表示(ボードは落ちません)。
52
+
53
+ > Phase 2 以降: 提案ワークフロー・設定画面・AI 設定ファイル管理・検索/フィルタ/アーカイブ UI・
54
+ > 指示コピー・重複 ID リネーム支援・多言語対応(i18n)・マイルストーン/ガント。
55
+
56
+ ## 開発
57
+
58
+ ```bash
59
+ npm install # 依存インストール
60
+ npm run dev # 開発: Vite + API を 1 プロセスで起動(http://127.0.0.1:5173 など)
61
+ npm run build # web を dist/web にビルド + server/shared を dist にコンパイル
62
+ npm run serve # ビルド済み dist を 1 プロセスで配信(= node dist/bin/aizuchi.js serve)
63
+ npm test # vitest
64
+ npm run typecheck # tsc(server)+ tsc -p web/tsconfig.json(web)
65
+ ```
66
+
67
+ - 開発時は Vite の `configureServer` に Hono アプリをマウントし、`npm run dev` 一発で SPA と API の
68
+ 両方が立ち上がります(proxy も concurrently も不要)。
69
+ - 別プロジェクトを開発対象にしたい場合は `AIZUCHI_DEV_ROOT=/path/to/project npm run dev`。
70
+
71
+ ## 構成
72
+
73
+ ```
74
+ ┌──────────── 1 プロセス (Node.js) ────────────┐
75
+ ブラウザ ──HTTP──▶│ 静的配信 (dist/web) REST API SSE │
76
+ (React SPA) ◀SSE─│ server/static.ts server/app.ts events │──watch/read/write──▶ .kanban/
77
+ │ chokidar watcher (server/watcher) │ (プレーンテキスト)
78
+ └────────────────────────────────────────────┘ ▲
79
+ AI / 人間が直接編集
80
+ ```
81
+
82
+ ```
83
+ aizuchi/
84
+ ├── bin/aizuchi.ts # CLI エントリ(init / serve / task / overview)。dist/bin/aizuchi.js にコンパイル
85
+ ├── server/ # Hono アプリ・watcher・静的配信・ファイル I/O
86
+ │ ├── app.ts # REST API(board / tasks / events)+ Host 検証 + onError
87
+ │ ├── overview.ts # 複数 .kanban の read-only 集約(aizuchi overview・既定ポート 5152)
88
+ │ ├── board.ts # .kanban 読込・zod 検証・警告生成
89
+ │ ├── watcher.ts # chokidar(debounce 200ms)→ SSE
90
+ │ ├── static.ts # ビルド済み SPA の配信(トラバーサル拒否)
91
+ │ └── lib/ # task-file / pinpoint / id / fs-safe / time
92
+ ├── web/ # Vite + React SPA(ビルド成果物を dist/web に同梱)
93
+ │ └── src/ # App / useBoard / components / lib
94
+ ├── shared/ # task / config の zod スキーマ・型・行 LCS diff(server / web 共有)
95
+ ├── templates/ # config.json / claude-rules.md(init が生成)
96
+ └── docs/ # decisions.md ほか
97
+ ```
98
+
99
+ ## データ仕様(抜粋)
100
+
101
+ - タスク = `.kanban/tasks/<ID>.md`(1 タスク 1 ファイル、**ID=ファイル名**)。
102
+ - frontmatter: `id` / `title` / `status` / `assignee` / `created_by` / `priority` / `labels` /
103
+ `blocked_type` / `blocked_reason` / `depends_on` / `created` / `updated`。
104
+ - `status`: `proposed` / `backlog` / `todo` / `in_progress` / `pending` / `done`。
105
+ - 日時は ISO 8601(タイムゾーン付き、例: `2026-06-10T10:00:00+09:00`)。UTC へ変換しません。
106
+ - 設定は `.kanban/config.json`(プロジェクト名・ID 接頭辞・ポート・メンバー・カラム ほか)。
107
+ 設定ゼロでも既定値で動作します。
108
+
109
+ 詳細は開発リポ AIzuchi-DEV の `_docs/260610_要件定義所/aizuchi-要件定義書.md`(§5 データ仕様)を参照。
110
+
111
+ ## 手動確認チェックリスト(受け入れ基準 / DoD)
112
+
113
+ `npm run build` 後に対象プロジェクトで `node dist/bin/aizuchi.js init` → `... serve` を実行し、ブラウザで確認します。
114
+
115
+ - [ ] **init**: `node bin/aizuchi.js init` で `.kanban/`(config.json・tasks/・archive/・README)が生成され、
116
+ CLAUDE.md にマーカーコメント区切りで運用規約が追記される(既存があれば末尾追記、再実行は同区間のみ置換、
117
+ 既存 `.kanban/` があれば安全に中断)。
118
+ - [ ] **serve**: `node bin/aizuchi.js serve` で `http://127.0.0.1:5151` にボードが表示される。127.0.0.1 以外に
119
+ バインドしない。
120
+ - [ ] **起票**: 追加モーダルからタスクを作成すると `tasks/TASK-00X.md` が生成され、ID が連番になる
121
+ (起票者は members から選択、その ID が `created_by` に入る)。
122
+ - [ ] **D&D**: カラム移動で frontmatter の `status` / `updated` だけが変わる(`git diff` で本文保全を確認)。
123
+ - [ ] **ライブ反映**: エディタで直接タスクファイルを書き換えると 1 秒以内にボードへ反映される。
124
+ - [ ] **保留表示**: pending カードに保留種別(色分けバッジ)と理由が表示され、in_progress カードに
125
+ 「最終更新 ◯分前」が表示される。
126
+ - [ ] **警告**: frontmatter を壊したファイルを置くと警告バナーに表示され、ボード自体は落ちない。
127
+ - [ ] **詳細**: タスク詳細でプレビュー・編集・作業ログのタイムラインが使える。保存時に外部変更と競合したら
128
+ 上書き確認(差分提示)が出る。
129
+ - [ ] **ネットワーク**: 動作中、外部へのネットワーク通信が一切発生しない。
130
+ - [ ] **終了**: ブラウザでボードを開いたまま `Ctrl+C` で serve が速やかに終了する。
131
+ - [ ] **再現性**: 本 README の手順だけで第三者が環境構築〜起動まで再現できる。
132
+
133
+ ## 技術スタック
134
+
135
+ Node.js 20.1+ / Hono + @hono/node-server / chokidar / SSE / React 18 + TypeScript + Vite /
136
+ @dnd-kit / react-markdown + remark-gfm / gray-matter / zod / CSS Modules / vitest。
137
+
138
+ ### 要件定義書の推奨スタックに無い依存とその理由
139
+
140
+ - **@hono/node-server** — Hono を Node ランタイムで起動し、ビルド済み SPA を静的配信するため
141
+ - **js-yaml (+ @types/js-yaml)** — gray-matter に `JSON_SCHEMA` エンジンを注入し、`+09:00` 付き日時を Date 化せず文字列のまま往復させるため(gray-matter 内蔵の旧 3.x に transitive 依存しない)
142
+ - **@vitejs/plugin-react** — Vite で React(JSX / Fast Refresh)を使うため
143
+ - **@dnd-kit/utilities** — @dnd-kit ファミリ。D&D の CSS transform 補助(sortable はカラム内並べ替えが入る Phase 2 で追加)
144
+ - **tsx** — 開発時に TypeScript サーバーを直接実行するため(本番は dist のコンパイル済み JS を使用)
145
+ - **typescript / vitest / @types/\*** — 型・テスト基盤(要件定義書 §4.2・§5 が前提とするもの)
146
+
147
+ ## ライセンス
148
+
149
+ MIT