claude-session-backup 0.2.2__tar.gz → 0.2.3__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.
- {claude_session_backup-0.2.2 → claude_session_backup-0.2.3}/PKG-INFO +10 -3
- {claude_session_backup-0.2.2 → claude_session_backup-0.2.3}/README.md +9 -2
- {claude_session_backup-0.2.2 → claude_session_backup-0.2.3}/claude_session_backup/_version.py +2 -2
- {claude_session_backup-0.2.2 → claude_session_backup-0.2.3}/claude_session_backup/cli.py +65 -4
- claude_session_backup-0.2.3/claude_session_backup/commands.py +858 -0
- {claude_session_backup-0.2.2 → claude_session_backup-0.2.3}/claude_session_backup/config.py +6 -1
- {claude_session_backup-0.2.2 → claude_session_backup-0.2.3}/claude_session_backup/index.py +230 -0
- {claude_session_backup-0.2.2 → claude_session_backup-0.2.3}/claude_session_backup/metadata.py +10 -12
- claude_session_backup-0.2.3/claude_session_backup/pathkit.py +307 -0
- {claude_session_backup-0.2.2 → claude_session_backup-0.2.3}/claude_session_backup/timeline.py +96 -36
- {claude_session_backup-0.2.2 → claude_session_backup-0.2.3}/claude_session_backup.egg-info/PKG-INFO +10 -3
- {claude_session_backup-0.2.2 → claude_session_backup-0.2.3}/claude_session_backup.egg-info/SOURCES.txt +3 -0
- claude_session_backup-0.2.3/tests/test_cli.py +470 -0
- claude_session_backup-0.2.3/tests/test_commands.py +499 -0
- claude_session_backup-0.2.3/tests/test_index.py +721 -0
- {claude_session_backup-0.2.2 → claude_session_backup-0.2.3}/tests/test_metadata.py +23 -1
- claude_session_backup-0.2.3/tests/test_pathkit.py +504 -0
- {claude_session_backup-0.2.2 → claude_session_backup-0.2.3}/tests/test_timeline.py +64 -0
- claude_session_backup-0.2.2/claude_session_backup/commands.py +0 -526
- claude_session_backup-0.2.2/tests/test_cli.py +0 -113
- claude_session_backup-0.2.2/tests/test_index.py +0 -214
- {claude_session_backup-0.2.2 → claude_session_backup-0.2.3}/LICENSE +0 -0
- {claude_session_backup-0.2.2 → claude_session_backup-0.2.3}/claude_session_backup/__init__.py +0 -0
- {claude_session_backup-0.2.2 → claude_session_backup-0.2.3}/claude_session_backup/__main__.py +0 -0
- {claude_session_backup-0.2.2 → claude_session_backup-0.2.3}/claude_session_backup/git_ops.py +0 -0
- {claude_session_backup-0.2.2 → claude_session_backup-0.2.3}/claude_session_backup/lockfile.py +0 -0
- {claude_session_backup-0.2.2 → claude_session_backup-0.2.3}/claude_session_backup/scanner.py +0 -0
- {claude_session_backup-0.2.2 → claude_session_backup-0.2.3}/claude_session_backup.egg-info/dependency_links.txt +0 -0
- {claude_session_backup-0.2.2 → claude_session_backup-0.2.3}/claude_session_backup.egg-info/entry_points.txt +0 -0
- {claude_session_backup-0.2.2 → claude_session_backup-0.2.3}/claude_session_backup.egg-info/requires.txt +0 -0
- {claude_session_backup-0.2.2 → claude_session_backup-0.2.3}/claude_session_backup.egg-info/top_level.txt +0 -0
- {claude_session_backup-0.2.2 → claude_session_backup-0.2.3}/pyproject.toml +0 -0
- {claude_session_backup-0.2.2 → claude_session_backup-0.2.3}/setup.cfg +0 -0
- {claude_session_backup-0.2.2 → claude_session_backup-0.2.3}/tests/test_hook.py +0 -0
- {claude_session_backup-0.2.2 → claude_session_backup-0.2.3}/tests/test_lockfile.py +0 -0
- {claude_session_backup-0.2.2 → claude_session_backup-0.2.3}/tests/test_scanner.py +0 -0
- {claude_session_backup-0.2.2 → claude_session_backup-0.2.3}/tests/test_version.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: claude-session-backup
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.3
|
|
4
4
|
Summary: Git-backed Claude Code session backup with timeline view, folder analysis, deletion detection, and session restore.
|
|
5
5
|
Author-email: djdarcy <6962246+djdarcy@users.noreply.github.com>
|
|
6
6
|
License: GPL-3.0-or-later
|
|
@@ -89,8 +89,15 @@ csb list [keyword] # Filter by keyword in name/project/folder
|
|
|
89
89
|
csb list --sort expiration # Sort by soonest-to-purge first
|
|
90
90
|
csb list --sort {last-used|expiration|started|oldest|messages|size}
|
|
91
91
|
csb list --deleted # Show deleted sessions
|
|
92
|
-
csb scan
|
|
93
|
-
csb scan
|
|
92
|
+
csb scan # Find sessions touching cwd (path-prefix)
|
|
93
|
+
csb scan <term> # Filter by term: name, project, folder paths
|
|
94
|
+
csb scan ./<dirname> # Shortcut: same as -d <dirname> (no flag to remember)
|
|
95
|
+
csb scan -d <pattern> # Path-strict: folder + descendants
|
|
96
|
+
csb scan -D <pattern> # Path-strict: this folder only, no descendants
|
|
97
|
+
csb scan -s <pattern> # start_folder only ("what sessions originated here?")
|
|
98
|
+
csb scan -d <pattern> <term> # Scope-then-filter combined
|
|
99
|
+
csb scan -d <pattern>* / -D <pattern>* / -s <pattern>* # Trailing-* wildcard
|
|
100
|
+
csb scan ... -NU # Skip folder-usage search (start_folder only)
|
|
94
101
|
csb status # Summary stats
|
|
95
102
|
csb show <session-id> # Detailed session info with folder analysis
|
|
96
103
|
csb search "query" # Search by session name, project, or folder
|
|
@@ -58,8 +58,15 @@ csb list [keyword] # Filter by keyword in name/project/folder
|
|
|
58
58
|
csb list --sort expiration # Sort by soonest-to-purge first
|
|
59
59
|
csb list --sort {last-used|expiration|started|oldest|messages|size}
|
|
60
60
|
csb list --deleted # Show deleted sessions
|
|
61
|
-
csb scan
|
|
62
|
-
csb scan
|
|
61
|
+
csb scan # Find sessions touching cwd (path-prefix)
|
|
62
|
+
csb scan <term> # Filter by term: name, project, folder paths
|
|
63
|
+
csb scan ./<dirname> # Shortcut: same as -d <dirname> (no flag to remember)
|
|
64
|
+
csb scan -d <pattern> # Path-strict: folder + descendants
|
|
65
|
+
csb scan -D <pattern> # Path-strict: this folder only, no descendants
|
|
66
|
+
csb scan -s <pattern> # start_folder only ("what sessions originated here?")
|
|
67
|
+
csb scan -d <pattern> <term> # Scope-then-filter combined
|
|
68
|
+
csb scan -d <pattern>* / -D <pattern>* / -s <pattern>* # Trailing-* wildcard
|
|
69
|
+
csb scan ... -NU # Skip folder-usage search (start_folder only)
|
|
63
70
|
csb status # Summary stats
|
|
64
71
|
csb show <session-id> # Detailed session info with folder analysis
|
|
65
72
|
csb search "query" # Search by session name, project, or folder
|
{claude_session_backup-0.2.2 → claude_session_backup-0.2.3}/claude_session_backup/_version.py
RENAMED
|
@@ -15,13 +15,13 @@ To bump version: python scripts/sync-versions.py --bump patch
|
|
|
15
15
|
# Version components - edit these for version bumps
|
|
16
16
|
MAJOR = 0
|
|
17
17
|
MINOR = 2
|
|
18
|
-
PATCH =
|
|
18
|
+
PATCH = 3
|
|
19
19
|
PHASE = "" # Per-MINOR feature set: None, "alpha", "beta", "rc1", etc.
|
|
20
20
|
PRE_RELEASE_NUM = 1 # PEP 440 pre-release number (e.g., a1, b2)
|
|
21
21
|
PROJECT_PHASE = "prealpha" # Project-wide: "prealpha", "alpha", "beta", "stable"
|
|
22
22
|
|
|
23
23
|
# Auto-updated by git hooks - do not edit manually
|
|
24
|
-
__version__ = "0.2.
|
|
24
|
+
__version__ = "0.2.3"
|
|
25
25
|
__app_name__ = "claude-session-backup"
|
|
26
26
|
|
|
27
27
|
|
|
@@ -150,6 +150,15 @@ def build_parser():
|
|
|
150
150
|
p_list.add_argument("--deleted", action="store_true", help="Show only deleted sessions")
|
|
151
151
|
p_list.add_argument("--all", action="store_true", help="Show all sessions including deleted")
|
|
152
152
|
p_list.add_argument("--json", action="store_true", help="Output as JSON")
|
|
153
|
+
p_list_folders = p_list.add_mutually_exclusive_group()
|
|
154
|
+
p_list_folders.add_argument(
|
|
155
|
+
"--top", type=int, metavar="N", default=None,
|
|
156
|
+
help="Show top N other folders per session (default: 3). Use --all-folders for everything.",
|
|
157
|
+
)
|
|
158
|
+
p_list_folders.add_argument(
|
|
159
|
+
"--all-folders", action="store_true",
|
|
160
|
+
help="Show every tracked folder per session (no cap).",
|
|
161
|
+
)
|
|
153
162
|
|
|
154
163
|
# status
|
|
155
164
|
p_status = sub.add_parser("status", help="Summary of sessions, deletions, git state")
|
|
@@ -172,12 +181,64 @@ def build_parser():
|
|
|
172
181
|
p_resume.add_argument("session_id", help="Session ID (prefix match supported)")
|
|
173
182
|
|
|
174
183
|
# scan
|
|
175
|
-
p_scan = sub.add_parser(
|
|
184
|
+
p_scan = sub.add_parser(
|
|
185
|
+
"scan",
|
|
186
|
+
help="Find sessions by term, location, or both",
|
|
187
|
+
description=(
|
|
188
|
+
"Find sessions by term, location, or both.\n\n"
|
|
189
|
+
" csb scan cwd path-prefix (today's default)\n"
|
|
190
|
+
" csb scan <term> broad metadata substring (name, project, folder paths)\n"
|
|
191
|
+
" csb scan ./dirname shortcut: same as -d dirname (no flag to remember)\n"
|
|
192
|
+
" csb scan -d <pattern> path-strict: folder + descendants (start_folder OR top-N folder_usage)\n"
|
|
193
|
+
" csb scan -D <pattern> path-strict: this folder only (no descendants)\n"
|
|
194
|
+
" csb scan -s <pattern> start_folder only: 'what sessions originated here?' (skips folder_usage)\n"
|
|
195
|
+
" csb scan -d|-D|-s <pat> <term> scope-then-filter combined\n\n"
|
|
196
|
+
"Patterns accept a trailing '*' for sibling-prefix expansion (amdead* matches amdead, amdead-fork, ...)."
|
|
197
|
+
),
|
|
198
|
+
formatter_class=argparse.RawDescriptionHelpFormatter,
|
|
199
|
+
)
|
|
176
200
|
_add_common_flags(p_scan)
|
|
177
|
-
p_scan.add_argument(
|
|
201
|
+
p_scan.add_argument(
|
|
202
|
+
"term", nargs="?", default=None,
|
|
203
|
+
help="Filter sessions whose name, project, or folder paths contain term (case-insensitive). "
|
|
204
|
+
"If this starts with `./` or `.\\` (or is a bare `.`), it's auto-promoted to implicit -d.",
|
|
205
|
+
)
|
|
206
|
+
p_scan.add_argument(
|
|
207
|
+
"term2", nargs="?", default=None,
|
|
208
|
+
help="Optional second positional. Only valid when the first positional is a "
|
|
209
|
+
"`./dirname` / `.\\dirname` shortcut -- in that case `term2` is the actual term "
|
|
210
|
+
"filter (equivalent to `csb scan -d dirname term2`). Otherwise rejected.",
|
|
211
|
+
)
|
|
178
212
|
p_scan.add_argument("-n", type=int, default=20, help="Number of sessions to show")
|
|
179
|
-
p_scan.add_argument(
|
|
180
|
-
|
|
213
|
+
p_scan.add_argument(
|
|
214
|
+
"--no-usage", "-NU", action="store_true",
|
|
215
|
+
help="Skip folder_usage match; only consider session start_folder",
|
|
216
|
+
)
|
|
217
|
+
# -d / -D / -s mutually exclusive: path-strict modes
|
|
218
|
+
p_scan_dir = p_scan.add_mutually_exclusive_group()
|
|
219
|
+
p_scan_dir.add_argument(
|
|
220
|
+
"-d", "--directories-below", metavar="PATTERN", default=None,
|
|
221
|
+
help="Path-strict: match this folder + its descendants. Trailing '*' for sibling-prefix.",
|
|
222
|
+
)
|
|
223
|
+
p_scan_dir.add_argument(
|
|
224
|
+
"-D", "--directory-only", metavar="PATTERN", default=None,
|
|
225
|
+
help="Path-strict: match this folder only, no descendants. Trailing '*' for sibling-prefix.",
|
|
226
|
+
)
|
|
227
|
+
p_scan_dir.add_argument(
|
|
228
|
+
"-s", "--start-dir-only", metavar="PATTERN", default=None,
|
|
229
|
+
help="Path-strict: only match sessions whose start_folder is this folder + descendants. "
|
|
230
|
+
"Skips folder_usage entirely. Useful for 'what sessions originated from here?'",
|
|
231
|
+
)
|
|
232
|
+
# --top / --all-folders mutually exclusive: display + folder_usage matching gate
|
|
233
|
+
p_scan_folders = p_scan.add_mutually_exclusive_group()
|
|
234
|
+
p_scan_folders.add_argument(
|
|
235
|
+
"--top", type=int, metavar="N", default=None,
|
|
236
|
+
help="Show top N other folders per session (default: 3). Also gates -d/-D folder_usage matching.",
|
|
237
|
+
)
|
|
238
|
+
p_scan_folders.add_argument(
|
|
239
|
+
"--all-folders", action="store_true",
|
|
240
|
+
help="Show every tracked folder per session (no cap). Also removes top-N gate from -d/-D matching.",
|
|
241
|
+
)
|
|
181
242
|
|
|
182
243
|
# search
|
|
183
244
|
p_search = sub.add_parser("search", help="Search session metadata")
|