taskproof 0.3.0__py3-none-any.whl

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 (51) hide show
  1. taskproof/__init__.py +23 -0
  2. taskproof/__main__.py +8 -0
  3. taskproof/adapters/__init__.py +101 -0
  4. taskproof/adapters/base.py +228 -0
  5. taskproof/adapters/claude.py +46 -0
  6. taskproof/adapters/codex.py +140 -0
  7. taskproof/adapters/custom.py +61 -0
  8. taskproof/adapters/gemini.py +45 -0
  9. taskproof/adapters/opencode.py +46 -0
  10. taskproof/api/__init__.py +1 -0
  11. taskproof/api/server.py +822 -0
  12. taskproof/cli.py +1400 -0
  13. taskproof/concurrency.py +329 -0
  14. taskproof/dispatch.py +2289 -0
  15. taskproof/errors.py +55 -0
  16. taskproof/ledger.py +185 -0
  17. taskproof/models.py +155 -0
  18. taskproof/registry.py +1585 -0
  19. taskproof/schemas/result.json +58 -0
  20. taskproof/sql/schema.sql +70 -0
  21. taskproof/storage.py +372 -0
  22. taskproof/verify.py +615 -0
  23. taskproof/web/assets/MatrixView-BM8nu9s2.css +446 -0
  24. taskproof/web/assets/MatrixView-BM8nu9s2.css.gz +0 -0
  25. taskproof/web/assets/MatrixView-BMsawnxh.js +475 -0
  26. taskproof/web/assets/MatrixView-BMsawnxh.js.gz +0 -0
  27. taskproof/web/assets/ProjectsView-BcXcx5Gw.js +302 -0
  28. taskproof/web/assets/ProjectsView-BcXcx5Gw.js.gz +0 -0
  29. taskproof/web/assets/ProjectsView-CqNFL-fi.css +23 -0
  30. taskproof/web/assets/SettingsView-D_-waf0s.js +585 -0
  31. taskproof/web/assets/SettingsView-D_-waf0s.js.gz +0 -0
  32. taskproof/web/assets/SettingsView-aqTS3ubB.css +19 -0
  33. taskproof/web/assets/TaskDrawer-6JoGTH0s.js +597 -0
  34. taskproof/web/assets/TaskDrawer-6JoGTH0s.js.gz +0 -0
  35. taskproof/web/assets/TaskDrawer-N299VKzd.css +465 -0
  36. taskproof/web/assets/TaskDrawer-N299VKzd.css.gz +0 -0
  37. taskproof/web/assets/TasksView-BWhSHCHi.js +114 -0
  38. taskproof/web/assets/TasksView-BWhSHCHi.js.gz +0 -0
  39. taskproof/web/assets/TasksView-Bn08731V.css +30 -0
  40. taskproof/web/assets/icon-Dw-ohsdc.png +0 -0
  41. taskproof/web/assets/index-B-PLdDbR.js +75421 -0
  42. taskproof/web/assets/index-B-PLdDbR.js.gz +0 -0
  43. taskproof/web/assets/index-NKj7kbYl.css +1234 -0
  44. taskproof/web/assets/index-NKj7kbYl.css.gz +0 -0
  45. taskproof/web/index.html +23 -0
  46. taskproof-0.3.0.dist-info/METADATA +470 -0
  47. taskproof-0.3.0.dist-info/RECORD +51 -0
  48. taskproof-0.3.0.dist-info/WHEEL +5 -0
  49. taskproof-0.3.0.dist-info/entry_points.txt +2 -0
  50. taskproof-0.3.0.dist-info/licenses/LICENSE +201 -0
  51. taskproof-0.3.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,302 @@
1
+ import { d as defineComponent, i as useBoardStore, u as useI18n, c as createElementBlock, b as createBaseVNode, t as toDisplayString, f as unref, e as createVNode, l as withCtx, h as computed, U as ref, p as resolveComponent, n as normalizeClass, o as openBlock, _ as _export_sfc } from "./index-B-PLdDbR.js";
2
+ import { T as TaskDrawer } from "./TaskDrawer-6JoGTH0s.js";
3
+ function probeOf(value) {
4
+ return value === "passed" || value === "failed" || value === "none" ? value : null;
5
+ }
6
+ function newest(a, b) {
7
+ if (a === null) return b;
8
+ if (b === null) return a;
9
+ const ta = Date.parse(a);
10
+ const tb = Date.parse(b);
11
+ if (Number.isNaN(ta)) return b;
12
+ if (Number.isNaN(tb)) return a;
13
+ return tb > ta ? b : a;
14
+ }
15
+ function totalTasks(summary) {
16
+ return Object.values(summary).reduce((sum, n) => sum + (n || 0), 0);
17
+ }
18
+ function sumProbe(lanes) {
19
+ let passed = false;
20
+ for (const lane of lanes) {
21
+ if (lane.probe === "failed") return "failed";
22
+ if (lane.probe === "passed") passed = true;
23
+ }
24
+ return passed ? "passed" : "none";
25
+ }
26
+ function projectRows(groups, details) {
27
+ const byId = /* @__PURE__ */ new Map();
28
+ for (const detail of details) byId.set(detail.id, detail);
29
+ return groups.map((group) => {
30
+ const lanes = group.taskgroups.map((lane) => {
31
+ const detail = byId.get(lane.id);
32
+ return {
33
+ id: lane.id,
34
+ // The roster is the lock's authority; a missing lock means "locks on
35
+ // itself", so it is shown as the lane's own id, never blank.
36
+ group: lane.group || lane.id,
37
+ path: detail?.path ?? lane.path,
38
+ verify: detail?.verify ?? lane.verify ?? null,
39
+ tasks: detail?.tasks ?? 0,
40
+ failed: detail?.failed ?? 0,
41
+ lastActivity: detail?.last_activity ?? null,
42
+ probe: probeOf(detail?.probe ?? lane.probe)
43
+ };
44
+ });
45
+ return {
46
+ id: group.id,
47
+ path: group.path,
48
+ lanes,
49
+ tasks: totalTasks(group.summary),
50
+ inProgress: (group.summary.running ?? 0) + (group.summary.verifying ?? 0),
51
+ failed: group.summary.failed ?? 0,
52
+ lastActivity: lanes.reduce(
53
+ (latest, lane) => newest(latest, lane.lastActivity),
54
+ null
55
+ ),
56
+ probe: sumProbe(lanes)
57
+ };
58
+ });
59
+ }
60
+ const _hoisted_1 = { class: "projects-view" };
61
+ const _hoisted_2 = { class: "panes" };
62
+ const _hoisted_3 = { class: "pagehead" };
63
+ const _hoisted_4 = { class: "sub" };
64
+ const _hoisted_5 = { class: "tp-table" };
65
+ const _hoisted_6 = { class: "lanes" };
66
+ const _hoisted_7 = { class: "mono" };
67
+ const _hoisted_8 = { class: "mono muted" };
68
+ const _hoisted_9 = ["title"];
69
+ const _hoisted_10 = { class: "mono" };
70
+ const _hoisted_11 = { class: "mono muted" };
71
+ const _hoisted_12 = { class: "mono" };
72
+ const _hoisted_13 = { class: "mono muted" };
73
+ const _hoisted_14 = { class: "mono" };
74
+ const _hoisted_15 = { class: "mono" };
75
+ const _hoisted_16 = { class: "mono" };
76
+ const _hoisted_17 = { class: "mono muted" };
77
+ const _sfc_main = /* @__PURE__ */ defineComponent({
78
+ __name: "ProjectsView",
79
+ setup(__props) {
80
+ const board = useBoardStore();
81
+ const { t } = useI18n();
82
+ const rows = computed(() => projectRows(board.projectGroups, board.projects));
83
+ const expanded = ref([]);
84
+ function onExpand(_row, openRows) {
85
+ expanded.value = openRows.map((row) => row.id);
86
+ }
87
+ return (_ctx, _cache) => {
88
+ const _component_el_table_column = resolveComponent("el-table-column");
89
+ const _component_el_table = resolveComponent("el-table");
90
+ return openBlock(), createElementBlock("div", _hoisted_1, [
91
+ createBaseVNode("div", _hoisted_2, [
92
+ createBaseVNode("div", _hoisted_3, [
93
+ createBaseVNode("div", null, [
94
+ createBaseVNode("h3", null, toDisplayString(unref(t)("projects.title")), 1),
95
+ createBaseVNode("p", _hoisted_4, toDisplayString(unref(t)("projects.sub")), 1)
96
+ ])
97
+ ]),
98
+ createBaseVNode("div", _hoisted_5, [
99
+ createVNode(_component_el_table, {
100
+ data: rows.value,
101
+ style: { "width": "100%" },
102
+ "row-key": "id",
103
+ "expand-row-keys": expanded.value,
104
+ onExpandChange: onExpand
105
+ }, {
106
+ default: withCtx(() => [
107
+ createVNode(_component_el_table_column, {
108
+ type: "expand",
109
+ width: "40"
110
+ }, {
111
+ default: withCtx((scope) => [
112
+ createBaseVNode("div", _hoisted_6, [
113
+ createVNode(_component_el_table, {
114
+ data: scope.row.lanes,
115
+ style: { "width": "100%" }
116
+ }, {
117
+ default: withCtx(() => [
118
+ createVNode(_component_el_table_column, {
119
+ label: unref(t)("projects.col.lane"),
120
+ "min-width": "150"
121
+ }, {
122
+ default: withCtx((lane) => [
123
+ createBaseVNode("span", _hoisted_7, toDisplayString(lane.row.id), 1)
124
+ ]),
125
+ _: 1
126
+ }, 8, ["label"]),
127
+ createVNode(_component_el_table_column, {
128
+ label: unref(t)("projects.col.group"),
129
+ width: "136"
130
+ }, {
131
+ default: withCtx((lane) => [
132
+ createBaseVNode("span", {
133
+ class: normalizeClass(["mono", { muted: lane.row.group === "default" }])
134
+ }, toDisplayString(lane.row.group === "default" ? unref(t)("proj.group.default") : lane.row.group), 3)
135
+ ]),
136
+ _: 1
137
+ }, 8, ["label"]),
138
+ createVNode(_component_el_table_column, {
139
+ label: unref(t)("projects.col.path"),
140
+ "min-width": "210"
141
+ }, {
142
+ default: withCtx((lane) => [
143
+ createBaseVNode("span", _hoisted_8, toDisplayString(lane.row.path), 1)
144
+ ]),
145
+ _: 1
146
+ }, 8, ["label"]),
147
+ createVNode(_component_el_table_column, {
148
+ label: unref(t)("projects.col.verify"),
149
+ "min-width": "240",
150
+ "class-name": "tp-clip"
151
+ }, {
152
+ default: withCtx((lane) => [
153
+ createBaseVNode("span", {
154
+ class: "mono muted",
155
+ title: lane.row.verify ?? ""
156
+ }, toDisplayString(lane.row.verify ?? "—"), 9, _hoisted_9)
157
+ ]),
158
+ _: 1
159
+ }, 8, ["label"]),
160
+ createVNode(_component_el_table_column, {
161
+ label: unref(t)("projects.col.tasks"),
162
+ width: "72",
163
+ align: "right"
164
+ }, {
165
+ default: withCtx((lane) => [
166
+ createBaseVNode("span", _hoisted_10, toDisplayString(lane.row.tasks), 1)
167
+ ]),
168
+ _: 1
169
+ }, 8, ["label"]),
170
+ createVNode(_component_el_table_column, {
171
+ label: unref(t)("projects.col.failed"),
172
+ width: "72",
173
+ align: "right"
174
+ }, {
175
+ default: withCtx((lane) => [
176
+ createBaseVNode("span", {
177
+ class: normalizeClass(["mono", { bad: lane.row.failed > 0 }])
178
+ }, toDisplayString(lane.row.failed), 3)
179
+ ]),
180
+ _: 1
181
+ }, 8, ["label"]),
182
+ createVNode(_component_el_table_column, {
183
+ label: unref(t)("projects.col.last"),
184
+ width: "170"
185
+ }, {
186
+ default: withCtx((lane) => [
187
+ createBaseVNode("span", _hoisted_11, toDisplayString(lane.row.lastActivity ?? "—"), 1)
188
+ ]),
189
+ _: 1
190
+ }, 8, ["label"]),
191
+ createVNode(_component_el_table_column, {
192
+ label: unref(t)("projects.col.probe"),
193
+ width: "112"
194
+ }, {
195
+ default: withCtx((lane) => [
196
+ createBaseVNode("span", {
197
+ class: normalizeClass(["probe", lane.row.probe ?? "none"])
198
+ }, toDisplayString(unref(t)("probe." + (lane.row.probe ?? "none"))), 3)
199
+ ]),
200
+ _: 1
201
+ }, 8, ["label"])
202
+ ]),
203
+ _: 1
204
+ }, 8, ["data"])
205
+ ])
206
+ ]),
207
+ _: 1
208
+ }),
209
+ createVNode(_component_el_table_column, {
210
+ label: unref(t)("projects.col.id"),
211
+ "min-width": "150"
212
+ }, {
213
+ default: withCtx((scope) => [
214
+ createBaseVNode("span", _hoisted_12, toDisplayString(scope.row.id), 1)
215
+ ]),
216
+ _: 1
217
+ }, 8, ["label"]),
218
+ createVNode(_component_el_table_column, {
219
+ label: unref(t)("projects.col.path"),
220
+ "min-width": "230"
221
+ }, {
222
+ default: withCtx((scope) => [
223
+ createBaseVNode("span", _hoisted_13, toDisplayString(scope.row.path), 1)
224
+ ]),
225
+ _: 1
226
+ }, 8, ["label"]),
227
+ createVNode(_component_el_table_column, {
228
+ label: unref(t)("projects.col.lanes"),
229
+ width: "72",
230
+ align: "right"
231
+ }, {
232
+ default: withCtx((scope) => [
233
+ createBaseVNode("span", _hoisted_14, toDisplayString(scope.row.lanes.length), 1)
234
+ ]),
235
+ _: 1
236
+ }, 8, ["label"]),
237
+ createVNode(_component_el_table_column, {
238
+ label: unref(t)("projects.col.tasks"),
239
+ width: "72",
240
+ align: "right"
241
+ }, {
242
+ default: withCtx((scope) => [
243
+ createBaseVNode("span", _hoisted_15, toDisplayString(scope.row.tasks), 1)
244
+ ]),
245
+ _: 1
246
+ }, 8, ["label"]),
247
+ createVNode(_component_el_table_column, {
248
+ label: unref(t)("projects.col.flying"),
249
+ width: "72",
250
+ align: "right"
251
+ }, {
252
+ default: withCtx((scope) => [
253
+ createBaseVNode("span", _hoisted_16, toDisplayString(scope.row.inProgress), 1)
254
+ ]),
255
+ _: 1
256
+ }, 8, ["label"]),
257
+ createVNode(_component_el_table_column, {
258
+ label: unref(t)("projects.col.failed"),
259
+ width: "72",
260
+ align: "right"
261
+ }, {
262
+ default: withCtx((scope) => [
263
+ createBaseVNode("span", {
264
+ class: normalizeClass(["mono", { bad: scope.row.failed > 0 }])
265
+ }, toDisplayString(scope.row.failed), 3)
266
+ ]),
267
+ _: 1
268
+ }, 8, ["label"]),
269
+ createVNode(_component_el_table_column, {
270
+ label: unref(t)("projects.col.last"),
271
+ width: "170"
272
+ }, {
273
+ default: withCtx((scope) => [
274
+ createBaseVNode("span", _hoisted_17, toDisplayString(scope.row.lastActivity ?? "—"), 1)
275
+ ]),
276
+ _: 1
277
+ }, 8, ["label"]),
278
+ createVNode(_component_el_table_column, {
279
+ label: unref(t)("projects.col.probe"),
280
+ width: "112"
281
+ }, {
282
+ default: withCtx((scope) => [
283
+ createBaseVNode("span", {
284
+ class: normalizeClass(["probe", scope.row.probe ?? "none"])
285
+ }, toDisplayString(unref(t)("probe." + (scope.row.probe ?? "none"))), 3)
286
+ ]),
287
+ _: 1
288
+ }, 8, ["label"])
289
+ ]),
290
+ _: 1
291
+ }, 8, ["data", "expand-row-keys"])
292
+ ])
293
+ ]),
294
+ createVNode(TaskDrawer)
295
+ ]);
296
+ };
297
+ }
298
+ });
299
+ const ProjectsView = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-a5cb12d2"]]);
300
+ export {
301
+ ProjectsView as default
302
+ };
@@ -0,0 +1,23 @@
1
+
2
+ .projects-view[data-v-a5cb12d2] {
3
+ display: flex;
4
+ flex-direction: column;
5
+ flex: 1;
6
+ min-height: 0;
7
+ }
8
+ .mono.bad[data-v-a5cb12d2] {
9
+ color: var(--c-failed);
10
+ font-weight: 600;
11
+ }
12
+
13
+ /* The expanded project row. Element Plus pads the expanded cell heavily by
14
+ default; strip that padding so the nested lane table sits flush and the
15
+ lanes read as belonging to the row above them. The insets are the row's own,
16
+ on a sunken tone from the token set (never a colour invented here). */
17
+ .projects-view[data-v-a5cb12d2] .el-table__expanded-cell {
18
+ padding: 0;
19
+ background-color: var(--zebra);
20
+ }
21
+ .lanes[data-v-a5cb12d2] {
22
+ padding: 2px 12px 8px 40px;
23
+ }