標準監視フォルダ初回自動作成 #15

Closed dtmoyaji opened this issue 1 day ago - 1 comment

@dtmoyaji dtmoyaji commented 1 day ago

標準監視フォルダの初回自動作成

前提・先行案件

  • Issue #13(監視フォルダに説明フィールド追加)と Issue #14(監視フォルダへの MCP 書き込み)を先行して対応する。本機能はその後に実装する。
  • エージェントが標準フォルダにルール・スキル・ツールを書き込み、Telos が監視してインデックスする流れを想定する。

仕様

項目 内容
作成タイミング 初回起動時のみ(一度でも作成したら二度と自動作成しない)
配置 DB と同じディレクトリ = app_data_dir 直下
フォルダ名(=カテゴリ名) 汎用ルール / 汎用スキル / 汎用ツール
ユーザーが削除した場合 再作成しない(「要らない」とみなす)

実装方針

1. 初回判定

  • settings.jsonstandard_folders_created(boolean)を追加する。
  • 起動時にこのキーが 無い or false のときだけ、下記の作成処理を実行する。
  • 作成後に standard_folders_created: true を書き込み、以降は実行しない。

2. 自動作成処理(Rust)

実行箇所: src/backend/src/lib.rssetup 内。create_dir_all(&app_data_dir) の直後、DB 初期化の前に実施する。

  • settings.json を読む(無ければ {} 扱い)。
  • standard_folders_created === true なら何もしない。
  • そうでなければ:
    1. app_data_dir.join("汎用ルール") などで 3 ディレクトリを create_dir_all
    2. 各フォルダの絶対パスを monitor_paths 用の { path, category } にし、既存の monitor_paths とマージ(同じ path が既にあれば重複追加しない)。
    3. マージ後の monitor_pathsstandard_folders_created: true を、既存の min_score / limit / run_on_login / watch_extensions を保った形で settings.json に書き込む。

パスは OS ごとの形式でよい。既存の monitor_paths の形式([{ path, category }])に合わせる。

3. 設定の読み書きでの扱い

  • 読み出し: get_app_settings(lib.rs)および MCP の settings_get で、standard_folders_created をそのまま返す(フロントで表示しなくてよい)。
  • 保存: フロントや MCP の settings_post で設定を上書きする際、既存の standard_folders_created を維持する。
  • バックアップ/復元: エクスポートには standard_folders_created を含める。インポートで true が入っていれば、その環境では自動作成は実行されない。

4. データフォルダを開く(任意)

  • 設定 UI に「データフォルダを開く」のようなボタンを追加し、app_data_dir を OS のファイラ(Windows: エクスプローラ、macOS: Finder、Linux: xdg-open)で開く。
  • Tauri 側に open_app_data_folder のようなコマンドを追加し、tauri-plugin-shell の open または Command でパスを渡して起動する。

変更ファイル一覧

  • src/backend/src/lib.rs: setup 内で初回のみ 3 フォルダ作成+monitor_paths 更新+standard_folders_created 書き込み。任意で open_app_data_folder コマンド追加。
  • src/backend/src/mcp/handlers.rs: settings_get のマージ対象に standard_folders_created を含める。settings_post で保存時に既存の standard_folders_created を維持する。
  • src/frontend/components/main-panel.js: 設定保存時に standard_folders_created を消さないようにペイロードを組み立てる。任意で「データフォルダを開く」ボタン。
  • capabilities: データフォルダを開くで shell を使う場合、必要な permission を追加する。

動作フロー(イメージ)

起動 → settings.json に standard_folders_created あり? 
  → true: スキップ
  → なし/false: 3フォルダ作成 → monitor_paths に追加 → standard_folders_created = true で保存
→ 続行(DB初期化等)

注意

  • 既存ユーザーは初回起動時に「既に settings.json があり monitor_paths がある」状態。その場合でも standard_folders_created が無ければ作成処理は走る。既存の monitor_paths とマージするので、既存の監視はそのまま残る。
  • フォルダ名は UTF-8 で固定。Windows 等でパスに含まれる場合、既存の PathBuf/join で問題ないかだけ確認する。
@dtmoyaji dtmoyaji added the enhancement label 1 day ago

改訂版プラン(追記) — GitBucket の Issue は本文を編集できないため、最新の計画をここに追記します。


標準監視フォルダ(トグルで有効化)

前提・先行案件

  • Issue #13(監視フォルダに説明フィールド追加)と Issue #14(監視フォルダへの MCP 書き込み)を先行して対応する。本機能はその後に実装する。
  • エージェントが標準フォルダにルール・スキル・ツールを書き込み、Telos が監視してインデックスする流れを想定する。

仕様

項目 内容
有効化 設定 UI のトグル「標準フォルダを有効にする」を ON にして保存
既定の配置 DB と同じディレクトリ = app_data_dir 直下の 汎用ルール / 汎用スキル / 汎用ツール
パス ユーザーが変更可能。監視パス一覧で 3 件の path を編集できる(カテゴリ名で標準フォルダと識別)。
トグル ON 時 3 カテゴリがまだ無ければ既定パスで追加しフォルダを自動作成。既に同じカテゴリの行があればその path を維持(ユーザーが変更したパスを尊重)。
トグル OFF 時 カテゴリが 汎用ルール / 汎用スキル / 汎用ツール のエントリを monitor_paths から削除(フォルダは削除しない)。
説明 最初から標準フォルダには既定の説明(Markdown)を入れておく#13 の説明フィールドを使い、追加時のみ設定。既にユーザーが説明を編集している行は上書きしない。

パスを変更したときの扱い

  • 引っ越し(推奨): パス変更時に 変更前フォルダの中身を新パスへ移動する。新パスにフォルダが無ければ作成し、旧パス配下のファイルを移動したあと、旧フォルダは空になる(空ディレクトリの削除は任意)。ユーザーが手動で移す手間がなく、データが新監視先に揃う。
  • インデックス: 変更前パス配下のドキュメントはインデックスから削除。新パスは監視開始後に取り込み対象になる(引っ越しで移動したファイルも新パスとして取り込まれる)。
  • 引っ越ししない場合: 移動処理をスキップするオプション(例: 「パス変更時に中身を移動する」トグルを OFF、または確認ダイアログで「移動しない」を選ぶ)を用意してもよい。その場合は変更前フォルダはそのまま残し、新パスは空の監視として扱う。

初回判定・アップデート時のマイグレーションは不要。ユーザーがトグルで明示的に ON にするまで何も作成しない。

実装方針

1. 設定キー

  • settings.jsonstandard_folders_enabled(boolean, 既定 false)を追加する。
  • 読み出し・保存・バックアップ/復元で他キーと同様に扱う。

2. 保存時の処理(トグルに応じて monitor_paths を更新)

標準フォルダは カテゴリ名(汎用ルール / 汎用スキル / 汎用ツール)で識別する。パスは monitor_paths の行として保存され、ユーザーが一覧で編集できる。

  • 保存ペイロードに standard_folders_enabled: true が含まれる場合
    1. 既存の monitor_paths のうち、上記 3 カテゴリに該当するエントリを確認する。
    2. 各カテゴリについて、エントリが無ければ 既定パスapp_data_dir.join("汎用ルール") 等)で { path, category, description? } を追加し、既定の説明(下記)を設定。その path を create_dir_all。既にエントリがあれば ユーザーが入力した path・説明をそのまま使う(上書きしない)。
    3. マージ後の monitor_pathsstandard_folders_enabled: true を保存。

標準フォルダの既定説明(Markdown・案)

  • 汎用ルール: 「エディタや AI エージェント用のルールを格納します。」
  • 汎用スキル: 「AI エージェント用のスキル(SKILL.md など)を格納します。」
  • 汎用ツール: 「MCP ツール定義やスクリプト(ソースコード)を格納します。監視対象の拡張子は設定(watch_extensions)で指定し、MCP からも変更可能にします。」

  • standard_folders_enabled: false の場合

    1. monitor_paths から、category が 汎用ルール / 汎用スキル / 汎用ツール のエントリを除外した配列にする(path でなくカテゴリで判定するので、ユーザーがパスを変更していても正しく外せる)。
    2. standard_folders_enabled: false とともに保存。フォルダは削除しない。

パス変更時の引っ越し: 同一カテゴリで path が変更された場合(直前の設定と比較)、「中身を移動する」が有効なら旧パス配下のファイルを新パスへ移動する。オプションで「引っ越ししない」を選べる場合は、この移動をスキップする。

3. UI

  • 設定パネルにトグル「標準フォルダを有効にする」を追加。
  • 自動起動(run_on_login)をチェックボックスからトグルに変更し、標準フォルダのトグルとトーンを揃える。
  • 保存時に standard_folders_enabled をペイロードに含める。既存の「監視パス」リストで、標準フォルダ 3 件の path をユーザーが編集できる

4. データフォルダを開く(任意)

  • 設定 UI に「データフォルダを開く」ボタンを追加し、app_data_dir を OS のファイラで開く。

変更ファイル一覧

  • src/backend/src/lib.rs: get_app_settingsstandard_folders_enabled を追加。設定保存時の 3 フォルダ作成・monitor_paths 更新。任意で open_app_data_folder コマンド。
  • src/backend/src/mcp/handlers.rs: settings_getstandard_folders_enabled を含める。settings_post で standard_folders_enabled に応じた monitor_paths 更新。
  • 設定のインポート/エクスポート: standard_folders_enabled を含める。
  • src/frontend/components/main-panel.js: トグル「標準フォルダを有効にする」追加。自動起動をトグルに変更。任意で「データフォルダを開く」ボタン。
  • Capabilities: データフォルダを開くで shell を使う場合、必要な permission を追加。

注意

  • フォルダ名は UTF-8 で固定。
  • トグル OFF ではフォルダを削除しない。再度 ON にすると不足分が既定パスで追加される(以前ユーザーが変更していたパスは記憶しない)。

取りこぼし・検討事項

  • 引っ越し失敗時: 保存を止めてエラー表示するか、パスのみ更新するか。推奨は「保存を止めてエラー表示」。
  • 新パスに既にファイルがある場合: 同名は上書きしない。フォルダはマージ。
  • 「引っ越しする」オプション: standard_folders_move_on_change などを settings に持つか。既定は true。
  • 同一カテゴリが複数行: 1 カテゴリ 1 パスとみなす。
  • トグル OFF 後また ON: 既定パスで 3 件を再追加。以前のカスタムパスは記憶しない。
  • UI での標準フォルダの見分け: 3 行をグループ表示やラベルで分かりやすくする。
  • #13 説明フィールド: 標準フォルダの行にも説明を付けられる。特別な扱いは不要。
  • watch_extensions を MCP で変更可能: GET/POST /settingswatch_extensions を読み書きする。現状の settings_get_handler / settings_post_handler はすでに扱っているので MCP から変更可能。仕様・ドキュメントで明示する。
@dtmoyaji dtmoyaji closed this issue 1 day ago
Labels

Priority
No priority
Milestone
No milestone
Assignee
No one assigned
1 participant
@dtmoyaji