breadcrumbst 0.4.6__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.
- breadcrumbst-0.4.6/.gitignore +17 -0
- breadcrumbst-0.4.6/CHANGELOG.md +193 -0
- breadcrumbst-0.4.6/LICENSE +21 -0
- breadcrumbst-0.4.6/PKG-INFO +188 -0
- breadcrumbst-0.4.6/README.md +144 -0
- breadcrumbst-0.4.6/breadcrumbs/__init__.py +3 -0
- breadcrumbst-0.4.6/breadcrumbs/__main__.py +163 -0
- breadcrumbst-0.4.6/breadcrumbs/_console_marker.py +350 -0
- breadcrumbst-0.4.6/breadcrumbs/activity.py +326 -0
- breadcrumbst-0.4.6/breadcrumbs/app.py +936 -0
- breadcrumbst-0.4.6/breadcrumbs/assets/branding/NOTICE.md +7 -0
- breadcrumbst-0.4.6/breadcrumbs/assets/branding/logo.png +0 -0
- breadcrumbst-0.4.6/breadcrumbs/assets/branding/terminal.json +1 -0
- breadcrumbst-0.4.6/breadcrumbs/assets/brands/LICENSE-CODICONS.txt +399 -0
- breadcrumbst-0.4.6/breadcrumbs/assets/brands/LICENSE-SIMPLE-ICONS.txt +30 -0
- breadcrumbst-0.4.6/breadcrumbs/assets/brands/NOTICE.md +42 -0
- breadcrumbst-0.4.6/breadcrumbs/assets/brands/claude.svg +1 -0
- breadcrumbst-0.4.6/breadcrumbs/assets/brands/firefoxbrowser.svg +1 -0
- breadcrumbst-0.4.6/breadcrumbs/assets/brands/git.svg +1 -0
- breadcrumbst-0.4.6/breadcrumbs/assets/brands/github.svg +1 -0
- breadcrumbst-0.4.6/breadcrumbs/assets/brands/googlechrome.svg +1 -0
- breadcrumbst-0.4.6/breadcrumbs/assets/brands/masks.json +380 -0
- breadcrumbst-0.4.6/breadcrumbs/assets/brands/neovim.svg +1 -0
- breadcrumbst-0.4.6/breadcrumbs/assets/brands/nodedotjs.svg +1 -0
- breadcrumbst-0.4.6/breadcrumbs/assets/brands/openai.svg +1 -0
- breadcrumbst-0.4.6/breadcrumbs/assets/brands/python.svg +1 -0
- breadcrumbst-0.4.6/breadcrumbs/assets/brands/rasterize.cjs +28 -0
- breadcrumbst-0.4.6/breadcrumbs/assets/brands/spotify.svg +1 -0
- breadcrumbst-0.4.6/breadcrumbs/assets/brands/terminal.svg +1 -0
- breadcrumbst-0.4.6/breadcrumbs/assets/brands/vscode.svg +1 -0
- breadcrumbst-0.4.6/breadcrumbs/assets/brands/window.svg +1 -0
- breadcrumbst-0.4.6/breadcrumbs/assets/brands/youtube.svg +1 -0
- breadcrumbst-0.4.6/breadcrumbs/assets/browser-extension/background.mjs +469 -0
- breadcrumbst-0.4.6/breadcrumbs/assets/browser-extension/connection.css +75 -0
- breadcrumbst-0.4.6/breadcrumbs/assets/browser-extension/connection.js +220 -0
- breadcrumbst-0.4.6/breadcrumbs/assets/browser-extension/core.mjs +82 -0
- breadcrumbst-0.4.6/breadcrumbs/assets/browser-extension/manifest.json +16 -0
- breadcrumbst-0.4.6/breadcrumbs/assets/browser-extension/options.html +63 -0
- breadcrumbst-0.4.6/breadcrumbs/assets/browser-extension/popup.html +63 -0
- breadcrumbst-0.4.6/breadcrumbs/assets/browser-extension/tests/ui.test.mjs +216 -0
- breadcrumbst-0.4.6/breadcrumbs/assets/browser-extension/tests/worker.test.mjs +597 -0
- breadcrumbst-0.4.6/breadcrumbs/branches.py +588 -0
- breadcrumbst-0.4.6/breadcrumbs/branding.py +30 -0
- breadcrumbst-0.4.6/breadcrumbs/brands.py +210 -0
- breadcrumbst-0.4.6/breadcrumbs/bridge.py +365 -0
- breadcrumbst-0.4.6/breadcrumbs/browser_install.py +83 -0
- breadcrumbst-0.4.6/breadcrumbs/config.py +74 -0
- breadcrumbst-0.4.6/breadcrumbs/db.py +477 -0
- breadcrumbst-0.4.6/breadcrumbs/mascot.py +92 -0
- breadcrumbst-0.4.6/breadcrumbs/onboarding.py +170 -0
- breadcrumbst-0.4.6/breadcrumbs/reading.py +30 -0
- breadcrumbst-0.4.6/breadcrumbs/screens.py +365 -0
- breadcrumbst-0.4.6/breadcrumbs/session_names.py +26 -0
- breadcrumbst-0.4.6/breadcrumbs/sound.py +32 -0
- breadcrumbst-0.4.6/breadcrumbs/terminal.py +393 -0
- breadcrumbst-0.4.6/breadcrumbs/timer.py +86 -0
- breadcrumbst-0.4.6/breadcrumbs/update_helper.py +99 -0
- breadcrumbst-0.4.6/breadcrumbs/updater.py +126 -0
- breadcrumbst-0.4.6/breadcrumbs/verses.py +63 -0
- breadcrumbst-0.4.6/breadcrumbs/widgets.py +226 -0
- breadcrumbst-0.4.6/pyproject.toml +45 -0
- breadcrumbst-0.4.6/tests/test_activity.py +206 -0
- breadcrumbst-0.4.6/tests/test_app.py +149 -0
- breadcrumbst-0.4.6/tests/test_brands.py +100 -0
- breadcrumbst-0.4.6/tests/test_bridge.py +276 -0
- breadcrumbst-0.4.6/tests/test_browser_install.py +55 -0
- breadcrumbst-0.4.6/tests/test_db.py +57 -0
- breadcrumbst-0.4.6/tests/test_main_trail_config.py +62 -0
- breadcrumbst-0.4.6/tests/test_onboarding.py +102 -0
- breadcrumbst-0.4.6/tests/test_release_qa.py +81 -0
- breadcrumbst-0.4.6/tests/test_remote_timer.py +150 -0
- breadcrumbst-0.4.6/tests/test_rename_migration.py +68 -0
- breadcrumbst-0.4.6/tests/test_scope_flow.py +151 -0
- breadcrumbst-0.4.6/tests/test_session_timeline.py +191 -0
- breadcrumbst-0.4.6/tests/test_sessions.py +285 -0
- breadcrumbst-0.4.6/tests/test_terminal.py +355 -0
- breadcrumbst-0.4.6/tests/test_timer.py +38 -0
- breadcrumbst-0.4.6/tests/test_trail_returns.py +106 -0
- breadcrumbst-0.4.6/tests/test_updater.py +104 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
.venv/
|
|
2
|
+
.install-test/
|
|
3
|
+
__pycache__/
|
|
4
|
+
*.py[cod]
|
|
5
|
+
.pytest_cache/
|
|
6
|
+
*.db
|
|
7
|
+
*.db-shm
|
|
8
|
+
*.db-wal
|
|
9
|
+
graphify-out/
|
|
10
|
+
build/
|
|
11
|
+
dist/
|
|
12
|
+
*.egg-info/
|
|
13
|
+
.build-check/
|
|
14
|
+
.test-tmp-*/
|
|
15
|
+
/videos/
|
|
16
|
+
/scripts/capture_video.py
|
|
17
|
+
/scripts/capture_feature_tour.py
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## 0.4.6 — PyPI distribution identity · 2026-10-25
|
|
4
|
+
|
|
5
|
+
- Publish under `breadcrumbst` because PyPI rejects the original package name.
|
|
6
|
+
The product, Python imports, settings and main `breadcrumbs` command retain
|
|
7
|
+
their existing names. `breadcrumbst` is an additional command for direct uvx use.
|
|
8
|
+
- Detect the new distribution's installed version before legacy metadata.
|
|
9
|
+
- Configure the PyPI trusted-publisher target for the accepted project name.
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
## 0.4.5 — Keep Latest pinned after layout changes · 2026-10-25
|
|
13
|
+
|
|
14
|
+
- Keep the newest branch entry at the bottom after the terminal resizes or
|
|
15
|
+
wrapped rows change height. Older selected entries retain their selection.
|
|
16
|
+
- Await screen mounting in the compact timeline regression check, so slow
|
|
17
|
+
Windows runners verify a mounted view instead of racing its construction.
|
|
18
|
+
- Verify follow behavior through width changes as well as new observations.
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
## 0.4.4 — Bread mark, clearer install, product demos · 2026-10-25
|
|
22
|
+
|
|
23
|
+
- Add the supplied logo to the README, terminal header and welcome tour.
|
|
24
|
+
Terminal rendering uses bundled colour data and adds no runtime dependency.
|
|
25
|
+
- Put the core timer/intention/trail pitch, demo GIF and isolated install first.
|
|
26
|
+
Explain native capture platform limits before users install.
|
|
27
|
+
- Prepare authenticated PyPI publishing and concrete contributor issues.
|
|
28
|
+
Direct released-wheel installation remains available without Git.
|
|
29
|
+
- Add a short README GIF using real intention, timer and branch captures.
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
## 0.4.3 — Persistent sidebar and safer Windows updates · 2026-10-25
|
|
33
|
+
|
|
34
|
+
- Keep activity details visible beside the branch list. Arrow keys or a click
|
|
35
|
+
immediately update the sidebar. Enter stays inline; Escape closes branches.
|
|
36
|
+
Remove the Ctrl+Enter activity popup.
|
|
37
|
+
- Wait for running Windows launchers to close before pip changes packages. If
|
|
38
|
+
they remain open, stop safely with an actionable status and leave the app intact.
|
|
39
|
+
- Back up the importable Breadcrumbs package and its metadata before updating,
|
|
40
|
+
restoring them if pip fails after uninstalling. Avoid forcibly reinstalling
|
|
41
|
+
every dependency on an application update.
|
|
42
|
+
- Update the README and real UI captures to match the persistent sidebar.
|
|
43
|
+
- Add regression coverage for a busy launcher and recovery after pip failure.
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
## 0.4.2 — Current browser build, cleaner branch details · 2026-10-25
|
|
47
|
+
|
|
48
|
+
- Fix the legacy unpacked-extension path left behind by the runtime rename:
|
|
49
|
+
installers, future updater helpers, and installed app startup refresh known
|
|
50
|
+
old extension folders. Pairing storage and Chrome preferences stay untouched.
|
|
51
|
+
A Chrome/Edge extension reload is still required to activate new files.
|
|
52
|
+
- Add `breadcrumbs browser repair`, loaded extension version reporting,
|
|
53
|
+
app/extension version display, and an old-build notice in Config.
|
|
54
|
+
- Preserve capture diagnostic messages in activity records so new Unknown
|
|
55
|
+
visits can explain missing reports or an old extension instead of only
|
|
56
|
+
saying that the window was captured.
|
|
57
|
+
- Remove artwork attribution strings from activity details. Attribution remains
|
|
58
|
+
in the bundled notices and documentation.
|
|
59
|
+
- Open clicked/Enter-selected activity in a sidebar, with a smaller bounded
|
|
60
|
+
branch card. Escape collapses details; Ctrl+Enter keeps the full-screen option.
|
|
61
|
+
Compact details remain readable at 80×24.
|
|
62
|
+
|
|
63
|
+
## 0.4.1 — Keep the session, follow the trail · 2026-10-25
|
|
64
|
+
|
|
65
|
+
### Fixed
|
|
66
|
+
|
|
67
|
+
- Branches opens at the latest activity and keeps following new visits and
|
|
68
|
+
duration updates without rebuilding the list. Inspecting an older visit
|
|
69
|
+
preserves selection; End or Latest returns to the newest activity.
|
|
70
|
+
- A session keeps its name across work blocks, breaks, and app restarts.
|
|
71
|
+
Ctrl+N or an explicitly edited name starts a different session. Block
|
|
72
|
+
checkpoints, reflections, and elapsed times remain separate.
|
|
73
|
+
- The timer bridge starts for untracked running blocks too, so the paired
|
|
74
|
+
extension can detect/control the current block without enabling capture.
|
|
75
|
+
Port conflicts retry after another app instance closes.
|
|
76
|
+
- Browser title matching handles alternate dash glyphs and browser/profile
|
|
77
|
+
suffixes, while ambiguous profiles still remain unverified.
|
|
78
|
+
|
|
79
|
+
### Added
|
|
80
|
+
|
|
81
|
+
- Click/Enter opens a full, scrollable activity detail screen with logo,
|
|
82
|
+
timestamps, title/domain, capture precision, and annotation keys at all sizes.
|
|
83
|
+
- Short/long breaks appear in the session's branch timeline as timer spans.
|
|
84
|
+
Paused/offline gaps are excluded; app/browser capture stays off during breaks.
|
|
85
|
+
- Explicit terminal-title program hints and bundled logos for Claude Code,
|
|
86
|
+
Codex, Python, Node.js, Git, and Neovim. Hints affect presentation only;
|
|
87
|
+
process-verified agent attribution and scope classification stay separate.
|
|
88
|
+
- The extension shows its actual last reported tab/domain. Disabled title
|
|
89
|
+
sharing immediately redacts its preview; stopped, stale, private/internal,
|
|
90
|
+
or unfocused context clears the preview. Awake heartbeats run every two seconds.
|
|
91
|
+
- Clearer browser verification notices, contributor guidance, updated project
|
|
92
|
+
positioning, and practical launch-channel suggestions in `docs/SHARING.md`.
|
|
93
|
+
|
|
94
|
+
### Data and updating
|
|
95
|
+
|
|
96
|
+
- Existing blocks/history are retained. New blocks store a persistent session
|
|
97
|
+
root and export its readable session name. Older unrelated blocks are not
|
|
98
|
+
retroactively joined into a guessed session.
|
|
99
|
+
- Reload the unpacked extension after updating so Chrome/Edge loads v0.4.1.
|
|
100
|
+
Re-pair if its saved address/token no longer matches Config → Browser connection.
|
|
101
|
+
|
|
102
|
+
## 0.4.0 — Breadcrumbs · 2026-10-25
|
|
103
|
+
|
|
104
|
+
### Renamed
|
|
105
|
+
|
|
106
|
+
- Tlock is now Breadcrumbs. The app, Python package, primary command, browser
|
|
107
|
+
extension, installer, updater, and repository use the new name.
|
|
108
|
+
- `breadcrumbs` is the primary command. `tlock` remains a compatibility entry.
|
|
109
|
+
- Existing Tlock data, saved sessions, preferences, and environment overrides
|
|
110
|
+
remain supported. No history is moved or deleted.
|
|
111
|
+
|
|
112
|
+
### Added
|
|
113
|
+
|
|
114
|
+
- A 12-page first-launch feature tour with Back/Next, keyboard navigation,
|
|
115
|
+
scrolling, Skip, and replay using `?` from the ready or paused timer.
|
|
116
|
+
Tour dismissal is remembered. Saved-session recovery takes priority;
|
|
117
|
+
the tour never starts capture or a timer and blocks underlying app shortcuts.
|
|
118
|
+
- A hands-on onboarding guide and a README organized around practical tasks,
|
|
119
|
+
with feature explanations, examples, settings, and a keyboard reference.
|
|
120
|
+
- Opt-in app/browser/terminal-agent scope before starting a block, with reuse
|
|
121
|
+
and untracked options. Scope can also change within an existing session.
|
|
122
|
+
- Durable running spans and a Git-style activity trail with colored app nodes,
|
|
123
|
+
departures, returns, source precision, and user annotations.
|
|
124
|
+
- A small animated, nameless trail beside intentions and a live context bar.
|
|
125
|
+
- Bundled Chrome/Edge extension with local pairing, exact URL selection,
|
|
126
|
+
current-session pickup, theme matching, and Start/Pause/Resume/Finish controls.
|
|
127
|
+
- Browser connection setup in Config, separate from scope selection.
|
|
128
|
+
- Verified CLI agent markers for supported terminals; background processes do
|
|
129
|
+
not count as foreground agent activity.
|
|
130
|
+
- Explicit activity export, including per-span scope snapshots.
|
|
131
|
+
- Local-date work totals and clear long-break round progress, alongside named
|
|
132
|
+
recovery, intentions, task carryover, reflections, and configurable reading.
|
|
133
|
+
|
|
134
|
+
### Fixed
|
|
135
|
+
|
|
136
|
+
- Missing tab/agent verification reports Unknown rather than a false deviation.
|
|
137
|
+
- Scope survives recovery, including edits made while paused. Offline time is
|
|
138
|
+
not joined into activity spans; late results from old spans are discarded.
|
|
139
|
+
- Long-break progress counts only full Focus completions and resets after a
|
|
140
|
+
full long break. The UI states the remaining focus blocks directly.
|
|
141
|
+
- Extension status is independent of tab capture and stale browser requests.
|
|
142
|
+
A stalled response body is bounded, older replies cannot replace newer state,
|
|
143
|
+
and stale/double-clicked timer commands cannot target a changed session.
|
|
144
|
+
- Unverified browser fallback discards window titles, including potential
|
|
145
|
+
private-browser titles. IPv6 domain literals are validated and normalized.
|
|
146
|
+
- Empty trail selections clear the previous visit's logo and details.
|
|
147
|
+
- Historical visit explanations use that running span's scope snapshot,
|
|
148
|
+
rather than the session's most recently edited scope.
|
|
149
|
+
|
|
150
|
+
### Browser reliability and privacy
|
|
151
|
+
|
|
152
|
+
- Authenticated loopback bridge with bounded extension origins and payloads.
|
|
153
|
+
- Exact-page hashes retain query identity without transmitting raw URL paths
|
|
154
|
+
or queries. Titles are separately configurable; private/internal tabs are
|
|
155
|
+
excluded by the extension. Hashes are not anonymous identifiers.
|
|
156
|
+
- Stopping sharing does not disable timer status or controls. Reopening the
|
|
157
|
+
popup discovers an already-running TUI session without waiting for tab reads.
|
|
158
|
+
- Timer commands bind to session identity/revision. Duplicate Finish commands,
|
|
159
|
+
stale popups, pre-restart revisions, and changed-session replies cannot
|
|
160
|
+
silently retarget a block. Busy dialogs temporarily disable remote controls.
|
|
161
|
+
- Slow response bodies time out, older results cannot replace newer status,
|
|
162
|
+
and failed tab reads do not discard a healthy countdown.
|
|
163
|
+
|
|
164
|
+
### Validation
|
|
165
|
+
|
|
166
|
+
- Windows Python regression suite, dependency-free extension tests, and a
|
|
167
|
+
real isolated Chromium/extension/TUI/SQLite integration scenario.
|
|
168
|
+
- Installer/reinstall, paths with spaces, legacy-data recovery, installed-wheel
|
|
169
|
+
commands/resources, and package metadata checks.
|
|
170
|
+
- CI covers Windows/Ubuntu on Python 3.11/3.14, browser integration, extension
|
|
171
|
+
tests, and package installation. See `docs/QA-v0.4.0.md` for audit scope.
|
|
172
|
+
|
|
173
|
+
### Upgrade notes
|
|
174
|
+
|
|
175
|
+
- Close Tlock before upgrading. Use `breadcrumbs` afterward; old command aliases
|
|
176
|
+
remain available for transition.
|
|
177
|
+
- Load the extension from the new path printed by `breadcrumbs browser path`
|
|
178
|
+
and pair it through Config. The old unpacked extension points to the old folder.
|
|
179
|
+
- Windows and Linux/X11 app capture are supported. Wayland/macOS native app
|
|
180
|
+
capture and general editor-integrated terminal attribution remain limitations.
|
|
181
|
+
|
|
182
|
+
## 0.3.0 — Tlock
|
|
183
|
+
|
|
184
|
+
- Recoverable named sessions, scope-change decisions, rotating reading cards,
|
|
185
|
+
sound previews, saved intentions, and session reflections.
|
|
186
|
+
|
|
187
|
+
## 0.2.0 — Tlock
|
|
188
|
+
|
|
189
|
+
- A cleaner timer workflow, simplified companion, task carryover, and local export.
|
|
190
|
+
|
|
191
|
+
## 0.1.0 — Tlock
|
|
192
|
+
|
|
193
|
+
- Initial public release.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Breadcrumbs contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: breadcrumbst
|
|
3
|
+
Version: 0.4.6
|
|
4
|
+
Summary: A terminal-first productivity timer that keeps your goals in view and helps you understand where you trail off.
|
|
5
|
+
Project-URL: Homepage, https://github.com/SaroashDS/Breadcrumbs
|
|
6
|
+
Project-URL: Repository, https://github.com/SaroashDS/Breadcrumbs
|
|
7
|
+
Project-URL: Issues, https://github.com/SaroashDS/Breadcrumbs/issues
|
|
8
|
+
Project-URL: Changelog, https://github.com/SaroashDS/Breadcrumbs/releases
|
|
9
|
+
License: MIT License
|
|
10
|
+
|
|
11
|
+
Copyright (c) 2026 Breadcrumbs contributors
|
|
12
|
+
|
|
13
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
14
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
15
|
+
in the Software without restriction, including without limitation the rights
|
|
16
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
17
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
18
|
+
furnished to do so, subject to the following conditions:
|
|
19
|
+
|
|
20
|
+
The above copyright notice and this permission notice shall be included in all
|
|
21
|
+
copies or substantial portions of the Software.
|
|
22
|
+
|
|
23
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
24
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
25
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
26
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
27
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
28
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
29
|
+
SOFTWARE.
|
|
30
|
+
License-File: LICENSE
|
|
31
|
+
Keywords: pomodoro,productivity,terminal,timer,tui
|
|
32
|
+
Classifier: Development Status :: 4 - Beta
|
|
33
|
+
Classifier: Environment :: Console
|
|
34
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
35
|
+
Classifier: Operating System :: OS Independent
|
|
36
|
+
Classifier: Programming Language :: Python :: 3
|
|
37
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
38
|
+
Classifier: Topic :: Office/Business :: Scheduling
|
|
39
|
+
Requires-Python: >=3.11
|
|
40
|
+
Requires-Dist: textual<2.0,>=1.0
|
|
41
|
+
Provides-Extra: dev
|
|
42
|
+
Requires-Dist: pytest>=8.0; extra == 'dev'
|
|
43
|
+
Description-Content-Type: text/markdown
|
|
44
|
+
|
|
45
|
+
<p align="center">
|
|
46
|
+
<img src="https://raw.githubusercontent.com/SaroashDS/Breadcrumbs/main/docs/assets/breadcrumbs-mark-transparent.png" width="220" alt="Breadcrumbs bread-and-trail mark" />
|
|
47
|
+
</p>
|
|
48
|
+
|
|
49
|
+
<h1 align="center">Breadcrumbs</h1>
|
|
50
|
+
|
|
51
|
+
<p align="center">
|
|
52
|
+
<strong>A terminal-first productivity timer that helps you understand where you trail off.</strong><br />
|
|
53
|
+
Set an intention, stay with your goal, and leave yourself a trail back.
|
|
54
|
+
</p>
|
|
55
|
+
|
|
56
|
+
```sh
|
|
57
|
+
pipx install https://github.com/SaroashDS/Breadcrumbs/releases/download/v0.4.6/breadcrumbst-0.4.6-py3-none-any.whl
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Then run `breadcrumbs`. **Python 3.11+** and [pipx](https://pipx.pypa.io/stable/installation/) are required.
|
|
61
|
+
This installs the released wheel in an isolated environment; no shell script or Git clone.
|
|
62
|
+
The wheel installs directly from the GitHub release. [Other install options](docs/INSTALL.md)
|
|
63
|
+
|
|
64
|
+
<p align="center">
|
|
65
|
+
<img src="https://raw.githubusercontent.com/SaroashDS/Breadcrumbs/main/docs/assets/breadcrumbs-demo.gif" width="900" alt="Set an intention, start, and see the branch trail" />
|
|
66
|
+
</p>
|
|
67
|
+
|
|
68
|
+
**Platform support:** timer + paired Chrome/Edge work on Windows, Linux and macOS.
|
|
69
|
+
Native foreground-app capture supports **Windows and Linux/X11 only**.
|
|
70
|
+
macOS and Wayland native capture are not implemented. [Details](docs/ACTIVITY.md)
|
|
71
|
+
|
|
72
|
+
[Installation options](docs/INSTALL.md) · [First session](docs/ONBOARDING.md) ·
|
|
73
|
+
[Full guide + keys](docs/USAGE.md) · [Browser extension](docs/BROWSER_EXTENSION.md) ·
|
|
74
|
+
[Latest release](https://github.com/SaroashDS/Breadcrumbs/releases/latest)
|
|
75
|
+
|
|
76
|
+
## Try one block
|
|
77
|
+
|
|
78
|
+
1. Press `E` and write one small intention. `Ctrl+B` adds a task; `F2` checks it off.
|
|
79
|
+
2. Press `Escape`, choose a duration, then `Space` to start.
|
|
80
|
+
3. Choose your working scope, reuse it, or continue without tracking.
|
|
81
|
+
4. Switch between your work and other apps. Press `B` to inspect the trail.
|
|
82
|
+
5. Finish the block, save a reflection, and review it with `H`.
|
|
83
|
+
|
|
84
|
+
The feature tour opens on first launch. Replay it with `?` while ready or paused.
|
|
85
|
+
It never enables capture or starts the timer. [Hands-on onboarding](docs/ONBOARDING.md)
|
|
86
|
+
|
|
87
|
+
## What it does
|
|
88
|
+
|
|
89
|
+
| Need | Breadcrumbs feature |
|
|
90
|
+
| --- | --- |
|
|
91
|
+
| Keep the next step in view | Intentions and a persistent Markdown checklist |
|
|
92
|
+
| Work to your own rhythm | Focus/short/long presets, custom timers, pause and resume |
|
|
93
|
+
| Understand a detour | App/browser scope, Git-style branches, useful-detour annotations |
|
|
94
|
+
| Inspect what happened | Activity details stay beside the trail and follow selection |
|
|
95
|
+
| Stop and return later | Named sessions, checkpoints and paused recovery |
|
|
96
|
+
| Learn from a block | Reflections, optional focus rating, history and JSON export |
|
|
97
|
+
| Stay in the browser | Optional extension countdown, Start/Pause/Resume and confirmed Finish |
|
|
98
|
+
|
|
99
|
+
Sessions keep their name across work blocks, breaks and restarts. `Ctrl+N`
|
|
100
|
+
explicitly starts a new session. Breaks appear in the same trail without capture.
|
|
101
|
+
`End` or **Latest** follows the newest activity; selecting an older visit preserves it.
|
|
102
|
+
|
|
103
|
+
**In scope** matches your choices. **Supporting** marks a useful detour.
|
|
104
|
+
**Deviation** is outside scope and can still be useful work. **Unknown** means
|
|
105
|
+
the context was not verified. `A`, `S`, and `V` annotate a selected visit.
|
|
106
|
+
|
|
107
|
+
Optional preferences include three themes, sound previews, a companion and
|
|
108
|
+
reading cards. They stay out of the core timer workflow. [Every setting](docs/USAGE.md#settings)
|
|
109
|
+
|
|
110
|
+
## Browser and terminal context
|
|
111
|
+
|
|
112
|
+
Open **Config (`C`) → Browser connection** for the extension folder and local
|
|
113
|
+
pairing token. Load the unpacked extension in Chrome/Edge, pair, then select
|
|
114
|
+
apps, domains or exact pages in scope. Page matching includes query parameters.
|
|
115
|
+
Sharing tab context and controlling the timer are separate controls.
|
|
116
|
+
|
|
117
|
+
Selected Claude Code/Codex CLI activity uses a verified foreground terminal
|
|
118
|
+
marker. A running background process alone does not count as focus. Pinned
|
|
119
|
+
titles, multiplexers and editor panes may prevent verification; unsupported
|
|
120
|
+
context stays Unknown. [Setup and limitations](docs/ACTIVITY.md)
|
|
121
|
+
|
|
122
|
+
## Install, update and recover
|
|
123
|
+
|
|
124
|
+
Prefer a one-off run with [uv](https://docs.astral.sh/uv/getting-started/installation/)?
|
|
125
|
+
|
|
126
|
+
```sh
|
|
127
|
+
uvx --from https://github.com/SaroashDS/Breadcrumbs/releases/download/v0.4.5/breadcrumbs-0.4.5-py3-none-any.whl breadcrumbs
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
[All installation options](docs/INSTALL.md) cover pipx, uvx, ordinary virtual
|
|
131
|
+
environments, the optional Windows installer and source development.
|
|
132
|
+
Use the latest released wheel URL when updating a wheel-based installation.
|
|
133
|
+
|
|
134
|
+
```sh
|
|
135
|
+
breadcrumbs sessions
|
|
136
|
+
breadcrumbs --resume my-session
|
|
137
|
+
breadcrumbs export --output sessions.json
|
|
138
|
+
breadcrumbs export --activity --output activity.json
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
Recovery opens paused. Time while the app was closed is excluded. `Q` saves and
|
|
142
|
+
quits; `F` offers Keep working, Finish early or End session.
|
|
143
|
+
[Full keyboard reference](docs/USAGE.md#keyboard-reference)
|
|
144
|
+
|
|
145
|
+
## Why build this?
|
|
146
|
+
|
|
147
|
+
Too many productivity tools turn a simple need into another subscription, an
|
|
148
|
+
unnecessary AI agent, or a system that takes more work to manage than it saves.
|
|
149
|
+
|
|
150
|
+
Sometimes you just want a timer, goals you can keep in view, and an understanding
|
|
151
|
+
of where your attention trails off. Breadcrumbs is for developers moving between
|
|
152
|
+
editors, terminals and documentation, and anyone who wants a simpler way to work.
|
|
153
|
+
|
|
154
|
+
Write what you intend to do. Notice useful detours. Find your way back.
|
|
155
|
+
|
|
156
|
+
## Your data
|
|
157
|
+
|
|
158
|
+
Sessions and preferences stay locally in `~/.breadcrumbs`. `BREADCRUMBS_HOME`
|
|
159
|
+
chooses another folder. Existing Tlock data and its compatibility command remain usable in place.
|
|
160
|
+
|
|
161
|
+
Tracking is optional and runs only during running focus/custom blocks. Pauses,
|
|
162
|
+
breaks and quitting stop it. Normal export omits activity; `--activity` adds it.
|
|
163
|
+
The extension sends domains and URL hashes, not raw paths or queries. Titles
|
|
164
|
+
are optional. Hashes identify pages and are not anonymous. Private/internal
|
|
165
|
+
tabs are excluded by the extension; app-only capture cannot reliably identify
|
|
166
|
+
private windows. [Privacy and capture details](docs/ACTIVITY.md)
|
|
167
|
+
|
|
168
|
+
## Contributors welcome
|
|
169
|
+
|
|
170
|
+
Help make everyday work easier: small features, integrations, useful workflows,
|
|
171
|
+
bug fixes and clearer docs are welcome. Keep the timer useful on its own and
|
|
172
|
+
integrations optional.
|
|
173
|
+
|
|
174
|
+
Start with a concrete [good first issue](https://github.com/SaroashDS/Breadcrumbs/issues?q=is%3Aissue%20is%3Aopen%20label%3A%22good%20first%20issue%22)
|
|
175
|
+
or a [help wanted task](https://github.com/SaroashDS/Breadcrumbs/issues?q=is%3Aissue%20is%3Aopen%20label%3A%22help%20wanted%22).
|
|
176
|
+
The [roadmap tickets](docs/CONTRIBUTOR_TASKS.md) cover weekly review, CSV export,
|
|
177
|
+
editor context and broader desktop support. See [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
178
|
+
|
|
179
|
+
```sh
|
|
180
|
+
python -m pip install -e ".[dev]"
|
|
181
|
+
python -m pytest -q
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
[Changelog](CHANGELOG.md) · [QA](docs/TESTING.md) ·
|
|
185
|
+
[Architecture](docs/FOCUS_BRANCHES.md) · [Brand credits](docs/BRANDS.md) ·
|
|
186
|
+
[Publishing setup](docs/PUBLISHING.md)
|
|
187
|
+
|
|
188
|
+
MIT licensed. Brand marks belong to their respective owners.
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="https://raw.githubusercontent.com/SaroashDS/Breadcrumbs/main/docs/assets/breadcrumbs-mark-transparent.png" width="220" alt="Breadcrumbs bread-and-trail mark" />
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<h1 align="center">Breadcrumbs</h1>
|
|
6
|
+
|
|
7
|
+
<p align="center">
|
|
8
|
+
<strong>A terminal-first productivity timer that helps you understand where you trail off.</strong><br />
|
|
9
|
+
Set an intention, stay with your goal, and leave yourself a trail back.
|
|
10
|
+
</p>
|
|
11
|
+
|
|
12
|
+
```sh
|
|
13
|
+
pipx install https://github.com/SaroashDS/Breadcrumbs/releases/download/v0.4.6/breadcrumbst-0.4.6-py3-none-any.whl
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Then run `breadcrumbs`. **Python 3.11+** and [pipx](https://pipx.pypa.io/stable/installation/) are required.
|
|
17
|
+
This installs the released wheel in an isolated environment; no shell script or Git clone.
|
|
18
|
+
The wheel installs directly from the GitHub release. [Other install options](docs/INSTALL.md)
|
|
19
|
+
|
|
20
|
+
<p align="center">
|
|
21
|
+
<img src="https://raw.githubusercontent.com/SaroashDS/Breadcrumbs/main/docs/assets/breadcrumbs-demo.gif" width="900" alt="Set an intention, start, and see the branch trail" />
|
|
22
|
+
</p>
|
|
23
|
+
|
|
24
|
+
**Platform support:** timer + paired Chrome/Edge work on Windows, Linux and macOS.
|
|
25
|
+
Native foreground-app capture supports **Windows and Linux/X11 only**.
|
|
26
|
+
macOS and Wayland native capture are not implemented. [Details](docs/ACTIVITY.md)
|
|
27
|
+
|
|
28
|
+
[Installation options](docs/INSTALL.md) · [First session](docs/ONBOARDING.md) ·
|
|
29
|
+
[Full guide + keys](docs/USAGE.md) · [Browser extension](docs/BROWSER_EXTENSION.md) ·
|
|
30
|
+
[Latest release](https://github.com/SaroashDS/Breadcrumbs/releases/latest)
|
|
31
|
+
|
|
32
|
+
## Try one block
|
|
33
|
+
|
|
34
|
+
1. Press `E` and write one small intention. `Ctrl+B` adds a task; `F2` checks it off.
|
|
35
|
+
2. Press `Escape`, choose a duration, then `Space` to start.
|
|
36
|
+
3. Choose your working scope, reuse it, or continue without tracking.
|
|
37
|
+
4. Switch between your work and other apps. Press `B` to inspect the trail.
|
|
38
|
+
5. Finish the block, save a reflection, and review it with `H`.
|
|
39
|
+
|
|
40
|
+
The feature tour opens on first launch. Replay it with `?` while ready or paused.
|
|
41
|
+
It never enables capture or starts the timer. [Hands-on onboarding](docs/ONBOARDING.md)
|
|
42
|
+
|
|
43
|
+
## What it does
|
|
44
|
+
|
|
45
|
+
| Need | Breadcrumbs feature |
|
|
46
|
+
| --- | --- |
|
|
47
|
+
| Keep the next step in view | Intentions and a persistent Markdown checklist |
|
|
48
|
+
| Work to your own rhythm | Focus/short/long presets, custom timers, pause and resume |
|
|
49
|
+
| Understand a detour | App/browser scope, Git-style branches, useful-detour annotations |
|
|
50
|
+
| Inspect what happened | Activity details stay beside the trail and follow selection |
|
|
51
|
+
| Stop and return later | Named sessions, checkpoints and paused recovery |
|
|
52
|
+
| Learn from a block | Reflections, optional focus rating, history and JSON export |
|
|
53
|
+
| Stay in the browser | Optional extension countdown, Start/Pause/Resume and confirmed Finish |
|
|
54
|
+
|
|
55
|
+
Sessions keep their name across work blocks, breaks and restarts. `Ctrl+N`
|
|
56
|
+
explicitly starts a new session. Breaks appear in the same trail without capture.
|
|
57
|
+
`End` or **Latest** follows the newest activity; selecting an older visit preserves it.
|
|
58
|
+
|
|
59
|
+
**In scope** matches your choices. **Supporting** marks a useful detour.
|
|
60
|
+
**Deviation** is outside scope and can still be useful work. **Unknown** means
|
|
61
|
+
the context was not verified. `A`, `S`, and `V` annotate a selected visit.
|
|
62
|
+
|
|
63
|
+
Optional preferences include three themes, sound previews, a companion and
|
|
64
|
+
reading cards. They stay out of the core timer workflow. [Every setting](docs/USAGE.md#settings)
|
|
65
|
+
|
|
66
|
+
## Browser and terminal context
|
|
67
|
+
|
|
68
|
+
Open **Config (`C`) → Browser connection** for the extension folder and local
|
|
69
|
+
pairing token. Load the unpacked extension in Chrome/Edge, pair, then select
|
|
70
|
+
apps, domains or exact pages in scope. Page matching includes query parameters.
|
|
71
|
+
Sharing tab context and controlling the timer are separate controls.
|
|
72
|
+
|
|
73
|
+
Selected Claude Code/Codex CLI activity uses a verified foreground terminal
|
|
74
|
+
marker. A running background process alone does not count as focus. Pinned
|
|
75
|
+
titles, multiplexers and editor panes may prevent verification; unsupported
|
|
76
|
+
context stays Unknown. [Setup and limitations](docs/ACTIVITY.md)
|
|
77
|
+
|
|
78
|
+
## Install, update and recover
|
|
79
|
+
|
|
80
|
+
Prefer a one-off run with [uv](https://docs.astral.sh/uv/getting-started/installation/)?
|
|
81
|
+
|
|
82
|
+
```sh
|
|
83
|
+
uvx --from https://github.com/SaroashDS/Breadcrumbs/releases/download/v0.4.5/breadcrumbs-0.4.5-py3-none-any.whl breadcrumbs
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
[All installation options](docs/INSTALL.md) cover pipx, uvx, ordinary virtual
|
|
87
|
+
environments, the optional Windows installer and source development.
|
|
88
|
+
Use the latest released wheel URL when updating a wheel-based installation.
|
|
89
|
+
|
|
90
|
+
```sh
|
|
91
|
+
breadcrumbs sessions
|
|
92
|
+
breadcrumbs --resume my-session
|
|
93
|
+
breadcrumbs export --output sessions.json
|
|
94
|
+
breadcrumbs export --activity --output activity.json
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
Recovery opens paused. Time while the app was closed is excluded. `Q` saves and
|
|
98
|
+
quits; `F` offers Keep working, Finish early or End session.
|
|
99
|
+
[Full keyboard reference](docs/USAGE.md#keyboard-reference)
|
|
100
|
+
|
|
101
|
+
## Why build this?
|
|
102
|
+
|
|
103
|
+
Too many productivity tools turn a simple need into another subscription, an
|
|
104
|
+
unnecessary AI agent, or a system that takes more work to manage than it saves.
|
|
105
|
+
|
|
106
|
+
Sometimes you just want a timer, goals you can keep in view, and an understanding
|
|
107
|
+
of where your attention trails off. Breadcrumbs is for developers moving between
|
|
108
|
+
editors, terminals and documentation, and anyone who wants a simpler way to work.
|
|
109
|
+
|
|
110
|
+
Write what you intend to do. Notice useful detours. Find your way back.
|
|
111
|
+
|
|
112
|
+
## Your data
|
|
113
|
+
|
|
114
|
+
Sessions and preferences stay locally in `~/.breadcrumbs`. `BREADCRUMBS_HOME`
|
|
115
|
+
chooses another folder. Existing Tlock data and its compatibility command remain usable in place.
|
|
116
|
+
|
|
117
|
+
Tracking is optional and runs only during running focus/custom blocks. Pauses,
|
|
118
|
+
breaks and quitting stop it. Normal export omits activity; `--activity` adds it.
|
|
119
|
+
The extension sends domains and URL hashes, not raw paths or queries. Titles
|
|
120
|
+
are optional. Hashes identify pages and are not anonymous. Private/internal
|
|
121
|
+
tabs are excluded by the extension; app-only capture cannot reliably identify
|
|
122
|
+
private windows. [Privacy and capture details](docs/ACTIVITY.md)
|
|
123
|
+
|
|
124
|
+
## Contributors welcome
|
|
125
|
+
|
|
126
|
+
Help make everyday work easier: small features, integrations, useful workflows,
|
|
127
|
+
bug fixes and clearer docs are welcome. Keep the timer useful on its own and
|
|
128
|
+
integrations optional.
|
|
129
|
+
|
|
130
|
+
Start with a concrete [good first issue](https://github.com/SaroashDS/Breadcrumbs/issues?q=is%3Aissue%20is%3Aopen%20label%3A%22good%20first%20issue%22)
|
|
131
|
+
or a [help wanted task](https://github.com/SaroashDS/Breadcrumbs/issues?q=is%3Aissue%20is%3Aopen%20label%3A%22help%20wanted%22).
|
|
132
|
+
The [roadmap tickets](docs/CONTRIBUTOR_TASKS.md) cover weekly review, CSV export,
|
|
133
|
+
editor context and broader desktop support. See [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
134
|
+
|
|
135
|
+
```sh
|
|
136
|
+
python -m pip install -e ".[dev]"
|
|
137
|
+
python -m pytest -q
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
[Changelog](CHANGELOG.md) · [QA](docs/TESTING.md) ·
|
|
141
|
+
[Architecture](docs/FOCUS_BRANCHES.md) · [Brand credits](docs/BRANDS.md) ·
|
|
142
|
+
[Publishing setup](docs/PUBLISHING.md)
|
|
143
|
+
|
|
144
|
+
MIT licensed. Brand marks belong to their respective owners.
|