Skip to content

fix: 設定/APIキー・AIチャット・セキュリティ・パフォーマンスの包括的修正#55

Open
bassmicrobe wants to merge 54 commits into
LiveEnhancementSuite:developfrom
bassmicrobe:fix/audit-settings-security-perf
Open

fix: 設定/APIキー・AIチャット・セキュリティ・パフォーマンスの包括的修正#55
bassmicrobe wants to merge 54 commits into
LiveEnhancementSuite:developfrom
bassmicrobe:fix/audit-settings-security-perf

Conversation

@bassmicrobe

Copy link
Copy Markdown

Summary

  • APIキー保存バグ修正: 未設定 センチネル値がキーに付加される問題、空欄でデフォルト値が復活する問題を解消
  • AIチャットクラッシュ修正: _G.clock(hsタイマーuserdata)への算術演算によるクラッシュ、choices[1].message.content nil参照によるUI凍結を修正
  • 設定GUI改善: APIキー削除ボタン追加、WKブリッジwatchdog(5秒タイムアウト)、保存後のリロードタイマー即時実行
  • セキュリティ強化: strQuote をPOSIX準拠の単一引用符エスケープに修正、ShellExec の不要なzshラッパー削除、APIキーをDOMに露出しない
  • パフォーマンス最適化: piano.luaキーストローク毎のテーブルアロケーション削減、timer.luaクールダウン追加、proccomデバッグログゲート
  • リグレッション修正: セミコロン分割ロジック、symlink安全削除(lstat使用)、macros.luaアルファ接尾辞処理

Changes

ファイル 変更内容
ai/openai.lua, ai/chat.lua nilセーフなコールバック、_G.clock算術演算削除
settings.lua .+→.-パターン修正、;正規化、未設定ゲート、map()でopenaikeyを_Gから削除
menus/settingsgui.lua APIキー削除ボタン、WKブリッジwatchdog、reloadLES即時実行
util/string.lua strQuoteのPOSIX準拠修正
helpers.lua ShellExecのzshラッパー削除、rmrf()のsymlinkAttributes使用
shortcuts/macros.lua アルファ接尾辞バージョン文字列処理修正
util/io.lua tableToFileのchmod順序修正(TOCTOU緩和)
tests/settings_spec.lua, tests/helpers_spec.lua テスト強化・モック追加

Test plan

  • docker run --rm les-test → 41 successes / 0 failures / 0 errors
  • luacheck extensions/les/ → 0 errors
  • Xcode build → BUILD SUCCEEDED
  • Ableton Live でAPIキー設定・保存・削除の動作確認
  • AIチャット機能の動作確認(クラッシュなし)

🤖 Generated with Claude Code

claude added 30 commits March 27, 2026 13:15
- READMEを全面的に日本語に翻訳
- オリジナルLESforMacOSのフォークであることを明記
- 元の著作権表示(Lua, Hammerspoon, LESforMacOS authors)を保持
- bassmicrobeのカスタマイズ部分の著作権を追加
- 主な機能一覧、プロジェクト構成、設定項目の説明を追加
- Claude Code開発ワークフローセクションを追加

https://claude.ai/code/session_017dMeoBU7hkkikuskLtEWa1
## 1. LESmain.lua (1908行) を7つのモジュールに分割
- menus/plugin.lua: メニュー構築 (buildPluginMenu, clearcategories等)
- lifecycle/reload.lua: リロード・チート (reloadLES, cheatmenu等)
- shortcuts/macros.lua: キーボードマクロ (quickmacro eventtap等)
- shortcuts/rightclick.lua: 右クリック処理 (firstRightClick等)
- shortcuts/piano.lua: ピアノロールマクロ (modifierHandler等)
- vst/shortcuts.lua: VST固有ショートカット (Kick 2 undo/redo)
- tracking/timer.lua: 時間計測 (coolfunc, timerfunc等)
- lifecycle/appwatch.lua: アプリ監視 (enablemacros, disablemacros等)
- LESmain.luaはスリムなオーケストレーターに

## 2. helpers.luaのシェル依存をLua/Hammerspoon APIに置換
- ShellCopy → io.open/read/write
- ShellCreateDirectory → hs.fs.mkdir (再帰対応)
- ShellOverwriteFile → io.open("w")
- ShellConcatenateFile → io.open("a")
- ShellCreateEmptyFile → io.open("w") + close
- ShellDeleteFile → os.remove / hs.fs.rmdir
- module.luaのls→ioIsFilePresentに置換
- ShellExec/ShellRecursiveCopy/ShellNSOpenは代替なしのため維持

## 3. グローバル変数汚染の修正
- string標準ライブラリを上書きするバグを修正 (menus/plugin.lua)
- filepaths.luaとutil/string.luaのstring引数名をpath/strに変更
- buildPluginMenu内の暗黙グローバルをlocal化
- module.lua内のネスト関数をlocal functionに変更
- proccom.luaのfetchInnerTitleをlocal化
- settings.luaのvalidateValueをlocal化
- buplicate shortcutのループ化 (7/8回の重複削除)
- clear track macroのループ化 (12回のキーストローク重複削除)
- requesttime()の時間計算を簡潔化

https://claude.ai/code/session_017dMeoBU7hkkikuskLtEWa1
- macros.lua: ディスパッチテーブルによるO(1)キー検索、修飾キー1回取得、FabFilter重複コード統合
- proccom.lua: getLiveHsAppObj()に2秒TTLメモ化キャッシュ追加
- timer.lua: 文字列連結キャッシュ、VSTウィンドウタイトル変更検出
- helpers.lua: LuaLS型アノテーション追加
- LuaSkin: C17/C++17コンパイル標準にアップグレード
- Xcode: デバッグビルドをdwarf形式に変更(ビルド速度向上)
- .luacheckrc: LES固有グローバル変数の包括的定義追加
- .luarc.json: LuaLS設定ファイル追加
- tests/test_helpers.lua: bustedテストスイート新規追加
- requirements.txt: Python依存パッケージをアップデート

https://claude.ai/code/session_017dMeoBU7hkkikuskLtEWa1
- Dockerfile.test: Debian bookwormベースのbustedテスト実行環境
- test_helpers.lua → helpers_spec.lua: bustedの_specパターンに合わせてリネーム
- hsモック修正: rawset(_G)でグローバル確実設定、ディレクトリ判定対応
- 全23テスト成功(文字列ユーティリティ、IOユーティリティ、ファイル操作ヘルパー)

https://claude.ai/code/session_017dMeoBU7hkkikuskLtEWa1
- CHANGELOG.md: 全変更箇所の日本語ドキュメント(モジュール分割、パフォーマンス最適化、バグ修正、テスト、ビルド改善)
- CLAUDE.md: Claude Code用プロジェクトコンテキスト(Everything Claude Codeベストプラクティス準拠)
- Dockerfile.test: pnpm + Node.js 22追加、luacheck統合、使い方コメント追加
- README.md: テストセクション追加(Docker実行手順)、変更履歴リンク、プロジェクト構成更新

https://claude.ai/code/session_017dMeoBU7hkkikuskLtEWa1
- menus/plugin.lua: 1200件プラグインのパース高速化
  - string/table関数をローカルキャッシュ、直接インデックス代入
  - hs.inspect()デバッグ出力と12箇所のprint()を除去
- shortcuts/piano.lua: keyhandlereventを事前生成しstart/stopで再利用
  - 毎回のeventtap.new()/破棄によるGC圧力を排除
- lifecycle/appwatch.lua: focusedWindow()の重複呼び出しを1回に削減

https://claude.ai/code/session_017dMeoBU7hkkikuskLtEWa1
- ローカルリリースビルド手順(release.sh / build.sh個別ステップ)
- DMGインストーラー作成手順(create-dmg)
- Apple公証(notarytool)の設定と実行方法
- GitHub Actions自動リリース(vタグプッシュでDMG自動生成)
- CHANGELOGのドキュメントセクションを更新

https://claude.ai/code/session_017dMeoBU7hkkikuskLtEWa1
ソースコード→ビルド→DMG→配布の流れを一本の図で表現し、
デバッグビルド(開発用)とリリースビルド→DMG作成(配布用)の
違いが一目でわかるよう再構成

https://claude.ai/code/session_017dMeoBU7hkkikuskLtEWa1
docs/USER_MANUAL.md:
- 全体フロー、インストール手順、基本操作の状態遷移図
- 全キーボードショートカット一覧(メイン・編集・トラック操作)
- プラグインメニュー操作フロー(menuconfig.iniの書き方含む)
- ピアノロールマクロ、スケール/コードメニュー
- VSTショートカット(FabFilter Pro-Q 3, Kick 2)
- プロジェクト時間トラッキングのシーケンス図
- メニューバー構成図、全設定リファレンス
- 設定ファイルの場所、トラブルシューティング判定フロー
- イースターエッグ一覧

https://claude.ai/code/session_017dMeoBU7hkkikuskLtEWa1
3層UI構造、起動シーケンス、キーストローク処理パイプライン等を
Mermaidフロー図付きで解説する開発者向けドキュメント。

https://claude.ai/code/session_017dMeoBU7hkkikuskLtEWa1
- menus/chooser.lua: hs.chooser による Spotlight 風プラグインインクリメンタル検索
- menus/settingsgui.lua: hs.webview + HTML/CSS の設定パネル(トグルスイッチ・数値入力)
- ui/hud.lua: hs.canvas によるピル型ステータス HUD(緑=アクティブ/橙=一時停止/グレー=非アクティブ)
             + updateMenuBarState() でメニューバーアイコンを状態反映
- menus/bar.lua: 「Search Plugins...」「Settings...」メニュー項目を追加
- lifecycle/appwatch.lua: enablemacros/disablemacros に HUD とメニューバー更新を統合
- shortcuts/macros.lua: Cmd+Shift+1 の一時停止/再開を HUD に統合(hs.alert.show を置換)
- LESmain.lua: 新モジュール 3 件を require に追加

https://claude.ai/code/session_017dMeoBU7hkkikuskLtEWa1
Update PRODUCT_NAME in xcconfig and programName/programBundle
in Lua constants to distinguish this fork from upstream.

https://claude.ai/code/session_01EvnDX9bz2vv1xHA36GxN3J
Rename app references in README, USER_MANUAL, CLAUDE.md,
and GitHub Actions workflows to match the new app name.

https://claude.ai/code/session_01EvnDX9bz2vv1xHA36GxN3J
Bump targetMaxVersion from 11 to 12 and update docs accordingly.

https://claude.ai/code/session_01EvnDX9bz2vv1xHA36GxN3J
New docs/FEATURE_COMPARISON.md covers user-facing features, developer
improvements, build system changes, and documentation additions.
Referenced from README.

https://claude.ai/code/session_01EvnDX9bz2vv1xHA36GxN3J
A background Launch Agent monitors for the Ableton Live process and
opens LES when detected. Users can toggle this via the "launchwithlive"
setting in settings.ini or the settings GUI panel.

- New assets: watch_live_launch.sh, les.watch.live.plist
- reload.lua generates and installs/removes the Launch Agent dynamically
- Settings GUI, USER_MANUAL, and FEATURE_COMPARISON updated

https://claude.ai/code/session_01EvnDX9bz2vv1xHA36GxN3J
Replace ~80 lines of hand-written CSS with Tailwind utility classes.
Only toggle switch pseudo-elements remain as custom CSS (~9 lines).
Custom theme colors configured via tailwind.config for the dark UI.

https://claude.ai/code/session_01EvnDX9bz2vv1xHA36GxN3J
Move all Tailwind utility classes to a static settings-tw.css file
loaded from the app bundle at runtime. No network dependency.

https://claude.ai/code/session_01EvnDX9bz2vv1xHA36GxN3J
- New tracking/pluginstats.lua: records use count, last used, and
  first-use timestamp per plugin in ~/.les/resources/plugin_stats.json
- loadPlugin() now calls pluginStats.recordUse() on every use
- Chooser UI enhanced with:
  - Category filter (based on menuconfig.ini folder structure)
  - Sort by name, frequency, recent use, or add date
  - Stats displayed in subText (use count, last used)
- Updated USER_MANUAL and FEATURE_COMPARISON docs

https://claude.ai/code/session_01EvnDX9bz2vv1xHA36GxN3J
- New vst/scanner.lua: scans AU (system_profiler) and VST3
  (moduleinfo.json) plugins, classifies by metadata + keyword
  heuristics into categories (Compressor, EQ, Reverb, etc.)
- "Scan Plugins..." menu item triggers scan, backs up old
  menuconfig.ini, and generates categorized replacement
- Default menuconfig.ini now ships with Ableton Live built-in
  plugins pre-categorized (Instruments, Effects, MIDI Effects)
- Updated USER_MANUAL and FEATURE_COMPARISON docs

https://claude.ai/code/session_01EvnDX9bz2vv1xHA36GxN3J
Plugin scanner now caches results in plugin_cache.json and only
processes new/removed plugins on subsequent runs. New plugins are
appended to menuconfig.ini preserving user edits. Added "Force
Full Rescan..." menu bar option for manual full rescan.

https://claude.ai/code/session_01EvnDX9bz2vv1xHA36GxN3J
- Plugin Favorites: toggle ★ in the plugin chooser's "お気に入り管理"
  sub-chooser; favorited plugins appear at the top of the main list
- Keyboard Shortcut Cheatsheet (Cmd+Shift+/): floating webview overlay
  listing all LES shortcuts, accessible without leaving Live
- Project Notes (timeline): per-project notes stored as JSON in
  ~/.les/resources/notes/, opened via menu bar "Project Notes..."
  with Cmd+Enter to submit and per-note delete support

https://claude.ai/code/session_01EvnDX9bz2vv1xHA36GxN3J
- tracking/notifications.lua 新規作成
  - エクスポート完了通知: Live ウィンドウタイトルの "Rendering:" を検知し
    完了時に hs.notify で通知(設定: notifyexport)
  - 1時間ごとの作業時間通知: timerfunc() から毎秒チェックし、
    プロジェクトのセッション時間が新たな1時間を超えたら通知(設定: notifyhourly)
  - プロジェクト切り替え時に時間カウンタをリセット
    (既に2時間のプロジェクトに切り替えても即通知しない)
- settings.lua: notifyexport / notifyhourly を追加(デフォルト両方 ON)
- settingsgui.lua: 設定 UI にトグルスイッチを追加
- timer.lua: coolfunc / timerfunc にフックを挿入

https://claude.ai/code/session_01EvnDX9bz2vv1xHA36GxN3J
fork リポジトリには master ブランチが存在しないため、
デフォルトブランチの develop に合わせる。

https://claude.ai/code/session_01EvnDX9bz2vv1xHA36GxN3J
ビルドバッジ・最新リリース・Luaスクリプトのリンクを
bassmicrobe/LESforMacOSCustom に変更。

https://claude.ai/code/session_01EvnDX9bz2vv1xHA36GxN3J
actions/checkout v2→v4, actions/upload-artifact v2→v4,
actions/github-script v3→v7。v2 は 2024/02 に廃止済み。

https://claude.ai/code/session_01EvnDX9bz2vv1xHA36GxN3J
- ドキュメント生成: Hammerspoon 上流の docs ツールチェーンに依存しフォークでは動作しない
- codecov: v1 は廃止済みかつカバレッジ連携は未設定
- webhook 通知: hammerspoon/hammerspoon リポジトリ専用の条件付きステップ

https://claude.ai/code/session_01EvnDX9bz2vv1xHA36GxN3J
ci_testbuild_results, ci_nightly, new_tag, generate_release_notes,
pr_label_enforcer は LES フォークでは使用しない。
残すのは les_build (ビルド), les_release (リリース), ci_testbuild (CI) のみ。

https://claude.ai/code/session_01EvnDX9bz2vv1xHA36GxN3J
Hammerspoon上流のドキュメント生成スクリプト(build_docs.py)への
依存を除去。空のdocs.jsonを生成するno-opスクリプトに置き換え、
リリースビルドのBUILD FAILEDを修正。

https://claude.ai/code/session_01EvnDX9bz2vv1xHA36GxN3J
claude and others added 24 commits March 28, 2026 06:31
create-dmgの依存ライブラリ(node-alias)がディスクイメージタイトルを
27文字以内に制限しているため、「Live Enhancement Suite Custom」(30文字)
を「LES Custom」に短縮。

https://claude.ai/code/session_01EvnDX9bz2vv1xHA36GxN3J
1. AIチャットアシスタント (Cmd+Shift+A)
   - 浮遊ウィンドウで音楽制作に関するQ&A
   - プロジェクト名・セッション時間をコンテキストに自動付与
   - 会話履歴を保持、クリアボタンでリセット

2. プロジェクトメモAI要約
   - プロジェクトメモ画面の「AI要約」ボタンで発動
   - 全メモをAIに送信し、進捗・残タスク・次のアクションを要約
   - 要約結果はメモとしてタイムラインに追加

3. AIプラグイン提案
   - メニューバーから起動、プラグイン使用統計を分析
   - 使用傾向に基づいて5〜8個のプラグインを提案
   - 追加条件(ジャンル・目的)を入力して再提案可能

4. AIプロジェクト名ジェネレーター
   - プロジェクトメモ・プラグイン使用状況からコンテキストを収集
   - 10個の名前候補をChooser UIで表示
   - 選択するとクリップボードにコピー

共通基盤:
- ai/openai.lua: hs.http.asyncPostによる非同期API呼び出し
- 設定: openaikey (APIキー), openaimodel (モデル名)
- 設定GUIにAI設定セクション追加(パスワードマスク付き)

https://claude.ai/code/session_01EvnDX9bz2vv1xHA36GxN3J
USER_MANUAL.md:
- プラグインお気に入り、プロジェクトメモ、macOS通知連携、
  ショートカット一覧オーバーレイのセクション追加
- AI機能4種(チャット、プラグイン提案、名前生成、メモ要約)の
  セットアップ手順・使い方・Mermaidフロー図を追加
- ショートカット一覧にCmd+Shift+/とCmd+Shift+Aを追加
- 設定リファレンスにnotifyexport/notifyhourly/openaikey/openaimodelを追加
- ファイル配置図にnotes/、plugin_stats.json、plugin_cache.jsonを追加
- メニューバー図を最新の構成に更新
- DMGファイル名をLiveEnhancementSuiteCustom.dmgに修正

ARCHITECTURE.md:
- AI統合アーキテクチャのセクション追加(モジュール構成、データフロー、
  通信パターン、設定の各図表)
- モジュール依存関係図にai/、tracking/notifications、ui/等を追加
- メニューバー構成図を更新

README.md:
- 機能一覧にAIアシスタント、プラグイン検索、通知連携等を追加
- プロジェクト構成にai/、ui/ディレクトリを追加
- リリースリンクをforkリポジトリに修正

https://claude.ai/code/session_01EvnDX9bz2vv1xHA36GxN3J
- アラート・ダイアログ・メニュー項目をすべて日本語に翻訳
- programMaxTarget を 26 に更新(macOS 26でのバージョン警告を抑制)
- macOS 26.4 SDKビルドエラーを3件修正:
  - SimplePing.h: sys/socket.h を追加(sa_family_t の可視性問題)
  - libaudiodevice.m: Darwin.C.math → #include <math.h>
  - ExternalReferences.h: NSAccessibilityResultsForSearchPredicateParameterizedAttribute を macOS 26 SDK で条件付きガード
- util/locale.lua を新規追加: 全 UI 文字列の英語・日本語テーブルと L(key) 関数
- settings.lua に language 設定を追加(デフォルト: ja)、_G.uiLanguage にマップ
- メニューバーに言語切り替えアイテムを追加(再読み込み時に反映)
- 全 UI ファイルのハードコード文字列を L("key") 呼び出しに置き換え:
  LESmain.lua / menus/bar.lua / menus/plugin.lua / menus/chooser.lua /
  module.lua / settings.lua / lifecycle/reload.lua / shortcuts/macros.lua /
  shortcuts/rightclick.lua / tracking/timer.lua
- selectLiveMenuItem: panicExit を廃止し、メニュー項目未発見時に警告通知に変更
  (Live のバージョン変更でメニュー名が変わっても LES が落ちなくなる)
- getLiveVersion: CFBundleShortVersionString を優先して参照するよう順序変更
  (大きなビルド番号が CFBundleVersion に入っている場合のバージョン誤検出を修正)
- module.lua:192: foundValidLiveVersion の条件式が逆論理だったバグを修正
  (or/<=/>= → and/>=/<= に修正し、Live 9〜15 を正しく許可)
- constants.lua: targetMaxVersion を 12 → 15 に拡張
- macros.lua: handleDisableLoop の "shfit" タイポを "shift" に修正

https://claude.ai/code/session_01KR2vU47qmudKYnAfs2mXiC
… parser, menu title cache, namespace category variables, pure Lua ShellRecursiveCopy
Write settings.ini and menuconfig.ini under ~/.les via GetDataPath; fix
webview policyCallback for project notes; appwatch Live focus without
userdata ==; right-click uses mouseEventClickState; manual URL and docs.

Co-authored-by: Cursor <cursoragent@cursor.com>
トレイをテンプレート優先で表示し診断アラートを除去。WebView 経由の保存を JSON 経路と既知キー列挙で確実化し、settings.ini 書き込み失敗を検知。reload 時の menubar リーク対策など。

Co-authored-by: Cursor <cursoragent@cursor.com>
設定GUI: 空の数値フィールドで保存するとsetValがpanicExitでアプリ強制終了する
問題と、座標0保存後に起動毎panicで起動不能になる問題を修正(writeFromGuiの
数値サニタイズ追加、int検証を0以上に変更)。プロジェクトメモとAIチャットの
postMessageをJSON文字列化に統一(NSDictionaryブリッジのキー参照失敗で保存が
無言で失敗する問題)。timer.luaのnil/文字列比較クラッシュ、time/version
ファイル破損時のクラッシュも修正。

テスト環境: Debianのluarocksがbustedを Lua 5.1 に入れていたため本番(5.4)と
異なるバージョンでテストされていた問題をDockerfile.testで修正。設定の
保存→再読込ラウンドトリップを検証するsettings_spec.lua(10ケース)を追加。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
監査ワークフロー(8次元の調査×敵対的検証)で特定した28件を修正。luacheck 0 errors、busted 41/0/0。

■ 致命バグ
- ai/chat.lua: buildSystemMessages が _G.clock(hs.timer)で算術しチャット送信が毎回クラッシュ → 実カウンタ _G['timer_'..trackname] を参照
- ai/openai.lua: choices[1].message.content が null/欠落で (nil,nil) 返却や nil index → nil安全ガード、コールバックは常に1回・非空保証
- settingsgui/settings: APIキー欄の sentinel "未設定" 追記で "未設定sk-..." が保存され401 → キーをDOMに出さない/空欄=現状維持/"未設定"自己修復

■ 設定保存の堅牢化(settings.lua / util/io.lua)
- 空値が保存されない (.+ → .-)、; を含む値の切詰め除去(normalizeIni に集約)
- init の重複行追記/バックアップ暴走を修正、不正数値での起動クラッシュを非致命化、tableToFile を原子書込(tmp+rename)

■ セキュリティ
- strQuote を POSIX 単一引用エスケープ化、ShellExec の zsh -c 生補間除去、rm -rf を pure hs.fs 再帰へ
- launchctl/tccutil/ls/open のクォート、astBlockingQuery のエスケープ順修正
- APIキー: settings.ini chmod 600 / dir 700、_G・LES_CONFIG へ複製しない、GUI 平文露出を排除

■ パフォーマンス
- piano.lua: 毎キーストロークのテーブル確保/pairs 走査を除去(flagsChanged のみ)
- timer.lua: trackname=nil 時の毎秒 coolfunc を3秒スロットル
- proccom.lua: デバッグ用 Info.plist 毎回読込を enabledebug 限定に

■ その他の堅牢化
- plugin.lua の nil index 防御、bar.lua の順序非依存ループを 1-indexed 化、rightclick/macros/notifications/projectnotes の nil・数値検証

回帰テスト追加(settings_spec / helpers_spec)。.luacheckrc に新グローバル登録。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- settings.lua: 値内の`;`は先頭のみ除去(複数セミコロン問題解消)、^未設定.+ゲート修正、map()でopenaikeyを_Gから削除
- settingsgui.lua: WKブリッジwatchdog追加(5秒タイムアウト)、reloadLES即時実行、APIキー削除ボタン追加
- helpers.lua: rmrf()でsymlinkAttributes使用(シンボリックリンク追跡防止)
- macros.lua: バージョン文字列のアルファ接尾辞(_1.5b等)を正しく処理
- util/io.lua: tableToFileのchmodをrename前に適用(TOCTOU緩和)
- CLAUDE.md: ShellExecのシェルをzsh→shに修正
- tests/settings_spec.lua: 数値前置テスト強化

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
hs.fs.symlinkAttributes がテスト環境(lfs経由)で未定義のため
rmrf() の再帰削除テストがエラーになっていた問題を修正。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- loadPlugin(): Ableton フォーカス復帰を追加(プラグイン選択が効かないバグ修正)
- reloadLES(): buildMenuBar/rebuildRcMenu を pcall でラップ(設定保存でエラーが飲み込まれるバグ修正)
- settingsgui: reloadLES 失敗時の状態復元を追加(設定が保存されないバグ修正)
- bar.lua: TextEdit 起動 → openMenuConfigGUI() に切り替え
- openMenuConfigGUI() で WebKit ベースのテキストエディタを起動
- 保存時に buildPluginMenu()/rebuildRcMenu() を自動実行
- LESmain.lua に require("menus.menuconfiggui") を追加
- bar.lua の TextEdit 起動は前コミットで置き換え済み
activate() はmacOS上で非同期のため、直後にkeystrokeを送ると
フォーカスが切り替わる前に別のアプリに入力が送られていた。

修正:
- Cmd修飾子状態をタイマー前に同期的に取得(遅延後はユーザーが離している可能性)
- activate()後、0.15秒のタイマーでkeystroke送信を遅延
- Ableton Live が未検出の場合は即時送信(従来動作を維持)
- settingsgui: 保存成功トーストに保存項目数を表示

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
bassmicrobe added a commit to bassmicrobe/LESforMacOSCustom that referenced this pull request Jun 24, 2026
機能バグ:
- LiveEnhancementSuite#48 appwatch/timer: disablemacros() が VST 検出キャッシュ(vstWindowState)を
  リセットせず、同じ VST ウィンドウに再フォーカスしても undo/redo が復活しない
  問題を修正(resetVstWindowState を追加して呼び出し)
- LiveEnhancementSuite#55 hud/plugin: 一時停止中にリロードするとメニューバーが通常表示に戻る問題を
  修正(lesMenubarState を記録し buildMenuBar で再適用)
- LiveEnhancementSuite#47 reload: デバッグ時の cheats() が reload のたびに dingodango eventtap を
  リークしていたのを修正(再生成前に stop)

スキャン/チューザー:
- LiveEnhancementSuite#44 scanner: system_profiler の AU パースでセクション見出しをプラグイン名として
  誤取得する問題を緩和(Type 行が近傍に無い候補名を破棄)
- LiveEnhancementSuite#45 scanner: AU が固有カテゴリを持つ場合に AU/VST3 デュアル表記にならない問題を修正
- LiveEnhancementSuite#37 pluginstats: load() を短 TTL でメモ化(チューザー1回で 4 回読込→1 回に)
- LiveEnhancementSuite#38 chooser: loadPlugin 側で起動・前面化を扱うため、チューザーの冗長な
  事前アクティベート(約150ms)を削除

堅牢性:
- Hammerspoon#62 helpers: ShellRecursiveCopy がシンボリックリンクを辿って無限ループしうる問題を
  修正(symlinkAttributes で検出しスキップ)
- LiveEnhancementSuite#29 menuconfiggui: 保存応答のウォッチドッグと失敗トーストの自動非表示を追加
- Hammerspoon#77 sync.sh: アプリバンドル検出を堅牢化(候補を検証して最初に有効なものを採用)

意図的に変更しない(理由付き):
- LiveEnhancementSuite#27 (.ini フォーマット互換を壊すため) / LiveEnhancementSuite#35 (小規模ファイルでは無視できる・改変リスク大)
  / LiveEnhancementSuite#36 (reloadLES がカテゴリを先にクリアするためキャッシュ不可) / LiveEnhancementSuite#53 (キー返却は
  i18n フォールバックとして正しくクラッシュしない) / LiveEnhancementSuite#39 (お気に入り上部固定は意図通り)

busted 43件全パス。最終確認は実機で。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants