tasktree-manager 2.2.0__tar.gz → 2.3.0__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.2.0 → tasktree_manager-2.3.0}/CHANGELOG.md +9 -0
- {tasktree_manager-2.2.0 → tasktree_manager-2.3.0}/PKG-INFO +1 -1
- {tasktree_manager-2.2.0 → tasktree_manager-2.3.0}/docs/configuration.md +11 -9
- {tasktree_manager-2.2.0 → tasktree_manager-2.3.0}/docs/user-guide.md +17 -7
- {tasktree_manager-2.2.0 → tasktree_manager-2.3.0}/pyproject.toml +1 -1
- tasktree_manager-2.3.0/tasktree_manager/_version.py +24 -0
- {tasktree_manager-2.2.0 → tasktree_manager-2.3.0}/tasktree_manager/app.py +377 -250
- {tasktree_manager-2.2.0 → tasktree_manager-2.3.0}/tasktree_manager/services/claude_hooks.py +13 -0
- {tasktree_manager-2.2.0 → tasktree_manager-2.3.0}/tasktree_manager/services/config.py +34 -43
- {tasktree_manager-2.2.0 → tasktree_manager-2.3.0}/tasktree_manager/services/git_ops.py +125 -71
- {tasktree_manager-2.2.0 → tasktree_manager-2.3.0}/tasktree_manager/services/models.py +10 -1
- {tasktree_manager-2.2.0 → tasktree_manager-2.3.0}/tasktree_manager/services/task_manager.py +34 -14
- {tasktree_manager-2.2.0 → tasktree_manager-2.3.0}/tasktree_manager/widgets/create_modal.py +29 -7
- {tasktree_manager-2.2.0 → tasktree_manager-2.3.0}/tasktree_manager/widgets/status_panel.py +23 -20
- {tasktree_manager-2.2.0 → tasktree_manager-2.3.0}/tasktree_manager/widgets/task_list.py +9 -3
- {tasktree_manager-2.2.0 → tasktree_manager-2.3.0}/tests/test_app.py +64 -1
- {tasktree_manager-2.2.0 → tasktree_manager-2.3.0}/tests/test_git_ops.py +142 -0
- tasktree_manager-2.2.0/tasktree_manager/_version.py +0 -34
- {tasktree_manager-2.2.0 → tasktree_manager-2.3.0}/.claude/skills/textual-tui/SKILL.md +0 -0
- {tasktree_manager-2.2.0 → tasktree_manager-2.3.0}/.claude/skills/textual-tui/assets/README.md +0 -0
- {tasktree_manager-2.2.0 → tasktree_manager-2.3.0}/.claude/skills/textual-tui/assets/dashboard_app.py +0 -0
- {tasktree_manager-2.2.0 → tasktree_manager-2.3.0}/.claude/skills/textual-tui/assets/data_viewer.py +0 -0
- {tasktree_manager-2.2.0 → tasktree_manager-2.3.0}/.claude/skills/textual-tui/assets/todo_app.py +0 -0
- {tasktree_manager-2.2.0 → tasktree_manager-2.3.0}/.claude/skills/textual-tui/assets/worker_demo.py +0 -0
- {tasktree_manager-2.2.0 → tasktree_manager-2.3.0}/.claude/skills/textual-tui/references/layouts.md +0 -0
- {tasktree_manager-2.2.0 → tasktree_manager-2.3.0}/.claude/skills/textual-tui/references/official-guides-index.md +0 -0
- {tasktree_manager-2.2.0 → tasktree_manager-2.3.0}/.claude/skills/textual-tui/references/styling.md +0 -0
- {tasktree_manager-2.2.0 → tasktree_manager-2.3.0}/.claude/skills/textual-tui/references/widgets.md +0 -0
- {tasktree_manager-2.2.0 → tasktree_manager-2.3.0}/.github/templates/CHANGELOG.md.j2 +0 -0
- {tasktree_manager-2.2.0 → tasktree_manager-2.3.0}/.github/workflows/ci.yml +0 -0
- {tasktree_manager-2.2.0 → tasktree_manager-2.3.0}/.github/workflows/release.yml +0 -0
- {tasktree_manager-2.2.0 → tasktree_manager-2.3.0}/.gitignore +0 -0
- {tasktree_manager-2.2.0 → tasktree_manager-2.3.0}/CONTRIBUTING.md +0 -0
- {tasktree_manager-2.2.0 → tasktree_manager-2.3.0}/LICENSE +0 -0
- {tasktree_manager-2.2.0 → tasktree_manager-2.3.0}/OPENSPEC.md +0 -0
- {tasktree_manager-2.2.0 → tasktree_manager-2.3.0}/README.md +0 -0
- {tasktree_manager-2.2.0 → tasktree_manager-2.3.0}/ROADMAP.md +0 -0
- {tasktree_manager-2.2.0 → tasktree_manager-2.3.0}/docs/claude-code-integration-spec.md +0 -0
- {tasktree_manager-2.2.0 → tasktree_manager-2.3.0}/docs/installation.md +0 -0
- {tasktree_manager-2.2.0 → tasktree_manager-2.3.0}/docs/troubleshooting.md +0 -0
- {tasktree_manager-2.2.0 → tasktree_manager-2.3.0}/mise.toml +0 -0
- {tasktree_manager-2.2.0 → tasktree_manager-2.3.0}/scripts/bump_version.py +0 -0
- {tasktree_manager-2.2.0 → tasktree_manager-2.3.0}/tasktree_manager/__init__.py +0 -0
- {tasktree_manager-2.2.0 → tasktree_manager-2.3.0}/tasktree_manager/services/__init__.py +0 -0
- {tasktree_manager-2.2.0 → tasktree_manager-2.3.0}/tasktree_manager/widgets/__init__.py +0 -0
- {tasktree_manager-2.2.0 → tasktree_manager-2.3.0}/tasktree_manager/widgets/messages_panel.py +0 -0
- {tasktree_manager-2.2.0 → tasktree_manager-2.3.0}/tasktree_manager/widgets/setup_modal.py +0 -0
- {tasktree_manager-2.2.0 → tasktree_manager-2.3.0}/tasktree_manager/widgets/worktree_list.py +0 -0
- {tasktree_manager-2.2.0 → tasktree_manager-2.3.0}/tests/__init__.py +0 -0
- {tasktree_manager-2.2.0 → tasktree_manager-2.3.0}/tests/conftest.py +0 -0
- {tasktree_manager-2.2.0 → tasktree_manager-2.3.0}/tests/test_config.py +0 -0
- {tasktree_manager-2.2.0 → tasktree_manager-2.3.0}/tests/test_integration_git.py +0 -0
- {tasktree_manager-2.2.0 → tasktree_manager-2.3.0}/tests/test_memory.py +0 -0
- {tasktree_manager-2.2.0 → tasktree_manager-2.3.0}/tests/test_messages_panel.py +0 -0
- {tasktree_manager-2.2.0 → tasktree_manager-2.3.0}/tests/test_modals.py +0 -0
- {tasktree_manager-2.2.0 → tasktree_manager-2.3.0}/tests/test_setup_modal.py +0 -0
- {tasktree_manager-2.2.0 → tasktree_manager-2.3.0}/tests/test_status_panel.py +0 -0
- {tasktree_manager-2.2.0 → tasktree_manager-2.3.0}/tests/test_task_manager.py +0 -0
|
@@ -15,6 +15,15 @@ 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.3.0] - 2026-06-10
|
|
19
|
+
|
|
20
|
+
### Added
|
|
21
|
+
- Add task cloning, worktree deletion, and non-blocking git ops (#4)
|
|
22
|
+
|
|
23
|
+
### Fixed
|
|
24
|
+
- Honor git timeout, real status codes, non-blocking delete (#5)
|
|
25
|
+
|
|
26
|
+
|
|
18
27
|
## [2.2.0] - 2026-03-06
|
|
19
28
|
|
|
20
29
|
### Added
|
|
@@ -166,8 +166,8 @@ pull_all = "P" # Pull all worktrees in current task (shift+p)
|
|
|
166
166
|
refresh = "r" # Refresh git status
|
|
167
167
|
|
|
168
168
|
# Claude Code integration
|
|
169
|
-
open_claude_resume = "c" #
|
|
170
|
-
|
|
169
|
+
open_claude_resume = "c" # Open Claude CLI (resume if a session exists, else new)
|
|
170
|
+
open_claude_gui_code = "C" # Open Claude desktop on Code page in task folder (shift+c)
|
|
171
171
|
|
|
172
172
|
# Messages panel
|
|
173
173
|
toggle_messages = "m" # Show/hide the activity messages panel
|
|
@@ -294,7 +294,8 @@ refresh_interval = 15 # Refresh every 15 seconds
|
|
|
294
294
|
- Most users should use manual push (`p` key) for control
|
|
295
295
|
|
|
296
296
|
**`timeout`:**
|
|
297
|
-
- Timeout for git commands (
|
|
297
|
+
- Timeout for git commands that touch the network (fetch, push, pull) and worktree creation
|
|
298
|
+
- Local status queries use a fixed short timeout (5s) and are not affected
|
|
298
299
|
- Increase for slow networks or large repositories
|
|
299
300
|
- Set to `60` or higher for very large repos
|
|
300
301
|
|
|
@@ -417,7 +418,7 @@ blocklist = ["*"]
|
|
|
417
418
|
|
|
418
419
|
## Keybindings Reference
|
|
419
420
|
|
|
420
|
-
All
|
|
421
|
+
All 22 customizable keybindings with descriptions:
|
|
421
422
|
|
|
422
423
|
### Application Control
|
|
423
424
|
|
|
@@ -431,6 +432,7 @@ All 21 customizable keybindings with descriptions:
|
|
|
431
432
|
| Action | Default | Description | Customization Example |
|
|
432
433
|
|---------------|---------|----------------------------------------|----------------------------|
|
|
433
434
|
| `new_task` | `n` | Create a new task | `new_task = "ctrl+n"` |
|
|
435
|
+
| `clone_task` | `y` | Clone current task (same repos, new name) | `clone_task = "ctrl+y"` |
|
|
434
436
|
| `add_repo` | `a` | Add repository to current task | `add_repo = "ctrl+a"` |
|
|
435
437
|
| `delete_task` | `d` | Delete/finish current task | `delete_task = "delete"` |
|
|
436
438
|
|
|
@@ -448,11 +450,11 @@ All 21 customizable keybindings with descriptions:
|
|
|
448
450
|
|
|
449
451
|
### Claude Code Integration
|
|
450
452
|
|
|
451
|
-
| Action
|
|
452
|
-
|
|
453
|
-
| `open_claude_resume`
|
|
454
|
-
| `
|
|
455
|
-
| `toggle_messages`
|
|
453
|
+
| Action | Default | Description | Customization Example |
|
|
454
|
+
|-----------------------|---------|------------------------------------------------------|--------------------------------------|
|
|
455
|
+
| `open_claude_resume` | `c` | Open Claude CLI (resume if session exists, else new) | `open_claude_resume = "ctrl+c"` |
|
|
456
|
+
| `open_claude_gui_code`| `C` | Open Claude desktop on Code page in task folder | `open_claude_gui_code = "ctrl+shift+c"` |
|
|
457
|
+
| `toggle_messages` | `m` | Show/hide activity messages panel | `toggle_messages = "ctrl+m"` |
|
|
456
458
|
|
|
457
459
|
### Navigation
|
|
458
460
|
|
|
@@ -285,6 +285,7 @@ All keybindings can be customized in [`config.toml`](configuration.md).
|
|
|
285
285
|
| Key | Action | Description |
|
|
286
286
|
|-----|------------------|-----------------------------------------------------------|
|
|
287
287
|
| `n` | New task | Create a new task with selected repositories |
|
|
288
|
+
| `y` | Clone task | Create a new task pre-populated with the current task's repos |
|
|
288
289
|
| `a` | Add repository | Add additional repositories to the current task |
|
|
289
290
|
| `d` | Delete/finish | Delete current task and remove worktrees |
|
|
290
291
|
|
|
@@ -296,6 +297,14 @@ All keybindings can be customized in [`config.toml`](configuration.md).
|
|
|
296
297
|
5. Select repos with `Space` (can select multiple)
|
|
297
298
|
6. Tab to "Create" button, press `Enter`
|
|
298
299
|
|
|
300
|
+
**Clone task workflow:**
|
|
301
|
+
Useful when you're spinning up several similar tasks that share the same set of repos.
|
|
302
|
+
|
|
303
|
+
1. Highlight the source task in the left panel
|
|
304
|
+
2. Press `y`
|
|
305
|
+
3. The modal opens with the source task's repos already selected — just enter a new task name
|
|
306
|
+
4. Adjust the repo selection or base branch if needed, then press `Enter`
|
|
307
|
+
|
|
299
308
|
**Task deletion workflow:**
|
|
300
309
|
1. Highlight task in left panel
|
|
301
310
|
2. Press `d`
|
|
@@ -333,15 +342,16 @@ All keybindings can be customized in [`config.toml`](configuration.md).
|
|
|
333
342
|
|
|
334
343
|
### Claude Code Integration
|
|
335
344
|
|
|
336
|
-
| Key | Action | Description
|
|
337
|
-
|
|
338
|
-
| `c` | Open Claude
|
|
339
|
-
| `C` | Open Claude
|
|
345
|
+
| Key | Action | Description |
|
|
346
|
+
|---------|-------------------------|------------------------------------------------------------|
|
|
347
|
+
| `c` | Open Claude CLI | Resume the task's Claude Code session if one exists, otherwise start a new one |
|
|
348
|
+
| `C` | Open Claude desktop | Open the Claude desktop app on the Code page at the task folder |
|
|
340
349
|
|
|
341
350
|
**How it works:**
|
|
342
|
-
-
|
|
343
|
-
-
|
|
344
|
-
-
|
|
351
|
+
- `c` opens Claude Code CLI in a new Ghostty terminal tab at the task directory.
|
|
352
|
+
- If `~/.claude/projects/<task-folder>/` already has session transcripts, runs `claude -r` to pick from them; otherwise runs `claude` to start fresh.
|
|
353
|
+
- `C` opens the Claude desktop app via the `claude://code/new?folder=<task-folder>` URL scheme.
|
|
354
|
+
- The CLI variant (`c`) generates `CLAUDE.md` files with task/worktree context and installs hooks that report session status back to tasktree-manager.
|
|
345
355
|
- Session status (`⟳` running, `!` waiting, `✓` ended) appears next to the task name
|
|
346
356
|
|
|
347
357
|
### General
|
|
@@ -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.3.0"
|
|
74
74
|
tag_format = "v{version}"
|
|
75
75
|
branch = "main"
|
|
76
76
|
commit_message = "chore(release): {version} [skip ci]"
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# file generated by vcs-versioning
|
|
2
|
+
# don't change, don't track in version control
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
__all__ = [
|
|
6
|
+
"__version__",
|
|
7
|
+
"__version_tuple__",
|
|
8
|
+
"version",
|
|
9
|
+
"version_tuple",
|
|
10
|
+
"__commit_id__",
|
|
11
|
+
"commit_id",
|
|
12
|
+
]
|
|
13
|
+
|
|
14
|
+
version: str
|
|
15
|
+
__version__: str
|
|
16
|
+
__version_tuple__: tuple[int | str, ...]
|
|
17
|
+
version_tuple: tuple[int | str, ...]
|
|
18
|
+
commit_id: str | None
|
|
19
|
+
__commit_id__: str | None
|
|
20
|
+
|
|
21
|
+
__version__ = version = '2.3.0'
|
|
22
|
+
__version_tuple__ = version_tuple = (2, 3, 0)
|
|
23
|
+
|
|
24
|
+
__commit_id__ = commit_id = None
|