Skip to content

Release v1.4.3

Choose a tag to compare

@github-actions github-actions released this 03 Dec 02:09
· 87 commits to main since this release
096406e

@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が使えない問題を修正しました。

    変更内容:

    1. voice文字列のパース処理を追加
      • characterId:styleName形式に対応
      • コロン(:)で分割し、characterIdとstyleNameを抽出
      • 不正な形式(コロンが複数など)を検出してエラー
    2. エラーメッセージの改善
      • 不正なvoice形式の場合、使用可能な形式を明示
      • キャラクターが存在しない場合のエラーを明確化
      • 存在しないstyleを指定した場合、そのキャラクターの利用可能なstyleを表示
    3. スタイル検証の改善(Issue #180対応)
      • voice指定時、そのキャラクターのstyleを検証
      • 現在のオペレータではなく、指定されたキャラクターのstyleをチェック
      • 例: operator_assign=tsukuyomiの状態でvoice="alma" + style="のーまる"が使用可能に
    4. クラッシュ防止の強化(Issue #179の本質的な要件)
      • voice-resolver.tsselectedStyleがundefinedになるケースを明示的に処理
      • 非null assertion (!) を削除し、ガード節でエラーをthrow
      • speaker.stylesが空配列の場合のクラッシュを防止
      • server.tsCharacter型に存在しない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検証)

    refs #179, #180

  • 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

@coeiro-operator/term-bg