tasktree-manager 2.6.0__tar.gz → 2.7.1__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.
- {tasktree_manager-2.6.0 → tasktree_manager-2.7.1}/CHANGELOG.md +16 -0
- {tasktree_manager-2.6.0 → tasktree_manager-2.7.1}/PKG-INFO +1 -1
- {tasktree_manager-2.6.0 → tasktree_manager-2.7.1}/README.md +4 -4
- {tasktree_manager-2.6.0 → tasktree_manager-2.7.1}/docs/configuration.md +32 -20
- {tasktree_manager-2.6.0 → tasktree_manager-2.7.1}/docs/user-guide.md +3 -2
- {tasktree_manager-2.6.0 → tasktree_manager-2.7.1}/pyproject.toml +1 -1
- {tasktree_manager-2.6.0 → tasktree_manager-2.7.1}/tasktree_manager/_version.py +2 -2
- {tasktree_manager-2.6.0 → tasktree_manager-2.7.1}/tasktree_manager/app.py +181 -104
- {tasktree_manager-2.6.0 → tasktree_manager-2.7.1}/tasktree_manager/services/config.py +5 -3
- {tasktree_manager-2.6.0 → tasktree_manager-2.7.1}/tasktree_manager/services/task_manager.py +77 -32
- tasktree_manager-2.7.1/tasktree_manager/themes.py +203 -0
- tasktree_manager-2.7.1/tasktree_manager/widgets/app_header.py +64 -0
- {tasktree_manager-2.6.0 → tasktree_manager-2.7.1}/tasktree_manager/widgets/create_modal.py +31 -10
- {tasktree_manager-2.6.0 → tasktree_manager-2.7.1}/tasktree_manager/widgets/setup_modal.py +14 -6
- {tasktree_manager-2.6.0 → tasktree_manager-2.7.1}/tasktree_manager/widgets/status_panel.py +14 -16
- {tasktree_manager-2.6.0 → tasktree_manager-2.7.1}/tasktree_manager/widgets/worktree_list.py +1 -1
- {tasktree_manager-2.6.0 → tasktree_manager-2.7.1}/tests/test_app.py +3 -1
- {tasktree_manager-2.6.0 → tasktree_manager-2.7.1}/tests/test_config.py +1 -1
- {tasktree_manager-2.6.0 → tasktree_manager-2.7.1}/tests/test_modals.py +52 -0
- {tasktree_manager-2.6.0 → tasktree_manager-2.7.1}/tests/test_task_manager.py +135 -0
- {tasktree_manager-2.6.0 → tasktree_manager-2.7.1}/.claude/skills/textual-tui/SKILL.md +0 -0
- {tasktree_manager-2.6.0 → tasktree_manager-2.7.1}/.claude/skills/textual-tui/assets/README.md +0 -0
- {tasktree_manager-2.6.0 → tasktree_manager-2.7.1}/.claude/skills/textual-tui/assets/dashboard_app.py +0 -0
- {tasktree_manager-2.6.0 → tasktree_manager-2.7.1}/.claude/skills/textual-tui/assets/data_viewer.py +0 -0
- {tasktree_manager-2.6.0 → tasktree_manager-2.7.1}/.claude/skills/textual-tui/assets/todo_app.py +0 -0
- {tasktree_manager-2.6.0 → tasktree_manager-2.7.1}/.claude/skills/textual-tui/assets/worker_demo.py +0 -0
- {tasktree_manager-2.6.0 → tasktree_manager-2.7.1}/.claude/skills/textual-tui/references/layouts.md +0 -0
- {tasktree_manager-2.6.0 → tasktree_manager-2.7.1}/.claude/skills/textual-tui/references/official-guides-index.md +0 -0
- {tasktree_manager-2.6.0 → tasktree_manager-2.7.1}/.claude/skills/textual-tui/references/styling.md +0 -0
- {tasktree_manager-2.6.0 → tasktree_manager-2.7.1}/.claude/skills/textual-tui/references/widgets.md +0 -0
- {tasktree_manager-2.6.0 → tasktree_manager-2.7.1}/.github/templates/CHANGELOG.md.j2 +0 -0
- {tasktree_manager-2.6.0 → tasktree_manager-2.7.1}/.github/workflows/ci.yml +0 -0
- {tasktree_manager-2.6.0 → tasktree_manager-2.7.1}/.github/workflows/release.yml +0 -0
- {tasktree_manager-2.6.0 → tasktree_manager-2.7.1}/.gitignore +0 -0
- {tasktree_manager-2.6.0 → tasktree_manager-2.7.1}/CONTRIBUTING.md +0 -0
- {tasktree_manager-2.6.0 → tasktree_manager-2.7.1}/LICENSE +0 -0
- {tasktree_manager-2.6.0 → tasktree_manager-2.7.1}/OPENSPEC.md +0 -0
- {tasktree_manager-2.6.0 → tasktree_manager-2.7.1}/ROADMAP.md +0 -0
- {tasktree_manager-2.6.0 → tasktree_manager-2.7.1}/docs/claude-code-integration-spec.md +0 -0
- {tasktree_manager-2.6.0 → tasktree_manager-2.7.1}/docs/installation.md +0 -0
- {tasktree_manager-2.6.0 → tasktree_manager-2.7.1}/docs/troubleshooting.md +0 -0
- {tasktree_manager-2.6.0 → tasktree_manager-2.7.1}/mise.toml +0 -0
- {tasktree_manager-2.6.0 → tasktree_manager-2.7.1}/scripts/bump_version.py +0 -0
- {tasktree_manager-2.6.0 → tasktree_manager-2.7.1}/tasktree_manager/__init__.py +0 -0
- {tasktree_manager-2.6.0 → tasktree_manager-2.7.1}/tasktree_manager/commands.py +0 -0
- {tasktree_manager-2.6.0 → tasktree_manager-2.7.1}/tasktree_manager/services/__init__.py +0 -0
- {tasktree_manager-2.6.0 → tasktree_manager-2.7.1}/tasktree_manager/services/claude_hooks.py +0 -0
- {tasktree_manager-2.6.0 → tasktree_manager-2.7.1}/tasktree_manager/services/git_ops.py +0 -0
- {tasktree_manager-2.6.0 → tasktree_manager-2.7.1}/tasktree_manager/services/models.py +0 -0
- {tasktree_manager-2.6.0 → tasktree_manager-2.7.1}/tasktree_manager/widgets/__init__.py +0 -0
- {tasktree_manager-2.6.0 → tasktree_manager-2.7.1}/tasktree_manager/widgets/messages_panel.py +0 -0
- {tasktree_manager-2.6.0 → tasktree_manager-2.7.1}/tasktree_manager/widgets/task_list.py +0 -0
- {tasktree_manager-2.6.0 → tasktree_manager-2.7.1}/tests/__init__.py +0 -0
- {tasktree_manager-2.6.0 → tasktree_manager-2.7.1}/tests/conftest.py +0 -0
- {tasktree_manager-2.6.0 → tasktree_manager-2.7.1}/tests/test_claude_hooks.py +0 -0
- {tasktree_manager-2.6.0 → tasktree_manager-2.7.1}/tests/test_commands.py +0 -0
- {tasktree_manager-2.6.0 → tasktree_manager-2.7.1}/tests/test_git_ops.py +0 -0
- {tasktree_manager-2.6.0 → tasktree_manager-2.7.1}/tests/test_integration_git.py +0 -0
- {tasktree_manager-2.6.0 → tasktree_manager-2.7.1}/tests/test_memory.py +0 -0
- {tasktree_manager-2.6.0 → tasktree_manager-2.7.1}/tests/test_messages_panel.py +0 -0
- {tasktree_manager-2.6.0 → tasktree_manager-2.7.1}/tests/test_setup_modal.py +0 -0
- {tasktree_manager-2.6.0 → tasktree_manager-2.7.1}/tests/test_status_panel.py +0 -0
|
@@ -15,6 +15,22 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
15
15
|
- Git hooks support
|
|
16
16
|
- Custom task metadata
|
|
17
17
|
|
|
18
|
+
## [2.7.1] - 2026-07-13
|
|
19
|
+
|
|
20
|
+
### Changed
|
|
21
|
+
- **tests**: Format new test classes with ruff
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
## [2.7.0] - 2026-07-13
|
|
25
|
+
|
|
26
|
+
### Added
|
|
27
|
+
- **ui**: Design-system themes, layered panels, theme cycling
|
|
28
|
+
|
|
29
|
+
### Fixed
|
|
30
|
+
- **claude**: Copy repo CLAUDE.md into worktrees instead of stub
|
|
31
|
+
- **worktree**: Base new worktrees on origin base branch
|
|
32
|
+
|
|
33
|
+
|
|
18
34
|
## [2.6.0] - 2026-07-13
|
|
19
35
|
|
|
20
36
|
### Changed
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
- 🌳 **Git Worktree Management** - Create, delete, and manage worktrees seamlessly
|
|
15
15
|
- 📊 **Real-Time Status** - See uncommitted changes, branch info, and sync status at a glance
|
|
16
16
|
- 🔀 **Sorting & Grouping** - Sort tasks by name/date/status, group worktrees by dirty/clean
|
|
17
|
-
- 🎨 **Beautiful Themes** -
|
|
17
|
+
- 🎨 **Beautiful Themes** - lazygit-inspired default plus 20+ themes (Catppuccin, Tokyo Night, Nord, ...) via Command Palette (Ctrl+P)
|
|
18
18
|
- ⌨️ **Keyboard-First** - Navigate and control everything without touching the mouse
|
|
19
19
|
- 🚀 **Fast & Responsive** - Parallel git operations with loading indicators
|
|
20
20
|
- 🔧 **Flexible Configuration** - TOML config file, custom keybindings, environment variables
|
|
@@ -83,10 +83,10 @@ For detailed workflows and examples, see the [User Guide](docs/user-guide.md).
|
|
|
83
83
|
| `c` | Claude (resume) | `C` | Claude (new) |
|
|
84
84
|
| `r` | Refresh | `s` | Sort tasks |
|
|
85
85
|
| `S` | Group worktrees | `m` | Messages |
|
|
86
|
-
| `
|
|
87
|
-
| `q` | Quit |
|
|
86
|
+
| `t` | Cycle theme | `Tab` | Next panel |
|
|
87
|
+
| `?` | Show help | `q` | Quit |
|
|
88
88
|
|
|
89
|
-
**Themes:**
|
|
89
|
+
**Themes:** The default `tasktree` theme pairs a lazygit-classic ANSI palette with layered panels, numbered title bars, green focus borders, and a keycap footer. Five more design-system palettes ship tuned to the same shape — tokyo-night, catppuccin-mocha, gruvbox, dracula, nord — and every other Textual built-in theme works too (`Ctrl+P` to switch); the whole UI is styled with Textual design tokens, so any theme restyles it consistently.
|
|
90
90
|
|
|
91
91
|
## 🏗️ How It Works
|
|
92
92
|
|
|
@@ -85,9 +85,10 @@ tasks_dir = "/Users/username/tasks"
|
|
|
85
85
|
[ui]
|
|
86
86
|
|
|
87
87
|
# Theme to use for the interface
|
|
88
|
-
# Options:
|
|
89
|
-
#
|
|
90
|
-
|
|
88
|
+
# Options: tasktree (default), tokyo-night, catppuccin-mocha, catppuccin-latte,
|
|
89
|
+
# catppuccin-frappe, catppuccin-macchiato, nord, gruvbox, dracula, monokai,
|
|
90
|
+
# rose-pine, textual-dark, textual-light, ...
|
|
91
|
+
theme = "tasktree"
|
|
91
92
|
|
|
92
93
|
# Show hidden files in file listings
|
|
93
94
|
# Default: false
|
|
@@ -202,6 +203,9 @@ cursor_up = "k" # Move cursor up
|
|
|
202
203
|
cycle_sort = "s" # Cycle task sort mode
|
|
203
204
|
toggle_grouping = "S" # Toggle worktree grouping (shift+s)
|
|
204
205
|
|
|
206
|
+
# Appearance
|
|
207
|
+
cycle_theme = "t" # Cycle through the design-system themes
|
|
208
|
+
|
|
205
209
|
# ============================================================================
|
|
206
210
|
# Symlinks
|
|
207
211
|
# ============================================================================
|
|
@@ -258,7 +262,7 @@ tasks_dir = "/Volumes/FastSSD/worktrees"
|
|
|
258
262
|
|
|
259
263
|
| Option | Type | Default | Environment Variable | Description |
|
|
260
264
|
|--------------------|---------|-----------------|-----------------------|------------------------------------------|
|
|
261
|
-
| `theme` | string | `
|
|
265
|
+
| `theme` | string | `tasktree` | `TASKTREE_THEME` | Color theme for the interface |
|
|
262
266
|
| `show_hidden_files` | boolean | `false` | - | Show hidden files in listings |
|
|
263
267
|
| `refresh_interval` | integer | `30` | - | Auto-refresh interval in seconds (0 = disabled) |
|
|
264
268
|
|
|
@@ -266,13 +270,21 @@ tasks_dir = "/Volumes/FastSSD/worktrees"
|
|
|
266
270
|
|
|
267
271
|
Available themes (press `Ctrl+P` in app to switch):
|
|
268
272
|
|
|
269
|
-
- `
|
|
270
|
-
- `
|
|
271
|
-
- `
|
|
272
|
-
- `gruvbox` -
|
|
273
|
-
- `
|
|
274
|
-
- `
|
|
275
|
-
|
|
273
|
+
- `tasktree` - Default: lazygit-classic ANSI palette with green focus borders
|
|
274
|
+
- `tokyo-night` - Blue accent on deep blue-black
|
|
275
|
+
- `catppuccin-mocha` - Mauve accent, soothing pastels
|
|
276
|
+
- `gruvbox` - Orange accent, retro warm
|
|
277
|
+
- `dracula` - Purple accent, high-contrast pastels
|
|
278
|
+
- `nord` - Frost cyan accent, arctic palette
|
|
279
|
+
|
|
280
|
+
These six come from the tasktree design system, with matched panel layering
|
|
281
|
+
and selection colors. All other Textual built-in themes also work
|
|
282
|
+
(`catppuccin-latte`, `rose-pine`, `monokai`, `solarized-dark`,
|
|
283
|
+
`textual-dark`/`-light`, ...).
|
|
284
|
+
|
|
285
|
+
The whole UI is styled with Textual design tokens (panel surfaces, focus
|
|
286
|
+
borders, selection bars, footer keycaps), so every theme restyles all of it
|
|
287
|
+
consistently.
|
|
276
288
|
|
|
277
289
|
### `show_hidden_files`
|
|
278
290
|
|
|
@@ -500,6 +512,7 @@ All 22 customizable keybindings with descriptions:
|
|
|
500
512
|
|-------------------|---------|------------------------------------------|----------------------------------|
|
|
501
513
|
| `cycle_sort` | `s` | Cycle task sort mode | `cycle_sort = "ctrl+s"` |
|
|
502
514
|
| `toggle_grouping` | `S` | Toggle worktree grouping by dirty/clean | `toggle_grouping = "ctrl+g"` |
|
|
515
|
+
| `cycle_theme` | `t` | Cycle through the design-system themes | `cycle_theme = "ctrl+t"` |
|
|
503
516
|
|
|
504
517
|
### Available Key Syntax
|
|
505
518
|
|
|
@@ -614,15 +627,14 @@ TASKTREE_THEME=dracula tasktree-manager
|
|
|
614
627
|
|
|
615
628
|
### Theme Descriptions
|
|
616
629
|
|
|
617
|
-
| Theme
|
|
618
|
-
|
|
619
|
-
| `
|
|
620
|
-
| `
|
|
621
|
-
| `
|
|
622
|
-
| `gruvbox`
|
|
623
|
-
| `
|
|
624
|
-
| `
|
|
625
|
-
| `dracula` | Pastel dark | Popular, easy to read |
|
|
630
|
+
| Theme | Style | Best For |
|
|
631
|
+
|----------------------|---------------------|-----------------------------------|
|
|
632
|
+
| `tasktree` | Lazygit-style ANSI | Default, terminal-native feel |
|
|
633
|
+
| `tokyo-night` | Modern dark | Clean, professional |
|
|
634
|
+
| `catppuccin-mocha` | Soothing pastel | Popular, easy on the eyes |
|
|
635
|
+
| `gruvbox` | Retro warm | Nostalgic, comfortable |
|
|
636
|
+
| `dracula` | Pastel dark | Popular, easy to read |
|
|
637
|
+
| `nord` | Arctic blue | Low-contrast, easy on eyes |
|
|
626
638
|
|
|
627
639
|
### Theme Persistence
|
|
628
640
|
|
|
@@ -208,7 +208,7 @@ Shows worktrees for the selected task:
|
|
|
208
208
|
|
|
209
209
|
**Navigation:**
|
|
210
210
|
- `j/k` or arrow keys: Move up/down
|
|
211
|
-
- `S`: Toggle grouping by dirty/clean (panel
|
|
211
|
+
- `S`: Toggle grouping by dirty/clean (panel subtitle shows "grouped" when active)
|
|
212
212
|
- Highlighting a worktree: Shows detailed status in bottom panel
|
|
213
213
|
|
|
214
214
|
### Bottom Panel: Status Display
|
|
@@ -277,6 +277,7 @@ what is displayed. Press `?` for the full reference at any time.
|
|
|
277
277
|
|-----|-----------------------|------------------------------------------------------------|
|
|
278
278
|
| `s` | Cycle sort mode | Cycle through: name ↑/↓, date ↑/↓, dirty first, clean first |
|
|
279
279
|
| `S` | Toggle grouping | Group worktrees by dirty/clean status (Shift+S) |
|
|
280
|
+
| `t` | Cycle theme | Cycle tasktree → tokyo-night → catppuccin (4x) → gruvbox → dracula → nord |
|
|
280
281
|
|
|
281
282
|
**Sort modes:**
|
|
282
283
|
- `by name ↑` - Alphabetical A-Z (default)
|
|
@@ -363,7 +364,7 @@ Useful when you're spinning up several similar tasks that share the same set of
|
|
|
363
364
|
- `c` opens Claude Code CLI in a new Ghostty terminal tab at the task directory.
|
|
364
365
|
- If `~/.claude/projects/<task-folder>/` already has session transcripts, runs `claude -r` to pick from them; otherwise runs `claude` to start fresh.
|
|
365
366
|
- `C` opens the Claude desktop app via the `claude://code/new?folder=<task-folder>` URL scheme.
|
|
366
|
-
- The CLI variant (`c`) generates `CLAUDE.md`
|
|
367
|
+
- The CLI variant (`c`) generates a task-level `CLAUDE.md` with task/worktree context, copies each repo's own `CLAUDE.md` into worktrees whose branch predates it (never generating stub content), and installs hooks that report session status back to tasktree-manager.
|
|
367
368
|
- Session status (`⟳` running, `!` waiting, `✓` ended) appears next to the task name
|
|
368
369
|
- Both variants point the session's Claude Code auto-memory at a shared pool (`claude_memory_dir`, default `~/.claude/tasktree-memory`). Task folders are not git repos, so without this each task would get its own memory directory that is orphaned when the task is deleted; with the shared pool, what Claude learns in one task carries over to future tasks.
|
|
369
370
|
|
|
@@ -70,7 +70,7 @@ version-file = "tasktree_manager/_version.py"
|
|
|
70
70
|
# Semantic Release Configuration
|
|
71
71
|
[tool.semantic_release]
|
|
72
72
|
version_toml = ["pyproject.toml:tool.semantic_release.version"]
|
|
73
|
-
version = "2.
|
|
73
|
+
version = "2.7.1"
|
|
74
74
|
tag_format = "v{version}"
|
|
75
75
|
branch = "main"
|
|
76
76
|
commit_message = "chore(release): {version} [skip ci]"
|
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '2.
|
|
22
|
-
__version_tuple__ = version_tuple = (2,
|
|
21
|
+
__version__ = version = '2.7.1'
|
|
22
|
+
__version_tuple__ = version_tuple = (2, 7, 1)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|