Skip to content

Releases: mkusaka/it2

v0.2.3

08 Feb 19:43
b00fb91

Choose a tag to compare

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, and app broadcast add commands
    • Fallback lookup with the original input is kept for forward compatibility

🧪 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

08 Feb 17:50

Choose a tag to compare

What's Changed

⚖️ License

  • Change license from MIT to GPLv2+ (#14)
    • Required for compatibility with the iterm2 package (GPLv2+) runtime dependency

💥 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<6 constraint 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 check failures
    • Applied to both wheel and sdist targets

📦 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

06 Feb 10:24

Choose a tag to compare

What's Changed

💥 Breaking Changes

  • it2 profile create removed — iterm2.Profile.async_create() does not exist in the iterm2 library
  • it2 app create-hotkey-window removed — iterm2.HotkeyWindow class does not exist in the iterm2 library
  • it2 tab move — changed from it2 tab move INDEX [TAB_ID] to it2 tab move [TAB_ID] (moves tab to a new window)
  • it2 app theme — choices expanded from light|dark|auto to light|dark|light-hc|dark-hc|automatic|minimal
  • it2 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 version and it2 app theme set commands using Preferences API

📦 Dependencies

  • Pin iterm2>=2.13, update python_version to 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

06 Feb 07:08

Choose a tag to compare

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 newtab raised TypeError due to Click option names not matching function parameter names (session_idsession, etc.)

🧪 Tests

  • Add comprehensive tests for all shortcut commands (21 tests)
    • Covers --session, --all, --profile, --vertical, --window, --command options

Full Changelog: v0.1.8...v0.1.9

v0.1.8

13 Jul 16:34
8485e1d

Choose a tag to compare

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

13 Jul 16:48
3a051e9

Choose a tag to compare

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() to asyncio.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

13 Jul 13:19
40e20c7

Choose a tag to compare

🔌 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 it2 or 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_command decorator to support iterm2.Connection.async_create()
  • Use asyncio.run() for external connection like iterm2-focus
  • Removed duplicate @with_connection decorator 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

13 Jul 11:56
12fefad

Choose a tag to compare

🔧 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 list

This version resolves the module import errors from v0.1.3.

v0.1.3 - Build Fixes

13 Jul 11:32
61c45b9

Choose a tag to compare

🔧 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-cli references in README

Technical Details

  • Resolved PEP 639 license metadata compatibility issue between twine 6.1.0 and hatchling
  • All documentation now correctly references the it2 package name
  • Improved CI/CD reliability for PyPI publishing

Installation

pip install it2

v0.1.2 - Package Rename

13 Jul 11:32
f5f443e

Choose a tag to compare

🔄 Package Rename

This release renames the package from iterm2-cli to it2 for easier usage.

Changes

  • 🔄 Package rename: Changed package name from iterm2-cli to it2
  • 📚 Documentation: Added comprehensive implementation summary
  • 🛠️ Installation: Now install with pip install it2 instead of pip install iterm2-cli

Migration

If you previously installed iterm2-cli, uninstall it first:

pip uninstall iterm2-cli
pip install it2

The command-line interface remains the same - use it2 command.