他 project から Butler を起動したときに、現在接続している Butler がどの版かを Brain / ユーザーが一発で確認できるようにする。
同時に、Butler 本体の version 番号更新を手作業に依存させず、Butler 自身の公開処理に組み込む。
外部 project では .mcp.json から /home/akira/develop/butler2 の Butler 実装を起動することがある。
このとき、作業対象 project は外部 project だが、Butler 本体は butler2 repo から読み込まれる。
ユーザーが知りたいのは、Git / Gitea の詳細ではなく「この Butler はどの版か」である。
Brain-facing API では低レベル Git / Gitea tool を公開しないという #50 の方針を保ち、version 確認も Butler の抽象 API として扱う。
major.minor.patch のうち patch は Butler 本体 repo の公開時に Butler が自動更新する。major / minor はユーザーが明示的に更新する。work_publish では Butler 本体 version を変更しない。butler_version役割: 現在実行中の Butler の version 文字列を返す。
戻り値例:
{
"status": "ok",
"summary": "Butler version: butler/0.1.12",
"data": {
"version": "butler/0.1.12"
}
}
butler_version_info役割: version 文字列に対応する詳細情報を返す。
version を省略した場合は、現在実行中の Butler の詳細を返す。
version を指定した場合は、Butler が解釈できる範囲で詳細を返す。
戻り値例:
{
"status": "ok",
"summary": "Butler version info",
"data": {
"version": "butler/0.1.12",
"package_version": "0.1.12",
"source_root": "/home/akira/develop/butler2",
"package_root": "/home/akira/develop/butler2/butler",
"python_executable": "/home/akira/develop/butler2/.venv/bin/python"
}
}
Phase 1 の version 文字列は次の形式とする。
butler/{major}.{minor}.{patch}
例:
butler/0.1.12
この文字列は Brain-facing な Butler 実行元識別子であり、Brain は文字列比較・表示・問い合わせキーとしてだけ扱う。
Butler 本体 repo で work_publish を実行し、未公開 commit が存在する場合、Butler は push 前に patch version を 1 増やす。
流れ:
work_publish
-> Butler 本体 repo か確認
-> 未公開 commit があるか確認
-> patch version を bump
-> version bump commit を作成
-> push
Phase 1 では pyproject.toml の [project].version を正本とする。
例:
[project]
name = "butler2"
version = "0.1.13"
現在の work_session_start(project_root) が Butler 本体 repo 以外を指している場合、work_publish は Butler version を更新してはならない。
例:
project_root=/home/akira/develop/keinasystem
この場合、work_publish は keinasystem の記録公開だけを扱い、/home/akira/develop/butler2/pyproject.toml を変更しない。
Version capability は Git / Gitea の低レベル tool を Brain に公開しない。
git status / git log / git push を呼ばない。git_* / gitea_* tool を使わない。butler_version は原則として常に成功する。
butler_version_info(version) で解釈できない version 文字列が渡された場合は need_input ではなく error を返す。
work_publish の自動 bump が失敗した場合は push せず error を返す。
butler_version() で現在の Butler version 文字列を取得できる。butler_version_info() で現在の Butler version 詳細を取得できる。inspect_runtime_config の Brain 向け情報からも現在の Butler version 文字列を確認できる。work_publish 時に patch version が自動更新される。work_publish では Butler 本体 version が更新されない。