# Portability: UNIVERSAL
# Last validated: 2026-05-17
# Next review: 2027-05-17

BACH MAINTENANCE (システム ジョブ)
--------------------------

メンテナンス ハンドラーは、スケジュールされたシステム ジョブを自動的に実行します。バックアップ、
トークン チェック、データ クレンジング、または独自のスクリプト。

ハンドラー: system/hub/scheduler.py (以前の: daemon.py)
サービス: system/gui/daemon_service.py + DB (scheduler_jobs、scheduler_runs)
GUI: /daemon (http://localhost:8000/daemon)

注: 「bach daemon ...」および「bach スケジューラ ...」はエイリアスです。


コマンド
-------

  bach daemon start          フォアグラウンドでメンテナンス デーモンを開始 (Ctrl+C 終了)
  bach daemon start --bg     バックグラウンドでメンテナンス デーモンを開始
  bach daemon stop           実行中のデーモンを停止
  bach daemon status         ステータスと最新の実行を表示
  bach daemon jobs           すべての定義済みジョブをリスト表示
  bach daemon run <ID>       ジョブを実行手動
  bach daemon logs [N]       最後の N ログ行を表示 (デフォルト: 20)


セッション コマンド (自動クロード セッション用のセッション デーモン)
------------------------------------------------------------------

  bach daemon session start [--profile NAME]   セッション デーモンの開始
  bach daemon session stop                     セッション デーモンの停止
  bach daemon session status                   セッション ステータスの表示
  bach daemon session trigger [--profile NAME] Session manuell ausloesen
  bach daemon session profiles                 利用可能なプロファイルのリスト


ジョブ タイプ
---------

  間隔 定期的（例：「30分」、「1時間」、「24時間」）
  cron Cron 式 (例: "0 3 * * *" = 毎日 03:00)
  手動 手動でのみ実行できます
  chain チェーン実行 (job.command =chain_id)
  イベント イベントベース (TODO)


ジョブの例
-------------

  名前 タイプ スケジュール 説明
  --------------------------------------------------------------
  バックアップ日次間隔 24 時間 毎日のバックアップを作成します
  トークンチェック間隔 30m トークン消費量をチェック
  cleanup cron 0 4 * * * 古いログをクリーンアップ


ジョブの作成
--------------

GUI ダッシュボード経由 (http://localhost:8000/daemon):
  - メンテナンス > "新しいジョブ"

API 経由:
  POST /api/daemon/jobs
  {
    "名前": "私の仕事",
    "ジョブタイプ": "間隔",
    "スケジュール": "1時間",
    "コマンド": "Python tools/my_script.py"
  }


ログ ファイル
-----------

  data/logs/daemon.log メンテナンス活動
  data/logs/session_daemon.log セッションアクティビティ
  data/daemon.pid PID ファイル (実行中の場合)
  Hub/_services/daemon/daemon.pid セッション デーモン PID


技術的な詳細
------------------

- ジョブは bach.db からロードされます (テーブル:scheduler_jobs)
-scheduler_runs に記録された実行
- ジョブごとのタイムアウトを構成可能 (デフォルト: 300 秒)
- エラー発生時のオプションの再試行 (max_retries 構成可能)
- ジョブは 5 分ごとにリロードされます
- 独自のデーモンプロセス (Python 間隔ループ)
- デーモンの動作中に OneDrive が一時停止される (Windows)
- ファイル操作中の同期競合を防止します。
- 定期的なタスクとの統合 (5 分ごとにチェック)

オプション: pip install croniter (拡張 cron 式用)


定義: 3 つのハンドラー システム
--------------------------------

  ┌─────────────────────────────┐
  │ メンテナンス │
  ---------------------------------------------------------------------- ─--------------------------------------------------------┤
  │ シェル/Python コマンドをオフに実行します │
  │ 時間制御 (cron/インターバル) │
  │ クロードの関与なしで │
  │ ハンドラー: system/hub/daemon.py │
  │ サービス: system/gui/daemon_service.py + DB │
  │ GUI: /daemon (既存) │
  │ デーモン: YES (独自プロセス) │
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┘

  ┌─────────────────────────────┐
  │ 定期的 │
  ---------------------------------------------------------------------- ─--------------------------------------------------------┤
  │ リマインダーとしてタスクを作成します │
  │ 間隔ベース (日) │
  │ クロード/ユーザーが編集する場合 │
  │ ハンドラ: system/hub/quiring.py │
  │ サービス: system/hub/_services/quiring/ │
  │ GUI: なし (CLI のみ + /daemon に統合) │
  │ デーモン: いいえ (呼び出されたときに確認します) │
  ━━━━━━━━━━━━━━━━━━━━━━━━┘

┌─────────────────────────────┐
  │ プロンプトジェネレーター │
  ---------------------------------------------------------------------- ─--------------------------------------------------------┤
  │ クロードセッションにプロンプトを送信します │
  │ 手動または自動 │
  │ エディタ付きテンプレートシステム │
  │ ハンドラ：（開発中） │
  │ サービス: system/hub/_services/prompt_generator/ │
  │ GUI: /prompt-generator (予定) │
  │ デーモン: はい (session_daemon.py) │
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┘

  メンテナンスの例: 毎日午前 3 時に「バッチ バックアップの作成」
  繰り返しの例: 「期限のセルフチェック」 -> クロードのタスク
  プロンプト ジェネレータの例: 30 分ごとに ATI エージェントにプロンプトを送信


関連項目
----------

  bach gui start              ジョブ管理を備えた Web ダッシュボード
  bach --help backup          バックアップ システム
  bach --help dirscan            ディレクトリ スキャナ
  bach --help recurring       定期的なタスク (GUI なし)
  bach --help prompt-generator  プロンプト管理 (GUI スケジュール済み)
