taskclf 0.4.2__tar.gz → 0.4.4__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 (157) hide show
  1. {taskclf-0.4.2 → taskclf-0.4.4}/PKG-INFO +37 -3
  2. {taskclf-0.4.2 → taskclf-0.4.4}/README.md +36 -2
  3. {taskclf-0.4.2 → taskclf-0.4.4}/pyproject.toml +2 -3
  4. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/README.md +0 -0
  5. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/__init__.py +0 -0
  6. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/adapters/README.md +0 -0
  7. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/adapters/__init__.py +0 -0
  8. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/adapters/activitywatch/__init__.py +0 -0
  9. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/adapters/activitywatch/client.py +0 -0
  10. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/adapters/activitywatch/mapping.py +0 -0
  11. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/adapters/activitywatch/types.py +0 -0
  12. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/adapters/input/__init__.py +0 -0
  13. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/adapters/input/linux.py +0 -0
  14. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/adapters/input/macos.py +0 -0
  15. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/adapters/input/windows.py +0 -0
  16. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/cli/README.md +0 -0
  17. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/cli/__init__.py +0 -0
  18. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/cli/entry.py +0 -0
  19. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/cli/main.py +0 -0
  20. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/core/README.md +0 -0
  21. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/core/__init__.py +0 -0
  22. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/core/config.py +0 -0
  23. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/core/crash.py +0 -0
  24. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/core/defaults.py +0 -0
  25. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/core/diagnostics.py +0 -0
  26. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/core/drift.py +0 -0
  27. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/core/hashing.py +0 -0
  28. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/core/inference_policy.py +0 -0
  29. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/core/logging.py +0 -0
  30. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/core/metrics.py +0 -0
  31. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/core/model_io.py +0 -0
  32. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/core/paths.py +0 -0
  33. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/core/schema.py +0 -0
  34. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/core/store.py +0 -0
  35. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/core/telemetry.py +0 -0
  36. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/core/time.py +0 -0
  37. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/core/types.py +0 -0
  38. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/core/validation.py +0 -0
  39. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/features/README.md +0 -0
  40. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/features/__init__.py +0 -0
  41. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/features/build.py +0 -0
  42. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/features/domain.py +0 -0
  43. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/features/dynamics.py +0 -0
  44. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/features/sessions.py +0 -0
  45. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/features/text.py +0 -0
  46. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/features/windows.py +0 -0
  47. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/infer/README.md +0 -0
  48. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/infer/__init__.py +0 -0
  49. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/infer/aggregation.py +0 -0
  50. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/infer/baseline.py +0 -0
  51. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/infer/batch.py +0 -0
  52. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/infer/calibration.py +0 -0
  53. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/infer/feature_state.py +0 -0
  54. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/infer/monitor.py +0 -0
  55. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/infer/online.py +0 -0
  56. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/infer/prediction.py +0 -0
  57. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/infer/resolve.py +0 -0
  58. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/infer/smooth.py +0 -0
  59. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/infer/taxonomy.py +0 -0
  60. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/labels/README.md +0 -0
  61. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/labels/__init__.py +0 -0
  62. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/labels/projection.py +0 -0
  63. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/labels/queue.py +0 -0
  64. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/labels/store.py +0 -0
  65. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/labels/weak_rules.py +0 -0
  66. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/migrate/__init__.py +0 -0
  67. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/migrate/timestamps.py +0 -0
  68. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/model_registry.py +0 -0
  69. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/py.typed +0 -0
  70. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/report/README.md +0 -0
  71. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/report/__init__.py +0 -0
  72. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/report/daily.py +0 -0
  73. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/report/export.py +0 -0
  74. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/train/README.md +0 -0
  75. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/train/__init__.py +0 -0
  76. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/train/build_dataset.py +0 -0
  77. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/train/calibrate.py +0 -0
  78. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/train/dataset.py +0 -0
  79. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/train/evaluate.py +0 -0
  80. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/train/lgbm.py +0 -0
  81. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/train/retrain.py +0 -0
  82. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/ELECTRON_MIGRATION.md +0 -0
  83. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/__init__.py +0 -0
  84. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/copy.py +0 -0
  85. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/electron_shell.py +0 -0
  86. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/events.py +0 -0
  87. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/biome.json +0 -0
  88. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/index.html +0 -0
  89. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/package.json +0 -0
  90. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/pnpm-lock.yaml +0 -0
  91. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/pnpm-workspace.yaml +0 -0
  92. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/public/bliss.png +0 -0
  93. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/public/bliss2.png +0 -0
  94. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/src/App.test.tsx +0 -0
  95. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/src/App.tsx +0 -0
  96. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/src/components/ActivitySummary.tsx +0 -0
  97. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/src/components/ConnectionDot.tsx +0 -0
  98. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/src/components/LabelConfidence.tsx +0 -0
  99. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/src/components/LabelExtendToggle.tsx +0 -0
  100. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/src/components/LabelFlash.tsx +0 -0
  101. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/src/components/LabelForm.tsx +0 -0
  102. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/src/components/LabelHistory.tsx +0 -0
  103. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/src/components/LabelHistoryGapRow.tsx +0 -0
  104. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/src/components/LabelHistoryRow.tsx +0 -0
  105. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/src/components/LabelHistoryTimeline.tsx +0 -0
  106. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/src/components/LabelLast.tsx +0 -0
  107. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/src/components/LabelOverwrite.test.tsx +0 -0
  108. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/src/components/LabelOverwrite.tsx +0 -0
  109. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/src/components/LabelQueue.tsx +0 -0
  110. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/src/components/LabelRecorder.tsx +0 -0
  111. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/src/components/LabelRecorderWindow.tsx +0 -0
  112. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/src/components/LabelTable.tsx +0 -0
  113. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/src/components/LabelTimePicker.tsx +0 -0
  114. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/src/components/PredictionBadge.tsx +0 -0
  115. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/src/components/PredictionSuggestion.tsx +0 -0
  116. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/src/components/StatusPanel.tsx +0 -0
  117. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/src/components/StatusPanelWindow.tsx +0 -0
  118. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/src/components/TrainingPanel.tsx +0 -0
  119. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/src/components/status/StatusActivityMonitor.tsx +0 -0
  120. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/src/components/status/StatusActivityWatch.tsx +0 -0
  121. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/src/components/status/StatusConfig.tsx +0 -0
  122. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/src/components/status/StatusModel.tsx +0 -0
  123. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/src/components/status/StatusPanelTab.tsx +0 -0
  124. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/src/components/status/StatusPrediction.tsx +0 -0
  125. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/src/components/status/StatusSuggestion.tsx +0 -0
  126. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/src/components/status/StatusTransitions.tsx +0 -0
  127. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/src/components/status/StatusWebSocket.tsx +0 -0
  128. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/src/components/ui/StatusProgress.tsx +0 -0
  129. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/src/components/ui/StatusRow.tsx +0 -0
  130. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/src/components/ui/StatusSection.tsx +0 -0
  131. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/src/index.tsx +0 -0
  132. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/src/lib/api.ts +0 -0
  133. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/src/lib/date.ts +0 -0
  134. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/src/lib/format.ts +0 -0
  135. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/src/lib/host.test.ts +0 -0
  136. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/src/lib/host.ts +0 -0
  137. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/src/lib/labelColors.ts +0 -0
  138. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/src/lib/labelTimeline.test.ts +0 -0
  139. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/src/lib/labelTimeline.ts +0 -0
  140. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/src/lib/label_overwrite_pending_upd_get.test.ts +0 -0
  141. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/src/lib/label_overwrite_pending_upd_get.ts +0 -0
  142. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/src/lib/log.ts +0 -0
  143. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/src/lib/notifications.ts +0 -0
  144. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/src/lib/ws.ts +0 -0
  145. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/src/test/setup.ts +0 -0
  146. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/tsconfig.json +0 -0
  147. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/tsconfig.node.json +0 -0
  148. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/vite.config.ts +0 -0
  149. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/frontend/vitest.config.ts +0 -0
  150. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/server.py +0 -0
  151. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/static/assets/index-fDjFGw_w.js +0 -0
  152. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/static/bliss.png +0 -0
  153. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/static/bliss2.png +0 -0
  154. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/static/index.html +0 -0
  155. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/tray.py +0 -0
  156. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/window.py +0 -0
  157. {taskclf-0.4.2 → taskclf-0.4.4}/src/taskclf/ui/window_run.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: taskclf
3
- Version: 0.4.2
3
+ Version: 0.4.4
4
4
  Summary: Local-first task classifier that infers your work type from computer activity signals
5
5
  Author: fruitiecutiepie
6
6
  Author-email: fruitiecutiepie <104437268+fruitiecutiepie@users.noreply.github.com>
@@ -122,15 +122,39 @@ This repo enforces the following:
122
122
 
123
123
  ### Requirements
124
124
  - Python >= 3.14
125
- - `uv` installed
125
+ - For the recommended CLI install: [uv](https://docs.astral.sh/uv/)
126
126
 
127
127
  ### Install
128
128
 
129
+ **Command-line (PyPI)** — install the `taskclf` CLI:
130
+
129
131
  ```bash
130
132
  uv tool install taskclf
131
133
  ```
132
134
 
133
- For development (from source):
135
+ Or with pip only:
136
+
137
+ ```bash
138
+ pip install taskclf
139
+ ```
140
+
141
+ Then run `taskclf --help`.
142
+
143
+ **Desktop app (optional)** — a small Electron shell is built for Windows, Linux,
144
+ and macOS. Download the latest **launcher** installers from
145
+ [GitHub Releases](https://github.com/fruitiecutiepie/taskclf/releases). Choose
146
+ the file for your OS:
147
+
148
+ | OS | File |
149
+ |----|------|
150
+ | Windows | `*.exe` (NSIS installer) |
151
+ | Linux | `*.AppImage` |
152
+ | macOS | `*.dmg` (open and drag **taskclf** to Applications) |
153
+
154
+ Those assets are published on GitHub releases whose tag starts with
155
+ `launcher-v`.
156
+
157
+ **Development** (from a git checkout):
134
158
 
135
159
  ```bash
136
160
  uv sync
@@ -294,6 +318,16 @@ make docs-serve # local preview at http://127.0.0.1:8000
294
318
  make docs-build # static site in site/
295
319
  ```
296
320
 
321
+ **Electron backend payload** (for packaged app downloads): after `make ui-build`,
322
+ build the PyInstaller one-folder sidecar zip used by GitHub releases (`v*` tags):
323
+
324
+ ```bash
325
+ uv sync --group bundle
326
+ make build-payload # writes build/payload-<triple>.zip
327
+ ```
328
+
329
+ See `docs/api/scripts/payload_build.md` for details.
330
+
297
331
  ---
298
332
 
299
333
  ## License
@@ -86,15 +86,39 @@ This repo enforces the following:
86
86
 
87
87
  ### Requirements
88
88
  - Python >= 3.14
89
- - `uv` installed
89
+ - For the recommended CLI install: [uv](https://docs.astral.sh/uv/)
90
90
 
91
91
  ### Install
92
92
 
93
+ **Command-line (PyPI)** — install the `taskclf` CLI:
94
+
93
95
  ```bash
94
96
  uv tool install taskclf
95
97
  ```
96
98
 
97
- For development (from source):
99
+ Or with pip only:
100
+
101
+ ```bash
102
+ pip install taskclf
103
+ ```
104
+
105
+ Then run `taskclf --help`.
106
+
107
+ **Desktop app (optional)** — a small Electron shell is built for Windows, Linux,
108
+ and macOS. Download the latest **launcher** installers from
109
+ [GitHub Releases](https://github.com/fruitiecutiepie/taskclf/releases). Choose
110
+ the file for your OS:
111
+
112
+ | OS | File |
113
+ |----|------|
114
+ | Windows | `*.exe` (NSIS installer) |
115
+ | Linux | `*.AppImage` |
116
+ | macOS | `*.dmg` (open and drag **taskclf** to Applications) |
117
+
118
+ Those assets are published on GitHub releases whose tag starts with
119
+ `launcher-v`.
120
+
121
+ **Development** (from a git checkout):
98
122
 
99
123
  ```bash
100
124
  uv sync
@@ -258,6 +282,16 @@ make docs-serve # local preview at http://127.0.0.1:8000
258
282
  make docs-build # static site in site/
259
283
  ```
260
284
 
285
+ **Electron backend payload** (for packaged app downloads): after `make ui-build`,
286
+ build the PyInstaller one-folder sidecar zip used by GitHub releases (`v*` tags):
287
+
288
+ ```bash
289
+ uv sync --group bundle
290
+ make build-payload # writes build/payload-<triple>.zip
291
+ ```
292
+
293
+ See `docs/api/scripts/payload_build.md` for details.
294
+
261
295
  ---
262
296
 
263
297
  ## License
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "taskclf"
3
- version = "0.4.2"
3
+ version = "0.4.4"
4
4
  description = "Local-first task classifier that infers your work type from computer activity signals"
5
5
  readme = "README.md"
6
6
  license = {text = "MIT"}
@@ -67,8 +67,7 @@ docs = [
67
67
  "mkdocstrings-python",
68
68
  ]
69
69
  bundle = [
70
- "nuitka",
71
- "ordered-set",
70
+ "pyinstaller>=6.0",
72
71
  ]
73
72
 
74
73
  [tool.mypy]
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes