Skip to content

[Feature] 起動時のtoast通知改善: モード適用通知と現在モード表示 #19

@j4rviscmd

Description

@j4rviscmd

🌟 Summary

プラグイン起動時のtoast通知を改善し、モード適用状況をユーザーに確実に伝える。

🤔 Motivation

現在、opencode起動時にプラグインはswitcher.jsonの設定をopencode.json/oh-my-opencode.jsonに反映するが、以下の問題がある:

問題1: drift有り時のtoastが表示されない

applyCurrentModeIfNeeded()にtoast表示コードは存在するが、プラグイン初期化時点でUIが未初期化のため、実際にはtoastが表示されない可能性が高い(manager.ts:267-271 のTODOコメント参照)。

configファイルの書き換えは行われるが「再起動が必要」という通知が出ないため、ユーザーは「設定したはずなのに反映されていない」と混乱する。

問題2: drift無し時に現在モードの通知がない

drift検出されない(=設定が一致している)場合、何の通知もなく起動する。ユーザーは現在どのモードで動作しているか把握できない。

💡 Proposal

1. drift有り時: warning toastを確実に表示

setTimeoutで遅延実行し、UI初期化を待ってからtoastを表示する。

// 例: 遅延実行でUI初期化を待つ
setTimeout(() => {
  this.client.tui.showToast({
    body: {
      title: 'Mode Applied',
      message: `Applied "${this.config.currentMode}" mode. Restart opencode to take effect.`,
      variant: 'warning',
      duration: 5000,
    },
  }).catch(() => {});
}, 3000); // UI初期化を待つ

注意: このtoastはshowToastOnStartup設定に関わらず常に表示する(重要な警告のため)。

2. drift無し時: info toastで現在モードを表示

// 例: 現在モードの通知
this.client.tui.showToast({
  body: {
    title: 'Agent Mode',
    message: `Current mode: "${this.config.currentMode}"`,
    variant: 'info',
    duration: 3000,
  },
});

既存のshowToastOnStartup設定フラグで表示/非表示を制御する。

対応するケース一覧

ケース 条件 toast 設定で無効化
drift有り config書き換え実行 warning「再起動が必要」 不可(常に表示)
drift無し 設定一致 info「現在モード」 showToastOnStartupで制御可

drift検出のカバー範囲(既存)

  • モード名の変更(economy → performance)
  • プリセット定義内のmodel値変更(同じモード名でmodel更新)
  • opencode.jsonの手動編集によるズレ

🎯 Use Cases

  1. ユーザーがopencode起動後、モデルが反映されていないことに気づく
    → drift有り時のwarning toastで「再起動が必要」と通知される

  2. ユーザーが現在どのモードか確認したい
    → 起動時のinfo toastで現在モードが表示される

  3. toastが煩わしい場合
    showToastOnStartup: falseでinfo toastを無効化できる(warning toastは常に表示)

📌 Additional Context

  • 関連コード: src/modes/manager.tsapplyCurrentModeIfNeeded() メソッド
  • 既存TODO: manager.ts:267-271
  • メッセージ言語: 英語(既存の他のtoastメッセージと統一)

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions