claude-launcher 0.1.0__py3-none-any.whl → 0.1.1__py3-none-any.whl
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.
- claude_launcher/ui/_preview_helper.py +3 -3
- claude_launcher-0.1.1.dist-info/METADATA +108 -0
- {claude_launcher-0.1.0.dist-info → claude_launcher-0.1.1.dist-info}/RECORD +7 -7
- claude_launcher-0.1.0.dist-info/METADATA +0 -332
- {claude_launcher-0.1.0.dist-info → claude_launcher-0.1.1.dist-info}/WHEEL +0 -0
- {claude_launcher-0.1.0.dist-info → claude_launcher-0.1.1.dist-info}/entry_points.txt +0 -0
- {claude_launcher-0.1.0.dist-info → claude_launcher-0.1.1.dist-info}/licenses/LICENSE +0 -0
- {claude_launcher-0.1.0.dist-info → claude_launcher-0.1.1.dist-info}/top_level.txt +0 -0
|
@@ -17,14 +17,14 @@ def main() -> None:
|
|
|
17
17
|
|
|
18
18
|
# Extract path from formatted line
|
|
19
19
|
# Format is: "absolute_path\t\ttree_display" or special markers
|
|
20
|
-
# Special
|
|
20
|
+
# Special markers: __SPACE__ (spacing line), __ACTION__ (action menu items)
|
|
21
21
|
parts = line.split("\t\t", 1)
|
|
22
22
|
|
|
23
|
-
if len(parts) == 2 and parts[0]
|
|
23
|
+
if len(parts) == 2 and parts[0] not in ("__SPACE__", "__ACTION__"):
|
|
24
24
|
# Normal line - first field is absolute path (project or directory)
|
|
25
25
|
path_str = parts[0]
|
|
26
26
|
else:
|
|
27
|
-
# Spacing line or malformed - show nothing
|
|
27
|
+
# Spacing line, action menu, or malformed - show nothing
|
|
28
28
|
return
|
|
29
29
|
|
|
30
30
|
try:
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: claude-launcher
|
|
3
|
+
Version: 0.1.1
|
|
4
|
+
Summary: Fast context switching for Claude Code in multi-project environments
|
|
5
|
+
Author: Solent Labs™
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/solentlabs/claude-launcher
|
|
8
|
+
Project-URL: Repository, https://github.com/solentlabs/claude-launcher
|
|
9
|
+
Project-URL: Issues, https://github.com/solentlabs/claude-launcher/issues
|
|
10
|
+
Keywords: claude,launcher,project-switcher,productivity,cli
|
|
11
|
+
Classifier: Development Status :: 3 - Alpha
|
|
12
|
+
Classifier: Intended Audience :: Developers
|
|
13
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
14
|
+
Classifier: Programming Language :: Python :: 3
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.8
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Operating System :: OS Independent
|
|
21
|
+
Classifier: Topic :: Software Development
|
|
22
|
+
Classifier: Topic :: Utilities
|
|
23
|
+
Requires-Python: >=3.8
|
|
24
|
+
Description-Content-Type: text/markdown
|
|
25
|
+
License-File: LICENSE
|
|
26
|
+
Requires-Dist: iterfzf>=1.4.0
|
|
27
|
+
Requires-Dist: typer>=0.12.0
|
|
28
|
+
Requires-Dist: platformdirs>=4.0.0
|
|
29
|
+
Requires-Dist: tomli>=2.0.0; python_version < "3.11"
|
|
30
|
+
Requires-Dist: tomli-w>=1.0.0
|
|
31
|
+
Provides-Extra: dev
|
|
32
|
+
Requires-Dist: pytest>=7.0.0; extra == "dev"
|
|
33
|
+
Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
|
|
34
|
+
Requires-Dist: black>=23.0.0; extra == "dev"
|
|
35
|
+
Requires-Dist: mypy>=1.0.0; extra == "dev"
|
|
36
|
+
Requires-Dist: flake8>=6.0.0; extra == "dev"
|
|
37
|
+
Requires-Dist: isort>=5.12.0; extra == "dev"
|
|
38
|
+
Requires-Dist: pre-commit>=3.0.0; extra == "dev"
|
|
39
|
+
Requires-Dist: pytest-mock>=3.10.0; extra == "dev"
|
|
40
|
+
Dynamic: license-file
|
|
41
|
+
|
|
42
|
+
# Claude Launcher
|
|
43
|
+
|
|
44
|
+
Fast project switching for Claude Code. Select from your projects with fuzzy search and jump right in.
|
|
45
|
+
|
|
46
|
+
[](https://www.python.org/downloads/)
|
|
47
|
+
[](https://opensource.org/licenses/MIT)
|
|
48
|
+
[](https://pypi.org/project/claude-launcher/)
|
|
49
|
+
|
|
50
|
+
> **Community Project** - Independent tool, not affiliated with Anthropic.
|
|
51
|
+
|
|
52
|
+
## Install
|
|
53
|
+
|
|
54
|
+
**One command:**
|
|
55
|
+
```bash
|
|
56
|
+
curl -sSL https://raw.githubusercontent.com/solentlabs/claude-launcher/master/install.sh | bash
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
**Or with pipx:**
|
|
60
|
+
```bash
|
|
61
|
+
pipx install claude-launcher
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Use
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
claude-launcher ~/projects
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
That's it. Pick a project, Claude Code opens.
|
|
71
|
+
|
|
72
|
+
## Features
|
|
73
|
+
|
|
74
|
+
- 🔍 **Fuzzy search** - Type to filter projects instantly
|
|
75
|
+
- 📁 **Tree navigation** - See your project structure at a glance
|
|
76
|
+
- 📋 **Preview pane** - Git status, CLAUDE.md, directory contents
|
|
77
|
+
- ⚡ **Last opened** - Cursor starts on your most recent project
|
|
78
|
+
- ➕ **Manual projects** - Add non-git directories
|
|
79
|
+
- 🔗 **Symlink support** - Works with linked directories
|
|
80
|
+
|
|
81
|
+
## Requirements
|
|
82
|
+
|
|
83
|
+
- Python 3.8+
|
|
84
|
+
- fzf (install script handles this)
|
|
85
|
+
- Claude Code CLI
|
|
86
|
+
|
|
87
|
+
## Configuration
|
|
88
|
+
|
|
89
|
+
First run creates `~/.config/claude-launcher/config.toml`:
|
|
90
|
+
|
|
91
|
+
```toml
|
|
92
|
+
[scan]
|
|
93
|
+
paths = ["~/projects", "~/work"]
|
|
94
|
+
max_depth = 5
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
[Full configuration docs →](docs/configuration.md)
|
|
98
|
+
|
|
99
|
+
## Documentation
|
|
100
|
+
|
|
101
|
+
- [Installation Guide](docs/installation.md)
|
|
102
|
+
- [Configuration](docs/configuration.md)
|
|
103
|
+
- [Windows Terminal Setup](docs/windows-terminal.md)
|
|
104
|
+
- [Troubleshooting](docs/troubleshooting.md)
|
|
105
|
+
|
|
106
|
+
## License
|
|
107
|
+
|
|
108
|
+
MIT - see [LICENSE](LICENSE)
|
|
@@ -7,7 +7,7 @@ claude_launcher/core/discovery.py,sha256=kconwnfBD0-6G1_QDAfdlX120DOO4iorT0Hgnqj
|
|
|
7
7
|
claude_launcher/core/models.py,sha256=HcUVExgO0BOU7ZW1MXIEkpPfH_GVvSdOaehJ_s_eROY,3251
|
|
8
8
|
claude_launcher/core/storage.py,sha256=kEWYH64Wgq7S0_x4OlE-bmzZMPegcPecO6RUxlru13I,7172
|
|
9
9
|
claude_launcher/ui/__init__.py,sha256=ldsGr4N1T3u_S6h1yp0henOvStzyx6nV6hla7assi4M,53
|
|
10
|
-
claude_launcher/ui/_preview_helper.py,sha256=
|
|
10
|
+
claude_launcher/ui/_preview_helper.py,sha256=3j8046jSfxb_N-P8CX_0b8J6sc-FrCjKwzrEvMjuEDU,2246
|
|
11
11
|
claude_launcher/ui/browser.py,sha256=2U4lkeB99Md637KHmUT_pnGfEOpsLwBonqmjCjHTIpU,5624
|
|
12
12
|
claude_launcher/ui/preview.py,sha256=S5DAcrlCR11TazftVu3QYbTdcULXn2Mhk8epoqBPAdM,8966
|
|
13
13
|
claude_launcher/ui/selector.py,sha256=4n1lzakNaZzRtC6GdSeQVvDDSA6rycDPjBqUi0eylmc,10293
|
|
@@ -15,9 +15,9 @@ claude_launcher/utils/__init__.py,sha256=6cemx9bytMG4GZrbEtxhqwzhIaLMRGlRkj90PCO
|
|
|
15
15
|
claude_launcher/utils/git.py,sha256=mry84cLf07qBWdNmeeTA5J4XSMrz0J7--arpI4mVSOw,4102
|
|
16
16
|
claude_launcher/utils/logging.py,sha256=0v9qR3Iln3l4K72LBEdZC6Xzd4L5Qp_zEwQ62QOv9Dg,2218
|
|
17
17
|
claude_launcher/utils/paths.py,sha256=rbREoVCAbGV9-YaSiZg2I0ExmsOnWbjnDKwSd933g9s,1457
|
|
18
|
-
claude_launcher-0.1.
|
|
19
|
-
claude_launcher-0.1.
|
|
20
|
-
claude_launcher-0.1.
|
|
21
|
-
claude_launcher-0.1.
|
|
22
|
-
claude_launcher-0.1.
|
|
23
|
-
claude_launcher-0.1.
|
|
18
|
+
claude_launcher-0.1.1.dist-info/licenses/LICENSE,sha256=3EyvXvCOXv-KdxLeyLGTwf0_q1buihHRW4Y02himIjk,1085
|
|
19
|
+
claude_launcher-0.1.1.dist-info/METADATA,sha256=lpgGitu2ga3LPePbSwQeFuofQmZMSw1jjhoOXM9XCDQ,3404
|
|
20
|
+
claude_launcher-0.1.1.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
21
|
+
claude_launcher-0.1.1.dist-info/entry_points.txt,sha256=9D2wFyj4LPXZmEdIb2V-8GZanXTTNfuhcadIHGuX8iU,60
|
|
22
|
+
claude_launcher-0.1.1.dist-info/top_level.txt,sha256=lcBURRPJ6SvXsbBBnO2DmobA3hCFcSMQz9IVqg4gDr0,16
|
|
23
|
+
claude_launcher-0.1.1.dist-info/RECORD,,
|
|
@@ -1,332 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: claude-launcher
|
|
3
|
-
Version: 0.1.0
|
|
4
|
-
Summary: Fast context switching for Claude Code in multi-project environments
|
|
5
|
-
Author: Solent Labs™
|
|
6
|
-
License: MIT
|
|
7
|
-
Project-URL: Homepage, https://github.com/solentlabs/claude-launcher
|
|
8
|
-
Project-URL: Repository, https://github.com/solentlabs/claude-launcher
|
|
9
|
-
Project-URL: Issues, https://github.com/solentlabs/claude-launcher/issues
|
|
10
|
-
Keywords: claude,launcher,project-switcher,productivity,cli
|
|
11
|
-
Classifier: Development Status :: 3 - Alpha
|
|
12
|
-
Classifier: Intended Audience :: Developers
|
|
13
|
-
Classifier: License :: OSI Approved :: MIT License
|
|
14
|
-
Classifier: Programming Language :: Python :: 3
|
|
15
|
-
Classifier: Programming Language :: Python :: 3.8
|
|
16
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
17
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
18
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
-
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
-
Classifier: Operating System :: OS Independent
|
|
21
|
-
Classifier: Topic :: Software Development
|
|
22
|
-
Classifier: Topic :: Utilities
|
|
23
|
-
Requires-Python: >=3.8
|
|
24
|
-
Description-Content-Type: text/markdown
|
|
25
|
-
License-File: LICENSE
|
|
26
|
-
Requires-Dist: iterfzf>=1.4.0
|
|
27
|
-
Requires-Dist: typer>=0.12.0
|
|
28
|
-
Requires-Dist: platformdirs>=4.0.0
|
|
29
|
-
Requires-Dist: tomli>=2.0.0; python_version < "3.11"
|
|
30
|
-
Requires-Dist: tomli-w>=1.0.0
|
|
31
|
-
Provides-Extra: dev
|
|
32
|
-
Requires-Dist: pytest>=7.0.0; extra == "dev"
|
|
33
|
-
Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
|
|
34
|
-
Requires-Dist: black>=23.0.0; extra == "dev"
|
|
35
|
-
Requires-Dist: mypy>=1.0.0; extra == "dev"
|
|
36
|
-
Requires-Dist: flake8>=6.0.0; extra == "dev"
|
|
37
|
-
Requires-Dist: isort>=5.12.0; extra == "dev"
|
|
38
|
-
Requires-Dist: pre-commit>=3.0.0; extra == "dev"
|
|
39
|
-
Requires-Dist: pytest-mock>=3.10.0; extra == "dev"
|
|
40
|
-
Dynamic: license-file
|
|
41
|
-
|
|
42
|
-
# Claude Launcher
|
|
43
|
-
|
|
44
|
-
Fast context switching for Claude Code in multi-project environments.
|
|
45
|
-
|
|
46
|
-
[](https://www.python.org/downloads/)
|
|
47
|
-
[](https://opensource.org/licenses/MIT)
|
|
48
|
-
|
|
49
|
-
> **Community Project** - This is an independent tool built by the community, not affiliated with Anthropic.
|
|
50
|
-
|
|
51
|
-
## Overview
|
|
52
|
-
|
|
53
|
-
Claude Launcher is a productivity tool for developers working with multiple Claude Code projects. It provides fast project discovery, tree-structured navigation, and intelligent context switching with an interactive fuzzy-search interface powered by fzf.
|
|
54
|
-
|
|
55
|
-
## Features
|
|
56
|
-
|
|
57
|
-
- 🔍 **Auto-discovery** - Automatically finds git repositories in configured directories
|
|
58
|
-
- 📋 **Alphabetical organization** - Projects sorted by path for easy navigation
|
|
59
|
-
- ⚡ **Smart defaults** - Cursor starts on your last opened project
|
|
60
|
-
- 🔎 **Fuzzy search** - Interactive project selection powered by fzf
|
|
61
|
-
- 📄 **Rich previews** - Shows CLAUDE.md, git status, and directory contents
|
|
62
|
-
- 🎯 **Manual paths** - Add non-git projects manually
|
|
63
|
-
- 🔄 **Git clone integration** - Clone and launch repositories directly
|
|
64
|
-
- 🛡️ **Error recovery** - Automatic database corruption recovery
|
|
65
|
-
- 🖥️ **Cross-platform** - Works on Linux, macOS, and Windows
|
|
66
|
-
|
|
67
|
-
## Installation
|
|
68
|
-
|
|
69
|
-
### From PyPI (Recommended)
|
|
70
|
-
```bash
|
|
71
|
-
pip install claude-launcher
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
### From Source (Development)
|
|
75
|
-
```bash
|
|
76
|
-
git clone https://github.com/solentlabs/claude-launcher.git
|
|
77
|
-
cd claude-launcher
|
|
78
|
-
pip install -e .
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
### With Development Dependencies
|
|
82
|
-
```bash
|
|
83
|
-
pip install -e ".[dev]"
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
## Quick Start
|
|
87
|
-
|
|
88
|
-
### Initial Setup
|
|
89
|
-
Run the first-time setup wizard to configure scan directories:
|
|
90
|
-
|
|
91
|
-
```bash
|
|
92
|
-
claude-launcher --setup
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
You'll be prompted to enter directories to scan for projects (e.g., `~/projects`, `~/work`).
|
|
96
|
-
|
|
97
|
-
### Basic Usage
|
|
98
|
-
|
|
99
|
-
```bash
|
|
100
|
-
# Launch interactive project selector
|
|
101
|
-
claude-launcher
|
|
102
|
-
|
|
103
|
-
# Jump directly to last opened project
|
|
104
|
-
claude-launcher --recent
|
|
105
|
-
|
|
106
|
-
# List all discovered projects
|
|
107
|
-
claude-launcher --list
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
### Managing Projects
|
|
111
|
-
|
|
112
|
-
```bash
|
|
113
|
-
# Add a manual project path
|
|
114
|
-
claude-launcher --add
|
|
115
|
-
|
|
116
|
-
# Remove a manual path
|
|
117
|
-
claude-launcher --remove
|
|
118
|
-
|
|
119
|
-
# Clone a git repository
|
|
120
|
-
claude-launcher --clone
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
## Commands
|
|
124
|
-
|
|
125
|
-
| Command | Description |
|
|
126
|
-
|---------|-------------|
|
|
127
|
-
| `claude-launcher` | Launch interactive project selector |
|
|
128
|
-
| `claude-launcher --setup` | Run first-time setup or reconfigure |
|
|
129
|
-
| `claude-launcher --add` | Add a manual project path via directory browser |
|
|
130
|
-
| `claude-launcher --remove` | Remove a manual path |
|
|
131
|
-
| `claude-launcher --list` | List all discovered projects |
|
|
132
|
-
| `claude-launcher --recent` | Jump to last opened project |
|
|
133
|
-
| `claude-launcher --clone` | Clone a git repository |
|
|
134
|
-
|
|
135
|
-
## Configuration
|
|
136
|
-
|
|
137
|
-
Configuration files are stored in platform-specific locations:
|
|
138
|
-
|
|
139
|
-
- **Linux/WSL:** `~/.config/claude-launcher/config.toml`
|
|
140
|
-
- **macOS:** `~/Library/Application Support/claude-launcher/config.toml`
|
|
141
|
-
- **Windows:** `%LOCALAPPDATA%\claude-launcher\config.toml`
|
|
142
|
-
|
|
143
|
-
### Configuration Options
|
|
144
|
-
|
|
145
|
-
```toml
|
|
146
|
-
[scan]
|
|
147
|
-
# Directories to scan for git repositories
|
|
148
|
-
paths = [
|
|
149
|
-
"~/projects",
|
|
150
|
-
"~/work",
|
|
151
|
-
"/mnt/c/Users/username/dev", # WSL example
|
|
152
|
-
]
|
|
153
|
-
|
|
154
|
-
# Maximum directory depth to scan
|
|
155
|
-
max_depth = 5
|
|
156
|
-
|
|
157
|
-
# Directories to skip during scanning
|
|
158
|
-
prune_dirs = [
|
|
159
|
-
"node_modules",
|
|
160
|
-
".cache",
|
|
161
|
-
"venv",
|
|
162
|
-
"__pycache__",
|
|
163
|
-
".git",
|
|
164
|
-
]
|
|
165
|
-
|
|
166
|
-
[ui]
|
|
167
|
-
# Preview pane width (characters)
|
|
168
|
-
preview_width = 70
|
|
169
|
-
|
|
170
|
-
# Show git status in preview
|
|
171
|
-
show_git_status = true
|
|
172
|
-
|
|
173
|
-
[history]
|
|
174
|
-
# Maximum access history entries to keep
|
|
175
|
-
max_entries = 50
|
|
176
|
-
```
|
|
177
|
-
|
|
178
|
-
### Path Expansion
|
|
179
|
-
|
|
180
|
-
Paths in configuration support:
|
|
181
|
-
- Tilde expansion: `~/projects` → `/home/user/projects`
|
|
182
|
-
- Environment variables: `$HOME/projects` → `/home/user/projects`
|
|
183
|
-
|
|
184
|
-
## Data Storage
|
|
185
|
-
|
|
186
|
-
Project data (manual paths, history) is stored in SQLite:
|
|
187
|
-
|
|
188
|
-
- **Linux/WSL:** `~/.local/share/claude-launcher/projects.db`
|
|
189
|
-
- **macOS:** `~/Library/Application Support/claude-launcher/projects.db`
|
|
190
|
-
- **Windows:** `%LOCALAPPDATA%\claude-launcher\projects.db`
|
|
191
|
-
|
|
192
|
-
## How It Works
|
|
193
|
-
|
|
194
|
-
1. **Discovery**: Scans configured directories for `.git` folders
|
|
195
|
-
2. **Manual Paths**: Combines discovered repos with manually added paths
|
|
196
|
-
3. **Sorting**: Sorts all projects alphabetically by path
|
|
197
|
-
4. **Selection**: Shows fuzzy-searchable list with preview pane
|
|
198
|
-
5. **Default Cursor**: Positions cursor on last opened project
|
|
199
|
-
6. **Launch**: Changes to selected directory and executes `claude` command
|
|
200
|
-
7. **Tracking**: Records selection for next session
|
|
201
|
-
|
|
202
|
-
## Preview Pane
|
|
203
|
-
|
|
204
|
-
The preview pane shows:
|
|
205
|
-
|
|
206
|
-
1. **CLAUDE.md** (first 20 lines) - Project-specific Claude Code instructions
|
|
207
|
-
2. **Git Status** - Current working tree status (if git repo)
|
|
208
|
-
3. **Directory Listing** - Top-level files and folders
|
|
209
|
-
|
|
210
|
-
## Windows Terminal Integration
|
|
211
|
-
|
|
212
|
-
Add to your Windows Terminal `settings.json`:
|
|
213
|
-
|
|
214
|
-
```json
|
|
215
|
-
{
|
|
216
|
-
"name": "Claude Launcher",
|
|
217
|
-
"commandline": "wsl.exe -d Ubuntu -- bash -lic claude-launcher",
|
|
218
|
-
"icon": "📂"
|
|
219
|
-
}
|
|
220
|
-
```
|
|
221
|
-
|
|
222
|
-
## Error Handling
|
|
223
|
-
|
|
224
|
-
Claude Launcher includes robust error recovery:
|
|
225
|
-
|
|
226
|
-
- **Database corruption**: Automatically backs up and recreates
|
|
227
|
-
- **Missing manual paths**: Auto-removes from database
|
|
228
|
-
- **Invalid config**: Falls back to sensible defaults
|
|
229
|
-
- **Git failures**: Gracefully degrades (shows project without status)
|
|
230
|
-
- **Permission errors**: Logs and continues scanning
|
|
231
|
-
|
|
232
|
-
## Development
|
|
233
|
-
|
|
234
|
-
### Running Tests
|
|
235
|
-
|
|
236
|
-
```bash
|
|
237
|
-
# Run all tests
|
|
238
|
-
pytest
|
|
239
|
-
|
|
240
|
-
# Run with coverage
|
|
241
|
-
pytest --cov=claude_launcher --cov-report=term-missing
|
|
242
|
-
|
|
243
|
-
# Run specific test file
|
|
244
|
-
pytest tests/test_discovery.py
|
|
245
|
-
|
|
246
|
-
# Run with verbose output
|
|
247
|
-
pytest -v
|
|
248
|
-
```
|
|
249
|
-
|
|
250
|
-
### Code Quality
|
|
251
|
-
|
|
252
|
-
```bash
|
|
253
|
-
# Format code
|
|
254
|
-
black src/ tests/
|
|
255
|
-
|
|
256
|
-
# Type checking
|
|
257
|
-
mypy src/
|
|
258
|
-
|
|
259
|
-
# Lint
|
|
260
|
-
flake8 src/ tests/
|
|
261
|
-
```
|
|
262
|
-
|
|
263
|
-
### Project Structure
|
|
264
|
-
|
|
265
|
-
```
|
|
266
|
-
claude-workflow/
|
|
267
|
-
├── src/claude_launcher/
|
|
268
|
-
│ ├── core/ # Core functionality
|
|
269
|
-
│ │ ├── models.py # Data models
|
|
270
|
-
│ │ ├── config.py # Configuration management
|
|
271
|
-
│ │ ├── discovery.py # Project discovery
|
|
272
|
-
│ │ └── storage.py # SQLite storage
|
|
273
|
-
│ ├── ui/ # User interface
|
|
274
|
-
│ │ ├── selector.py # Main TUI
|
|
275
|
-
│ │ ├── preview.py # Preview generation
|
|
276
|
-
│ │ └── browser.py # Directory browser
|
|
277
|
-
│ ├── utils/ # Utilities
|
|
278
|
-
│ │ └── git.py # Git operations
|
|
279
|
-
│ └── cli.py # CLI entry point
|
|
280
|
-
└── tests/ # Test suite
|
|
281
|
-
```
|
|
282
|
-
|
|
283
|
-
## Requirements
|
|
284
|
-
|
|
285
|
-
- **Python**: 3.8 or higher
|
|
286
|
-
- **fzf**: Interactive fuzzy finder ([installation guide](https://github.com/junegunn/fzf#installation))
|
|
287
|
-
- Ubuntu/Debian: `sudo apt install fzf`
|
|
288
|
-
- macOS: `brew install fzf`
|
|
289
|
-
- Windows: `choco install fzf`
|
|
290
|
-
- **Git**: For repository discovery and status
|
|
291
|
-
- **Claude Code CLI**: Must be installed and in PATH
|
|
292
|
-
|
|
293
|
-
## Troubleshooting
|
|
294
|
-
|
|
295
|
-
### "claude command not found"
|
|
296
|
-
Ensure Claude Code CLI is installed and accessible in your PATH.
|
|
297
|
-
|
|
298
|
-
### No projects found
|
|
299
|
-
1. Run `claude-launcher --setup` to configure scan paths
|
|
300
|
-
2. Verify paths exist and contain git repositories
|
|
301
|
-
3. Check permissions on directories
|
|
302
|
-
|
|
303
|
-
### Database errors
|
|
304
|
-
The database auto-recovers from corruption. Check for `.db.backup.*` files if you need to restore data.
|
|
305
|
-
|
|
306
|
-
### Permission denied during scan
|
|
307
|
-
Some directories may not be readable. These are automatically skipped with a warning.
|
|
308
|
-
|
|
309
|
-
## Contributing
|
|
310
|
-
|
|
311
|
-
Contributions are welcome! Please:
|
|
312
|
-
|
|
313
|
-
1. Fork the repository
|
|
314
|
-
2. Create a feature branch
|
|
315
|
-
3. Add tests for new functionality
|
|
316
|
-
4. Ensure all tests pass
|
|
317
|
-
5. Submit a pull request
|
|
318
|
-
|
|
319
|
-
## License
|
|
320
|
-
|
|
321
|
-
MIT License - see [LICENSE](LICENSE) file for details.
|
|
322
|
-
|
|
323
|
-
## Changelog
|
|
324
|
-
|
|
325
|
-
### 0.1.0 (Initial Release)
|
|
326
|
-
- Project discovery with git repository scanning
|
|
327
|
-
- Alphabetical sorting with last-opened default
|
|
328
|
-
- Interactive fuzzy search with preview pane
|
|
329
|
-
- Manual path management
|
|
330
|
-
- Git clone integration
|
|
331
|
-
- Error recovery
|
|
332
|
-
- Cross-platform support
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|