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.
Files changed (79) hide show
  1. breadcrumbst-0.4.6/.gitignore +17 -0
  2. breadcrumbst-0.4.6/CHANGELOG.md +193 -0
  3. breadcrumbst-0.4.6/LICENSE +21 -0
  4. breadcrumbst-0.4.6/PKG-INFO +188 -0
  5. breadcrumbst-0.4.6/README.md +144 -0
  6. breadcrumbst-0.4.6/breadcrumbs/__init__.py +3 -0
  7. breadcrumbst-0.4.6/breadcrumbs/__main__.py +163 -0
  8. breadcrumbst-0.4.6/breadcrumbs/_console_marker.py +350 -0
  9. breadcrumbst-0.4.6/breadcrumbs/activity.py +326 -0
  10. breadcrumbst-0.4.6/breadcrumbs/app.py +936 -0
  11. breadcrumbst-0.4.6/breadcrumbs/assets/branding/NOTICE.md +7 -0
  12. breadcrumbst-0.4.6/breadcrumbs/assets/branding/logo.png +0 -0
  13. breadcrumbst-0.4.6/breadcrumbs/assets/branding/terminal.json +1 -0
  14. breadcrumbst-0.4.6/breadcrumbs/assets/brands/LICENSE-CODICONS.txt +399 -0
  15. breadcrumbst-0.4.6/breadcrumbs/assets/brands/LICENSE-SIMPLE-ICONS.txt +30 -0
  16. breadcrumbst-0.4.6/breadcrumbs/assets/brands/NOTICE.md +42 -0
  17. breadcrumbst-0.4.6/breadcrumbs/assets/brands/claude.svg +1 -0
  18. breadcrumbst-0.4.6/breadcrumbs/assets/brands/firefoxbrowser.svg +1 -0
  19. breadcrumbst-0.4.6/breadcrumbs/assets/brands/git.svg +1 -0
  20. breadcrumbst-0.4.6/breadcrumbs/assets/brands/github.svg +1 -0
  21. breadcrumbst-0.4.6/breadcrumbs/assets/brands/googlechrome.svg +1 -0
  22. breadcrumbst-0.4.6/breadcrumbs/assets/brands/masks.json +380 -0
  23. breadcrumbst-0.4.6/breadcrumbs/assets/brands/neovim.svg +1 -0
  24. breadcrumbst-0.4.6/breadcrumbs/assets/brands/nodedotjs.svg +1 -0
  25. breadcrumbst-0.4.6/breadcrumbs/assets/brands/openai.svg +1 -0
  26. breadcrumbst-0.4.6/breadcrumbs/assets/brands/python.svg +1 -0
  27. breadcrumbst-0.4.6/breadcrumbs/assets/brands/rasterize.cjs +28 -0
  28. breadcrumbst-0.4.6/breadcrumbs/assets/brands/spotify.svg +1 -0
  29. breadcrumbst-0.4.6/breadcrumbs/assets/brands/terminal.svg +1 -0
  30. breadcrumbst-0.4.6/breadcrumbs/assets/brands/vscode.svg +1 -0
  31. breadcrumbst-0.4.6/breadcrumbs/assets/brands/window.svg +1 -0
  32. breadcrumbst-0.4.6/breadcrumbs/assets/brands/youtube.svg +1 -0
  33. breadcrumbst-0.4.6/breadcrumbs/assets/browser-extension/background.mjs +469 -0
  34. breadcrumbst-0.4.6/breadcrumbs/assets/browser-extension/connection.css +75 -0
  35. breadcrumbst-0.4.6/breadcrumbs/assets/browser-extension/connection.js +220 -0
  36. breadcrumbst-0.4.6/breadcrumbs/assets/browser-extension/core.mjs +82 -0
  37. breadcrumbst-0.4.6/breadcrumbs/assets/browser-extension/manifest.json +16 -0
  38. breadcrumbst-0.4.6/breadcrumbs/assets/browser-extension/options.html +63 -0
  39. breadcrumbst-0.4.6/breadcrumbs/assets/browser-extension/popup.html +63 -0
  40. breadcrumbst-0.4.6/breadcrumbs/assets/browser-extension/tests/ui.test.mjs +216 -0
  41. breadcrumbst-0.4.6/breadcrumbs/assets/browser-extension/tests/worker.test.mjs +597 -0
  42. breadcrumbst-0.4.6/breadcrumbs/branches.py +588 -0
  43. breadcrumbst-0.4.6/breadcrumbs/branding.py +30 -0
  44. breadcrumbst-0.4.6/breadcrumbs/brands.py +210 -0
  45. breadcrumbst-0.4.6/breadcrumbs/bridge.py +365 -0
  46. breadcrumbst-0.4.6/breadcrumbs/browser_install.py +83 -0
  47. breadcrumbst-0.4.6/breadcrumbs/config.py +74 -0
  48. breadcrumbst-0.4.6/breadcrumbs/db.py +477 -0
  49. breadcrumbst-0.4.6/breadcrumbs/mascot.py +92 -0
  50. breadcrumbst-0.4.6/breadcrumbs/onboarding.py +170 -0
  51. breadcrumbst-0.4.6/breadcrumbs/reading.py +30 -0
  52. breadcrumbst-0.4.6/breadcrumbs/screens.py +365 -0
  53. breadcrumbst-0.4.6/breadcrumbs/session_names.py +26 -0
  54. breadcrumbst-0.4.6/breadcrumbs/sound.py +32 -0
  55. breadcrumbst-0.4.6/breadcrumbs/terminal.py +393 -0
  56. breadcrumbst-0.4.6/breadcrumbs/timer.py +86 -0
  57. breadcrumbst-0.4.6/breadcrumbs/update_helper.py +99 -0
  58. breadcrumbst-0.4.6/breadcrumbs/updater.py +126 -0
  59. breadcrumbst-0.4.6/breadcrumbs/verses.py +63 -0
  60. breadcrumbst-0.4.6/breadcrumbs/widgets.py +226 -0
  61. breadcrumbst-0.4.6/pyproject.toml +45 -0
  62. breadcrumbst-0.4.6/tests/test_activity.py +206 -0
  63. breadcrumbst-0.4.6/tests/test_app.py +149 -0
  64. breadcrumbst-0.4.6/tests/test_brands.py +100 -0
  65. breadcrumbst-0.4.6/tests/test_bridge.py +276 -0
  66. breadcrumbst-0.4.6/tests/test_browser_install.py +55 -0
  67. breadcrumbst-0.4.6/tests/test_db.py +57 -0
  68. breadcrumbst-0.4.6/tests/test_main_trail_config.py +62 -0
  69. breadcrumbst-0.4.6/tests/test_onboarding.py +102 -0
  70. breadcrumbst-0.4.6/tests/test_release_qa.py +81 -0
  71. breadcrumbst-0.4.6/tests/test_remote_timer.py +150 -0
  72. breadcrumbst-0.4.6/tests/test_rename_migration.py +68 -0
  73. breadcrumbst-0.4.6/tests/test_scope_flow.py +151 -0
  74. breadcrumbst-0.4.6/tests/test_session_timeline.py +191 -0
  75. breadcrumbst-0.4.6/tests/test_sessions.py +285 -0
  76. breadcrumbst-0.4.6/tests/test_terminal.py +355 -0
  77. breadcrumbst-0.4.6/tests/test_timer.py +38 -0
  78. breadcrumbst-0.4.6/tests/test_trail_returns.py +106 -0
  79. 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.
@@ -0,0 +1,3 @@
1
+ """Breadcrumbs terminal focus companion."""
2
+
3
+ __version__ = "0.4.6"