Releases: mkusaka/it2
v0.2.3
What's Changed
🐛 Bug Fixes
- Normalize iTerm2 session ID alias handling (#33)
- Accept both shell-facing IDs (
w0t0p0:GUID,w0t0p0.GUID) and canonical API GUIDs in CLI commands - Applied to
session focus,profile apply, andapp broadcast addcommands - Fallback lookup with the original input is kept for forward compatibility
- Accept both shell-facing IDs (
🧪 Tests
- Add tests for session ID alias normalization (
test_session_handler.py,test_session_commands.py,test_profile_commands.py,test_app_commands.py)
Full Changelog: v0.2.1...v0.2.3
v0.2.1
What's Changed
⚖️ License
- Change license from MIT to GPLv2+ (#14)
- Required for compatibility with the
iterm2package (GPLv2+) runtime dependency
- Required for compatibility with the
💥 Breaking Changes
- Drop Python 3.8/3.9 support, require
>=3.10(#17)- Both versions are already EOL upstream
- Updated ruff, black, and mypy target versions to 3.10
✨ Features
- Add Python 3.14 to CI test matrix (#15)
- Updated uv from 0.5.11 to 0.9.29 for Python 3.14 download support
- Added
protobuf<6constraint for Python 3.14 compatibility
- Add E2E test script and documentation (#31)
- 37 E2E tests covering all command groups with automatic cleanup
- Verified passing on Python 3.10–3.14
🐛 Bug Fixes
- Pin core-metadata-version to 2.3 for twine compatibility (#28, #29)
- Fixed metadata 2.4 generated by unpinned hatchling causing
twine checkfailures - Applied to both wheel and sdist targets
- Fixed metadata 2.4 generated by unpinned hatchling causing
📦 Dependencies
- Configure Renovate for automated dependency management (#3, #16)
- Set bump strategy, group dev deps, require approval for Python updates
- Update runtime dependencies: pyyaml >=6.0.3, click >=8.3.1, rich v14 (#18, #20, #27)
- Update dev dependencies: black v26, pytest >=9.0.2, pytest-asyncio v1, pytest-cov v7 (#22, #23, #25, #26, #30)
- Unpin hatchling version (#8), update build >=1.4.0 (#19)
🔧 CI/CD
- Update actions/checkout to v6 (#10)
- Update GitHub artifact actions (major) (#13)
- Update astral-sh/setup-uv to v7 (#11)
- Update macOS runner to v15 (#12)
Full Changelog: v0.2.0...v0.2.1
v0.2.0
What's Changed
💥 Breaking Changes
it2 profile createremoved —iterm2.Profile.async_create()does not exist in the iterm2 libraryit2 app create-hotkey-windowremoved —iterm2.HotkeyWindowclass does not exist in the iterm2 libraryit2 tab move— changed fromit2 tab move INDEX [TAB_ID]toit2 tab move [TAB_ID](moves tab to a new window)it2 app theme— choices expanded fromlight|dark|autotolight|dark|light-hc|dark-hc|automatic|minimalit2 app version— switched to Preferences API (PreferenceKey.ITERM_VERSION)
🐛 Bug Fixes
- Fix all mypy type errors across the codebase (#4)
- Updated all modules to use correct iterm2 v2.13 API methods
- Fixed
window.py,tab.py,session.py,profile.py,app.py,monitor.py,connection.py
✨ Features
- Restore
it2 app versionandit2 app theme setcommands using Preferences API
📦 Dependencies
- Pin
iterm2>=2.13, updatepython_versionto 3.9 for mypy
🧪 Tests
- Add
test_monitor_commands.py(5 tests),test_profile_commands.py(5 tests) - Update all existing test mocks to match iterm2 v2.13 API (132 passed, 5 skipped)
Full Changelog: v0.1.9...v0.2.0
v0.1.9
What's Changed
🐛 Bug Fixes
- Fix shortcut commands failing with unexpected keyword argument (#2)
it2 send,it2 run,it2 split,it2 vsplit,it2 clear,it2 newtabraisedTypeErrordue to Click option names not matching function parameter names (session_id→session, etc.)
🧪 Tests
- Add comprehensive tests for all shortcut commands (21 tests)
- Covers
--session,--all,--profile,--vertical,--window,--commandoptions
- Covers
Full Changelog: v0.1.8...v0.1.9
v0.1.8
What's Changed
🐛 Bug Fixes
- Fix systematic removal of @with_connection decorators for external uvx support (#eff67ce)
- Fixed 51 out of 52 CLI command functions that had conflicting decorators
- Ensures proper external connection capabilities when using uvx
- Fix CI lint errors - remove unused imports and fix type annotations (#bbc001b)
- Add pytest timeout to prevent CI hanging on test-cov (#2b28f2d)
- Fix hanging tests by mocking external connection architecture (#25d2126)
- Fix nested with statements lint errors (SIM117) (#0c0abfc)
- Fix timeout issues in test_app_command_no_cookie and test_no_iterm2_cookie (#029d43d)
🎨 Style
- Apply black formatting to test files (#c20bbbb)
🔧 CI/CD
- Fix macOS runner version warning (#5fa63da)
- Change from macos-latest to macos-14 to avoid automatic migration
📝 Documentation
- Add /bump custom slash command (#fb7f26a)
- Supports patch/minor/major version increments
- Automatically pushes changes and tags
Full Changelog: v0.1.6...v0.1.8
v0.1.6 - External Connection Architecture
What's Changed
✨ Features
- Enable external connection to iTerm2 like iterm2-focus (#0d0e939)
- Support running commands from outside iTerm2
- Automatic connection detection and switching
- Compatible with tools like iterm2-focus
🔧 Technical Details
- Switch from
iterm2.run_until_complete()toasyncio.run()for external connections - Use
iterm2.Connection.async_create()for establishing connections - Maintain backward compatibility with internal iTerm2 execution
Full Changelog: v0.1.5...v0.1.6
v0.1.5 - External Connection Support
🔌 External Connection Support
This release adds external connection capability, allowing it2 to work from any terminal just like iterm2-focus.
✨ New Features
- External Connection: Works from outside iTerm2 using
uvx it2or global installation - Universal Access: No longer requires running inside iTerm2 or
ITERM2_COOKIE - Connection Fallback: Automatically tries external connection first, fallback to internal
🔧 Technical Changes
- Modified
@run_commanddecorator to supportiterm2.Connection.async_create() - Use
asyncio.run()for external connection likeiterm2-focus - Removed duplicate
@with_connectiondecorator to prevent async conflicts - Improved error handling and connection management
🚀 Usage Examples
# Now works from any terminal
uvx it2 session list
uvx it2 session send "Hello World"
# Still works when installed globally
pip install it2
it2 session list🐛 Fixes
- Resolves
ModuleNotFoundError: No module named 'it2'from v0.1.4 - Fixes "Not running inside iTerm2" error for external usage
- Eliminates connection warnings and async issues
This version brings feature parity with iterm2-focus for external iTerm2 control.
v0.1.4 - Package Structure Fix
🔧 Critical Package Structure Fix
This release fixes a critical issue where the Python code was not included in the wheel distribution, causing ModuleNotFoundError: No module named 'it2' when installing from PyPI.
Changes
- 🔧 Build fix: Fixed hatchling configuration to properly include Python source code in wheel
- 📦 Package structure: Corrected wheel packaging to ensure all modules are included
- ✅ CI integration: Updated CI workflow to use Makefile commands for consistency
Technical Details
- Fixed
[tool.hatch.build.targets.wheel]configuration in pyproject.toml - Removed incorrect
sources = ["src"]directive that was preventing code inclusion - All it2 modules are now properly packaged and installable
Installation
pip install it2
# or
uvx it2 session listThis version resolves the module import errors from v0.1.3.
v0.1.3 - Build Fixes
🔧 Build and Distribution Fixes
This release fixes PyPI publishing issues and improves the build process.
Changes
- 🔧 Build fix: Pin twine to 6.0.1 to avoid license metadata validation issues
- 📦 Dependencies: Update uv.lock for twine version pin
- 📚 Documentation: Fix remaining
iterm2-clireferences in README
Technical Details
- Resolved PEP 639 license metadata compatibility issue between twine 6.1.0 and hatchling
- All documentation now correctly references the
it2package name - Improved CI/CD reliability for PyPI publishing
Installation
pip install it2v0.1.2 - Package Rename
🔄 Package Rename
This release renames the package from iterm2-cli to it2 for easier usage.
Changes
- 🔄 Package rename: Changed package name from
iterm2-clitoit2 - 📚 Documentation: Added comprehensive implementation summary
- 🛠️ Installation: Now install with
pip install it2instead ofpip install iterm2-cli
Migration
If you previously installed iterm2-cli, uninstall it first:
pip uninstall iterm2-cli
pip install it2The command-line interface remains the same - use it2 command.