{
  "permissions": {
    "allow": [
      "Bash(cargo check:*)",
      "Bash(cargo test:*)",
      "Bash(rg:*)",
      "Bash(bun run:*)",
      "Bash(rm:*)",
      "Bash(for file in *.rs)",
      "Bash(do echo -n \"$file: \")",
      "Bash(done)",
      "Bash(cargo clippy:*)",
      "Bash(git checkout:*)",
      "Bash(grep:*)",
      "Bash(bun add:*)",
      "Bash(cargo:*)",
      "Bash(find:*)",
      "Bash(mkdir:*)",
      "Bash(mv:*)",
      "Bash(awk:*)",
      "Bash(pkill:*)",
      "Bash(ls:*)",
      "Bash(npx tsc:*)",
      "Bash(cp:*)",
      "Bash(sed:*)",
      "Bash(jq:*)",
      "Bash(bun test:*)",
      "Bash(timeout:*)",
      "Bash(git add:*)",
      "Bash(npx vitest run:*)",
      "Bash(true)",
      "Bash(touch:*)",
      "Bash(bun tsc:*)",
      "Bash(cat:*)",
      "Bash(chmod:*)",
      "Bash(NODE_OPTIONS=\"--max-old-space-size=8192\" bun run test src/features/media/__tests__/components/media-processing-progress.test.tsx)",
      "Bash(npx playwright:*)",
      "Bash(node:*)",
      "WebFetch(domain:github.com)",
      "Bash(npm run test:e2e:*)",
      "mcp__ide__getDiagnostics",
      "WebFetch(domain:crates.io)",
      "Bash(sysctl:*)",
      "Bash(vm_stat)",
      "Bash(export CARGO_BUILD_JOBS=1)",
      "Bash(rustup:*)",
      "Bash(rustc:*)",
      "Bash(RUST_BACKTRACE=1 cargo test --lib -- --nocapture)",
      "Bash(CARGO_PROFILE_DEV_OPT_LEVEL=0 cargo test --jobs 1)",
      "Bash(git rm:*)",
      "WebFetch(domain:modelcontextprotocol.io)",
      "WebFetch(domain:docs.anthropic.com)",
      "Bash(claude mcp add github \"npx\" \"-y\" \"@modelcontextprotocol/server-github\")",
      "Bash(claude mcp add github:*)",
      "Bash(claude mcp:*)",
      "mcp__github__search_repositories",
      "mcp__github__get_file_contents",
      "Bash(git commit:*)",
      "Bash(git restore:*)",
      "mcp__sequential-thinking__sequentialthinking",
      "Bash(brew list:*)",
      "Bash(brew info:*)",
      "Bash(echo $ORT_DYLIB_PATH)",
      "Bash(brew install:*)",
      "Bash(pkg-config:*)",
      "Bash(export ORT_DYLIB_PATH=/opt/homebrew/lib/libonnxruntime.dylib)",
      "Bash(python3:*)",
      "Bash(for file in *.json)",
      "Bash(do echo \"=== $file ===\")",
      "mcp__github__create_issue",
      "Bash(gh issue create:*)",
      "Bash(ORT_DYLIB_PATH=/opt/homebrew/lib/libonnxruntime.dylib bun run tauri dev)",
      "Bash(ORT_DYLIB_PATH=/opt/homebrew/lib/libonnxruntime.dylib)",
      "Bash(Search for useResources export)",
      "Bash(# Get all English keys\njq -r '.dialogs.keyboardShortcuts.shortcuts | keys[]' en.json > /tmp/en_keys.txt\n\n# Get all Portuguese keys\njq -r '.dialogs.keyboardShortcuts.shortcuts | keys[]' pt.json 2>/dev/null > /tmp/pt_keys.txt\n\n# Find missing keys\ncomm -23 <(sort /tmp/en_keys.txt) <(sort /tmp/pt_keys.txt) > /tmp/missing_keys.txt\n\n# Count missing keys\necho \"Missing keys count:\"\nwc -l < /tmp/missing_keys.txt\n\necho -e \"\\nFirst 20 missing keys:\"\nhead -20 /tmp/missing_keys.txt)",
      "Bash(# Create a JSON object with missing keys and their English values\necho \"{\"\nfirst=true\nwhile IFS= read -r key; do\n    if [ \"$first\" = true ]; then\n        first=false\n    else\n        echo \",\"\n    fi\n    # Get the English value for this key\n    value=$(jq -r \".dialogs.keyboardShortcuts.shortcuts[\\\"$key\\\"]\" en.json)\n    printf '  \"%s\": {\\n    \"en\": \"%s\"\\n  }' \"$key\" \"$value\"\ndone < /tmp/missing_keys.txt\necho -e \"\\n}\")",
      "Bash(# Verify the JSON file is valid and count the entries\njq 'length' /Users/aleksandrkireev/Apps/timeline-studio/missing_keyboard_shortcuts_pt.json)",
      "Bash(comm:*)",
      "Bash(# Extract all keys from English file\njq -r 'paths(scalars) as $p | $p | join(\".\")' en.json | sort > /tmp/en_keys.txt\n\n# Check each translation file\nfor lang in de es fr pt ru; do\n    echo \"=== $lang.json ===\"\n    \n    # Extract keys from current language\n    jq -r 'paths(scalars) as $p | $p | join(\".\")' \"$lang.json\" | sort > /tmp/${lang}_keys.txt\n    \n    # Find missing keys (in English but not in translation)\n    missing_count=$(comm -23 /tmp/en_keys.txt /tmp/${lang}_keys.txt | wc -l)\n    echo \"Missing keys: $missing_count\"\n    \n    # Find extra keys (in translation but not in English)\n    extra_count=$(comm -13 /tmp/en_keys.txt /tmp/${lang}_keys.txt | wc -l)\n    echo \"Extra keys: $extra_count\"\n    \n    # Calculate completeness percentage\n    en_total=$(wc -l < /tmp/en_keys.txt)\n    lang_total=$(wc -l < /tmp/${lang}_keys.txt)\n    completeness=$(awk \"BEGIN {printf \\\"%.1f\\\", ($lang_total - $extra_count) / $en_total * 100}\")\n    echo \"Completeness: $completeness%\"\n    echo\ndone)",
      "Bash(# Check missing keys for French (10 missing)\necho \"=== Missing keys in French ===\"\ncomm -23 /tmp/en_keys.txt /tmp/fr_keys.txt | head -20\n\necho -e \"\\n=== Extra keys in German (first 20 of 134) ===\"\ncomm -13 /tmp/en_keys.txt /tmp/de_keys.txt | head -20\n\necho -e \"\\n=== Extra keys in Spanish (7 total) ===\"\ncomm -13 /tmp/en_keys.txt /tmp/es_keys.txt\n\necho -e \"\\n=== Extra keys in French (first 20 of 69) ===\"\ncomm -13 /tmp/en_keys.txt /tmp/fr_keys.txt | head -20)",
      "Bash(for key in requestedResolution currentResolution errorGettingCapabilities errorRequestingStream errorRequestingStreamFallback videoElementError cameraInitError errorGettingDevices)",
      "Bash(do echo -n \"$key: \")",
      "Bash(echo)",
      "Bash(for msg in \"requestingPermissions\" \"permissionError\" \"permissionDenied\" \"browserNotSupported\" \"mediaDevicesNotSupported\" \"mediaDevicesError\")",
      "Bash(do echo -n \"EN $msg: \")",
      "Bash(echo:*)",
      "WebFetch(domain:v2.tauri.app)",
      "Bash(__NEW_LINE__ echo \"=== BROWSER SECTION ===\")",
      "Bash(__NEW_LINE__ echo -e \"\\n=== TOTAL KEYS COUNT (all levels) ===\")",
      "Bash(bunx tsc:*)",
      "Bash(# Перемещение файлов тестирования\nmv docs-ru/testing/TESTING.md docs-ru/05-development/testing.md\n\n# Перемещение файлов развертывания\nmv docs-ru/deployment/DEPLOYMENT.md docs-ru/06-deployment/build.md\n\n# Перемещение руководств\nmv docs-ru/development-guides/user-guide-media-persistence.md docs-ru/07-guides/media-persistence.md\nmv docs-ru/development-guides/APP-DIRECTORIES.md docs-ru/07-guides/app-directories.md\n\n# Перемещение планов в roadmap\nmv docs-ru/implementation-plans/*.md docs-ru/08-roadmap/in-progress/\n\n# Перемещение ROADMAP\nmv docs-ru/ROADMAP.md docs-ru/08-roadmap/README.md)",
      "Bash(# Перемещение оставшихся файлов\nmv docs-ru/api/api-media-persistence.md docs-ru/04-api-reference/media-api.md\nmv docs-ru/architecture/type-mapping-frontend-backend.md docs-ru/02-architecture/type-mapping.md\nmv docs-ru/export/EXPORT-FEATURES.md docs-ru/03-features/core/export-features.md\nmv docs-ru/testing/test-implementation-summary.md docs-ru/05-development/test-summary.md\nmv docs-ru/testing/testing-with-real-media.md docs-ru/05-development/testing-real-media.md\n\n# Удаление пустых папок\nrmdir docs-ru/{api,architecture,export,testing} 2>/dev/null || true)",
      "Bash(tree:*)",
      "Bash(npm run test:*)",
      "Bash(# Найдем все компоненты (исключая тесты)\necho \"=== COMPONENTS WITHOUT TESTS ===\"\nfind src/features -name \"*.tsx\" -path \"*/components/*\" ! -path \"*/__tests__/*\" ! -path \"*/__mocks__/*\" | while read file; do\n  component_name=$(basename \"$file\")\n  feature=$(echo \"$file\" | sed 's|src/features/||' | cut -d'/' -f1)\n  # Проверяем, есть ли тест для этого компонента\n  test_file=$(find \"src/features/$feature\" -name \"${component_name%.tsx}.test.tsx\" -o -name \"${component_name}\" | grep -E \"test\\.tsx?$\" | head -1)\n  if [ -z \"$test_file\" ]; then\n    echo \"$file\"\n  fi\ndone | sort)",
      "Bash(# Найдем все хуки (исключая тесты)\necho \"=== HOOKS WITHOUT TESTS ===\"\nfind src/features -name \"*.ts\" -path \"*/hooks/*\" ! -path \"*/__tests__/*\" ! -path \"*/__mocks__/*\" ! -name \"index.ts\" | while read file; do\n  hook_name=$(basename \"$file\")\n  feature=$(echo \"$file\" | sed 's|src/features/||' | cut -d'/' -f1)\n  # Проверяем, есть ли тест для этого хука\n  test_file=$(find \"src/features/$feature\" -name \"${hook_name%.ts}.test.ts\" -o -name \"${hook_name%.ts}.test.tsx\" | grep -E \"test\\.tsx?$\" | head -1)\n  if [ -z \"$test_file\" ]; then\n    echo \"$file\"\n  fi\ndone | sort)",
      "WebFetch(domain:developer.vimeo.com)",
      "Bash(npm run build:*)",
      "Bash(gh auth:*)",
      "Bash(open:*)",
      "Bash(CI=true cargo test --lib)",
      "Bash(export CI=true)",
      "Bash(export GITHUB_ACTIONS=true)",
      "Bash(git update-index:*)",
      "Bash(npm run lint)",
      "Bash(bun remove:*)",
      "Bash(if [ -n \"$CODECOV_TOKEN\" ])",
      "Bash(then echo \"Token is set\")",
      "Bash(else echo \"Token is not set\")",
      "Bash(fi)",
      "Bash(curl:*)",
      "Bash(npm test)",
      "Bash(npx eslint:*)",
      "Bash(npx biome check:*)",
      "Bash(npx biome:*)",
      "Bash(for i in \"modern-intro-1\" \"minimal-outro-1\" \"corporate-lower-third-1\" \"bold-title-1\" \"classic-overlay-1\")",
      "Bash(do convert -size 320x180 gradient:black-teal -gravity center -pointsize 20 -fill white -annotate +0+0 \"$i\" \"public/images/style-templates/$i.jpg\")",
      "Bash(gtimeout:*)",
      "Bash(bunx:*)",
      "Bash(export PATH=\"$HOME/.cargo/bin:$PATH\")",
      "Bash(for:*)",
      "Bash(NODE_OPTIONS=\"--max-old-space-size=8192\" bun run vitest run --coverage.enabled --coverage.reporter=text src/features/effects/hooks/use-effects-import.ts src/features/effects/hooks/use-effects.ts)",
      "Bash(NODE_OPTIONS=\"--max-old-space-size=8192\" bun run vitest run --coverage.enabled --coverage.reporter=text --coverage.include=\"**/effects/hooks/**\" src/features/effects/__tests__/hooks/)",
      "Bash(NODE_OPTIONS=\"--max-old-space-size=8192\" bun run test src/features/effects/__tests__/hooks/use-effects-import.test.ts --run)",
      "Bash(NODE_OPTIONS=\"--max-old-space-size=8192\" bun run test src/features/effects/__tests__/hooks/use-effects.test.ts --run)",
      "Bash(NODE_OPTIONS=\"--max-old-space-size=8192\" bun run test src/features/effects/__tests__/hooks/ --run)",
      "Bash(/dev/null)",
      "Bash(xxd:*)",
      "Bash(do)",
      "Bash(./codecov validate)",
      "Bash(./codecov:*)",
      "WebFetch(domain:docs.codecov.com)",
      "Bash(npm test:*)",
      "Bash(npm run lint:*)",
      "Bash(bun install:*)",
      "Bash(npm install)",
      "Bash(/Users/aleksandrkireev/.cargo/bin/cargo-llvm-cov --lcov --output-path coverage.info)",
      "Bash(RUST_BACKTRACE=1 cargo test test_invalid_timestamp_error -- --nocapture)",
      "Bash(./test_fixes)",
      "Bash(./test_fixes_simple)",
      "Bash(git push:*)",
      "Bash(git push:*)",
      "Bash(NODE_OPTIONS=\"--max-old-space-size=512\" bun run test src/features/browser/__tests__/adapters/use-effects-adapter.test.tsx)",
      "Bash(NODE_OPTIONS=\"--max-old-space-size=1024\" bun run test src/features/browser/__tests__/adapters/use-effects-adapter-fixed.test.tsx)",
      "Bash(NODE_OPTIONS=\"--max-old-space-size=1024\" bun run test src/features/browser/__tests__/adapters/use-effects-adapter.test.tsx)",
      "Bash(NODE_OPTIONS=\"--max-old-space-size=1024\" bun run test src/features/browser/__tests__/adapters/use-filters-adapter.test.tsx)",
      "Bash(NODE_OPTIONS=\"--max-old-space-size=1024\" bun run test src/features/browser/__tests__/adapters/use-style-templates-adapter.test.tsx)",
      "Bash(NODE_OPTIONS=\"--max-old-space-size=8192\" bun run build)",
      "Bash(ulimit:*)",
      "Bash(NODE_OPTIONS=\"--max-old-space-size=8192\" bun run tauri build)",
      "Bash(NODE_OPTIONS=\"--max-old-space-size=8192\" npm run build)",
      "Bash(NODE_OPTIONS=\"--max-old-space-size=12288\" bun run build)",
      "Bash(NODE_OPTIONS=\"--max-old-space-size=4096\" bun run build 2 >& 1)",
      "Bash(RUST_LOG=info cargo run --example telemetry_demo)",
      "Bash(do if [ -f \"$file\" ])",
      "Bash(then echo -n \"$file: \")",
      "Bash(git reset:*)",
      "Bash(do echo \"Run $i:\")",
      "Bash(break)",
      "Bash(RUST_BACKTRACE=1 cargo test core::plugins::integration_tests_real_services::tests::test_file_operations_integration)",
      "Bash(RUST_LOG=info cargo test core::plugins::integration_tests_real_services::tests::test_file_operations_integration -- --nocapture)",
      "mcp__playwright__browser_navigate",
      "mcp__playwright__browser_install",
      "Bash(do echo \"=== Checking $file ===\")",
      "Bash(RUST_LOG=debug cargo test --lib 2 >& 1)",
      "Bash(RUST_BACKTRACE=1 cargo test video_compiler::core::pipeline::pipeline_tests::preprocessing_stage_tests::test_preprocessing_stage_process -- --nocapture 2>&1)",
      "Bash(do echo \"Checking $file...\")",
      "Bash(NODE_ENV=test bun run test src/features/subtitles/__tests__/utils/subtitle-parsers.test.ts --reporter=verbose)",
      "Bash(NODE_ENV=test bun run test src/features/subtitles/__tests__/utils/subtitle-parsers.test.ts --run)",
      "Bash(./target/debug/timeline-studio)",
      "Bash(do if grep -q '\"\"apiKeyPlaceholder\"\"' \"$file\")",
      "Bash(then echo \"$file has new structure\")",
      "Bash(do echo \"- $file.json: Added ''performance'' tab and all performance-related translations\")",
      "Bash(kill:*)",
      "Bash(RUST_BACKTRACE=1 cargo test --lib video_compiler::ffmpeg_builder::filters::tests::test_clip_with_template -- --nocapture)",
      "Bash(RUST_BACKTRACE=1 cargo test --lib test_clip_with_template -- --nocapture)",
      "Bash(# Find modules without test files or inline tests\necho \"=== MODULES WITHOUT TESTS ===\"\nfor file in $(find src-tauri/src -name \"*.rs\" -type f | grep -v -E \"(test|tests|target|examples|benchmark)\" | sort); do\n    # Check if file has #[cfg(test)] block\n    if ! grep -q \"#\\[cfg(test)\\]\" \"$file\" 2>/dev/null; then\n        # Check if there's a corresponding test file\n        dir=$(dirname \"$file\")\n        base=$(basename \"$file\" .rs)\n        if [[ ! -f \"${dir}/${base}_test.rs\" ]] && [[ ! -f \"${dir}/${base}_tests.rs\" ]] && [[ ! -f \"${dir}/tests.rs\" ]] && [[ \"$base\" != \"mod\" ]]; then\n            echo \"$file\"\n        fi\n    fi\ndone)",
      "Bash(eslint:*)",
      "Bash(gh workflow view:*)",
      "Bash(gh run list:*)",
      "Bash(source:*)",
      "Bash(export:*)",
      "Bash(export FFMPEG_DIR=/opt/homebrew/opt/ffmpeg)",
      "Bash(export FFMPEG_INCLUDE_DIR=/opt/homebrew/opt/ffmpeg/include)",
      "Bash(__NEW_LINE__ cd src-tauri)",
      "Bash(# Установим все необходимые переменные окружения\nexport PKG_CONFIG_PATH=/opt/homebrew/opt/ffmpeg/lib/pkgconfig:$PKG_CONFIG_PATH\nexport FFMPEG_DIR=/opt/homebrew/opt/ffmpeg\nexport FFMPEG_INCLUDE_DIR=/opt/homebrew/opt/ffmpeg/include\nexport FFMPEG_LIB_DIR=/opt/homebrew/opt/ffmpeg/lib\nexport BINDGEN_EXTRA_CLANG_ARGS=\"-I/opt/homebrew/opt/ffmpeg/include\"\nexport DYLD_FALLBACK_LIBRARY_PATH=/opt/homebrew/opt/ffmpeg/lib:$DYLD_FALLBACK_LIBRARY_PATH\n\n# Дополнительные переменные для каждой библиотеки\nexport FFMPEG_AVCODEC_INCLUDE_DIR=/opt/homebrew/opt/ffmpeg/include\nexport FFMPEG_AVFORMAT_INCLUDE_DIR=/opt/homebrew/opt/ffmpeg/include\nexport FFMPEG_AVUTIL_INCLUDE_DIR=/opt/homebrew/opt/ffmpeg/include\nexport FFMPEG_AVDEVICE_INCLUDE_DIR=/opt/homebrew/opt/ffmpeg/include\nexport FFMPEG_AVFILTER_INCLUDE_DIR=/opt/homebrew/opt/ffmpeg/include\nexport FFMPEG_SWSCALE_INCLUDE_DIR=/opt/homebrew/opt/ffmpeg/include\nexport FFMPEG_SWRESAMPLE_INCLUDE_DIR=/opt/homebrew/opt/ffmpeg/include\n\n# Проверим, что файлы существуют\nls -la /opt/homebrew/opt/ffmpeg/include/libavutil/avutil.h\n\n# Попробуем запустить сборку снова\nbun run tauri dev)",
      "Bash(do echo -n \"$lang: \")",
      "WebFetch(domain:docs.rs)",
      "Bash(env)",
      "Bash(CARGO_INCREMENTAL=0 RUSTFLAGS=\"-Cinstrument-coverage\" cargo test)",
      "Bash(ffmpeg:*)",
      "Bash(ffprobe:*)",
      "Bash(PKG_CONFIG_PATH=/opt/homebrew/opt/ffmpeg/lib/pkgconfig:/opt/homebrew/lib/pkgconfig FFMPEG_DIR=/opt/homebrew/opt/ffmpeg cargo test --lib video_compiler::core::pipeline --nocapture)",
      "Bash(PKG_CONFIG_PATH=/opt/homebrew/opt/ffmpeg/lib/pkgconfig:/opt/homebrew/lib/pkgconfig FFMPEG_DIR=/opt/homebrew/opt/ffmpeg cargo test test_execute_complete_pipeline --nocapture)",
      "Bash(PKG_CONFIG_PATH=/opt/homebrew/opt/ffmpeg/lib/pkgconfig:/opt/homebrew/lib/pkgconfig FFMPEG_DIR=/opt/homebrew/opt/ffmpeg cargo test test_execute_complete_pipeline -- --nocapture)",
      "Bash(PKG_CONFIG_PATH=/opt/homebrew/opt/ffmpeg/lib/pkgconfig:/opt/homebrew/lib/pkgconfig FFMPEG_DIR=/opt/homebrew/opt/ffmpeg FFMPEG_INCLUDE_DIR=/opt/homebrew/opt/ffmpeg/include FFMPEG_LIB_DIR=/opt/homebrew/opt/ffmpeg/lib cargo test --no-run)",
      "Bash(PKG_CONFIG_PATH=/opt/homebrew/opt/ffmpeg/lib/pkgconfig:/opt/homebrew/lib/pkgconfig FFMPEG_DIR=/opt/homebrew/opt/ffmpeg FFMPEG_INCLUDE_DIR=/opt/homebrew/opt/ffmpeg/include FFMPEG_LIB_DIR=/opt/homebrew/opt/ffmpeg/lib cargo check --tests)",
      "Bash(PKG_CONFIG_PATH=/opt/homebrew/opt/ffmpeg/lib/pkgconfig:/opt/homebrew/lib/pkgconfig FFMPEG_DIR=/opt/homebrew/opt/ffmpeg FFMPEG_INCLUDE_DIR=/opt/homebrew/opt/ffmpeg/include FFMPEG_LIB_DIR=/opt/homebrew/opt/ffmpeg/lib cargo check --tests --quiet)",
      "Bash(bash:*)",
      "Bash(env PKG_CONFIG_PATH=/opt/homebrew/opt/ffmpeg/lib/pkgconfig:/opt/homebrew/lib/pkgconfig FFMPEG_DIR=/opt/homebrew/opt/ffmpeg FFMPEG_INCLUDE_DIR=/opt/homebrew/opt/ffmpeg/include FFMPEG_LIB_DIR=/opt/homebrew/opt/ffmpeg/lib bun run test:coverage:rust)",
      "Bash(PKG_CONFIG_PATH=/opt/homebrew/opt/ffmpeg/lib/pkgconfig:/opt/homebrew/lib/pkgconfig FFMPEG_DIR=/opt/homebrew/opt/ffmpeg FFMPEG_INCLUDE_DIR=/opt/homebrew/opt/ffmpeg/include FFMPEG_LIB_DIR=/opt/homebrew/opt/ffmpeg/lib cargo test --lib)",
      "Bash(env PKG_CONFIG_PATH=/opt/homebrew/opt/ffmpeg/lib/pkgconfig:/opt/homebrew/lib/pkgconfig FFMPEG_DIR=/opt/homebrew/opt/ffmpeg FFMPEG_INCLUDE_DIR=/opt/homebrew/opt/ffmpeg/include FFMPEG_LIB_DIR=/opt/homebrew/opt/ffmpeg/lib cargo test --lib)",
      "Bash(env PKG_CONFIG_PATH=/opt/homebrew/opt/ffmpeg/lib/pkgconfig:/opt/homebrew/lib/pkgconfig FFMPEG_DIR=/opt/homebrew/opt/ffmpeg FFMPEG_INCLUDE_DIR=/opt/homebrew/opt/ffmpeg/include FFMPEG_LIB_DIR=/opt/homebrew/opt/ffmpeg/lib bun run test:coverage:rust:workaround)",
      "Bash(npm run format:rust:check:*)",
      "Bash(npm run update-version:*)",
      "Bash(env PKG_CONFIG_PATH=/opt/homebrew/opt/ffmpeg/lib/pkgconfig:/opt/homebrew/lib/pkgconfig FFMPEG_DIR=/opt/homebrew/opt/ffmpeg FFMPEG_INCLUDE_DIR=/opt/homebrew/opt/ffmpeg/include FFMPEG_LIB_DIR=/opt/homebrew/opt/ffmpeg/lib bun run tauri dev)",
      "Bash(/Users/aleksandrkireev/Apps/timeline-studio/scripts/rename-dirs-lowercase.sh:*)",
      "Bash(/Users/aleksandrkireev/Apps/timeline-studio/scripts/rename-files-lowercase.sh:*)",
      "Bash(/Users/aleksandrkireev/Apps/timeline-studio/scripts/update-doc-links.sh:*)",
      "Bash(env PKG_CONFIG_PATH=/opt/homebrew/opt/ffmpeg/lib/pkgconfig:/opt/homebrew/lib/pkgconfig FFMPEG_DIR=/opt/homebrew/opt/ffmpeg FFMPEG_INCLUDE_DIR=/opt/homebrew/opt/ffmpeg/include FFMPEG_LIB_DIR=/opt/homebrew/opt/ffmpeg/lib bun run fix:all)",
      "Bash(RUST_BACKTRACE=1 cargo test test_plugin_manager_lifecycle)",
      "Bash(./scripts/cleanup-test-binaries.sh:*)",
      "Bash(RUST_BACKTRACE=1 cargo test --lib montage_planner::services::tests::integration_tests::integration_tests::test_activity_trend_analysis -- --nocapture)",
      "Bash(od:*)",
      "Bash(scripts/rust-coverage-macos-v2.sh:*)",
      "Bash(vitest run:*)",
      "Bash(# Перемещаем тесты компонентов\nmv src/features/timeline/components/__tests__/*.test.* src/features/timeline/__tests__/components/ 2>/dev/null || true\n\n# Перемещаем тесты clip компонентов\nmv src/features/timeline/components/clip/__tests__/*.test.* src/features/timeline/__tests__/components/clip/ 2>/dev/null || true\n\n# Перемещаем тесты edit-tools\nmv src/features/timeline/components/edit-tools/__tests__/*.test.* src/features/timeline/__tests__/components/edit-tools/ 2>/dev/null || true\n\n# Перемещаем тесты track компонентов\nmv src/features/timeline/components/track/__tests__/*.test.* src/features/timeline/__tests__/components/track/ 2>/dev/null || true\n\n# Перемещаем тесты хуков\nmv src/features/timeline/hooks/__tests__/*.test.* src/features/timeline/__tests__/hooks/ 2>/dev/null || true\n\n# Перемещаем тесты сервисов\nmv src/features/timeline/services/__tests__/*.test.* src/features/timeline/__tests__/services/ 2>/dev/null || true\n\n# Перемещаем тесты утилит\nmv src/features/timeline/utils/__tests__/*.test.* src/features/timeline/__tests__/utils/ 2>/dev/null || true\n\necho \"\"Тесты перемещены\"\")",
      "Bash(# Удаляем пустые папки __tests__\nfind src/features/timeline -type d -name \"\"__tests__\"\" -empty -delete 2>/dev/null || true\n\n# Проверяем, что осталось\nfind src/features/timeline -type d -name \"\"__tests__\"\" | grep -v \"\"^src/features/timeline/__tests__$\"\" || echo \"\"Все локальные папки __tests__ удалены\"\")",
      "Bash(# Удаляем дубликаты в корне папки components\nrm -f src/features/timeline/__tests__/components/audio-clip.test.tsx 2>/dev/null || true\nrm -f src/features/timeline/__tests__/components/video-clip.test.tsx 2>/dev/null || true\nrm -f src/features/timeline/__tests__/components/track-controls-panel.test.tsx 2>/dev/null || true\nrm -f src/features/timeline/__tests__/components/track-insertion-zone.test.tsx 2>/dev/null || true\n\n# Проверяем результат\necho \"\"Дубликаты удалены, финальная структура:\"\")",
      "Bash(bun eslint:*)",
      "Bash(bun eslint:*)",
      "WebFetch(domain:docs.x.ai)",
      "mcp__context7__resolve-library-id",
      "mcp__context7__get-library-docs",
      "Bash(expr:*)",
      "Bash(NODE_OPTIONS=\"--max-old-space-size=2048\" bun run test src/features/browser/__tests__/adapters/use-effects-adapter.test.tsx)",
      "Bash(NODE_OPTIONS='--max-old-space-size=8192' bun run vitest run --coverage --reporter=verbose)",
      "Bash(RUSTFLAGS=\"-C instrument-coverage\" cargo build)",
      "Bash(./scripts/rust-coverage-macos-v2.sh:*)",
      "mcp__ide__executeCode",
      "Bash(realpath:*)",
      "Bash(bun list:*)",
      "Bash(./timeline-studio)",
      "mcp__github__search_code",
      "Bash(git grep:*)",
      "WebFetch(domain:kiro.dev)",
      "Bash(NODE_ENV=test npx vitest run src/features/fairlight-audio --no-coverage --reporter=verbose)",
      "Bash(npm ci:*)",
      "Bash(git commit -m \"$(cat <<''EOF''\nFix all failing tests and ESLint errors\n\n- Add missing setApiKey function to useTimelineAI hook and service\n- Convert static class exports to function exports to fix no-extraneous-class errors:\n  - ProjectFileService \n  - MediaRestorationService\n  - Export services (YouTube, TikTok, Vimeo, etc.)\n  - Export utilities (time estimator, smart optimizer)\n  - ResourceManager\n- Fix no-base-to-string errors in export-data.ts with proper type checking\n- Add missing nextEventId property to MidiSequencer\n- Update all test imports to use new function-based exports\n- Add Tauri mocks where needed\n\nAll tests now pass (8333 tests passed, 63 skipped)\nAll ESLint errors resolved\n\n🤖 Generated with [Claude Code](https://claude.ai/code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>\nEOF\n)\")",
      "Bash(grep -n \"MediaRestorationService\\.\" /Users/aleksandrkireev/Apps/timeline-studio/src/features/app-state/components/missing-files-modal.tsx)",
      "Bash(grep -n \"MediaRestorationService\\.\" /Users/aleksandrkireev/Apps/timeline-studio/src/features/media/hooks/use-media-restoration.ts)",
      "Bash(grep -n \"ProjectFileService\\.\" /Users/aleksandrkireev/Apps/timeline-studio/src/features/export/hooks/use-render-queue.ts)",
      "Bash(grep -n \"^export\" /Users/aleksandrkireev/Apps/timeline-studio/src/features/export/services/social-validation-service.ts)",
      "Bash(grep -n \"^export\" /Users/aleksandrkireev/Apps/timeline-studio/src/features/export/utils/export-time-estimator.ts)",
      "Bash(grep -n \"^export\" /Users/aleksandrkireev/Apps/timeline-studio/src/features/export/utils/smart-export-optimizer.ts)",
      "Bash(grep -n \"SocialValidationService\\.\" /Users/aleksandrkireev/Apps/timeline-studio/src/features/export/hooks/use-social-export.ts)",
      "Bash(gh pr create:*)",
      "Bash(do echo \"=== $lang.json ===\")",
      "Bash(python:*)",
      "Bash(./check-keys.sh)",
      "mcp__serena__search_for_pattern",
      "mcp__serena__find_symbol",
      "mcp__serena__get_symbols_overview",
      "mcp__serena__replace_regex",
      "Bash(npm run check:imports:*)",
      "Bash(src/features/timeline/__tests__/services/ai-marker-service.test.ts )",
      "Bash(src/features/timeline/__tests__/hooks/use-timeline-ai-analysis.test.tsx )",
      "Bash(src/features/fairlight-audio/services/midi/__tests__/midi-sequencer.test.ts )",
      "Bash(src/features/timeline/__tests__/hooks/use-timeline.test.tsx )",
      "Bash(src/features/top-bar/__tests__/components/top-bar-interactions.test.tsx)",
      "Bash(bun exec tsc:*)",
      "Bash(npm run check:imports:*)",
      "mcp__serena__find_file",
      "Bash(yamllint:*)",
      "Bash(npm install:*)",
      "Bash(git pull:*)",
      "mcp__serena__list_dir",
      "Bash(NODE_OPTIONS=\"--max-old-space-size=8192\" bun run test --run)",
      "Bash(NODE_OPTIONS=\"--max-old-space-size=16384\" bun run test --run --reporter=verbose)",
      "Bash(NODE_OPTIONS=\"--max-old-space-size=4096\" npm run test -- src/features/version-control/__tests__/integration.test.ts --run)",
      "Bash(ln:*)",
      "Bash(npm run deploy:*)",
      "Bash(npm run:*)",
      "Bash(stylelint:*)",
      "mcp__serena__think_about_task_adherence",
      "Bash(git filter-branch:*)",
      "Bash(git cherry-pick:*)",
      "Bash(git stash:*)",
      "Bash(git tag:*)",
      "WebFetch(domain:www.onlook.com)",
      "Bash(npm uninstall:*)",
      "Bash(RUST_TEST_THREADS=1 cargo test --lib)",
      "Bash(./run-tests.sh:*)"
    ]
  },
  "enableAllProjectMcpServers": true
}
