taskunity 2026.1__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 (36) hide show
  1. taskunity-2026.1/MANIFEST.in +3 -0
  2. taskunity-2026.1/PKG-INFO +238 -0
  3. taskunity-2026.1/README.md +207 -0
  4. taskunity-2026.1/pyproject.toml +62 -0
  5. taskunity-2026.1/setup.cfg +4 -0
  6. taskunity-2026.1/src/taskunity/__init__.py +1 -0
  7. taskunity-2026.1/src/taskunity/app.py +1268 -0
  8. taskunity-2026.1/src/taskunity/cli.py +43 -0
  9. taskunity-2026.1/src/taskunity/models.py +103 -0
  10. taskunity-2026.1/src/taskunity/render.py +371 -0
  11. taskunity-2026.1/src/taskunity/static/app.css +1394 -0
  12. taskunity-2026.1/src/taskunity/static/chart.umd.min.js +14 -0
  13. taskunity-2026.1/src/taskunity/static/chartjs-adapter-date-fns.bundle.min.js +7 -0
  14. taskunity-2026.1/src/taskunity/static/htmx.min.js +68 -0
  15. taskunity-2026.1/src/taskunity/task_store.py +598 -0
  16. taskunity-2026.1/src/taskunity/templates/base.html +397 -0
  17. taskunity-2026.1/src/taskunity/templates/index.html +4 -0
  18. taskunity-2026.1/src/taskunity/templates/partials/board.html +24 -0
  19. taskunity-2026.1/src/taskunity/templates/partials/calendar.html +25 -0
  20. taskunity-2026.1/src/taskunity/templates/partials/main.html +283 -0
  21. taskunity-2026.1/src/taskunity/templates/partials/milestone_banner.html +34 -0
  22. taskunity-2026.1/src/taskunity/templates/partials/milestone_panel.html +222 -0
  23. taskunity-2026.1/src/taskunity/templates/partials/milestones.html +55 -0
  24. taskunity-2026.1/src/taskunity/templates/partials/projects.html +41 -0
  25. taskunity-2026.1/src/taskunity/templates/partials/task_list.html +52 -0
  26. taskunity-2026.1/src/taskunity/templates/partials/task_panel.html +310 -0
  27. taskunity-2026.1/src/taskunity/templates/partials/timeline.html +24 -0
  28. taskunity-2026.1/src/taskunity.egg-info/PKG-INFO +238 -0
  29. taskunity-2026.1/src/taskunity.egg-info/SOURCES.txt +34 -0
  30. taskunity-2026.1/src/taskunity.egg-info/dependency_links.txt +1 -0
  31. taskunity-2026.1/src/taskunity.egg-info/entry_points.txt +2 -0
  32. taskunity-2026.1/src/taskunity.egg-info/requires.txt +15 -0
  33. taskunity-2026.1/src/taskunity.egg-info/top_level.txt +1 -0
  34. taskunity-2026.1/tests/test_git_workspace_scope.py +55 -0
  35. taskunity-2026.1/tests/test_render_jsonantt.py +73 -0
  36. taskunity-2026.1/tests/test_workspace_config.py +37 -0
@@ -0,0 +1,3 @@
1
+ recursive-include src/taskunity/templates *.html
2
+ recursive-include src/taskunity/static *.css *.js
3
+ include README.md
@@ -0,0 +1,238 @@
1
+ Metadata-Version: 2.4
2
+ Name: taskunity
3
+ Version: 2026.1
4
+ Summary: A local, file-backed productivity app for program/task tracking.
5
+ Author: Taskunity Contributors
6
+ License: MIT
7
+ Keywords: tasks,productivity,fastapi,local-first,dashboard
8
+ Classifier: Development Status :: 3 - Alpha
9
+ Classifier: Framework :: FastAPI
10
+ Classifier: Intended Audience :: Developers
11
+ Classifier: License :: OSI Approved :: MIT License
12
+ Classifier: Programming Language :: Python :: 3
13
+ Classifier: Programming Language :: Python :: 3.10
14
+ Classifier: Programming Language :: Python :: 3.11
15
+ Classifier: Programming Language :: Python :: 3.12
16
+ Requires-Python: >=3.10
17
+ Description-Content-Type: text/markdown
18
+ Requires-Dist: fastapi>=0.111
19
+ Requires-Dist: uvicorn[standard]>=0.30
20
+ Requires-Dist: jinja2>=3.1
21
+ Requires-Dist: python-multipart>=0.0.9
22
+ Requires-Dist: pydantic>=2.7
23
+ Requires-Dist: markdown>=3.6
24
+ Provides-Extra: dev
25
+ Requires-Dist: pytest>=8; extra == "dev"
26
+ Requires-Dist: ruff>=0.5; extra == "dev"
27
+ Provides-Extra: docs
28
+ Requires-Dist: sphinx>=7; extra == "docs"
29
+ Requires-Dist: myst-parser>=3; extra == "docs"
30
+ Requires-Dist: furo>=2024.1; extra == "docs"
31
+
32
+ # Taskunity
33
+
34
+ A local-first, file-backed productivity web app for managing tasks. Everything lives in
35
+ plain files on your disk — no database, no account, no cloud. Point Taskunity at a folder and it
36
+ serves a browser UI for dashboards, a Gantt timeline, a Kanban board, a calendar, activity logs,
37
+ burndown charts, and an editable task side panel.
38
+
39
+ > Documentation: a full guide is in the [`docs/`](docs/) folder and is set up to build on
40
+ > [Read the Docs](https://readthedocs.org/) (Sphinx + Markdown).
41
+
42
+ ## Screenshots
43
+
44
+ | Task List | Task Board |
45
+ |-----------|-----------|
46
+ | ![Task List](https://raw.githubusercontent.com/briday1/taskwright/main/docs/_static/screenshots/task-list.png) | ![Task Board](https://raw.githubusercontent.com/briday1/taskwright/main/docs/_static/screenshots/task-board.png) |
47
+
48
+ | Gantt Timeline | Calendar |
49
+ |----------------|----------|
50
+ | ![Gantt](https://raw.githubusercontent.com/briday1/taskwright/main/docs/_static/screenshots/gantt.png) | ![Calendar](https://raw.githubusercontent.com/briday1/taskwright/main/docs/_static/screenshots/calendar.png) |
51
+
52
+ | Milestones | Projects |
53
+ |------------|----------|
54
+ | ![Milestones](https://raw.githubusercontent.com/briday1/taskwright/main/docs/_static/screenshots/milestones.png) | ![Projects](https://raw.githubusercontent.com/briday1/taskwright/main/docs/_static/screenshots/projects.png) |
55
+
56
+ | Task Activity Log | Settings (Theme) |
57
+ |-------------------|------------------|
58
+ | ![Task Panel](https://raw.githubusercontent.com/briday1/taskwright/main/docs/_static/screenshots/task-panel.png) | ![Settings Popup](https://raw.githubusercontent.com/briday1/taskwright/main/docs/_static/screenshots/settings-popup.png) |
59
+
60
+ | Task Burndown Chart | Milestone Burndown Chart |
61
+ |---------------------|--------------------------|
62
+ | ![Task Burndown](https://raw.githubusercontent.com/briday1/taskwright/main/docs/_static/screenshots/task-burndown.png) | ![Milestone Burndown](https://raw.githubusercontent.com/briday1/taskwright/main/docs/_static/screenshots/milestone-burndown.png) |
63
+
64
+ ## Why Taskunity
65
+
66
+ - **File-backed source of truth.** Each task is a single JSON file you can read, diff, and commit
67
+ to git. The whole workspace is a folder you own.
68
+ - **Local-first.** Runs entirely on `127.0.0.1`. Your data never leaves your machine.
69
+ - **Git-aware.** The UI shows branch/ahead/behind/dirty status and has a one-click commit + pull +
70
+ push sync button when the workspace folder itself is a git repo.
71
+
72
+ ## Workspace layout
73
+
74
+ The source of truth is a workspace folder:
75
+
76
+ ```text
77
+ workspace/
78
+ config.json # editable workspace/app metadata
79
+ projects/
80
+ apollo.json # one file per project
81
+ tasks/
82
+ A1B2-C3D4-E5F6-7890.json # one file per task (native id format)
83
+ milestones/
84
+ M-1A2B-3C4D.json # one file per milestone (groups tasks across projects)
85
+ assets/
86
+ A1B2-C3D4-E5F6-7890/ # attachments live alongside their task id
87
+ screenshot.png
88
+ ```
89
+
90
+ The app provides a browser UI for viewing dashboards, timelines, task boards, activity logs,
91
+ burndown charts, and editing tasks through a side panel.
92
+
93
+ ## Install locally
94
+
95
+ From a clone of this repository:
96
+
97
+ ```bash
98
+ pip install -e .
99
+ ```
100
+
101
+ This installs the `taskunity` command. (A PyPI release will come later; for now install from
102
+ source.)
103
+
104
+ ## Quick start
105
+
106
+ ```bash
107
+ taskunity serve --workspace ./my-workboard
108
+ ```
109
+
110
+ If the workspace folder does not exist yet, `taskunity serve` will create the empty Taskunity
111
+ structure for you. You can also run it from the current directory and let Taskunity use `.` as
112
+ the workspace.
113
+
114
+ Then open:
115
+
116
+ ```text
117
+ http://127.0.0.1:8000
118
+ ```
119
+
120
+ `init` is available if you want to scaffold a folder explicitly. It creates an editable
121
+ `config.json`, empty `projects/`, `tasks/`, `milestones/`, and `assets/` directories, plus a README
122
+ stub. It does not create starter projects or tasks; use the app to add your own once you begin.
123
+
124
+ ## Serve an existing workspace
125
+
126
+ ```bash
127
+ taskunity serve --workspace ./path/to/workspace --host 127.0.0.1 --port 8000
128
+ ```
129
+
130
+ | Flag | Default | Description |
131
+ | --- | --- | --- |
132
+ | `--workspace` | `.` | Workspace folder to serve |
133
+ | `--host` | `127.0.0.1` | Host interface to bind |
134
+ | `--port` | `8000` | Port to listen on |
135
+ | `--reload` | off | Enable uvicorn auto-reload (development) |
136
+
137
+ ## Task file example
138
+
139
+ ```json
140
+ {
141
+ "id": "A1B2-C3D4-E5F6-7890",
142
+ "title": "CAF refinement prototype",
143
+ "status": "working",
144
+ "priority": "high",
145
+ "project": "Apollo",
146
+ "summary": "Build a prototype CAF refinement workflow.",
147
+ "description": "Compare baseline CAF sharpness against protection-aware refinement.",
148
+ "tags": ["caf", "signal-processing", "prototype"],
149
+ "start_date": "2026-06-24",
150
+ "due_date": "2026-06-30",
151
+ "completed_date": null,
152
+ "percent_complete": 60,
153
+ "depends_on": ["0EBB-528F-371E-61AE"],
154
+ "checklist": [
155
+ {"text": "Generate baseline CAF", "done": true},
156
+ {"text": "Export comparison plots", "done": false}
157
+ ],
158
+ "activity": [
159
+ {
160
+ "id": "a1b2c3d4",
161
+ "event_type": "note",
162
+ "created_at": "2026-06-26T10:30:00",
163
+ "note_text": "Protection-aware version improved sharpness."
164
+ },
165
+ {
166
+ "id": "e5f6a7b8",
167
+ "event_type": "progress_update",
168
+ "created_at": "2026-06-26T11:00:00",
169
+ "progress_before": 40,
170
+ "progress_after": 60
171
+ }
172
+ ]
173
+ }
174
+ ```
175
+
176
+ `depends_on` stores task **ids**. In the UI you add dependencies with a search-as-you-type picker
177
+ that finds tasks by name and shows their status, project, due date, and id — then stores the id.
178
+ Dependencies are reflected on the Gantt timeline (an `↳ after <name>` label plus a marker where the
179
+ dependency's bar ends).
180
+
181
+ ## Milestones
182
+
183
+ Milestones are a separate entity from projects. A milestone can span **multiple projects**, holds an
184
+ **ordered list of tasks** (which can come from any project, and a task can belong to any number of
185
+ milestones), and has its own description, notes, and attachments — just like a task.
186
+
187
+ - Open the **Milestones** view to see every milestone with a live rollup (task count, progress,
188
+ target date).
189
+ - Click a milestone to **filter the whole board to just its tasks** and show a rollup banner; the
190
+ side panel opens the milestone for editing.
191
+ - Each milestone has its **own colour** used on milestone cards and the rollup banner.
192
+ - From inside a milestone you can **add a task** with one search-as-you-type picker and use the
193
+ sticky **+ New task** button at the bottom of the list for quick creation (auto-added to that
194
+ milestone), and remove tasks.
195
+
196
+ Milestones are stored one JSON file per milestone under `milestones/`.
197
+
198
+ ## Features
199
+
200
+ - JSON-per-task source model you can version with git
201
+ - Dashboard summary cards (total / done / working / blocked)
202
+ - Kanban-style board with per-project color strips
203
+ - Gantt timeline with dependency markers
204
+ - Calendar view
205
+ - **Milestones** that group tasks across projects, with per-milestone colour,
206
+ click-to-filter rollup, and their own notes/attachments/description
207
+ - Click any task (row, card, timeline bar, calendar entry) to open an editable side panel
208
+ - Save edits back to the JSON file; raw JSON editor escape hatch
209
+ - **Unified activity log** per task: notes, images, and progress changes in chronological order
210
+ - **Task burndown chart**: remaining work over time from progress_update events
211
+ - **Milestone cumulative burndown chart**: aggregate remaining work across all tasks in a milestone
212
+ - Searchable "depends on" picker that resolves names to task ids
213
+ - Project management with custom colors, each stored in its own JSON file
214
+ - Filtering by project, milestone, date range, and free-text search; sortable views
215
+ - CSV / JSON export
216
+ - Built-in git status chip and one-click sync (commit + pull + push)
217
+
218
+ ## Building the docs locally
219
+
220
+ ```bash
221
+ pip install -e ".[docs]"
222
+ sphinx-build -b html docs docs/_build/html
223
+ ```
224
+
225
+ Open `docs/_build/html/index.html`. On Read the Docs the build is driven by
226
+ [`.readthedocs.yaml`](.readthedocs.yaml).
227
+
228
+ ## Development
229
+
230
+ ```bash
231
+ pip install -e ".[dev]"
232
+ pytest
233
+ ruff check .
234
+ ```
235
+
236
+ ## License
237
+
238
+ MIT
@@ -0,0 +1,207 @@
1
+ # Taskunity
2
+
3
+ A local-first, file-backed productivity web app for managing tasks. Everything lives in
4
+ plain files on your disk — no database, no account, no cloud. Point Taskunity at a folder and it
5
+ serves a browser UI for dashboards, a Gantt timeline, a Kanban board, a calendar, activity logs,
6
+ burndown charts, and an editable task side panel.
7
+
8
+ > Documentation: a full guide is in the [`docs/`](docs/) folder and is set up to build on
9
+ > [Read the Docs](https://readthedocs.org/) (Sphinx + Markdown).
10
+
11
+ ## Screenshots
12
+
13
+ | Task List | Task Board |
14
+ |-----------|-----------|
15
+ | ![Task List](https://raw.githubusercontent.com/briday1/taskwright/main/docs/_static/screenshots/task-list.png) | ![Task Board](https://raw.githubusercontent.com/briday1/taskwright/main/docs/_static/screenshots/task-board.png) |
16
+
17
+ | Gantt Timeline | Calendar |
18
+ |----------------|----------|
19
+ | ![Gantt](https://raw.githubusercontent.com/briday1/taskwright/main/docs/_static/screenshots/gantt.png) | ![Calendar](https://raw.githubusercontent.com/briday1/taskwright/main/docs/_static/screenshots/calendar.png) |
20
+
21
+ | Milestones | Projects |
22
+ |------------|----------|
23
+ | ![Milestones](https://raw.githubusercontent.com/briday1/taskwright/main/docs/_static/screenshots/milestones.png) | ![Projects](https://raw.githubusercontent.com/briday1/taskwright/main/docs/_static/screenshots/projects.png) |
24
+
25
+ | Task Activity Log | Settings (Theme) |
26
+ |-------------------|------------------|
27
+ | ![Task Panel](https://raw.githubusercontent.com/briday1/taskwright/main/docs/_static/screenshots/task-panel.png) | ![Settings Popup](https://raw.githubusercontent.com/briday1/taskwright/main/docs/_static/screenshots/settings-popup.png) |
28
+
29
+ | Task Burndown Chart | Milestone Burndown Chart |
30
+ |---------------------|--------------------------|
31
+ | ![Task Burndown](https://raw.githubusercontent.com/briday1/taskwright/main/docs/_static/screenshots/task-burndown.png) | ![Milestone Burndown](https://raw.githubusercontent.com/briday1/taskwright/main/docs/_static/screenshots/milestone-burndown.png) |
32
+
33
+ ## Why Taskunity
34
+
35
+ - **File-backed source of truth.** Each task is a single JSON file you can read, diff, and commit
36
+ to git. The whole workspace is a folder you own.
37
+ - **Local-first.** Runs entirely on `127.0.0.1`. Your data never leaves your machine.
38
+ - **Git-aware.** The UI shows branch/ahead/behind/dirty status and has a one-click commit + pull +
39
+ push sync button when the workspace folder itself is a git repo.
40
+
41
+ ## Workspace layout
42
+
43
+ The source of truth is a workspace folder:
44
+
45
+ ```text
46
+ workspace/
47
+ config.json # editable workspace/app metadata
48
+ projects/
49
+ apollo.json # one file per project
50
+ tasks/
51
+ A1B2-C3D4-E5F6-7890.json # one file per task (native id format)
52
+ milestones/
53
+ M-1A2B-3C4D.json # one file per milestone (groups tasks across projects)
54
+ assets/
55
+ A1B2-C3D4-E5F6-7890/ # attachments live alongside their task id
56
+ screenshot.png
57
+ ```
58
+
59
+ The app provides a browser UI for viewing dashboards, timelines, task boards, activity logs,
60
+ burndown charts, and editing tasks through a side panel.
61
+
62
+ ## Install locally
63
+
64
+ From a clone of this repository:
65
+
66
+ ```bash
67
+ pip install -e .
68
+ ```
69
+
70
+ This installs the `taskunity` command. (A PyPI release will come later; for now install from
71
+ source.)
72
+
73
+ ## Quick start
74
+
75
+ ```bash
76
+ taskunity serve --workspace ./my-workboard
77
+ ```
78
+
79
+ If the workspace folder does not exist yet, `taskunity serve` will create the empty Taskunity
80
+ structure for you. You can also run it from the current directory and let Taskunity use `.` as
81
+ the workspace.
82
+
83
+ Then open:
84
+
85
+ ```text
86
+ http://127.0.0.1:8000
87
+ ```
88
+
89
+ `init` is available if you want to scaffold a folder explicitly. It creates an editable
90
+ `config.json`, empty `projects/`, `tasks/`, `milestones/`, and `assets/` directories, plus a README
91
+ stub. It does not create starter projects or tasks; use the app to add your own once you begin.
92
+
93
+ ## Serve an existing workspace
94
+
95
+ ```bash
96
+ taskunity serve --workspace ./path/to/workspace --host 127.0.0.1 --port 8000
97
+ ```
98
+
99
+ | Flag | Default | Description |
100
+ | --- | --- | --- |
101
+ | `--workspace` | `.` | Workspace folder to serve |
102
+ | `--host` | `127.0.0.1` | Host interface to bind |
103
+ | `--port` | `8000` | Port to listen on |
104
+ | `--reload` | off | Enable uvicorn auto-reload (development) |
105
+
106
+ ## Task file example
107
+
108
+ ```json
109
+ {
110
+ "id": "A1B2-C3D4-E5F6-7890",
111
+ "title": "CAF refinement prototype",
112
+ "status": "working",
113
+ "priority": "high",
114
+ "project": "Apollo",
115
+ "summary": "Build a prototype CAF refinement workflow.",
116
+ "description": "Compare baseline CAF sharpness against protection-aware refinement.",
117
+ "tags": ["caf", "signal-processing", "prototype"],
118
+ "start_date": "2026-06-24",
119
+ "due_date": "2026-06-30",
120
+ "completed_date": null,
121
+ "percent_complete": 60,
122
+ "depends_on": ["0EBB-528F-371E-61AE"],
123
+ "checklist": [
124
+ {"text": "Generate baseline CAF", "done": true},
125
+ {"text": "Export comparison plots", "done": false}
126
+ ],
127
+ "activity": [
128
+ {
129
+ "id": "a1b2c3d4",
130
+ "event_type": "note",
131
+ "created_at": "2026-06-26T10:30:00",
132
+ "note_text": "Protection-aware version improved sharpness."
133
+ },
134
+ {
135
+ "id": "e5f6a7b8",
136
+ "event_type": "progress_update",
137
+ "created_at": "2026-06-26T11:00:00",
138
+ "progress_before": 40,
139
+ "progress_after": 60
140
+ }
141
+ ]
142
+ }
143
+ ```
144
+
145
+ `depends_on` stores task **ids**. In the UI you add dependencies with a search-as-you-type picker
146
+ that finds tasks by name and shows their status, project, due date, and id — then stores the id.
147
+ Dependencies are reflected on the Gantt timeline (an `↳ after <name>` label plus a marker where the
148
+ dependency's bar ends).
149
+
150
+ ## Milestones
151
+
152
+ Milestones are a separate entity from projects. A milestone can span **multiple projects**, holds an
153
+ **ordered list of tasks** (which can come from any project, and a task can belong to any number of
154
+ milestones), and has its own description, notes, and attachments — just like a task.
155
+
156
+ - Open the **Milestones** view to see every milestone with a live rollup (task count, progress,
157
+ target date).
158
+ - Click a milestone to **filter the whole board to just its tasks** and show a rollup banner; the
159
+ side panel opens the milestone for editing.
160
+ - Each milestone has its **own colour** used on milestone cards and the rollup banner.
161
+ - From inside a milestone you can **add a task** with one search-as-you-type picker and use the
162
+ sticky **+ New task** button at the bottom of the list for quick creation (auto-added to that
163
+ milestone), and remove tasks.
164
+
165
+ Milestones are stored one JSON file per milestone under `milestones/`.
166
+
167
+ ## Features
168
+
169
+ - JSON-per-task source model you can version with git
170
+ - Dashboard summary cards (total / done / working / blocked)
171
+ - Kanban-style board with per-project color strips
172
+ - Gantt timeline with dependency markers
173
+ - Calendar view
174
+ - **Milestones** that group tasks across projects, with per-milestone colour,
175
+ click-to-filter rollup, and their own notes/attachments/description
176
+ - Click any task (row, card, timeline bar, calendar entry) to open an editable side panel
177
+ - Save edits back to the JSON file; raw JSON editor escape hatch
178
+ - **Unified activity log** per task: notes, images, and progress changes in chronological order
179
+ - **Task burndown chart**: remaining work over time from progress_update events
180
+ - **Milestone cumulative burndown chart**: aggregate remaining work across all tasks in a milestone
181
+ - Searchable "depends on" picker that resolves names to task ids
182
+ - Project management with custom colors, each stored in its own JSON file
183
+ - Filtering by project, milestone, date range, and free-text search; sortable views
184
+ - CSV / JSON export
185
+ - Built-in git status chip and one-click sync (commit + pull + push)
186
+
187
+ ## Building the docs locally
188
+
189
+ ```bash
190
+ pip install -e ".[docs]"
191
+ sphinx-build -b html docs docs/_build/html
192
+ ```
193
+
194
+ Open `docs/_build/html/index.html`. On Read the Docs the build is driven by
195
+ [`.readthedocs.yaml`](.readthedocs.yaml).
196
+
197
+ ## Development
198
+
199
+ ```bash
200
+ pip install -e ".[dev]"
201
+ pytest
202
+ ruff check .
203
+ ```
204
+
205
+ ## License
206
+
207
+ MIT
@@ -0,0 +1,62 @@
1
+ [build-system]
2
+ requires = ["setuptools>=69", "wheel"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "taskunity"
7
+ version = "2026.1"
8
+ description = "A local, file-backed productivity app for program/task tracking."
9
+ readme = "README.md"
10
+ requires-python = ">=3.10"
11
+ license = { text = "MIT" }
12
+ authors = [
13
+ { name = "Taskunity Contributors" }
14
+ ]
15
+ keywords = ["tasks", "productivity", "fastapi", "local-first", "dashboard"]
16
+ classifiers = [
17
+ "Development Status :: 3 - Alpha",
18
+ "Framework :: FastAPI",
19
+ "Intended Audience :: Developers",
20
+ "License :: OSI Approved :: MIT License",
21
+ "Programming Language :: Python :: 3",
22
+ "Programming Language :: Python :: 3.10",
23
+ "Programming Language :: Python :: 3.11",
24
+ "Programming Language :: Python :: 3.12",
25
+ ]
26
+ dependencies = [
27
+ "fastapi>=0.111",
28
+ "uvicorn[standard]>=0.30",
29
+ "jinja2>=3.1",
30
+ "python-multipart>=0.0.9",
31
+ "pydantic>=2.7",
32
+ "markdown>=3.6",
33
+ ]
34
+
35
+ [project.optional-dependencies]
36
+ dev = [
37
+ "pytest>=8",
38
+ "ruff>=0.5",
39
+ ]
40
+ docs = [
41
+ "sphinx>=7",
42
+ "myst-parser>=3",
43
+ "furo>=2024.1",
44
+ ]
45
+
46
+ [project.scripts]
47
+ taskunity = "taskunity.cli:main"
48
+
49
+ [tool.setuptools.packages.find]
50
+ where = ["src"]
51
+
52
+ [tool.setuptools.package-data]
53
+ taskunity = [
54
+ "templates/*.html",
55
+ "templates/partials/*.html",
56
+ "static/*.css",
57
+ "static/*.js",
58
+ ]
59
+
60
+ [tool.ruff]
61
+ line-length = 100
62
+ src = ["src"]
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1 @@
1
+ __version__ = "0.1.0"