🌟 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
-
ユーザーがopencode起動後、モデルが反映されていないことに気づく
→ drift有り時のwarning toastで「再起動が必要」と通知される
-
ユーザーが現在どのモードか確認したい
→ 起動時のinfo toastで現在モードが表示される
-
toastが煩わしい場合
→ showToastOnStartup: falseでinfo toastを無効化できる(warning toastは常に表示)
📌 Additional Context
- 関連コード:
src/modes/manager.ts の applyCurrentModeIfNeeded() メソッド
- 既存TODO:
manager.ts:267-271
- メッセージ言語: 英語(既存の他のtoastメッセージと統一)
🌟 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を表示する。注意: このtoastは
showToastOnStartup設定に関わらず常に表示する(重要な警告のため)。2. drift無し時: info toastで現在モードを表示
既存の
showToastOnStartup設定フラグで表示/非表示を制御する。対応するケース一覧
showToastOnStartupで制御可drift検出のカバー範囲(既存)
🎯 Use Cases
ユーザーがopencode起動後、モデルが反映されていないことに気づく
→ drift有り時のwarning toastで「再起動が必要」と通知される
ユーザーが現在どのモードか確認したい
→ 起動時のinfo toastで現在モードが表示される
toastが煩わしい場合
→
showToastOnStartup: falseでinfo toastを無効化できる(warning toastは常に表示)📌 Additional Context
src/modes/manager.tsのapplyCurrentModeIfNeeded()メソッドmanager.ts:267-271