wiki_sync 実行時に、各プロジェクトの /{prefix} に Gemini 生成のインデックスページを自動生成・更新する。
ホームページのプロジェクト一覧はこのインデックスページへリンクする。
以下はすでにマージ済み。
butler/wiki_project_registry.py: プロジェクト情報の永続ストレージbutler/maids/wiki_worker.py: wiki_sync 完了時のプロジェクト登録・ホームページ更新tests/test_wiki_home_update.py: ホームページ更新のテストdocs/README.md の有無によらず、全プロジェクトに /{prefix} のインデックスページを自動生成するcreated_pages + updated_pages に含まれるエントリのみ再生成し、変更のないエントリは既存の記述を保持するbutler/wiki_doc_summarizer.pyrun_implement とは別の、要約専用の Gemini 呼び出しモジュール。
役割: ドキュメントの本文冒頭を受け取り、1〜2 文の説明文を返す。
公開 API:
| 関数 | 引数 | 戻り値 |
|---|---|---|
summarize_doc(title, content_head) |
ドキュメントタイトル・本文冒頭文字列 | 説明文(str) |
butler/maids/wiki_worker.py追加する関数:
| 関数 | 役割 |
|---|---|
_generate_index_page(prefix, doc_entries) |
/{prefix} インデックスページの Markdown を生成する |
_update_index_page(url, token, prefix, doc_entries, timeout) |
インデックスページを fetch して差分更新、なければ新規作成 |
インデックスページの構造:
# {プロジェクト名}
{プロジェクト概要文(Gemini 生成)}
## ドキュメント一覧
| ドキュメント | 説明 |
|---|---|
| [{タイトル}](/{path}) | {説明文(Gemini 生成)} |
### {サブディレクトリ名}
| ドキュメント | 説明 |
|---|---|
| [{タイトル}](/{path}) | {説明文(Gemini 生成)} |
サブディレクトリがない場合はルートエントリのみをテーブルで列挙する。サブディレクトリがある場合は ### {サブディレクトリ名} 見出しの下にそれぞれテーブルを置く。
WikiWorker.execute() への追加箇所:
既存の record_project() → _update_wiki_home_page() の呼び出しに続けて実行する。
1. created_pages + updated_pages の各ドキュメントについて Gemini で説明文を生成
2. 既存インデックスページを fetch して、変更分のエントリのみ差し替え
3. _update_index_page() で Wiki.js に書き戻す
_generate_project_list_markdown()ホームページのプロジェクト一覧リンクを /{prefix} に向ける。
インデックスページが常に存在するようになるため、リンク切れが起きない。
(現在は docs/README.md がない場合にリンク切れになる問題がある)
wiki_sync 完了(created / updated が 1 件以上)
├─ record_project() # レジストリ更新
├─ _update_wiki_home_page() # /home プロジェクト一覧更新
└─ _update_index_page() # /{prefix} インデックスページ更新
├─ 変更ドキュメント → Gemini で説明文生成
└─ 未変更ドキュメント → 既存記述をそのまま保持
dry_run=True の場合はいずれも実行しない。
<!-- AUTO:PROJECT_LIST:START -->
## プロジェクト一覧
| プロジェクト | 説明 |
|---|---|
| [Butler 2](/butler2) | 作業記録・Wiki同期システム |
| [keinasystem](/keinasystem) | ... |
<!-- AUTO:PROJECT_LIST:END -->
フェーズ2完了後は手書き部分を削除してこのセクションに一本化する。