- Fix CI: ruff format, mypy type hint, ansible-lint task names
- Update CLAUDE.md for v3.0.0 — protocol abstraction, PanelClient, full test suite
- Add setup wizard and SSH tests
- Add additional PanelClient and output tests
- Add console.py tests for confirm() and fail()
- Add resolve_server tests for all resolution paths
- Bump version to 2.3.1
- Add tests for protocol abstraction layer
- Refactor client.py to use protocol registry
- Refactor output.py to use protocol classes for URL building
- Add Protocol ABC and concrete implementations (Reality, XHTTP, WSS)
- Fix formatting in panel.py (ruff auto-format)
- Bump version to 2.3.0
- Add output module tests for VLESS URL building and file generation
- Migrate client add/remove from Ansible to PanelClient
- Add PanelClient: 3x-ui REST API wrapper via SSH
- Document protocol registry in CLAUDE.md
- Update CLAUDE.md for CI/CD restructure
- Add mypy type checking to CI
- DRY remove_client.yml — loop over inbound types
- Merge CD workflow into Release, simplify pipeline chain
- DRY add_client.yml — loop over inbound types
- Switch GitHub Pages to artifact-based deploy
- Bundle AI docs in package, remove fetch/cache logic
- Use inbound constants in client list display
- Add protocol/inbound type registry (Python + Ansible)
- Remove chain mode (relay architecture preserved in design)
- Bump version to 2.1.0
- Update CLAUDE.md for unified connection-info template
- Make fail() hints context-sensitive instead of generic
- Update demo.html to match unified template CSS and structure
- Add human-readable ARCHITECTURE.md for contributors
- Add --server flag to setup for re-running against named servers
- Replace ASCII client list with Rich table
- Switch output + caddy roles to shared template, delete old templates
- Add unified connection-info template in shared/templates
- Make ResolvedServer immutable — fully constructed at creation
- Remove stale Manual Ansible and Chain mode sections from website
- Add CODEOWNERS for high-risk file review
- Add PR template with cross-file dependency checklist
- Fix confirm() to support Y/n rejection (not just Enter-or-Ctrl+C)