xcode-mcp-server 1.3.2__tar.gz → 1.3.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- xcode_mcp_server-1.3.3/.github/workflows/claude-self-review.yml +70 -0
- xcode_mcp_server-1.3.3/.github/workflows/claude.yml +83 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/PKG-INFO +1 -1
- xcode_mcp_server-1.3.3/_venv-setup.sh +27 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/deploy-beta.sh +38 -64
- xcode_mcp_server-1.3.3/deploy.sh +118 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/dev.sh +5 -28
- xcode_mcp_server-1.3.3/dist-archive/xcode_mcp_server-1.3.2-py3-none-any.whl +0 -0
- xcode_mcp_server-1.3.3/dist-archive/xcode_mcp_server-1.3.2.tar.gz +0 -0
- xcode_mcp_server-1.3.3/test_projects/templates/BrokenApp/BrokenApp.xcodeproj/project.xcworkspace/xcuserdata/andrew.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- {xcode_mcp_server-1.3.2/test_projects/fromXcode/iosEmptySwiftUIApp/iosEmptySwiftUIApp.xcodeproj → xcode_mcp_server-1.3.3/test_projects/templates/BrokenApp/BrokenApp.xcodeproj}/xcuserdata/andrew.xcuserdatad/xcschemes/xcschememanagement.plist +1 -1
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/xcode_mcp_server/__init__.py +1 -1
- xcode_mcp_server-1.3.2/.github/workflows/claude-code-review.yml +0 -44
- xcode_mcp_server-1.3.2/.github/workflows/claude.yml +0 -50
- xcode_mcp_server-1.3.2/deploy.sh +0 -143
- xcode_mcp_server-1.3.2/test_projects/fromXcode/iosEmptySwiftUIApp/iosEmptySwiftUIApp.xcodeproj/project.xcworkspace/xcuserdata/andrew.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- xcode_mcp_server-1.3.2/test_projects/fromXcode/macosEmptyCommandLineApp/macosEmptyCommandLineApp.xcodeproj/project.xcworkspace/xcuserdata/andrew.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- xcode_mcp_server-1.3.2/test_projects/fromXcode/macosEmptyCommandLineApp/macosEmptyCommandLineApp.xcodeproj/xcuserdata/andrew.xcuserdatad/xcschemes/xcschememanagement.plist +0 -14
- xcode_mcp_server-1.3.2/test_projects/fromXcode/macosEmptySwiftUIApp/macosEmptySwiftUIApp.xcodeproj/project.xcworkspace/xcuserdata/andrew.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- xcode_mcp_server-1.3.2/test_projects/fromXcode/macosEmptySwiftUIApp/macosEmptySwiftUIApp.xcodeproj/xcuserdata/andrew.xcuserdatad/xcschemes/xcschememanagement.plist +0 -14
- xcode_mcp_server-1.3.2/test_projects/templates/BrokenApp/BrokenApp.xcodeproj/project.xcworkspace/xcuserdata/andrew.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- xcode_mcp_server-1.3.2/test_projects/templates/BrokenApp/BrokenApp.xcodeproj/xcuserdata/andrew.xcuserdatad/xcschemes/xcschememanagement.plist +0 -14
- xcode_mcp_server-1.3.2/test_projects/templates/ConsoleApp/ConsoleApp.xcodeproj/project.xcworkspace/xcuserdata/andrew.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- xcode_mcp_server-1.3.2/test_projects/templates/ConsoleApp/ConsoleApp.xcodeproj/xcuserdata/andrew.xcuserdatad/xcschemes/xcschememanagement.plist +0 -14
- xcode_mcp_server-1.3.2/test_projects/templates/SimpleApp/SimpleApp.xcodeproj/project.xcworkspace/xcuserdata/andrew.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- xcode_mcp_server-1.3.2/test_projects/templates/SimpleApp/SimpleApp.xcodeproj/xcuserdata/andrew.xcuserdatad/xcschemes/xcschememanagement.plist +0 -14
- xcode_mcp_server-1.3.2/test_projects/templates/SwiftUITestApp/SwiftUITestApp.xcodeproj/project.xcworkspace/xcuserdata/andrew.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- xcode_mcp_server-1.3.2/test_projects/templates/SwiftUITestApp/SwiftUITestApp.xcodeproj/xcuserdata/andrew.xcuserdatad/xcschemes/xcschememanagement.plist +0 -14
- xcode_mcp_server-1.3.2/test_projects/templates/iOSTestApp/iOSTestApp.xcodeproj/project.xcworkspace/xcuserdata/andrew.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- xcode_mcp_server-1.3.2/test_projects/templates/iOSTestApp/iOSTestApp.xcodeproj/xcuserdata/andrew.xcuserdatad/xcschemes/xcschememanagement.plist +0 -14
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/.gitignore +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/CLAUDE.md +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/LICENSE +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/README.md +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/TODO.md +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/dist-archive/xcode_mcp_server-1.0.6-py3-none-any.whl +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/dist-archive/xcode_mcp_server-1.0.6.tar.gz +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/dist-archive/xcode_mcp_server-1.2.1-py3-none-any.whl +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/dist-archive/xcode_mcp_server-1.2.1.tar.gz +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/dist-archive/xcode_mcp_server-1.3.0b1-py3-none-any.whl +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/dist-archive/xcode_mcp_server-1.3.0b1.tar.gz +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/dist-archive/xcode_mcp_server-1.3.0b2-py3-none-any.whl +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/dist-archive/xcode_mcp_server-1.3.0b2.tar.gz +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/dist-archive/xcode_mcp_server-1.3.0b3-py3-none-any.whl +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/dist-archive/xcode_mcp_server-1.3.0b3.tar.gz +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/dist-archive/xcode_mcp_server-1.3.0b4-py3-none-any.whl +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/dist-archive/xcode_mcp_server-1.3.0b4.tar.gz +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/dist-archive/xcode_mcp_server-1.3.0b5-py3-none-any.whl +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/dist-archive/xcode_mcp_server-1.3.0b5.tar.gz +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/dist-archive/xcode_mcp_server-1.3.0b6-py3-none-any.whl +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/dist-archive/xcode_mcp_server-1.3.0b6.tar.gz +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/dist-archive/xcode_mcp_server-1.3.0b7-py3-none-any.whl +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/dist-archive/xcode_mcp_server-1.3.0b7.tar.gz +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/dist-archive/xcode_mcp_server-1.3.1-py3-none-any.whl +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/dist-archive/xcode_mcp_server-1.3.1.tar.gz +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/info.sh +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/pyproject.toml +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/requirements.txt +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/run_local_for_claude.sh +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/scripts/cleanup_tests.sh +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/scripts/create_projects.py +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/scripts/create_real_projects.py +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/scripts/create_spm_projects.sh +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/scripts/create_xcode_projects.sh +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/scripts/run_all_tests.sh +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/scripts/setup_test_projects.sh +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/scripts/setup_tests.sh +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/test_projects/fromXcode/iosEmptySwiftUIApp/iosEmptySwiftUIApp/Assets.xcassets/AccentColor.colorset/Contents.json +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/test_projects/fromXcode/iosEmptySwiftUIApp/iosEmptySwiftUIApp/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/test_projects/fromXcode/iosEmptySwiftUIApp/iosEmptySwiftUIApp/Assets.xcassets/Contents.json +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/test_projects/fromXcode/iosEmptySwiftUIApp/iosEmptySwiftUIApp/ContentView.swift +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/test_projects/fromXcode/iosEmptySwiftUIApp/iosEmptySwiftUIApp/iosEmptySwiftUIAppApp.swift +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/test_projects/fromXcode/iosEmptySwiftUIApp/iosEmptySwiftUIApp.xcodeproj/project.pbxproj +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/test_projects/fromXcode/iosEmptySwiftUIApp/iosEmptySwiftUIApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/test_projects/fromXcode/macosEmptyCommandLineApp/macosEmptyCommandLineApp/main.swift +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/test_projects/fromXcode/macosEmptyCommandLineApp/macosEmptyCommandLineApp.xcodeproj/project.pbxproj +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/test_projects/fromXcode/macosEmptyCommandLineApp/macosEmptyCommandLineApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/test_projects/fromXcode/macosEmptySwiftUIApp/macosEmptySwiftUIApp/Assets.xcassets/AccentColor.colorset/Contents.json +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/test_projects/fromXcode/macosEmptySwiftUIApp/macosEmptySwiftUIApp/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/test_projects/fromXcode/macosEmptySwiftUIApp/macosEmptySwiftUIApp/Assets.xcassets/Contents.json +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/test_projects/fromXcode/macosEmptySwiftUIApp/macosEmptySwiftUIApp/ContentView.swift +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/test_projects/fromXcode/macosEmptySwiftUIApp/macosEmptySwiftUIApp/macosEmptySwiftUIAppApp.swift +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/test_projects/fromXcode/macosEmptySwiftUIApp/macosEmptySwiftUIApp.xcodeproj/project.pbxproj +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/test_projects/fromXcode/macosEmptySwiftUIApp/macosEmptySwiftUIApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/test_projects/templates/BrokenApp/BrokenApp/main.swift +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/test_projects/templates/BrokenApp/BrokenApp.xcodeproj/project.pbxproj +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/test_projects/templates/BrokenApp/BrokenApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/test_projects/templates/ConsoleApp/ConsoleApp/main.swift +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/test_projects/templates/ConsoleApp/ConsoleApp.xcodeproj/project.pbxproj +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/test_projects/templates/ConsoleApp/ConsoleApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/test_projects/templates/SimpleApp/SimpleApp/main.swift +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/test_projects/templates/SimpleApp/SimpleApp.xcodeproj/project.pbxproj +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/test_projects/templates/SimpleApp/SimpleApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/test_projects/templates/SwiftUITestApp/SwiftUITestApp/Assets.xcassets/AccentColor.colorset/Contents.json +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/test_projects/templates/SwiftUITestApp/SwiftUITestApp/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/test_projects/templates/SwiftUITestApp/SwiftUITestApp/Assets.xcassets/Contents.json +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/test_projects/templates/SwiftUITestApp/SwiftUITestApp/ContentView.swift +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/test_projects/templates/SwiftUITestApp/SwiftUITestApp/macosEmptySwiftUIAppApp.swift +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/test_projects/templates/SwiftUITestApp/SwiftUITestApp.xcodeproj/project.pbxproj +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/test_projects/templates/SwiftUITestApp/SwiftUITestApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/test_projects/templates/iOSTestApp/iOSTestApp/Assets.xcassets/AccentColor.colorset/Contents.json +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/test_projects/templates/iOSTestApp/iOSTestApp/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/test_projects/templates/iOSTestApp/iOSTestApp/Assets.xcassets/Contents.json +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/test_projects/templates/iOSTestApp/iOSTestApp/ContentView.swift +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/test_projects/templates/iOSTestApp/iOSTestApp/iosEmptySwiftUIAppApp.swift +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/test_projects/templates/iOSTestApp/iOSTestApp.xcodeproj/project.pbxproj +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/test_projects/templates/iOSTestApp/iOSTestApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/tests/debug_build.py +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/tests/debug_test.py +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/tests/test_basic.py +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/tests/test_build.py +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/tests/test_fixed.py +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/tests/test_minimal.py +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/tests/test_runner.py +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/xcode_mcp_server/__main__.py +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/xcode_mcp_server/cli.py +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/xcode_mcp_server/config_manager.py +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/xcode_mcp_server/config_ui.py +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/xcode_mcp_server/exceptions.py +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/xcode_mcp_server/security.py +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/xcode_mcp_server/server.py +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/xcode_mcp_server/tools/__init__.py +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/xcode_mcp_server/tools/build_project.py +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/xcode_mcp_server/tools/clean_project.py +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/xcode_mcp_server/tools/debug_list_notification_history.py +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/xcode_mcp_server/tools/get_build_errors.py +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/xcode_mcp_server/tools/get_build_results.py +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/xcode_mcp_server/tools/get_directory_listing.py +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/xcode_mcp_server/tools/get_directory_tree.py +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/xcode_mcp_server/tools/get_latest_test_results.py +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/xcode_mcp_server/tools/get_project_schemes.py +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/xcode_mcp_server/tools/get_runtime_output.py +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/xcode_mcp_server/tools/get_xcode_projects.py +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/xcode_mcp_server/tools/list_booted_simulators.py +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/xcode_mcp_server/tools/list_mac_app_windows.py +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/xcode_mcp_server/tools/list_project_tests.py +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/xcode_mcp_server/tools/list_running_mac_apps.py +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/xcode_mcp_server/tools/run_project_tests.py +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/xcode_mcp_server/tools/run_project_unmonitored.py +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/xcode_mcp_server/tools/run_project_until_terminated.py +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/xcode_mcp_server/tools/run_project_with_user_interaction.py +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/xcode_mcp_server/tools/stop_project.py +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/xcode_mcp_server/tools/take_app_screenshot.py +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/xcode_mcp_server/tools/take_simulator_screenshot.py +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/xcode_mcp_server/tools/take_window_screenshot.py +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/xcode_mcp_server/tools/take_xcode_screenshot.py +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/xcode_mcp_server/tools/version.py +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/xcode_mcp_server/utils/__init__.py +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/xcode_mcp_server/utils/applescript.py +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/xcode_mcp_server/utils/build_log_parser.py +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/xcode_mcp_server/utils/decode_xcode_recents.swift +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/xcode_mcp_server/utils/screenshot.py +0 -0
- {xcode_mcp_server-1.3.2 → xcode_mcp_server-1.3.3}/xcode_mcp_server/utils/xcresult.py +0 -0
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
name: Claude Self-Review
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
types: [opened, synchronize]
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
self-review:
|
|
9
|
+
if: startsWith(github.event.pull_request.head.ref, 'claude/')
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
permissions:
|
|
12
|
+
contents: write
|
|
13
|
+
pull-requests: write
|
|
14
|
+
issues: write
|
|
15
|
+
id-token: write
|
|
16
|
+
steps:
|
|
17
|
+
- name: Check review iteration count
|
|
18
|
+
id: check-iterations
|
|
19
|
+
env:
|
|
20
|
+
GH_TOKEN: ${{ github.token }}
|
|
21
|
+
PR_NUMBER: ${{ github.event.pull_request.number }}
|
|
22
|
+
run: |
|
|
23
|
+
MAX_REVIEWS=3
|
|
24
|
+
COUNT=$(gh api "repos/${{ github.repository }}/issues/${PR_NUMBER}/comments" \
|
|
25
|
+
--jq '[.[] | select(.user.login == "github-actions[bot]" and (.body | contains("Self-review pass"))) ] | length')
|
|
26
|
+
echo "review_count=$COUNT" >> "$GITHUB_OUTPUT"
|
|
27
|
+
if [ "$COUNT" -ge "$MAX_REVIEWS" ]; then
|
|
28
|
+
echo "skip=true" >> "$GITHUB_OUTPUT"
|
|
29
|
+
echo "Reached max self-review iterations ($MAX_REVIEWS). Skipping."
|
|
30
|
+
else
|
|
31
|
+
echo "skip=false" >> "$GITHUB_OUTPUT"
|
|
32
|
+
echo "Self-review pass $((COUNT + 1)) of $MAX_REVIEWS"
|
|
33
|
+
fi
|
|
34
|
+
|
|
35
|
+
- name: Checkout repository
|
|
36
|
+
if: steps.check-iterations.outputs.skip != 'true'
|
|
37
|
+
uses: actions/checkout@v4
|
|
38
|
+
with:
|
|
39
|
+
fetch-depth: 1
|
|
40
|
+
ref: ${{ github.head_ref }}
|
|
41
|
+
|
|
42
|
+
- name: Set up global Claude config
|
|
43
|
+
if: steps.check-iterations.outputs.skip != 'true'
|
|
44
|
+
env:
|
|
45
|
+
GH_TOKEN: ${{ secrets.CROSS_REPO_PAT }}
|
|
46
|
+
run: |
|
|
47
|
+
mkdir -p ~/.claude
|
|
48
|
+
gh api repos/drewster99/dev-ops/contents/claude-rules/base.md \
|
|
49
|
+
--jq '.content' | base64 -d > ~/.claude/CLAUDE.md
|
|
50
|
+
echo "" >> ~/.claude/CLAUDE.md
|
|
51
|
+
gh api repos/drewster99/dev-ops/contents/claude-rules/ci.md \
|
|
52
|
+
--jq '.content' | base64 -d >> ~/.claude/CLAUDE.md
|
|
53
|
+
|
|
54
|
+
- name: Self-review and fix
|
|
55
|
+
if: steps.check-iterations.outputs.skip != 'true'
|
|
56
|
+
uses: anthropics/claude-code-action@v1
|
|
57
|
+
with:
|
|
58
|
+
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
|
|
59
|
+
prompt: |
|
|
60
|
+
Self-review pass ${{ steps.check-iterations.outputs.review_count }} of 3.
|
|
61
|
+
|
|
62
|
+
You opened this PR. Review your own work before a human sees it.
|
|
63
|
+
|
|
64
|
+
1. Re-read every changed file. Check for bugs, edge cases, missing error handling.
|
|
65
|
+
2. Verify code style matches CLAUDE.md and existing patterns in this repo.
|
|
66
|
+
3. Look for security issues (injection, hardcoded secrets, unsafe operations).
|
|
67
|
+
4. If you find problems, fix them and push to this branch.
|
|
68
|
+
5. After fixing, re-review your fixes.
|
|
69
|
+
6. Add a PR comment starting with "Self-review pass N:" summarizing findings and any fixes made.
|
|
70
|
+
7. If everything looks clean, say so. Don't make changes for the sake of making changes.
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
name: Claude Code
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
issue_comment:
|
|
5
|
+
types: [created]
|
|
6
|
+
pull_request_review_comment:
|
|
7
|
+
types: [created]
|
|
8
|
+
issues:
|
|
9
|
+
types: [opened, assigned]
|
|
10
|
+
pull_request_review:
|
|
11
|
+
types: [submitted]
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
claude:
|
|
15
|
+
if: |
|
|
16
|
+
(github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
|
|
17
|
+
(github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
|
|
18
|
+
(github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) ||
|
|
19
|
+
(github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude'))) ||
|
|
20
|
+
(github.event_name == 'issues' && github.event.action == 'assigned' && github.event.assignee.login == 'claude[bot]')
|
|
21
|
+
runs-on: ubuntu-latest
|
|
22
|
+
permissions:
|
|
23
|
+
contents: write
|
|
24
|
+
pull-requests: write
|
|
25
|
+
issues: write
|
|
26
|
+
id-token: write
|
|
27
|
+
actions: read
|
|
28
|
+
steps:
|
|
29
|
+
- name: Checkout repository
|
|
30
|
+
uses: actions/checkout@v4
|
|
31
|
+
with:
|
|
32
|
+
fetch-depth: 1
|
|
33
|
+
|
|
34
|
+
- name: Set up global Claude config
|
|
35
|
+
env:
|
|
36
|
+
GH_TOKEN: ${{ secrets.CROSS_REPO_PAT }}
|
|
37
|
+
run: |
|
|
38
|
+
mkdir -p ~/.claude
|
|
39
|
+
gh api repos/drewster99/dev-ops/contents/claude-rules/base.md \
|
|
40
|
+
--jq '.content' | base64 -d > ~/.claude/CLAUDE.md
|
|
41
|
+
echo "" >> ~/.claude/CLAUDE.md
|
|
42
|
+
gh api repos/drewster99/dev-ops/contents/claude-rules/ci.md \
|
|
43
|
+
--jq '.content' | base64 -d >> ~/.claude/CLAUDE.md
|
|
44
|
+
|
|
45
|
+
- name: Run Claude Code
|
|
46
|
+
id: claude
|
|
47
|
+
uses: anthropics/claude-code-action@v1
|
|
48
|
+
with:
|
|
49
|
+
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
|
|
50
|
+
additional_permissions: |
|
|
51
|
+
actions: read
|
|
52
|
+
|
|
53
|
+
- name: Auto-create PR if Claude pushed a branch
|
|
54
|
+
if: github.event_name == 'issues' || (github.event_name == 'issue_comment' && !github.event.issue.pull_request)
|
|
55
|
+
env:
|
|
56
|
+
GH_TOKEN: ${{ github.token }}
|
|
57
|
+
run: |
|
|
58
|
+
# Find branches created by this workflow run
|
|
59
|
+
ISSUE_NUMBER=${{ github.event.issue.number }}
|
|
60
|
+
BRANCH=$(git branch -r --list "origin/claude/*${ISSUE_NUMBER}*" | head -1 | xargs)
|
|
61
|
+
|
|
62
|
+
if [ -z "$BRANCH" ]; then
|
|
63
|
+
echo "No Claude branch found for issue #${ISSUE_NUMBER}, skipping PR creation."
|
|
64
|
+
exit 0
|
|
65
|
+
fi
|
|
66
|
+
|
|
67
|
+
LOCAL_BRANCH="${BRANCH#origin/}"
|
|
68
|
+
|
|
69
|
+
# Check if a PR already exists for this branch
|
|
70
|
+
EXISTING_PR=$(gh pr list --head "$LOCAL_BRANCH" --json number --jq '.[0].number' 2>/dev/null)
|
|
71
|
+
if [ -n "$EXISTING_PR" ]; then
|
|
72
|
+
echo "PR #${EXISTING_PR} already exists for branch ${LOCAL_BRANCH}."
|
|
73
|
+
exit 0
|
|
74
|
+
fi
|
|
75
|
+
|
|
76
|
+
echo "Creating PR from ${LOCAL_BRANCH} for issue #${ISSUE_NUMBER}..."
|
|
77
|
+
gh pr create \
|
|
78
|
+
--head "$LOCAL_BRANCH" \
|
|
79
|
+
--title "$(gh issue view $ISSUE_NUMBER --json title --jq .title)" \
|
|
80
|
+
--body "Resolves #${ISSUE_NUMBER}
|
|
81
|
+
|
|
82
|
+
Auto-generated by Claude Code from issue #${ISSUE_NUMBER}." \
|
|
83
|
+
|| echo "PR creation failed -- Claude may not have pushed commits."
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: xcode-mcp-server
|
|
3
|
-
Version: 1.3.
|
|
3
|
+
Version: 1.3.3
|
|
4
4
|
Summary: Drew's MCP server for Xcode integration
|
|
5
5
|
Project-URL: Homepage, https://github.com/drewster99/xcode-mcp-server
|
|
6
6
|
Project-URL: Repository, https://github.com/drewster99/xcode-mcp-server
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Shared venv setup — sourced by deploy.sh, deploy-beta.sh, dev.sh
|
|
3
|
+
|
|
4
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
5
|
+
VENV_DIR="$SCRIPT_DIR/venv"
|
|
6
|
+
|
|
7
|
+
# Find python3 (preferred) or python
|
|
8
|
+
if command -v python3 &> /dev/null; then
|
|
9
|
+
PYTHON_CMD="python3"
|
|
10
|
+
elif command -v python &> /dev/null; then
|
|
11
|
+
PYTHON_CMD="python"
|
|
12
|
+
else
|
|
13
|
+
echo "❌ python3/python not found in PATH"
|
|
14
|
+
exit 1
|
|
15
|
+
fi
|
|
16
|
+
echo "✅ Using $PYTHON_CMD: $(command -v $PYTHON_CMD)"
|
|
17
|
+
|
|
18
|
+
# Create venv if needed
|
|
19
|
+
if [ ! -d "$VENV_DIR" ]; then
|
|
20
|
+
echo "📦 Creating venv at $VENV_DIR..."
|
|
21
|
+
$PYTHON_CMD -m venv "$VENV_DIR"
|
|
22
|
+
fi
|
|
23
|
+
|
|
24
|
+
# Activate
|
|
25
|
+
source "$VENV_DIR/bin/activate"
|
|
26
|
+
pip install -q --upgrade pip
|
|
27
|
+
echo "✅ venv activated: $(which python)"
|
|
@@ -7,69 +7,27 @@ set -e # Exit on error
|
|
|
7
7
|
|
|
8
8
|
echo "🚀 Starting xcode-mcp-server BETA deployment..."
|
|
9
9
|
echo ""
|
|
10
|
-
/bin/echo -n "Hit enter to continue:"
|
|
11
|
-
read foo
|
|
12
|
-
|
|
13
|
-
# Check dependencies
|
|
14
|
-
MISSING_DEPS=()
|
|
15
|
-
|
|
16
|
-
# Check for python or python3
|
|
17
|
-
if command -v python &> /dev/null; then
|
|
18
|
-
PYTHON_CMD="python"
|
|
19
|
-
echo "✅ python found: $(which python)"
|
|
20
|
-
elif command -v python3 &> /dev/null; then
|
|
21
|
-
PYTHON_CMD="python3"
|
|
22
|
-
echo "✅ python3 found: $(which python3)"
|
|
23
|
-
else
|
|
24
|
-
echo "❌ python/python3 is not installed or not in PATH"
|
|
25
|
-
MISSING_DEPS+=("python")
|
|
26
|
-
fi
|
|
27
10
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
11
|
+
# Pre-flight: ensure no unstaged changes
|
|
12
|
+
UNSTAGED=$(git diff --name-only)
|
|
13
|
+
if [ -n "$UNSTAGED" ]; then
|
|
14
|
+
echo "❌ You have unstaged changes:"
|
|
15
|
+
git diff --stat
|
|
16
|
+
echo ""
|
|
17
|
+
echo "Please stage ('git add') or commit your changes before deploying."
|
|
18
|
+
exit 1
|
|
33
19
|
fi
|
|
20
|
+
echo "✅ No unstaged changes"
|
|
21
|
+
echo ""
|
|
34
22
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
MISSING_DEPS+=("twine")
|
|
38
|
-
else
|
|
39
|
-
echo "✅ twine found"
|
|
40
|
-
fi
|
|
23
|
+
/bin/echo -n "Hit enter to continue:"
|
|
24
|
+
read foo
|
|
41
25
|
|
|
26
|
+
# Set up venv and install deploy dependencies
|
|
27
|
+
source "$(dirname "${BASH_SOURCE[0]}")/_venv-setup.sh"
|
|
28
|
+
pip install -q hatch build twine
|
|
42
29
|
echo ""
|
|
43
30
|
|
|
44
|
-
# Handle missing dependencies
|
|
45
|
-
if [ ${#MISSING_DEPS[@]} -gt 0 ]; then
|
|
46
|
-
for dep in "${MISSING_DEPS[@]}"; do
|
|
47
|
-
if [ "$dep" = "python" ]; then
|
|
48
|
-
echo "Python must be installed manually. Please install Python 3.8+ first."
|
|
49
|
-
exit 1
|
|
50
|
-
elif [ "$dep" = "hatch" ]; then
|
|
51
|
-
read -p "Install hatch with pip? (y/n): " -r
|
|
52
|
-
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
|
53
|
-
$PYTHON_CMD -m pip install hatch
|
|
54
|
-
echo "✅ hatch installed"
|
|
55
|
-
else
|
|
56
|
-
echo "Deployment cannot continue without hatch"
|
|
57
|
-
exit 1
|
|
58
|
-
fi
|
|
59
|
-
elif [ "$dep" = "twine" ]; then
|
|
60
|
-
read -p "Install twine with pip? (y/n): " -r
|
|
61
|
-
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
|
62
|
-
$PYTHON_CMD -m pip install twine
|
|
63
|
-
echo "✅ twine installed"
|
|
64
|
-
else
|
|
65
|
-
echo "Deployment cannot continue without twine"
|
|
66
|
-
exit 1
|
|
67
|
-
fi
|
|
68
|
-
fi
|
|
69
|
-
done
|
|
70
|
-
echo ""
|
|
71
|
-
fi
|
|
72
|
-
|
|
73
31
|
# Create dist-archive directory if it doesn't exist
|
|
74
32
|
mkdir -p dist-archive
|
|
75
33
|
|
|
@@ -88,7 +46,7 @@ echo ""
|
|
|
88
46
|
|
|
89
47
|
# Get current version and increment beta version
|
|
90
48
|
echo "📝 Incrementing beta version..."
|
|
91
|
-
CURRENT_VERSION=$(
|
|
49
|
+
CURRENT_VERSION=$(hatch version)
|
|
92
50
|
echo "Current version: $CURRENT_VERSION"
|
|
93
51
|
|
|
94
52
|
# Check if current version is already a beta (e.g., 1.2.3b4)
|
|
@@ -118,12 +76,12 @@ else
|
|
|
118
76
|
exit 1
|
|
119
77
|
fi
|
|
120
78
|
|
|
121
|
-
|
|
79
|
+
hatch version "$NEW_VERSION"
|
|
122
80
|
echo ""
|
|
123
81
|
|
|
124
82
|
# Build the package
|
|
125
83
|
echo "🔨 Building package..."
|
|
126
|
-
|
|
84
|
+
python -m build
|
|
127
85
|
echo ""
|
|
128
86
|
|
|
129
87
|
# Copy new build to archive
|
|
@@ -133,13 +91,29 @@ echo ""
|
|
|
133
91
|
|
|
134
92
|
# Upload to PyPI
|
|
135
93
|
echo "📤 Uploading to PyPI..."
|
|
136
|
-
|
|
94
|
+
twine upload dist/*
|
|
137
95
|
echo ""
|
|
138
96
|
|
|
139
|
-
|
|
140
|
-
|
|
97
|
+
# Verify on PyPI
|
|
98
|
+
echo "🔍 Verifying version $NEW_VERSION on PyPI..."
|
|
99
|
+
sleep 2
|
|
100
|
+
if curl -sf "https://pypi.org/pypi/xcode-mcp-server/$NEW_VERSION/json" > /dev/null 2>&1; then
|
|
101
|
+
echo "✅ Version $NEW_VERSION confirmed on PyPI"
|
|
102
|
+
else
|
|
103
|
+
echo "⚠️ Could not verify version $NEW_VERSION on PyPI."
|
|
104
|
+
echo "Skipping auto-commit. Please verify manually and commit the version change."
|
|
105
|
+
exit 1
|
|
106
|
+
fi
|
|
141
107
|
echo ""
|
|
142
|
-
|
|
108
|
+
|
|
109
|
+
# Commit and push the version bump
|
|
110
|
+
echo "📝 Committing version bump..."
|
|
111
|
+
git add xcode_mcp_server/__init__.py
|
|
112
|
+
git commit -m "v$NEW_VERSION"
|
|
113
|
+
git push
|
|
114
|
+
echo ""
|
|
115
|
+
|
|
116
|
+
echo "✅ Beta deployment complete! v$NEW_VERSION is live."
|
|
143
117
|
echo ""
|
|
144
118
|
echo "Test the deployed beta version with:"
|
|
145
119
|
echo ""
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# Deployment script for xcode-mcp-server
|
|
4
|
+
# This script builds and publishes the package to PyPI
|
|
5
|
+
|
|
6
|
+
# If you want to deploy a BETA, this script won't do it,
|
|
7
|
+
# but you can do it manually:
|
|
8
|
+
#
|
|
9
|
+
# You can use pre-release version numbers following
|
|
10
|
+
# https://peps.python.org/pep-0440/. PyPI will accept them, but pip won't
|
|
11
|
+
# install them by default.
|
|
12
|
+
#
|
|
13
|
+
# Pre-release version formats:
|
|
14
|
+
# - 1.2.3b1 - beta 1
|
|
15
|
+
# - 1.2.3a1 - alpha 1
|
|
16
|
+
# - 1.2.3rc1 - release candidate 1
|
|
17
|
+
#
|
|
18
|
+
# To publish a beta:
|
|
19
|
+
# python -m hatch version 1.2.3b1 # Set beta version
|
|
20
|
+
# python -m build
|
|
21
|
+
# python -m twine upload dist/*
|
|
22
|
+
#
|
|
23
|
+
# Users can install it with:
|
|
24
|
+
# # Specific beta version (safest for testers)
|
|
25
|
+
# pip install xcode-mcp-server==1.2.3b1
|
|
26
|
+
# uvx xcode-mcp-server==1.2.3b1
|
|
27
|
+
#
|
|
28
|
+
# Regular users doing pip install xcode-mcp-server will get the latest
|
|
29
|
+
# stable version and skip all pre-releases automatically.
|
|
30
|
+
|
|
31
|
+
set -e # Exit on error
|
|
32
|
+
|
|
33
|
+
echo "🚀 Starting xcode-mcp-server deployment..."
|
|
34
|
+
echo ""
|
|
35
|
+
|
|
36
|
+
# Pre-flight: ensure no unstaged changes
|
|
37
|
+
UNSTAGED=$(git diff --name-only)
|
|
38
|
+
if [ -n "$UNSTAGED" ]; then
|
|
39
|
+
echo "❌ You have unstaged changes:"
|
|
40
|
+
git diff --stat
|
|
41
|
+
echo ""
|
|
42
|
+
echo "Please stage ('git add') or commit your changes before deploying."
|
|
43
|
+
exit 1
|
|
44
|
+
fi
|
|
45
|
+
echo "✅ No unstaged changes"
|
|
46
|
+
echo ""
|
|
47
|
+
|
|
48
|
+
/bin/echo -n "Hit enter to continue:"
|
|
49
|
+
read foo
|
|
50
|
+
|
|
51
|
+
# Set up venv and install deploy dependencies
|
|
52
|
+
source "$(dirname "${BASH_SOURCE[0]}")/_venv-setup.sh"
|
|
53
|
+
pip install -q hatch build twine
|
|
54
|
+
echo ""
|
|
55
|
+
|
|
56
|
+
# Create dist-archive directory if it doesn't exist
|
|
57
|
+
mkdir -p dist-archive
|
|
58
|
+
|
|
59
|
+
# Archive any existing dist files
|
|
60
|
+
if [ -d "dist" ] && [ "$(ls -A dist 2>/dev/null)" ]; then
|
|
61
|
+
echo "📦 Archiving previous dist files..."
|
|
62
|
+
mv dist/* dist-archive/
|
|
63
|
+
echo ""
|
|
64
|
+
fi
|
|
65
|
+
|
|
66
|
+
# Clean dist directory
|
|
67
|
+
echo "🧹 Cleaning dist directory..."
|
|
68
|
+
rm -rf dist
|
|
69
|
+
mkdir -p dist
|
|
70
|
+
echo ""
|
|
71
|
+
|
|
72
|
+
# Increment version
|
|
73
|
+
echo "📝 Incrementing patch version..."
|
|
74
|
+
hatch version patch
|
|
75
|
+
NEW_VERSION=$(hatch version)
|
|
76
|
+
echo ""
|
|
77
|
+
|
|
78
|
+
# Build the package
|
|
79
|
+
echo "🔨 Building package..."
|
|
80
|
+
python -m build
|
|
81
|
+
echo ""
|
|
82
|
+
|
|
83
|
+
# Copy new build to archive
|
|
84
|
+
echo "💾 Copying new build to archive..."
|
|
85
|
+
cp dist/* dist-archive/
|
|
86
|
+
echo ""
|
|
87
|
+
|
|
88
|
+
# Upload to PyPI
|
|
89
|
+
echo "📤 Uploading to PyPI..."
|
|
90
|
+
twine upload dist/*
|
|
91
|
+
echo ""
|
|
92
|
+
|
|
93
|
+
# Verify on PyPI
|
|
94
|
+
echo "🔍 Verifying version $NEW_VERSION on PyPI..."
|
|
95
|
+
sleep 2
|
|
96
|
+
if curl -sf "https://pypi.org/pypi/xcode-mcp-server/$NEW_VERSION/json" > /dev/null 2>&1; then
|
|
97
|
+
echo "✅ Version $NEW_VERSION confirmed on PyPI"
|
|
98
|
+
else
|
|
99
|
+
echo "⚠️ Could not verify version $NEW_VERSION on PyPI."
|
|
100
|
+
echo "Skipping auto-commit. Please verify manually and commit the version change."
|
|
101
|
+
exit 1
|
|
102
|
+
fi
|
|
103
|
+
echo ""
|
|
104
|
+
|
|
105
|
+
# Commit and push the version bump
|
|
106
|
+
echo "📝 Committing version bump..."
|
|
107
|
+
git add xcode_mcp_server/__init__.py
|
|
108
|
+
git commit -m "v$NEW_VERSION"
|
|
109
|
+
git push
|
|
110
|
+
echo ""
|
|
111
|
+
|
|
112
|
+
echo "✅ Deployment complete! v$NEW_VERSION is live."
|
|
113
|
+
echo ""
|
|
114
|
+
echo "Test the deployed version with:"
|
|
115
|
+
echo ""
|
|
116
|
+
echo " uvx xcode-mcp-server"
|
|
117
|
+
|
|
118
|
+
exit 0
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
# This script sets up the environment and runs the MCP inspector for testing
|
|
5
5
|
#
|
|
6
6
|
# To connect a specific release or beta to the MCP Inspector, do like this:
|
|
7
|
-
#
|
|
7
|
+
#
|
|
8
8
|
# npx @modelcontextprotocol/inspector uvx xcode-mcp-server==1.3.0b3
|
|
9
9
|
#
|
|
10
10
|
#
|
|
@@ -17,34 +17,11 @@ echo ""
|
|
|
17
17
|
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
|
18
18
|
cd "$SCRIPT_DIR"
|
|
19
19
|
|
|
20
|
-
#
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
# Check if conda is available
|
|
24
|
-
if ! command -v conda &> /dev/null; then
|
|
25
|
-
echo "❌ Error: conda is not installed or not in PATH"
|
|
26
|
-
echo "Please install Miniconda or Anaconda first"
|
|
27
|
-
exit 1
|
|
28
|
-
fi
|
|
29
|
-
|
|
30
|
-
# Initialize conda for bash
|
|
31
|
-
eval "$(conda shell.bash hook)"
|
|
32
|
-
|
|
33
|
-
# Check if the conda environment exists
|
|
34
|
-
if ! conda env list | grep -q "^${CONDA_ENV_NAME} "; then
|
|
35
|
-
echo "📦 Creating conda environment: ${CONDA_ENV_NAME}"
|
|
36
|
-
conda create -y -n "${CONDA_ENV_NAME}" python=3.12
|
|
37
|
-
echo ""
|
|
38
|
-
fi
|
|
39
|
-
|
|
40
|
-
# Activate the conda environment
|
|
41
|
-
echo "🐍 Activating conda environment: ${CONDA_ENV_NAME}"
|
|
42
|
-
conda activate "${CONDA_ENV_NAME}"
|
|
20
|
+
# Set up venv and install dev dependencies
|
|
21
|
+
source "$SCRIPT_DIR/_venv-setup.sh"
|
|
43
22
|
echo ""
|
|
44
23
|
|
|
45
|
-
|
|
46
|
-
echo "📥 Installing Python dependencies..."
|
|
47
|
-
pip install -q --upgrade pip
|
|
24
|
+
echo "📥 Installing development dependencies..."
|
|
48
25
|
pip install -q -e .
|
|
49
26
|
pip install -q mcp
|
|
50
27
|
echo ""
|
|
@@ -65,7 +42,7 @@ echo ""
|
|
|
65
42
|
echo "📋 Configuration:"
|
|
66
43
|
echo " Python: $(which python)"
|
|
67
44
|
echo " Python version: $(python --version)"
|
|
68
|
-
echo "
|
|
45
|
+
echo " venv: $VENV_DIR"
|
|
69
46
|
echo " Allowed folders: ${XCODEMCP_ALLOWED_FOLDERS}"
|
|
70
47
|
echo " Server path: ${SCRIPT_DIR}/xcode_mcp_server/__main__.py"
|
|
71
48
|
echo ""
|
|
Binary file
|
|
Binary file
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
name: Claude Code Review
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
pull_request:
|
|
5
|
-
types: [opened, synchronize, ready_for_review, reopened]
|
|
6
|
-
# Optional: Only run on specific file changes
|
|
7
|
-
# paths:
|
|
8
|
-
# - "src/**/*.ts"
|
|
9
|
-
# - "src/**/*.tsx"
|
|
10
|
-
# - "src/**/*.js"
|
|
11
|
-
# - "src/**/*.jsx"
|
|
12
|
-
|
|
13
|
-
jobs:
|
|
14
|
-
claude-review:
|
|
15
|
-
# Optional: Filter by PR author
|
|
16
|
-
# if: |
|
|
17
|
-
# github.event.pull_request.user.login == 'external-contributor' ||
|
|
18
|
-
# github.event.pull_request.user.login == 'new-developer' ||
|
|
19
|
-
# github.event.pull_request.author_association == 'FIRST_TIME_CONTRIBUTOR'
|
|
20
|
-
|
|
21
|
-
runs-on: ubuntu-latest
|
|
22
|
-
permissions:
|
|
23
|
-
contents: read
|
|
24
|
-
pull-requests: read
|
|
25
|
-
issues: read
|
|
26
|
-
id-token: write
|
|
27
|
-
|
|
28
|
-
steps:
|
|
29
|
-
- name: Checkout repository
|
|
30
|
-
uses: actions/checkout@v4
|
|
31
|
-
with:
|
|
32
|
-
fetch-depth: 1
|
|
33
|
-
|
|
34
|
-
- name: Run Claude Code Review
|
|
35
|
-
id: claude-review
|
|
36
|
-
uses: anthropics/claude-code-action@v1
|
|
37
|
-
with:
|
|
38
|
-
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
|
|
39
|
-
plugin_marketplaces: 'https://github.com/anthropics/claude-code.git'
|
|
40
|
-
plugins: 'code-review@claude-code-plugins'
|
|
41
|
-
prompt: '/code-review:code-review ${{ github.repository }}/pull/${{ github.event.pull_request.number }}'
|
|
42
|
-
# See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md
|
|
43
|
-
# or https://code.claude.com/docs/en/cli-reference for available options
|
|
44
|
-
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
name: Claude Code
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
issue_comment:
|
|
5
|
-
types: [created]
|
|
6
|
-
pull_request_review_comment:
|
|
7
|
-
types: [created]
|
|
8
|
-
issues:
|
|
9
|
-
types: [opened, assigned]
|
|
10
|
-
pull_request_review:
|
|
11
|
-
types: [submitted]
|
|
12
|
-
|
|
13
|
-
jobs:
|
|
14
|
-
claude:
|
|
15
|
-
if: |
|
|
16
|
-
(github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
|
|
17
|
-
(github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
|
|
18
|
-
(github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) ||
|
|
19
|
-
(github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude')))
|
|
20
|
-
runs-on: ubuntu-latest
|
|
21
|
-
permissions:
|
|
22
|
-
contents: write
|
|
23
|
-
pull-requests: write
|
|
24
|
-
issues: write
|
|
25
|
-
id-token: write
|
|
26
|
-
actions: read # Required for Claude to read CI results on PRs
|
|
27
|
-
steps:
|
|
28
|
-
- name: Checkout repository
|
|
29
|
-
uses: actions/checkout@v4
|
|
30
|
-
with:
|
|
31
|
-
fetch-depth: 1
|
|
32
|
-
|
|
33
|
-
- name: Run Claude Code
|
|
34
|
-
id: claude
|
|
35
|
-
uses: anthropics/claude-code-action@v1
|
|
36
|
-
with:
|
|
37
|
-
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
|
|
38
|
-
|
|
39
|
-
# This is an optional setting that allows Claude to read CI results on PRs
|
|
40
|
-
additional_permissions: |
|
|
41
|
-
actions: read
|
|
42
|
-
|
|
43
|
-
# Optional: Give a custom prompt to Claude. If this is not specified, Claude will perform the instructions specified in the comment that tagged it.
|
|
44
|
-
# prompt: 'Update the pull request description to include a summary of changes.'
|
|
45
|
-
|
|
46
|
-
# Optional: Add claude_args to customize behavior and configuration
|
|
47
|
-
# See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md
|
|
48
|
-
# or https://code.claude.com/docs/en/cli-reference for available options
|
|
49
|
-
# claude_args: '--allowed-tools Bash(gh pr:*)'
|
|
50
|
-
|