labtasker-webui 0.2.0__tar.gz → 0.4.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.
Files changed (58) hide show
  1. {labtasker_webui-0.2.0 → labtasker_webui-0.4.0}/PKG-INFO +36 -23
  2. {labtasker_webui-0.2.0 → labtasker_webui-0.4.0}/README.md +35 -22
  3. {labtasker_webui-0.2.0 → labtasker_webui-0.4.0}/docs/reference/specification.md +50 -3
  4. labtasker_webui-0.4.0/docs/releases/v0.2.1.md +6 -0
  5. labtasker_webui-0.4.0/docs/releases/v0.4.0.md +17 -0
  6. labtasker_webui-0.4.0/frontend/dist/assets/index-BLS-SDvc.js +56 -0
  7. labtasker_webui-0.4.0/frontend/dist/assets/index-V-48iAs9.css +1 -0
  8. {labtasker_webui-0.2.0 → labtasker_webui-0.4.0}/frontend/dist/index.html +2 -2
  9. {labtasker_webui-0.2.0 → labtasker_webui-0.4.0}/frontend/package-lock.json +2 -2
  10. {labtasker_webui-0.2.0 → labtasker_webui-0.4.0}/frontend/package.json +1 -1
  11. {labtasker_webui-0.2.0 → labtasker_webui-0.4.0}/pyproject.toml +1 -1
  12. {labtasker_webui-0.2.0 → labtasker_webui-0.4.0}/src/labtasker_webui/__init__.py +1 -1
  13. {labtasker_webui-0.2.0 → labtasker_webui-0.4.0}/src/labtasker_webui/app.py +18 -0
  14. {labtasker_webui-0.2.0 → labtasker_webui-0.4.0}/src/labtasker_webui/schemas.py +7 -0
  15. {labtasker_webui-0.2.0 → labtasker_webui-0.4.0}/src/labtasker_webui/upstream.py +6 -2
  16. {labtasker_webui-0.2.0 → labtasker_webui-0.4.0}/tests/fixture_server.py +37 -0
  17. {labtasker_webui-0.2.0 → labtasker_webui-0.4.0}/tests/test_app.py +54 -0
  18. labtasker_webui-0.4.0/tests/test_custom_columns.py +35 -0
  19. {labtasker_webui-0.2.0 → labtasker_webui-0.4.0}/tests/test_upstream.py +17 -3
  20. labtasker_webui-0.2.0/frontend/dist/assets/index-4SEd7ZLC.js +0 -54
  21. labtasker_webui-0.2.0/frontend/dist/assets/index-CLoY3LJ8.css +0 -1
  22. labtasker_webui-0.2.0/tests/test_custom_columns.py +0 -13
  23. {labtasker_webui-0.2.0 → labtasker_webui-0.4.0}/.agents/skills/release/SKILL.md +0 -0
  24. {labtasker_webui-0.2.0 → labtasker_webui-0.4.0}/.agents/skills/ui-change/SKILL.md +0 -0
  25. {labtasker_webui-0.2.0 → labtasker_webui-0.4.0}/.agents/sops/development.md +0 -0
  26. {labtasker_webui-0.2.0 → labtasker_webui-0.4.0}/.agents/sops/qa.md +0 -0
  27. {labtasker_webui-0.2.0 → labtasker_webui-0.4.0}/.agents/sops/releasing.md +0 -0
  28. {labtasker_webui-0.2.0 → labtasker_webui-0.4.0}/.gitignore +0 -0
  29. {labtasker_webui-0.2.0 → labtasker_webui-0.4.0}/AGENTS.md +0 -0
  30. {labtasker_webui-0.2.0 → labtasker_webui-0.4.0}/CONTRIBUTING.md +0 -0
  31. {labtasker_webui-0.2.0 → labtasker_webui-0.4.0}/LICENSE +0 -0
  32. {labtasker_webui-0.2.0 → labtasker_webui-0.4.0}/assets/screenshot.png +0 -0
  33. {labtasker_webui-0.2.0 → labtasker_webui-0.4.0}/docs/releases/v0.2.0.md +0 -0
  34. {labtasker_webui-0.2.0 → labtasker_webui-0.4.0}/frontend/dist/labtasker-icon.png +0 -0
  35. {labtasker_webui-0.2.0 → labtasker_webui-0.4.0}/scripts/check_package.py +0 -0
  36. {labtasker_webui-0.2.0 → labtasker_webui-0.4.0}/scripts/check_versions.py +0 -0
  37. {labtasker_webui-0.2.0 → labtasker_webui-0.4.0}/src/labtasker_webui/__main__.py +0 -0
  38. {labtasker_webui-0.2.0 → labtasker_webui-0.4.0}/src/labtasker_webui/cli.py +0 -0
  39. {labtasker_webui-0.2.0 → labtasker_webui-0.4.0}/src/labtasker_webui/compatibility.py +0 -0
  40. {labtasker_webui-0.2.0 → labtasker_webui-0.4.0}/src/labtasker_webui/config.py +0 -0
  41. {labtasker_webui-0.2.0 → labtasker_webui-0.4.0}/src/labtasker_webui/local.py +0 -0
  42. {labtasker_webui-0.2.0 → labtasker_webui-0.4.0}/src/labtasker_webui/operations.py +0 -0
  43. {labtasker_webui-0.2.0 → labtasker_webui-0.4.0}/src/labtasker_webui/profile.py +0 -0
  44. {labtasker_webui-0.2.0 → labtasker_webui-0.4.0}/src/labtasker_webui/py.typed +0 -0
  45. {labtasker_webui-0.2.0 → labtasker_webui-0.4.0}/src/labtasker_webui/security.py +0 -0
  46. {labtasker_webui-0.2.0 → labtasker_webui-0.4.0}/src/labtasker_webui/sessions.py +0 -0
  47. {labtasker_webui-0.2.0 → labtasker_webui-0.4.0}/tests/packaging_smoke.py +0 -0
  48. {labtasker_webui-0.2.0 → labtasker_webui-0.4.0}/tests/test_compatibility.py +0 -0
  49. {labtasker_webui-0.2.0 → labtasker_webui-0.4.0}/tests/test_config.py +0 -0
  50. {labtasker_webui-0.2.0 → labtasker_webui-0.4.0}/tests/test_local.py +0 -0
  51. {labtasker_webui-0.2.0 → labtasker_webui-0.4.0}/tests/test_name_fuzzy.py +0 -0
  52. {labtasker_webui-0.2.0 → labtasker_webui-0.4.0}/tests/test_observations.py +0 -0
  53. {labtasker_webui-0.2.0 → labtasker_webui-0.4.0}/tests/test_operations.py +0 -0
  54. {labtasker_webui-0.2.0 → labtasker_webui-0.4.0}/tests/test_profile.py +0 -0
  55. {labtasker_webui-0.2.0 → labtasker_webui-0.4.0}/tests/test_real_server.py +0 -0
  56. {labtasker_webui-0.2.0 → labtasker_webui-0.4.0}/tests/test_release_versions.py +0 -0
  57. {labtasker_webui-0.2.0 → labtasker_webui-0.4.0}/tests/test_sessions.py +0 -0
  58. {labtasker_webui-0.2.0 → labtasker_webui-0.4.0}/tests/test_upstream_source.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: labtasker-webui
3
- Version: 0.2.0
3
+ Version: 0.4.0
4
4
  Summary: A focused web interface for Labtasker v2
5
5
  Project-URL: Homepage, https://github.com/luocfprime/labtasker-webui
6
6
  Project-URL: Repository, https://github.com/luocfprime/labtasker-webui
@@ -29,19 +29,23 @@ workspace, with reusable views for different experiments.
29
29
  The key features are:
30
30
 
31
31
  - **Queue progress at a glance:** Track pending, running, succeeded, failed, and
32
- cancelled Tasks. Status counts follow the applied Task name and advanced filter, across all statuses; the Status selector narrows only the Task list and its total.
32
+ cancelled Tasks. Running Tasks can show a compact circular completion indicator
33
+ from their latest reported progress. Status counts follow the applied Task name
34
+ and advanced filter, across all statuses; the Status selector narrows only the
35
+ Task list and its total.
33
36
  - **Routes and Workers:** Collapse route navigation when you need more table space.
34
37
  Inspect Idle/Busy Worker counts and last-seen reports; include inactive routes when
35
- reviewing historical work. These features require Server 2.2 or later; Worker
36
- reports require Workers that support observations.
38
+ reviewing historical work. Resize Worker columns or double-click them to fit loaded
39
+ content. These features require Server 2.2 or later; Worker reports require Workers
40
+ that support observations.
37
41
  - **Flexible result exploration:** Filter Task fields and nested values, or add
38
42
  custom columns such as `args.test_num` and `result.succ_rate`. Resize, reorder,
39
43
  and double-click columns to fit their contents.
40
44
  - **Reusable data views:** Save filters, sorting, and column layouts for each
41
45
  connection and Queue. Switch views without rebuilding the table each time.
42
46
  - **Complete Task inspection:** Open a Task to inspect its arguments, metadata,
43
- execution timeline, errors, and results. Cancel, requeue, or delete selected
44
- Tasks through explicit controls.
47
+ execution timeline, errors, and results. Cancel, requeue, delete, or set the priority
48
+ of selected Tasks through explicit controls.
45
49
  - **Easy local use:** Launch from Python without Node.js. Remember connections
46
50
  and UI preferences in the WebUI working directory's `.labtasker/` folder.
47
51
 
@@ -104,7 +108,26 @@ The list loads more Tasks as you scroll and preserves existing selections.
104
108
  While reading older rows, background refresh does not reorder the list.
105
109
  Returning to the top resumes live refresh; **Refresh** updates it explicitly.
106
110
  Click a Task to open its details. Dates use local time, with full timestamps
107
- available on hover.
111
+ available on hover. When a Task has reported progress, its retained progress JSON,
112
+ report attempt, and update time appear before the final Result section.
113
+
114
+ Workers may opt into the circular indicator by reporting finite numeric
115
+ `completed` and `total` values:
116
+
117
+ ```python
118
+ labtasker.report_progress(
119
+ {
120
+ "completed": completed_cases,
121
+ "total": total_cases,
122
+ "metrics": {"validation_loss": validation_loss},
123
+ }
124
+ )
125
+ ```
126
+
127
+ These names are a display convention, not a Server schema. Other progress keys
128
+ remain user-defined. A running Task without a valid `completed / total` ratio
129
+ shows `—`; non-running rows leave the Progress column blank. The Progress column
130
+ starts compact and can be resized like the other data columns.
108
131
 
109
132
  ## Project profiles
110
133
 
@@ -153,13 +176,13 @@ responses.
153
176
  ## Scope
154
177
 
155
178
  Labtasker WebUI inspects existing workloads and supports cancellation, requeue,
156
- and permanent deletion of explicitly selected Task IDs. Batch deletion reports
157
- each result; it is not an atomic operation.
179
+ priority updates, and permanent deletion of explicitly selected Task IDs. Batch
180
+ operations report partial failures; deletion is not an atomic operation.
158
181
 
159
- Use the Labtasker Client, CLI, or Workers to submit and execute Tasks. The WebUI
160
- does not submit or edit Tasks, schedule work, allocate resources, or manage the
161
- Labtasker process. Local mode only attaches to an existing instance and never
162
- opens its database.
182
+ Use the Labtasker Client, CLI, or Workers to submit and execute Tasks. Apart from
183
+ setting priority for an explicit selection, the WebUI does not submit or edit Tasks,
184
+ schedule work, allocate resources, or manage the Labtasker process. Local mode only
185
+ attaches to an existing instance and never opens its database.
163
186
 
164
187
  ## Documentation
165
188
 
@@ -185,13 +208,3 @@ and installation of the built package without Node.js.
185
208
  ## License
186
209
 
187
210
  [Apache-2.0](https://github.com/luocfprime/labtasker-webui/blob/main/LICENSE), matching Labtasker.
188
-
189
- ### Search Task names
190
-
191
- The Task name input supports case-insensitive subsequence search: `tr ev` or
192
- `ev tr` finds `train_model_eval`. Every whitespace-separated word must match.
193
- Press Enter or leave the input to apply; clearing it removes the name restriction.
194
- For a strict name match, use `name == "train_model_eval"` in Advanced filter.
195
- The Server applies the same search to the Task list and counts across the Queue,
196
- with the existing sorting preserved. This requires a Server supporting
197
- `name_fuzzy`; saved Task name inputs also use fuzzy matching.
@@ -10,19 +10,23 @@ workspace, with reusable views for different experiments.
10
10
  The key features are:
11
11
 
12
12
  - **Queue progress at a glance:** Track pending, running, succeeded, failed, and
13
- cancelled Tasks. Status counts follow the applied Task name and advanced filter, across all statuses; the Status selector narrows only the Task list and its total.
13
+ cancelled Tasks. Running Tasks can show a compact circular completion indicator
14
+ from their latest reported progress. Status counts follow the applied Task name
15
+ and advanced filter, across all statuses; the Status selector narrows only the
16
+ Task list and its total.
14
17
  - **Routes and Workers:** Collapse route navigation when you need more table space.
15
18
  Inspect Idle/Busy Worker counts and last-seen reports; include inactive routes when
16
- reviewing historical work. These features require Server 2.2 or later; Worker
17
- reports require Workers that support observations.
19
+ reviewing historical work. Resize Worker columns or double-click them to fit loaded
20
+ content. These features require Server 2.2 or later; Worker reports require Workers
21
+ that support observations.
18
22
  - **Flexible result exploration:** Filter Task fields and nested values, or add
19
23
  custom columns such as `args.test_num` and `result.succ_rate`. Resize, reorder,
20
24
  and double-click columns to fit their contents.
21
25
  - **Reusable data views:** Save filters, sorting, and column layouts for each
22
26
  connection and Queue. Switch views without rebuilding the table each time.
23
27
  - **Complete Task inspection:** Open a Task to inspect its arguments, metadata,
24
- execution timeline, errors, and results. Cancel, requeue, or delete selected
25
- Tasks through explicit controls.
28
+ execution timeline, errors, and results. Cancel, requeue, delete, or set the priority
29
+ of selected Tasks through explicit controls.
26
30
  - **Easy local use:** Launch from Python without Node.js. Remember connections
27
31
  and UI preferences in the WebUI working directory's `.labtasker/` folder.
28
32
 
@@ -85,7 +89,26 @@ The list loads more Tasks as you scroll and preserves existing selections.
85
89
  While reading older rows, background refresh does not reorder the list.
86
90
  Returning to the top resumes live refresh; **Refresh** updates it explicitly.
87
91
  Click a Task to open its details. Dates use local time, with full timestamps
88
- available on hover.
92
+ available on hover. When a Task has reported progress, its retained progress JSON,
93
+ report attempt, and update time appear before the final Result section.
94
+
95
+ Workers may opt into the circular indicator by reporting finite numeric
96
+ `completed` and `total` values:
97
+
98
+ ```python
99
+ labtasker.report_progress(
100
+ {
101
+ "completed": completed_cases,
102
+ "total": total_cases,
103
+ "metrics": {"validation_loss": validation_loss},
104
+ }
105
+ )
106
+ ```
107
+
108
+ These names are a display convention, not a Server schema. Other progress keys
109
+ remain user-defined. A running Task without a valid `completed / total` ratio
110
+ shows `—`; non-running rows leave the Progress column blank. The Progress column
111
+ starts compact and can be resized like the other data columns.
89
112
 
90
113
  ## Project profiles
91
114
 
@@ -134,13 +157,13 @@ responses.
134
157
  ## Scope
135
158
 
136
159
  Labtasker WebUI inspects existing workloads and supports cancellation, requeue,
137
- and permanent deletion of explicitly selected Task IDs. Batch deletion reports
138
- each result; it is not an atomic operation.
160
+ priority updates, and permanent deletion of explicitly selected Task IDs. Batch
161
+ operations report partial failures; deletion is not an atomic operation.
139
162
 
140
- Use the Labtasker Client, CLI, or Workers to submit and execute Tasks. The WebUI
141
- does not submit or edit Tasks, schedule work, allocate resources, or manage the
142
- Labtasker process. Local mode only attaches to an existing instance and never
143
- opens its database.
163
+ Use the Labtasker Client, CLI, or Workers to submit and execute Tasks. Apart from
164
+ setting priority for an explicit selection, the WebUI does not submit or edit Tasks,
165
+ schedule work, allocate resources, or manage the Labtasker process. Local mode only
166
+ attaches to an existing instance and never opens its database.
144
167
 
145
168
  ## Documentation
146
169
 
@@ -166,13 +189,3 @@ and installation of the built package without Node.js.
166
189
  ## License
167
190
 
168
191
  [Apache-2.0](https://github.com/luocfprime/labtasker-webui/blob/main/LICENSE), matching Labtasker.
169
-
170
- ### Search Task names
171
-
172
- The Task name input supports case-insensitive subsequence search: `tr ev` or
173
- `ev tr` finds `train_model_eval`. Every whitespace-separated word must match.
174
- Press Enter or leave the input to apply; clearing it removes the name restriction.
175
- For a strict name match, use `name == "train_model_eval"` in Advanced filter.
176
- The Server applies the same search to the Task list and counts across the Queue,
177
- with the existing sorting preserved. This requires a Server supporting
178
- `name_fuzzy`; saved Task name inputs also use fuzzy matching.
@@ -7,8 +7,9 @@ Browser (React, Query, Table)
7
7
  ```
8
8
 
9
9
  The BFF owns upstream credentials, session cookies, origin validation and destructive
10
- operation snapshots. The UI observes Tasks and supports cancel, requeue and selected-ID
11
- deletion; it does not submit/edit Tasks. Local attachment discovers and uses the existing
10
+ operation snapshots. The UI observes Tasks and supports cancel, requeue, selected-ID
11
+ deletion and selected-ID priority updates; it does not submit Tasks or edit other Task
12
+ fields. Local attachment discovers and uses the existing
12
13
  socket without managing the Labtasker process or opening its database.
13
14
 
14
15
  ## Server version warnings
@@ -44,7 +45,7 @@ Neither credentials nor version observations are written to the profile.
44
45
  | Connection URL/local project | Backend profile in WebUI working directory |
45
46
  | Bearer token | Backend only; separate owner-only `webui-token` file |
46
47
  | Queue, applied selectors, drawer Task ID | URL/history plus React state |
47
- | Current working column layout | Connection + queue scope; browser and profile |
48
+ | Current Task column layout and Worker column widths | Connection + queue scope; browser and profile |
48
49
  | Named data view | Explicit snapshot scoped to connection + queue |
49
50
  | Task selection | Current workspace memory; exact Task IDs |
50
51
  | Pending profile write | Browser recovery record until the backend acknowledges saving |
@@ -83,9 +84,51 @@ Task selection survives sorting, including browser Back/Forward through sort cha
83
84
  Applying or resetting a saved view also preserves selection when only sorting or
84
85
  column layout changes.
85
86
  Changing the filter range clears selection, including through browser history.
87
+ The selection column remains pinned while the Task table scrolls horizontally.
88
+ An explicit Task selection exposes Cancel Tasks, Requeue Tasks, Delete Tasks and Set
89
+ priority actions. Clear selection only removes the current checkmarks. Each lifecycle
90
+ action is enabled only when every selected Task has a compatible status, using the same
91
+ rules as the Task drawer: Cancel accepts pending/running, Requeue accepts
92
+ pending/failed/cancelled, while Delete and priority updates reject running. Priority
93
+ accepts any JavaScript-safe integer, including zero and negative values. Disabled actions
94
+ explain the required and incompatible statuses on hover or keyboard focus. Batch Cancel,
95
+ Requeue and priority updates retain failed Task IDs for retry while clearing successful
96
+ IDs from the selection.
86
97
  Resizing uses per-column widths and a filler for remaining space. JSON paths are read-only
87
98
  lookups; missing fields are blank.
88
99
 
100
+ Default Task column widths are Status 117 px, Progress 88 px, Attempt 83 px,
101
+ Priority 79 px, Created and Updated 103 px, and Duration 86 px. Saved widths
102
+ continue to override these defaults within their connection and Queue scope.
103
+ Progress can be resized down to 56 px, and this minimum width survives reload.
104
+
105
+ The built-in Progress column is 88 px wide by default and centered. It retains
106
+ the table's column-resizing behavior. Non-running Task rows leave it blank. A
107
+ running Task shows a 14 px circular progress indicator only
108
+ when its `progress` object contains finite numeric `completed` and `total`
109
+ values with `0 <= completed <= total` and `total > 0`. The accessible value and
110
+ popover show the floor of `completed / total * 100`, correcting floating-point
111
+ roundoff at integer boundaries (29 of 100 shows 29%). Incomplete progress never
112
+ shows 100%. The compact ring has no
113
+ center text, follows the primary UI color and transitions over 250 ms. Other
114
+ running Tasks show `—`, including Tasks without progress, incomplete display fields
115
+ and values above the declared total. The column is not sortable. It follows the
116
+ existing Task-list polling and pause rules rather than creating another refresh
117
+ loop. The Status column has a 104 px minimum so every status badge remains fully
118
+ visible, including when an older saved layout requested a narrower width.
119
+
120
+ Hovering or focusing the ring opens a viewport-contained summary with the exact
121
+ completed and total values, progress attempt, Server report time and a generic
122
+ JSON preview. Clicking pins the same summary until an outside interaction or
123
+ Escape. Clicking inside the summary does not open the Task drawer. Escape works
124
+ from the summary's contents and returns focus to the ring. Task row keyboard
125
+ navigation only handles keys on the row itself; Space on its checkbox toggles
126
+ selection without opening details. The UI assigns no meaning to other progress keys. Task details show a
127
+ Progress JSON section immediately before Result whenever progress is non-null,
128
+ including for terminal Tasks whose last snapshot was retained. Its heading
129
+ shows the Server-owned attempt and report time. Null progress adds no details
130
+ section.
131
+
89
132
  The Task name input uses the upstream `name_fuzzy` selector: case-insensitive
90
133
  Unicode subsequences, split on whitespace, with every word required and word
91
134
  order unrestricted. Empty or whitespace-only searches add no restriction.
@@ -198,6 +241,10 @@ Worker IDs, routes and times retain full-value hover tooltips; associated Tasks
198
241
  the existing detail drawer.
199
242
  Switching between associated Task links keeps the drawer open. Explicitly closing it
200
243
  restores focus to the most recently opened Worker Task link.
244
+ Worker, Status, Route, Task and Last seen columns have independent resize handles. Their
245
+ default widths are 240, 100, 200, 240 and 210 px respectively. Pointer dragging and
246
+ Left/Right keyboard adjustment change only the chosen column; double-click fits that
247
+ column to loaded content. Widths persist per connection and Queue.
201
248
 
202
249
  Change opens connection settings without discarding the current workspace. Back to
203
250
  workspace restores it; a successful connection change clears the query cache.
@@ -0,0 +1,6 @@
1
+ # v0.2.1
2
+
3
+ - Add status-aware Cancel, Requeue and Delete actions for selected Tasks, with disabled-state guidance and partial-failure recovery.
4
+ - Fix Task selection controls so checkboxes remain visible while horizontally scrolling wide tables.
5
+
6
+ Full Changelog: https://github.com/luocfprime/labtasker-webui/compare/v0.2.0...v0.2.1
@@ -0,0 +1,17 @@
1
+ # v0.4.0
2
+
3
+ - Add compact Task progress indicators with exact, keyboard-accessible progress
4
+ details and retained Progress JSON in the Task drawer.
5
+ - Add priority updates for explicitly selected Tasks, including negative and zero
6
+ priorities, status guidance and partial-failure recovery.
7
+ - Add resizable Worker columns with pointer, keyboard and double-click fit interactions,
8
+ persisted per connection and Queue.
9
+ - Change selected-Task action labels so cancelling Tasks and clearing the current
10
+ selection are unambiguous.
11
+ - Fix Task table defaults and interactions for compact Progress, status visibility and
12
+ horizontal scrolling.
13
+
14
+ Priority updates use the Labtasker v2 Task update endpoint and remain unavailable for
15
+ running Tasks. Existing profiles and saved views require no migration.
16
+
17
+ Full Changelog: https://github.com/luocfprime/labtasker-webui/compare/v0.2.1...v0.4.0