Release v1.4.3
@coeiro-operator/audio
@coeiro-operator/cli
@coeiro-operator/common
@coeiro-operator/core
@coeiro-operator/mcp-debug
@coeiro-operator/mcp
1.4.3
Patch Changes
-
92e3092: fix: sayツールでvoice形式を正しくパース、不正な形式でエラーハンドリングを改善
Issue #179, #180の修正:
alma:裏のような不正なvoice形式でMCPサーバーがクラッシュする問題、およびvoice指定時に別キャラのstyleが使えない問題を修正しました。変更内容:
- voice文字列のパース処理を追加
characterId:styleName形式に対応- コロン(
:)で分割し、characterIdとstyleNameを抽出 - 不正な形式(コロンが複数など)を検出してエラー
- エラーメッセージの改善
- 不正なvoice形式の場合、使用可能な形式を明示
- キャラクターが存在しない場合のエラーを明確化
- 存在しないstyleを指定した場合、そのキャラクターの利用可能なstyleを表示
- スタイル検証の改善(Issue #180対応)
- voice指定時、そのキャラクターのstyleを検証
- 現在のオペレータではなく、指定されたキャラクターのstyleをチェック
- 例:
operator_assign=tsukuyomiの状態でvoice="alma"+style="のーまる"が使用可能に
- クラッシュ防止の強化(Issue #179の本質的な要件)
voice-resolver.tsでselectedStyleがundefinedになるケースを明示的に処理- 非null assertion (
!) を削除し、ガード節でエラーをthrow speaker.stylesが空配列の場合のクラッシュを防止server.tsでCharacter型に存在しないnameフィールドの参照を修正
使用例:
// 正常な形式 say({ message: 'こんにちは', voice: 'alma' }); say({ message: 'こんにちは', voice: 'alma:のーまる' }); // Issue #180: voice指定時に別キャラのstyleを使用 // operator_assign=tsukuyomiの状態で say({ message: 'こんにちは', voice: 'alma', style: 'のーまる' }); // ✅ almaの「のーまる」が使用される // エラーになる形式(適切なメッセージを表示) say({ message: 'こんにちは', voice: 'alma:裏:extra' }); // → "不正なvoice形式です" say({ message: 'こんにちは', voice: 'nonexistent' }); // → "キャラクター 'nonexistent' が見つかりません"
テスト:
- voice形式のパーステストを追加
- 不正な形式のエラーテストを追加
- Issue #180のシナリオテストを追加(voice指定時のstyle検証)
- voice文字列のパース処理を追加
-
ef7153f: wait_for_task_completionにremainingQueueLengthオプションを追加(イベントベース実装)
wait_for_task_completionツールに、キューが指定数になったときに待ちを解除するremainingQueueLengthオプションを追加しました。使用例:
// キューが1個になったら解除 wait_for_task_completion({ remainingQueueLength: 1 }); // すべてのタスクが完了するまで待機(既存の動作) wait_for_task_completion({ remainingQueueLength: 0 }); wait_for_task_completion();
実装内容:
remainingQueueLengthパラメータを追加(デフォルト: 0)- 0の場合は既存の動作(全タスク完了まで待機)
- イベントベース実装: ポーリングを避け、TaskQueueのイベント(
taskCompleted,queueEmpty)を使用 - TaskQueueにEventEmitterを継承させ、
waitForQueueLength()メソッドを追加 - SayCoeiroinkに
waitForQueueLength()を公開 - タイムアウト・エラーメッセージも残数に応じて適切に表示
技術詳細:
- TaskQueueに
taskCompletedイベント(タスク完了時)とqueueEmptyイベント(キュー空時)を追加 waitForQueueLength(targetLength)メソッドでイベントリスナーを登録し、条件達成で解決- ポーリング不要で効率的な待機を実現
refs #182
-
Updated dependencies [ef7153f]
-
Updated dependencies [9175d6e]
- @coeiro-operator/audio@1.2.3
- @coeiro-operator/core@1.2.3