td-task 0.1.4__tar.gz → 0.2.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.
td_task-0.2.0/.env.enc ADDED
Binary file
@@ -0,0 +1,33 @@
1
+ name: Publish to PyPI
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ push:
6
+ tags:
7
+ - 'v*'
8
+
9
+ jobs:
10
+ deploy:
11
+ runs-on: ubuntu-latest
12
+ steps:
13
+ - name: Checkout code
14
+ uses: actions/checkout@v4
15
+
16
+ - name: Install uv
17
+ uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0
18
+
19
+ - name: Install Doppler CLI
20
+ uses: dopplerhq/cli-action@v3
21
+
22
+ - name: Set up Python
23
+ uses: actions/setup-python@v5
24
+ with:
25
+ python-version: '3.14'
26
+
27
+ - name: Build package
28
+ run: uv build
29
+
30
+ - name: Publish to PyPI
31
+ run: doppler run -- sh -c 'UV_PUBLISH_TOKEN="$PYPI_API" uv publish'
32
+ env:
33
+ DOPPLER_TOKEN: ${{ secrets.DOPPLER_TOKEN }}
@@ -5,3 +5,4 @@ __pycache__/
5
5
  .venv/
6
6
  .env
7
7
  AGENTS.md
8
+ CLAUDE.md
td_task-0.2.0/PKG-INFO ADDED
@@ -0,0 +1,278 @@
1
+ Metadata-Version: 2.4
2
+ Name: td-task
3
+ Version: 0.2.0
4
+ Summary: Fast TUI and CLI manager for tasks and Markdown notes
5
+ Requires-Python: >=3.14
6
+ Requires-Dist: cryptography>=42.0.0
7
+ Requires-Dist: rich>=15.0.0
8
+ Provides-Extra: dev-mode
9
+ Requires-Dist: watchdog>=6.0.0; extra == 'dev-mode'
10
+ Description-Content-Type: text/markdown
11
+
12
+ # td
13
+
14
+ A fast, keyboard-driven terminal manager for tasks and Markdown notes. Multi-list,
15
+ encrypted, scriptable, and built for humans and agents.
16
+
17
+ ![td demo](assets/demo.gif)
18
+
19
+ ## Install
20
+
21
+ ```bash
22
+ uv tool install td-task # recommended
23
+ ```
24
+
25
+ Or with pip:
26
+
27
+ ```bash
28
+ pip install td-task
29
+ ```
30
+
31
+ Run directly without installing:
32
+
33
+ ```bash
34
+ uvx td-task
35
+ ```
36
+
37
+ For the `--dev` file watcher, install the optional extra:
38
+
39
+ ```bash
40
+ uv tool install 'td-task[dev-mode]'
41
+ ```
42
+
43
+ ## Usage
44
+
45
+ ```
46
+ td [command] [--list <name>]
47
+ ```
48
+
49
+ | Command | Description |
50
+ |---------|-------------|
51
+ | `td` | Open the TUI (defaults to first list) |
52
+ | `td add <text>` | Add a task to a list |
53
+ | `td list` | Print active tasks to stdout |
54
+ | `td notes …` | Create, inspect, update, list, and delete Markdown notes |
55
+ | `td archive` | Open the archive screen |
56
+ | `td export [file]` | Export database to JSON (stdout if no file) |
57
+ | `td import <file>` | Merge a JSON backup into the database |
58
+ | `td update` | Upgrade to the latest version |
59
+ | `td --version` | Print the installed version |
60
+ | `td --help` | Print the help menu |
61
+
62
+ The `-l` / `--list` flag scopes a command to a specific list. It is required for `add`, `list`, and `archive`.
63
+
64
+ ```bash
65
+ td -l work # open TUI locked to the "work" list
66
+ td add "fix the flaky test" -l work
67
+ td list --list work
68
+ td export backup.json
69
+ ```
70
+
71
+ ### Notes CLI
72
+
73
+ Notes use the same lists, ordering, completion state, archives, and encryption as
74
+ tasks. Every command supports stable note IDs. Add `--json` for structured output.
75
+
76
+ ```bash
77
+ # create with inline Markdown
78
+ td notes add "Release plan" -l work --body $'# Release\n* test\n* ship' --json
79
+
80
+ # create from a file or stdin
81
+ td notes add "Runbook" -l ops --body-file runbook.md
82
+ cat incident.md | td notes add "Incident" -l ops --body-file -
83
+
84
+ # discover and read notes
85
+ td notes list -l work --json
86
+ td notes show 12
87
+ td notes show 12 --json
88
+
89
+ # update title or body
90
+ td notes update 12 --title "Final release plan"
91
+ td notes update 12 --body-file plan.md --json
92
+
93
+ # delete note and its task-backed list item
94
+ td notes delete 12 --json
95
+ ```
96
+
97
+ `td notes add` uses the current timestamp when you omit the title. Pass
98
+ `--include-archived` to `td notes list` when agents need archived notes too.
99
+
100
+ ## TUI Keybindings
101
+
102
+ ### Tasks
103
+
104
+ | Key | Action |
105
+ |-----|--------|
106
+ | `a` | Add new task |
107
+ | `A` | Add a task-backed Markdown note |
108
+ | `e` / `Enter` | Edit selected task or open selected note |
109
+ | `E` | Rename selected note |
110
+ | `d` | Delete selected task |
111
+ | `Space` | Toggle done / active |
112
+ | `s` | Star task (pin to top, bold yellow) |
113
+ | `c` | Archive all completed tasks |
114
+ | `y` | Copy task list to clipboard |
115
+ | `↑` / `k` &nbsp; `↓` / `j` | Navigate tasks |
116
+ | `Ctrl+↑` / `Ctrl+↓` | Reorder task position |
117
+ | `Alt+↑` / `Alt+↓` | Duplicate task above / below |
118
+ | `←` / `→` | Switch to previous / next list |
119
+ | `l` / `Tab` | Open Lists Menu |
120
+ | `Ctrl+P` | Fuzzy-search lists |
121
+ | `,` | Open archive screen |
122
+ | `/` | Open settings |
123
+ | `?` | Help screen |
124
+ | `q` / `Esc` | Quit |
125
+
126
+ ### Note Editor
127
+
128
+ | Key | Action |
129
+ |-----|--------|
130
+ | `Esc` | Save and close |
131
+ | `Ctrl+S` | Save without closing |
132
+ | `Enter` | Insert a new line |
133
+ | `Alt+↑` / `Alt+↓` | Move current line up or down |
134
+ | `Cmd+Backspace` on macOS / `Ctrl+Backspace` elsewhere | Clear current line |
135
+ | `Tab` / `Shift+Tab` | Indent or outdent current line |
136
+ | Arrow keys / `Home` / `End` | Move cursor |
137
+ | `Backspace` / `Delete` | Delete text or join lines |
138
+
139
+ The active line shows raw Markdown. Other lines show a live preview. The editor
140
+ supports `#` headings, `*` bullets, `*bold*`, `**bold**`, and `_italic_` text.
141
+ `Alt+Left` / `Alt+Right` moves by word. `Alt+Backspace` deletes one word.
142
+ After a root bullet, `Enter` starts an indented continuation and keeps its bullet
143
+ marker. Press `Enter` or `Backspace` on an empty continuation to leave list mode.
144
+
145
+ ### Lists Menu
146
+
147
+ | Key | Action |
148
+ |-----|--------|
149
+ | `Enter` | Switch to highlighted list |
150
+ | `a` | Create new list |
151
+ | `e` | Rename list |
152
+ | `A` | Archive list while preserving its items |
153
+ | `,` | Open archived lists |
154
+ | `d` | Delete list (with all its tasks) |
155
+ | `Shift+↑` / `Shift+↓` | Reorder list position |
156
+ | `↑` / `k` &nbsp; `↓` / `j` | Navigate lists |
157
+ | `q` / `Esc` | Quit |
158
+
159
+ ### Archived Lists
160
+
161
+ | Key | Action |
162
+ |-----|--------|
163
+ | `Enter` / `r` | Restore highlighted list |
164
+ | `d` | Permanently delete highlighted list and its items |
165
+ | `↑` / `k` &nbsp; `↓` / `j` | Navigate archived lists |
166
+ | `q` / `Esc` | Return to active lists |
167
+
168
+ ### Archive
169
+
170
+ | Key | Action |
171
+ |-----|--------|
172
+ | `↑` / `k` &nbsp; `↓` / `j` | Navigate |
173
+ | `r` | Restore task to active list |
174
+ | `d` | Delete task permanently |
175
+ | `c` | Clear all archived tasks |
176
+ | `q` / `Esc` | Return to tasks |
177
+
178
+ ### Settings
179
+
180
+ | Key | Action |
181
+ |-----|--------|
182
+ | `e` / `Enter` | Edit selected setting |
183
+ | `↑` / `↓` | Adjust numeric values (when editing) |
184
+ | `↑` / `k` &nbsp; `↓` / `j` | Navigate settings |
185
+ | `q` / `Esc` | Return |
186
+
187
+ Settings you can change: max tasks per list (3–50), max starred tasks, whole-database
188
+ encryption, current-list encryption, and backup export / import.
189
+
190
+ ## Agent-friendly
191
+
192
+ `td` works well as a task layer for AI agents and shell scripts. The CLI commands are designed for scripting:
193
+
194
+ ```bash
195
+ # add tasks from a script or agent
196
+ td add "review PR #42" -l work
197
+ td add "update dependencies" -l work
198
+
199
+ # read tasks as plain text
200
+ td list -l work
201
+
202
+ # create and query Markdown notes as JSON
203
+ td notes add "PR review" -l work --body "# Findings" --json
204
+ td notes list -l work --json
205
+ td notes show 1 --json
206
+
207
+ # dump the full database as JSON
208
+ td export | jq '.tasks[] | select(.status == "active")'
209
+
210
+ # point at a separate database — useful for testing or sandboxing
211
+ TD_DB_PATH=/tmp/agent.db td add "isolated task" -l inbox
212
+ ```
213
+
214
+ The `--help` output is written to be LLM-readable, so agents can self-orient by running `td --help`.
215
+
216
+ ## Stack
217
+
218
+ - **Python 3.14+** — application and CLI runtime.
219
+ - **SQLite** — single-file storage for lists, tasks, notes, settings, and encryption metadata.
220
+ - **Rich + raw ANSI terminal I/O** — styled rendering and keyboard input without a TUI framework.
221
+ - **Cryptography** — Fernet encryption with PBKDF2-derived database or per-list keys.
222
+ - **uv + Hatchling** — dependency management, builds, and Python packaging.
223
+
224
+ ## Architecture
225
+
226
+ `td` is a single Python package with no framework dependencies:
227
+
228
+ | File | Role |
229
+ |------|------|
230
+ | `__main__.py` | CLI entry point, argument parsing, non-TUI commands |
231
+ | `tui.py` | Raw terminal render loop, all keybinding logic |
232
+ | `db.py` | SQLite layer — all reads and writes go through here |
233
+ | `terminal.py` | Low-level raw mode I/O and key decoding |
234
+
235
+ The TUI uses raw ANSI escape sequences directly rather than Curses or Textual. This keeps startup instant and the binary small.
236
+
237
+ Runtime dependencies: `rich` (terminal rendering), `cryptography` (AES encryption). `watchdog` is optional (`[dev-mode]` extra).
238
+
239
+ Works on macOS, Linux, and Windows. On Windows, use a terminal with ANSI support such as Windows Terminal for the best experience.
240
+
241
+ ## Data model
242
+
243
+ Four core tables in a SQLite file:
244
+
245
+ **`lists`** — `name` (PK), `position`, `max_tasks`, `archived_at`
246
+
247
+ **`tasks`** — `id`, `text`, `status` (`active` / `done` / `archived`), `position`, `created_at`, `done_at`, `archived_at`, `starred`, `list_name` (FK → lists, CASCADE DELETE)
248
+
249
+ **`notes`** — `id`, `task_id` (unique FK → tasks, CASCADE DELETE), `title`, `content`, `created_at`, `updated_at`
250
+
251
+ **`list_encryption`** — `list_name` (PK/FK → lists), `encryption_salt`, `password_verifier`
252
+
253
+ Each note attaches to a task. It therefore shares task ordering, completion,
254
+ starring, archiving, and list membership. Note names appear underlined in lists.
255
+ Deleting a task or list also deletes attached notes through cascades.
256
+
257
+ Archived lists keep all tasks and notes. They disappear from normal navigation
258
+ until restored from the Lists Menu.
259
+
260
+ ## Portability
261
+
262
+ Everything lives in `~/.td.db` — a single SQLite file you can copy, back up, or move between machines.
263
+
264
+ ```bash
265
+ # override the database path
266
+ export TD_DB_PATH=~/Dropbox/td.db
267
+
268
+ # back up
269
+ td export > backup.json
270
+
271
+ # restore on another machine
272
+ td import backup.json
273
+ ```
274
+
275
+ You can encrypt the whole database or only the current list from settings (`/`).
276
+ Each encrypted list uses its own password-derived key. Tasks and note bodies stay
277
+ encrypted in JSON backups. Whole-database and per-list encryption cannot run
278
+ together. If you forget a password, there is no recovery.
@@ -0,0 +1,267 @@
1
+ # td
2
+
3
+ A fast, keyboard-driven terminal manager for tasks and Markdown notes. Multi-list,
4
+ encrypted, scriptable, and built for humans and agents.
5
+
6
+ ![td demo](assets/demo.gif)
7
+
8
+ ## Install
9
+
10
+ ```bash
11
+ uv tool install td-task # recommended
12
+ ```
13
+
14
+ Or with pip:
15
+
16
+ ```bash
17
+ pip install td-task
18
+ ```
19
+
20
+ Run directly without installing:
21
+
22
+ ```bash
23
+ uvx td-task
24
+ ```
25
+
26
+ For the `--dev` file watcher, install the optional extra:
27
+
28
+ ```bash
29
+ uv tool install 'td-task[dev-mode]'
30
+ ```
31
+
32
+ ## Usage
33
+
34
+ ```
35
+ td [command] [--list <name>]
36
+ ```
37
+
38
+ | Command | Description |
39
+ |---------|-------------|
40
+ | `td` | Open the TUI (defaults to first list) |
41
+ | `td add <text>` | Add a task to a list |
42
+ | `td list` | Print active tasks to stdout |
43
+ | `td notes …` | Create, inspect, update, list, and delete Markdown notes |
44
+ | `td archive` | Open the archive screen |
45
+ | `td export [file]` | Export database to JSON (stdout if no file) |
46
+ | `td import <file>` | Merge a JSON backup into the database |
47
+ | `td update` | Upgrade to the latest version |
48
+ | `td --version` | Print the installed version |
49
+ | `td --help` | Print the help menu |
50
+
51
+ The `-l` / `--list` flag scopes a command to a specific list. It is required for `add`, `list`, and `archive`.
52
+
53
+ ```bash
54
+ td -l work # open TUI locked to the "work" list
55
+ td add "fix the flaky test" -l work
56
+ td list --list work
57
+ td export backup.json
58
+ ```
59
+
60
+ ### Notes CLI
61
+
62
+ Notes use the same lists, ordering, completion state, archives, and encryption as
63
+ tasks. Every command supports stable note IDs. Add `--json` for structured output.
64
+
65
+ ```bash
66
+ # create with inline Markdown
67
+ td notes add "Release plan" -l work --body $'# Release\n* test\n* ship' --json
68
+
69
+ # create from a file or stdin
70
+ td notes add "Runbook" -l ops --body-file runbook.md
71
+ cat incident.md | td notes add "Incident" -l ops --body-file -
72
+
73
+ # discover and read notes
74
+ td notes list -l work --json
75
+ td notes show 12
76
+ td notes show 12 --json
77
+
78
+ # update title or body
79
+ td notes update 12 --title "Final release plan"
80
+ td notes update 12 --body-file plan.md --json
81
+
82
+ # delete note and its task-backed list item
83
+ td notes delete 12 --json
84
+ ```
85
+
86
+ `td notes add` uses the current timestamp when you omit the title. Pass
87
+ `--include-archived` to `td notes list` when agents need archived notes too.
88
+
89
+ ## TUI Keybindings
90
+
91
+ ### Tasks
92
+
93
+ | Key | Action |
94
+ |-----|--------|
95
+ | `a` | Add new task |
96
+ | `A` | Add a task-backed Markdown note |
97
+ | `e` / `Enter` | Edit selected task or open selected note |
98
+ | `E` | Rename selected note |
99
+ | `d` | Delete selected task |
100
+ | `Space` | Toggle done / active |
101
+ | `s` | Star task (pin to top, bold yellow) |
102
+ | `c` | Archive all completed tasks |
103
+ | `y` | Copy task list to clipboard |
104
+ | `↑` / `k` &nbsp; `↓` / `j` | Navigate tasks |
105
+ | `Ctrl+↑` / `Ctrl+↓` | Reorder task position |
106
+ | `Alt+↑` / `Alt+↓` | Duplicate task above / below |
107
+ | `←` / `→` | Switch to previous / next list |
108
+ | `l` / `Tab` | Open Lists Menu |
109
+ | `Ctrl+P` | Fuzzy-search lists |
110
+ | `,` | Open archive screen |
111
+ | `/` | Open settings |
112
+ | `?` | Help screen |
113
+ | `q` / `Esc` | Quit |
114
+
115
+ ### Note Editor
116
+
117
+ | Key | Action |
118
+ |-----|--------|
119
+ | `Esc` | Save and close |
120
+ | `Ctrl+S` | Save without closing |
121
+ | `Enter` | Insert a new line |
122
+ | `Alt+↑` / `Alt+↓` | Move current line up or down |
123
+ | `Cmd+Backspace` on macOS / `Ctrl+Backspace` elsewhere | Clear current line |
124
+ | `Tab` / `Shift+Tab` | Indent or outdent current line |
125
+ | Arrow keys / `Home` / `End` | Move cursor |
126
+ | `Backspace` / `Delete` | Delete text or join lines |
127
+
128
+ The active line shows raw Markdown. Other lines show a live preview. The editor
129
+ supports `#` headings, `*` bullets, `*bold*`, `**bold**`, and `_italic_` text.
130
+ `Alt+Left` / `Alt+Right` moves by word. `Alt+Backspace` deletes one word.
131
+ After a root bullet, `Enter` starts an indented continuation and keeps its bullet
132
+ marker. Press `Enter` or `Backspace` on an empty continuation to leave list mode.
133
+
134
+ ### Lists Menu
135
+
136
+ | Key | Action |
137
+ |-----|--------|
138
+ | `Enter` | Switch to highlighted list |
139
+ | `a` | Create new list |
140
+ | `e` | Rename list |
141
+ | `A` | Archive list while preserving its items |
142
+ | `,` | Open archived lists |
143
+ | `d` | Delete list (with all its tasks) |
144
+ | `Shift+↑` / `Shift+↓` | Reorder list position |
145
+ | `↑` / `k` &nbsp; `↓` / `j` | Navigate lists |
146
+ | `q` / `Esc` | Quit |
147
+
148
+ ### Archived Lists
149
+
150
+ | Key | Action |
151
+ |-----|--------|
152
+ | `Enter` / `r` | Restore highlighted list |
153
+ | `d` | Permanently delete highlighted list and its items |
154
+ | `↑` / `k` &nbsp; `↓` / `j` | Navigate archived lists |
155
+ | `q` / `Esc` | Return to active lists |
156
+
157
+ ### Archive
158
+
159
+ | Key | Action |
160
+ |-----|--------|
161
+ | `↑` / `k` &nbsp; `↓` / `j` | Navigate |
162
+ | `r` | Restore task to active list |
163
+ | `d` | Delete task permanently |
164
+ | `c` | Clear all archived tasks |
165
+ | `q` / `Esc` | Return to tasks |
166
+
167
+ ### Settings
168
+
169
+ | Key | Action |
170
+ |-----|--------|
171
+ | `e` / `Enter` | Edit selected setting |
172
+ | `↑` / `↓` | Adjust numeric values (when editing) |
173
+ | `↑` / `k` &nbsp; `↓` / `j` | Navigate settings |
174
+ | `q` / `Esc` | Return |
175
+
176
+ Settings you can change: max tasks per list (3–50), max starred tasks, whole-database
177
+ encryption, current-list encryption, and backup export / import.
178
+
179
+ ## Agent-friendly
180
+
181
+ `td` works well as a task layer for AI agents and shell scripts. The CLI commands are designed for scripting:
182
+
183
+ ```bash
184
+ # add tasks from a script or agent
185
+ td add "review PR #42" -l work
186
+ td add "update dependencies" -l work
187
+
188
+ # read tasks as plain text
189
+ td list -l work
190
+
191
+ # create and query Markdown notes as JSON
192
+ td notes add "PR review" -l work --body "# Findings" --json
193
+ td notes list -l work --json
194
+ td notes show 1 --json
195
+
196
+ # dump the full database as JSON
197
+ td export | jq '.tasks[] | select(.status == "active")'
198
+
199
+ # point at a separate database — useful for testing or sandboxing
200
+ TD_DB_PATH=/tmp/agent.db td add "isolated task" -l inbox
201
+ ```
202
+
203
+ The `--help` output is written to be LLM-readable, so agents can self-orient by running `td --help`.
204
+
205
+ ## Stack
206
+
207
+ - **Python 3.14+** — application and CLI runtime.
208
+ - **SQLite** — single-file storage for lists, tasks, notes, settings, and encryption metadata.
209
+ - **Rich + raw ANSI terminal I/O** — styled rendering and keyboard input without a TUI framework.
210
+ - **Cryptography** — Fernet encryption with PBKDF2-derived database or per-list keys.
211
+ - **uv + Hatchling** — dependency management, builds, and Python packaging.
212
+
213
+ ## Architecture
214
+
215
+ `td` is a single Python package with no framework dependencies:
216
+
217
+ | File | Role |
218
+ |------|------|
219
+ | `__main__.py` | CLI entry point, argument parsing, non-TUI commands |
220
+ | `tui.py` | Raw terminal render loop, all keybinding logic |
221
+ | `db.py` | SQLite layer — all reads and writes go through here |
222
+ | `terminal.py` | Low-level raw mode I/O and key decoding |
223
+
224
+ The TUI uses raw ANSI escape sequences directly rather than Curses or Textual. This keeps startup instant and the binary small.
225
+
226
+ Runtime dependencies: `rich` (terminal rendering), `cryptography` (AES encryption). `watchdog` is optional (`[dev-mode]` extra).
227
+
228
+ Works on macOS, Linux, and Windows. On Windows, use a terminal with ANSI support such as Windows Terminal for the best experience.
229
+
230
+ ## Data model
231
+
232
+ Four core tables in a SQLite file:
233
+
234
+ **`lists`** — `name` (PK), `position`, `max_tasks`, `archived_at`
235
+
236
+ **`tasks`** — `id`, `text`, `status` (`active` / `done` / `archived`), `position`, `created_at`, `done_at`, `archived_at`, `starred`, `list_name` (FK → lists, CASCADE DELETE)
237
+
238
+ **`notes`** — `id`, `task_id` (unique FK → tasks, CASCADE DELETE), `title`, `content`, `created_at`, `updated_at`
239
+
240
+ **`list_encryption`** — `list_name` (PK/FK → lists), `encryption_salt`, `password_verifier`
241
+
242
+ Each note attaches to a task. It therefore shares task ordering, completion,
243
+ starring, archiving, and list membership. Note names appear underlined in lists.
244
+ Deleting a task or list also deletes attached notes through cascades.
245
+
246
+ Archived lists keep all tasks and notes. They disappear from normal navigation
247
+ until restored from the Lists Menu.
248
+
249
+ ## Portability
250
+
251
+ Everything lives in `~/.td.db` — a single SQLite file you can copy, back up, or move between machines.
252
+
253
+ ```bash
254
+ # override the database path
255
+ export TD_DB_PATH=~/Dropbox/td.db
256
+
257
+ # back up
258
+ td export > backup.json
259
+
260
+ # restore on another machine
261
+ td import backup.json
262
+ ```
263
+
264
+ You can encrypt the whole database or only the current list from settings (`/`).
265
+ Each encrypted list uses its own password-derived key. Tasks and note bodies stay
266
+ encrypted in JSON backups. Whole-database and per-list encryption cannot run
267
+ together. If you forget a password, there is no recovery.
Binary file
@@ -0,0 +1,56 @@
1
+ Output assets/demo.gif
2
+
3
+ Set Shell "bash"
4
+ Set FontSize 14
5
+ Set Width 680
6
+ Set Height 360
7
+ Set Theme "Catppuccin Mocha"
8
+ Set Padding 16
9
+ Set TypingSpeed 70ms
10
+ Set PlaybackSpeed 0.85
11
+
12
+ # Warm up, set env, clear before Show
13
+ Hide
14
+ Type "export TD_DB_PATH=/tmp/td_demo.db && rm -f $TD_DB_PATH && td --version > /dev/null 2>&1 && clear"
15
+ Enter
16
+ Sleep 3s
17
+ Show
18
+
19
+ # Launch the TUI — env var already set in Hide
20
+ Type "td -l work"
21
+ Enter
22
+ Sleep 1400ms
23
+
24
+ # Add three tasks
25
+ Type "a"
26
+ Sleep 300ms
27
+ Type "design API endpoints"
28
+ Enter
29
+ Sleep 400ms
30
+
31
+ Type "a"
32
+ Sleep 300ms
33
+ Type "write unit tests"
34
+ Enter
35
+ Sleep 400ms
36
+
37
+ Type "a"
38
+ Sleep 300ms
39
+ Type "deploy to staging"
40
+ Enter
41
+ Sleep 600ms
42
+
43
+ # Star the top task
44
+ Up
45
+ Up
46
+ Type "s"
47
+ Sleep 600ms
48
+
49
+ # Toggle middle task done
50
+ Down
51
+ Type " "
52
+ Sleep 1200ms
53
+
54
+ # Quit
55
+ Type "q"
56
+ Sleep 300ms
@@ -1,15 +1,17 @@
1
1
  [project]
2
2
  name = "td-task"
3
- version = "0.1.4"
4
- description = "Minimal TUI todo app"
3
+ version = "0.2.0"
4
+ description = "Fast TUI and CLI manager for tasks and Markdown notes"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.14"
7
7
  dependencies = [
8
8
  "rich>=15.0.0",
9
- "watchdog>=6.0.0",
10
9
  "cryptography>=42.0.0",
11
10
  ]
12
11
 
12
+ [project.optional-dependencies]
13
+ dev-mode = ["watchdog>=6.0.0"]
14
+
13
15
  [project.scripts]
14
16
  td = "td.__main__:main"
15
17
 
@@ -1,5 +1,20 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.2.0] - 2026-08-03
4
+ - Add task-backed Markdown notes with a full-screen editor and live line preview.
5
+ - Add `A` to create notes, `e`/`Enter` to edit note bodies, and `E` to rename notes.
6
+ - Include notes in encryption, JSON backup and restore, list ordering, and task lifecycle actions.
7
+ - Add line movement, line clearing, word navigation, word deletion, and indentation controls to the note editor.
8
+ - Add restorable list archiving with preserved tasks, notes, settings, and JSON backup state.
9
+ - Auto-indent and continue Markdown bullets; exit empty continuation with Enter or Backspace.
10
+ - Add independent password encryption per list with portable encrypted backups and lazy unlock prompts.
11
+ - Add agent-friendly notes CLI with CRUD actions, JSON output, and file or stdin bodies.
12
+
13
+ ## [0.1.5]
14
+ - Fix Windows keyboard input: arrow keys, Home/End, Delete, and Ctrl/Alt+arrow now work by decoding the native Windows scancode protocol instead of assuming ANSI escape sequences.
15
+ - Fix clipboard copy (`y`) on Windows by using the `clip` command.
16
+ - Gracefully degrade if a console cannot enable virtual terminal mode, instead of crashing on startup.
17
+
3
18
  ## [0.1.4]
4
19
  - Fix list-scoped max tasks limit not being respected when adding or duplicating tasks in the TUI.
5
20