bullswarm 0.35.3 → 0.35.4
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.
- package/CHANGELOG.md +27 -0
- package/docs/design/runs-table-0.35.4/README.md +60 -0
- package/docs/design/runs-table-0.35.4/frames/runs-120.txt +70 -0
- package/docs/design/runs-table-0.35.4/frames/runs-200.txt +70 -0
- package/docs/design/runs-table-0.35.4/frames/runs-55.txt +70 -0
- package/docs/design/tidy-0.35.1/frames/colour/real-task-200.txt +3 -3
- package/docs/design/tidy-0.35.1/frames/colour/real-task-55.txt +2 -2
- package/docs/design/tidy-0.35.1/frames/real-task-120.txt +3 -3
- package/docs/design/tidy-0.35.1/frames/real-task-200.txt +3 -3
- package/docs/design/tidy-0.35.1/frames/real-task-55.txt +2 -2
- package/mods/bullswarm/README.md +8 -3
- package/mods/bullswarm/hooks/pane.tsx +20 -8
- package/mods/bullswarm/hooks/register.ts +54 -4
- package/mods/bullswarm/hooks/runs.ts +29 -0
- package/package.json +1 -1
- package/src/help.js +28 -1
- package/src/lib/cli-flags.js +2 -0
- package/src/lib/tasks.js +37 -6
- package/src/workflow/cli.js +50 -0
- package/src/workflow/history-view.js +293 -141
- package/src/workflow/runs-view.js +25 -13
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,32 @@
|
|
|
1
1
|
# bullswarm changelog
|
|
2
2
|
|
|
3
|
+
## 0.35.4 — one Runs table for workflows and tasks
|
|
4
|
+
|
|
5
|
+
- mod: a live single task no longer replaces the selected workflow; each task
|
|
6
|
+
gets its own `task <8-char-tail>` pane button and a real dashboard Step model
|
|
7
|
+
from the read-only `workflow task show` command.
|
|
8
|
+
- runs: workflow and task rows share one set of columns — status, id, project,
|
|
9
|
+
what, kind (`7/7 steps` or `task`), active time, cost and start clock — sized
|
|
10
|
+
once for the whole page, so every day section lines up; long project names
|
|
11
|
+
stop at 18 cells with `…`.
|
|
12
|
+
- runs: a task says what it is about: its first Markdown heading, else a
|
|
13
|
+
labelled subject line (`Outcome:`, `Goal:`, `Task:`, `Defect:` …), else the
|
|
14
|
+
first sentence that is neither setup (`You are …`, `Workspace: …`) nor a
|
|
15
|
+
standing rule (`Edit only …`, `Do not commit.`, `Never …`).
|
|
16
|
+
- runs: tasks recorded before the task ledger show their start clock, their
|
|
17
|
+
project when the cwd was recorded, and a dim `build task on codex`-style
|
|
18
|
+
description instead of a row of dashes.
|
|
19
|
+
- runs: money is one cents cell: `$0.32` measured, `≈$4.01` or `~$25.87`
|
|
20
|
+
estimated, `≥$138.12` when some attempts are unpriced, and `~<$0.01` below
|
|
21
|
+
a cent; rows no longer print `API`, `summed`, `estimated`, `unmeasured` or
|
|
22
|
+
`span`. Day rules read `6 runs · 7 tasks · ≥$374.85 · 3 unpriced`, dropping
|
|
23
|
+
the money and then the unpriced count at narrow widths, never the words.
|
|
24
|
+
- runs: the description shrinks first, then start, kind and project drop as
|
|
25
|
+
the terminal narrows; status, id, time and cost always stay, and no line is
|
|
26
|
+
wider than the page from 40 to 260 columns.
|
|
27
|
+
- runs: the cursor bar is one even inverse band; the grey cost and clock cells
|
|
28
|
+
no longer show as darker blocks inside it.
|
|
29
|
+
|
|
3
30
|
## 0.35.3 — whole right edges in Ghostty and herdr, Enter opens the row you are on, named phases
|
|
4
31
|
|
|
5
32
|
- dashboard: every row is erased before it is painted instead of after, so a
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Runs table 0.35.4
|
|
2
|
+
|
|
3
|
+
The Runs page uses one row grammar for workflow runs and standalone tasks in
|
|
4
|
+
both the active section and dated history sections:
|
|
5
|
+
|
|
6
|
+
```text
|
|
7
|
+
status id project what kind time cost start
|
|
8
|
+
✓ gbnq62 bullswarm unify the Runs table 7/7 steps 1h34m $65.56 09:10
|
|
9
|
+
✓ a938c8b5 portal repair the customer import task 26m ~$25.87 08:00
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
The status vocabulary and palette are shared: `✓` succeeded/verified, `✗`
|
|
13
|
+
failed, `●` running, and the existing stopped/pending marks where applicable.
|
|
14
|
+
Workflow ids use their short id; task ids use the stable eight-character tail.
|
|
15
|
+
Projects use the same recorded-project/cwd derivation for both kinds. `what`
|
|
16
|
+
is the workflow goal or a task's first Markdown heading; without a heading it
|
|
17
|
+
is the first labelled subject line (`Outcome:`, `Goal:`, `Task:`, `Question:`,
|
|
18
|
+
`Problem:`, `Defect:`, `Bug:`, then `Deliver:`), and otherwise the first
|
|
19
|
+
sentence that is neither worker, workspace or worktree setup prose nor a
|
|
20
|
+
standing rule such as `Edit only …`, `Do not commit.` or `Never …`.
|
|
21
|
+
Missing legacy task text becomes a dim description from the recorded lane and
|
|
22
|
+
pool, such as `build task on codex`.
|
|
23
|
+
|
|
24
|
+
Time is active time. A legacy record that can prove only wall time keeps that
|
|
25
|
+
number in the same dimmed cell; the row never prints `span`. A legacy task's
|
|
26
|
+
start is reconstructed from its recorded finish and duration when the old
|
|
27
|
+
record omitted `startedAt`. Cost is one right-aligned, cents-only cell: `$`
|
|
28
|
+
provider-measured, `≈$` transcript-summed, `~$` estimated, `≥$` a known lower
|
|
29
|
+
bound, `<$0.01` for a positive sub-cent amount, and a dim dash when unknown.
|
|
30
|
+
The row does not spell out API, summed, estimated, unmeasured or unpriced.
|
|
31
|
+
|
|
32
|
+
The page computes one column layout from the active rows and every loaded day,
|
|
33
|
+
then shares it across every section. Loading older days may widen it. Project
|
|
34
|
+
is capped at 18 cells with an ellipsis. The description is elastic and
|
|
35
|
+
contracts first. If it reaches its useful floor, start drops, then kind, then
|
|
36
|
+
project. Status, the eight-cell id slot, time and cost remain at every width;
|
|
37
|
+
40–260 columns are one line per item with no overflow. At 55 columns the row
|
|
38
|
+
stays one line because keeping interleaving and numeric alignment is more
|
|
39
|
+
useful than a second description line.
|
|
40
|
+
|
|
41
|
+
Day rules always spell out `runs` and `tasks`. When a narrow rule cannot carry
|
|
42
|
+
every fact it drops the money first, then the unpriced count; it never
|
|
43
|
+
abbreviates the nouns to `r` and `t`.
|
|
44
|
+
|
|
45
|
+
The day rule is the only coverage sentence:
|
|
46
|
+
|
|
47
|
+
```text
|
|
48
|
+
── Mon 21 Sep ──── 6 runs · 7 tasks · ≥$374.85 · 3 unpriced ──
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
It sums workflow attempts and standalone tasks. Unknown attempts contribute to
|
|
52
|
+
the unpriced count, while the displayed amount remains the known lower bound.
|
|
53
|
+
Click and Enter resolve through the same row action, and hover reverses only
|
|
54
|
+
the row text. The cursor row is one inverse band: inside it only the status
|
|
55
|
+
glyph keeps its colour, because reverse video paints a coloured cell's text
|
|
56
|
+
colour as its background. Paging, search and active/all filtering are unchanged.
|
|
57
|
+
|
|
58
|
+
Reproducible frames are under `frames/`; run
|
|
59
|
+
`node scripts/render-runs-0.35.4-frames.mjs` to regenerate them from
|
|
60
|
+
`tests/fixtures/home-351` in the pinned Hong Kong timezone.
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
Home Runs Budget Stats Fleet
|
|
2
|
+
bullswarm · runs · all · 6 days · 1–66/79
|
|
3
|
+
|
|
4
|
+
── active ──────────────────────────────────────────────────────────────────────────────────────────────────────────────
|
|
5
|
+
nothing in flight · bullswarm workflow goal "<goal>" launches one
|
|
6
|
+
|
|
7
|
+
── Sun 20 Sep ──────────────────────────────────────────────────────────── 6 runs · 24 tasks · ≥$181.26 · 44 unpriced ──
|
|
8
|
+
✓ 9e481d57 project-a build task on grok task 19m ≈$4.01 15:31
|
|
9
|
+
✓ 8eebd0ff project-a build task on grok task 15m ≈$5.02 15:15
|
|
10
|
+
✓ d7f99bde project-a build task on command-code task 12m ~<$0.01 15:15
|
|
11
|
+
✓ 8b9b1b6f project-a build task on codex task 18m $0.22 15:03
|
|
12
|
+
✓ 7d432faa project-a analyze task on codex task 23m $0.33 08:33
|
|
13
|
+
✓ 5453ef44 project-a analyze task on codex task 20m $0.38 08:33
|
|
14
|
+
✓ f684c5f3 project-b build task on codex task 14m — 06:15
|
|
15
|
+
✓ 3155fb3c project-a sample task qui consequat et nulla ex amet magna ullamco en… task 24m — 06:04
|
|
16
|
+
✓ 1e733624 project-b build task on codex task 6m — 06:18
|
|
17
|
+
✓ 7f320764 project-a build task on codex task 14m — 06:03
|
|
18
|
+
✓ rensha project-b sample goal for rensha nostrud lorem nostrud mollit labore … 9/9 steps 59m ≥$9.52 05:13
|
|
19
|
+
✓ 5aab47e2 project-a build task on codex task 4m — 06:04
|
|
20
|
+
✓ euqrni project-a sample goal for euqrni minim labore magna eiusmod quis labo… 5/5 steps 1h56m ≈$9.76 04:05
|
|
21
|
+
✓ 21078132 project-a build task on codex task 29m — 04:41
|
|
22
|
+
✓ 70ea992d project-a build task on codex task 7m — 04:45
|
|
23
|
+
✓ rw3dhi project-a sample goal for rw3dhi lorem sed sint ipsum lorem laborum m… 7/7 steps 1h38m ≈$16.16 03:04
|
|
24
|
+
✓ g6d6q2 project-b sample goal for g6d6q2 laborum ex id occaecat consequat ad … 14/14 steps 6h01m ≥$86.79 15:24
|
|
25
|
+
✓ 677871be project-a build task on codex task 31m — 04:05
|
|
26
|
+
✓ 0efb3eb7 project-a build task on codex task 17m — 04:05
|
|
27
|
+
✓ 6118b6db project-a build task on codex task 13m — 04:05
|
|
28
|
+
✓ va7k9a project-a sample goal for va7k9a proident fugiat fugiat tempor exerci… 8/8 steps 2h46m ≥$15.27 01:18
|
|
29
|
+
✓ gbnq62 project-a sample goal for gbnq62 officia ut tempor labore cillum amet… 13/13 steps 4h14m ≥$33.80 23:13
|
|
30
|
+
✓ 91b7d09a project-a build task on codex task 16m — 02:32
|
|
31
|
+
✓ f6dc2b47 project-a build task on codex task 42m — 02:00
|
|
32
|
+
✓ ac594979 project-a build task on codex task 18m — 02:21
|
|
33
|
+
✓ b386c2f5 project-a analyze task on codex task 19m — 01:52
|
|
34
|
+
✓ ead18bde project-a build task on codex task 34m — 01:16
|
|
35
|
+
✓ 8f2f2618 project-a build task on codex task 31m — 01:16
|
|
36
|
+
✓ 13c6f3bc project-a analyze task on codex task 34m — 01:12
|
|
37
|
+
✓ 52109621 project-a build task on codex task 26m — 01:16
|
|
38
|
+
|
|
39
|
+
── Sat 19 Sep ─────────────────────────────────────────────────────────────── 2 runs · 7 tasks · ≥$18.26 · 7 unpriced ──
|
|
40
|
+
✓ qvh8e2 project-a sample goal for qvh8e2 proident irure eiusmod ex mollit exe… 2/2 steps 28m ≈$4.00 23:24
|
|
41
|
+
✓ c71e896e project-a sample task dolore proident et ex ullamco incididunt labori… task 16m — 20:18
|
|
42
|
+
✓ 6a4e8085 project-a sample task incididunt adipiscing exercitation task 24m — 19:56
|
|
43
|
+
✓ a9e254cc project-a sample task aliqua incididunt laboris excepteur task 20m — 19:56
|
|
44
|
+
✓ — — build task on codex task 19m — 19:25
|
|
45
|
+
✓ — — build task on codex task 29m — 05:21
|
|
46
|
+
✓ — — build task on codex task 29m — 04:51
|
|
47
|
+
✓ 7e4w3i project-a sample goal for 7e4w3i ullamco cillum dolore quis voluptate… 8/8 steps 3h28m ≈$14.25 01:21
|
|
48
|
+
✓ — — build task on codex task 27m — 01:07
|
|
49
|
+
|
|
50
|
+
── Fri 18 Sep ───────────────────────────────────────────────────────────── 7 runs · 3 tasks · ≥$110.31 · 43 unpriced ──
|
|
51
|
+
✓ kresj2 project-c sample goal for kresj2 ipsum proident enim ex sed officia m… 11/11 steps 1h24m ≥$9.61 18:46
|
|
52
|
+
✓ u9d48s project-a sample goal for u9d48s esse tempor fugiat occaecat deserunt… 23/23 steps 6h41m ≥$57.91 12:47
|
|
53
|
+
✓ is9aaa project-a sample goal for is9aaa reprehenderit non qui esse sint exce… 9/9 steps 1h06m ≥$2.54 14:09
|
|
54
|
+
✓ uamgfi project-b sample goal for uamgfi pariatur ullamco pariatur aliqua in … 2/2 steps 34m ≈$2.16 14:09
|
|
55
|
+
✓ cqxyw2 project-a sample goal for cqxyw2 anim pariatur pariatur tempor anim d… 2/2 steps 4m — 14:12
|
|
56
|
+
✓ 2yrcxi project-b sample goal for 2yrcxi est nostrud ipsum nulla dolore nulla… 8/8 steps 1h45m ≥$8.02 10:57
|
|
57
|
+
✓ — — build task on codex task 1h00m — 10:05
|
|
58
|
+
✗ — — build task on opencode task 0m — 09:45
|
|
59
|
+
✓ fuyyca project-a sample goal for fuyyca aute non ad id laboris et culpa ut d… 5/5 steps 3h28m ≥$30.06 02:13
|
|
60
|
+
✗ — — analyze task on opencode task 18m — 01:06
|
|
61
|
+
|
|
62
|
+
── Thu 17 Sep ───────────────────────────────────────────────────────────────────── 0 runs · 4 tasks · — · 4 unpriced ──
|
|
63
|
+
✗ — — build task on opencode task 7m — 18:56
|
|
64
|
+
✓ — — build task on codex task 22m — 11:18
|
|
65
|
+
✓ — — build task on codex task 24m — 11:09
|
|
66
|
+
✓ — — build task on codex task 14m — 04:25
|
|
67
|
+
|
|
68
|
+
── Wed 16 Sep ───────────────────────────────────────────────────────────────────── 0 runs · 3 tasks · — · 3 unpriced ──
|
|
69
|
+
6 days loaded · older days load as you scroll
|
|
70
|
+
[ ?.help ] [ quit ]
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
Home Runs Budget Stats Fleet
|
|
2
|
+
bullswarm · runs · all · 6 days · 1–66/79
|
|
3
|
+
|
|
4
|
+
── active ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
|
|
5
|
+
nothing in flight · bullswarm workflow goal "<goal>" launches one
|
|
6
|
+
|
|
7
|
+
── Sun 20 Sep ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 6 runs · 24 tasks · ≥$181.26 · 44 unpriced ──
|
|
8
|
+
✓ 9e481d57 project-a build task on grok task 19m ≈$4.01 15:31
|
|
9
|
+
✓ 8eebd0ff project-a build task on grok task 15m ≈$5.02 15:15
|
|
10
|
+
✓ d7f99bde project-a build task on command-code task 12m ~<$0.01 15:15
|
|
11
|
+
✓ 8b9b1b6f project-a build task on codex task 18m $0.22 15:03
|
|
12
|
+
✓ 7d432faa project-a analyze task on codex task 23m $0.33 08:33
|
|
13
|
+
✓ 5453ef44 project-a analyze task on codex task 20m $0.38 08:33
|
|
14
|
+
✓ f684c5f3 project-b build task on codex task 14m — 06:15
|
|
15
|
+
✓ 3155fb3c project-a sample task qui consequat et nulla ex amet magna ullamco enim cupidatat nulla laborum sit et nostrud commodo nulla tempor excepteur consequ… task 24m — 06:04
|
|
16
|
+
✓ 1e733624 project-b build task on codex task 6m — 06:18
|
|
17
|
+
✓ 7f320764 project-a build task on codex task 14m — 06:03
|
|
18
|
+
✓ rensha project-b sample goal for rensha nostrud lorem nostrud mollit labore labore laboris qui dolore ullamco in ex consequat minim aute ad ipsum anim ea oc… 9/9 steps 59m ≥$9.52 05:13
|
|
19
|
+
✓ 5aab47e2 project-a build task on codex task 4m — 06:04
|
|
20
|
+
✓ euqrni project-a sample goal for euqrni minim labore magna eiusmod quis labore elit aute culpa enim dolore laborum excepteur laboris elit commodo culpa exer… 5/5 steps 1h56m ≈$9.76 04:05
|
|
21
|
+
✓ 21078132 project-a build task on codex task 29m — 04:41
|
|
22
|
+
✓ 70ea992d project-a build task on codex task 7m — 04:45
|
|
23
|
+
✓ rw3dhi project-a sample goal for rw3dhi lorem sed sint ipsum lorem laborum mollit magna voluptate amet est culpa amet in officia duis quis in cupidatat exce… 7/7 steps 1h38m ≈$16.16 03:04
|
|
24
|
+
✓ g6d6q2 project-b sample goal for g6d6q2 laborum ex id occaecat consequat ad elit consequat nulla ut laboris non consequat aliquip duis tempor qui duis ipsum… 14/14 steps 6h01m ≥$86.79 15:24
|
|
25
|
+
✓ 677871be project-a build task on codex task 31m — 04:05
|
|
26
|
+
✓ 0efb3eb7 project-a build task on codex task 17m — 04:05
|
|
27
|
+
✓ 6118b6db project-a build task on codex task 13m — 04:05
|
|
28
|
+
✓ va7k9a project-a sample goal for va7k9a proident fugiat fugiat tempor exercitation sint aliquip ipsum commodo consectetur minim mollit ex officia laboris ex… 8/8 steps 2h46m ≥$15.27 01:18
|
|
29
|
+
✓ gbnq62 project-a sample goal for gbnq62 officia ut tempor labore cillum amet officia ea minim id velit lorem laborum occaecat consequat laborum aliqua tempo… 13/13 steps 4h14m ≥$33.80 23:13
|
|
30
|
+
✓ 91b7d09a project-a build task on codex task 16m — 02:32
|
|
31
|
+
✓ f6dc2b47 project-a build task on codex task 42m — 02:00
|
|
32
|
+
✓ ac594979 project-a build task on codex task 18m — 02:21
|
|
33
|
+
✓ b386c2f5 project-a analyze task on codex task 19m — 01:52
|
|
34
|
+
✓ ead18bde project-a build task on codex task 34m — 01:16
|
|
35
|
+
✓ 8f2f2618 project-a build task on codex task 31m — 01:16
|
|
36
|
+
✓ 13c6f3bc project-a analyze task on codex task 34m — 01:12
|
|
37
|
+
✓ 52109621 project-a build task on codex task 26m — 01:16
|
|
38
|
+
|
|
39
|
+
── Sat 19 Sep ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 2 runs · 7 tasks · ≥$18.26 · 7 unpriced ──
|
|
40
|
+
✓ qvh8e2 project-a sample goal for qvh8e2 proident irure eiusmod ex mollit exercitation magna occaecat laborum minim est labore voluptate nisi irure laboris t… 2/2 steps 28m ≈$4.00 23:24
|
|
41
|
+
✓ c71e896e project-a sample task dolore proident et ex ullamco incididunt laboris dolore task 16m — 20:18
|
|
42
|
+
✓ 6a4e8085 project-a sample task incididunt adipiscing exercitation task 24m — 19:56
|
|
43
|
+
✓ a9e254cc project-a sample task aliqua incididunt laboris excepteur task 20m — 19:56
|
|
44
|
+
✓ — — build task on codex task 19m — 19:25
|
|
45
|
+
✓ — — build task on codex task 29m — 05:21
|
|
46
|
+
✓ — — build task on codex task 29m — 04:51
|
|
47
|
+
✓ 7e4w3i project-a sample goal for 7e4w3i ullamco cillum dolore quis voluptate dolor irure ut anim tempor ex adipiscing reprehenderit eiusmod ut quis dolor do… 8/8 steps 3h28m ≈$14.25 01:21
|
|
48
|
+
✓ — — build task on codex task 27m — 01:07
|
|
49
|
+
|
|
50
|
+
── Fri 18 Sep ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 7 runs · 3 tasks · ≥$110.31 · 43 unpriced ──
|
|
51
|
+
✓ kresj2 project-c sample goal for kresj2 ipsum proident enim ex sed officia mollit mollit commodo et eiusmod ea deserunt esse anim amet veniam amet ex nisi a… 11/11 steps 1h24m ≥$9.61 18:46
|
|
52
|
+
✓ u9d48s project-a sample goal for u9d48s esse tempor fugiat occaecat deserunt commodo nostrud mollit est aute elit est qui cupidatat duis mollit ullamco sint… 23/23 steps 6h41m ≥$57.91 12:47
|
|
53
|
+
✓ is9aaa project-a sample goal for is9aaa reprehenderit non qui esse sint excepteur ut sint consequat fugiat aliquip dolore exercitation laborum culpa minim n… 9/9 steps 1h06m ≥$2.54 14:09
|
|
54
|
+
✓ uamgfi project-b sample goal for uamgfi pariatur ullamco pariatur aliqua in duis mollit culpa excepteur aliquip sunt duis qui anim enim ut velit quis culpa … 2/2 steps 34m ≈$2.16 14:09
|
|
55
|
+
✓ cqxyw2 project-a sample goal for cqxyw2 anim pariatur pariatur tempor anim do dolore occaecat laboris commodo minim cillum et id deserunt ipsum consequat in… 2/2 steps 4m — 14:12
|
|
56
|
+
✓ 2yrcxi project-b sample goal for 2yrcxi est nostrud ipsum nulla dolore nulla est magna proident incididunt dolor commodo esse nisi reprehenderit amet quis v… 8/8 steps 1h45m ≥$8.02 10:57
|
|
57
|
+
✓ — — build task on codex task 1h00m — 10:05
|
|
58
|
+
✗ — — build task on opencode task 0m — 09:45
|
|
59
|
+
✓ fuyyca project-a sample goal for fuyyca aute non ad id laboris et culpa ut dolor mollit dolor veniam non eiusmod magna anim nostrud lorem consectetur exerci… 5/5 steps 3h28m ≥$30.06 02:13
|
|
60
|
+
✗ — — analyze task on opencode task 18m — 01:06
|
|
61
|
+
|
|
62
|
+
── Thu 17 Sep ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 runs · 4 tasks · — · 4 unpriced ──
|
|
63
|
+
✗ — — build task on opencode task 7m — 18:56
|
|
64
|
+
✓ — — build task on codex task 22m — 11:18
|
|
65
|
+
✓ — — build task on codex task 24m — 11:09
|
|
66
|
+
✓ — — build task on codex task 14m — 04:25
|
|
67
|
+
|
|
68
|
+
── Wed 16 Sep ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 runs · 3 tasks · — · 3 unpriced ──
|
|
69
|
+
6 days loaded · older days load as you scroll
|
|
70
|
+
[ ?.help ] [ quit ]
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
Home Runs Budget Stats Fleet
|
|
2
|
+
bullswarm · runs · all · 6 days · 1–66/79
|
|
3
|
+
|
|
4
|
+
── active ─────────────────────────────────────────────
|
|
5
|
+
nothing in flight · bullswarm workflow goal "<goal>" …
|
|
6
|
+
|
|
7
|
+
── Sun 20 Sep ────── 6 runs · 24 tasks · 44 unpriced ──
|
|
8
|
+
✓ 9e481d57 project-a build task on … 19m ≈$4.01
|
|
9
|
+
✓ 8eebd0ff project-a build task on … 15m ≈$5.02
|
|
10
|
+
✓ d7f99bde project-a build task on … 12m ~<$0.01
|
|
11
|
+
✓ 8b9b1b6f project-a build task on … 18m $0.22
|
|
12
|
+
✓ 7d432faa project-a analyze task o… 23m $0.33
|
|
13
|
+
✓ 5453ef44 project-a analyze task o… 20m $0.38
|
|
14
|
+
✓ f684c5f3 project-b build task on … 14m —
|
|
15
|
+
✓ 3155fb3c project-a sample task qu… 24m —
|
|
16
|
+
✓ 1e733624 project-b build task on … 6m —
|
|
17
|
+
✓ 7f320764 project-a build task on … 14m —
|
|
18
|
+
✓ rensha project-b sample goal fo… 59m ≥$9.52
|
|
19
|
+
✓ 5aab47e2 project-a build task on … 4m —
|
|
20
|
+
✓ euqrni project-a sample goal fo… 1h56m ≈$9.76
|
|
21
|
+
✓ 21078132 project-a build task on … 29m —
|
|
22
|
+
✓ 70ea992d project-a build task on … 7m —
|
|
23
|
+
✓ rw3dhi project-a sample goal fo… 1h38m ≈$16.16
|
|
24
|
+
✓ g6d6q2 project-b sample goal fo… 6h01m ≥$86.79
|
|
25
|
+
✓ 677871be project-a build task on … 31m —
|
|
26
|
+
✓ 0efb3eb7 project-a build task on … 17m —
|
|
27
|
+
✓ 6118b6db project-a build task on … 13m —
|
|
28
|
+
✓ va7k9a project-a sample goal fo… 2h46m ≥$15.27
|
|
29
|
+
✓ gbnq62 project-a sample goal fo… 4h14m ≥$33.80
|
|
30
|
+
✓ 91b7d09a project-a build task on … 16m —
|
|
31
|
+
✓ f6dc2b47 project-a build task on … 42m —
|
|
32
|
+
✓ ac594979 project-a build task on … 18m —
|
|
33
|
+
✓ b386c2f5 project-a analyze task o… 19m —
|
|
34
|
+
✓ ead18bde project-a build task on … 34m —
|
|
35
|
+
✓ 8f2f2618 project-a build task on … 31m —
|
|
36
|
+
✓ 13c6f3bc project-a analyze task o… 34m —
|
|
37
|
+
✓ 52109621 project-a build task on … 26m —
|
|
38
|
+
|
|
39
|
+
── Sat 19 Sep ──────── 2 runs · 7 tasks · 7 unpriced ──
|
|
40
|
+
✓ qvh8e2 project-a sample goal fo… 28m ≈$4.00
|
|
41
|
+
✓ c71e896e project-a sample task do… 16m —
|
|
42
|
+
✓ 6a4e8085 project-a sample task in… 24m —
|
|
43
|
+
✓ a9e254cc project-a sample task al… 20m —
|
|
44
|
+
✓ — — build task on … 19m —
|
|
45
|
+
✓ — — build task on … 29m —
|
|
46
|
+
✓ — — build task on … 29m —
|
|
47
|
+
✓ 7e4w3i project-a sample goal fo… 3h28m ≈$14.25
|
|
48
|
+
✓ — — build task on … 27m —
|
|
49
|
+
|
|
50
|
+
── Fri 18 Sep ─────── 7 runs · 3 tasks · 43 unpriced ──
|
|
51
|
+
✓ kresj2 project-c sample goal fo… 1h24m ≥$9.61
|
|
52
|
+
✓ u9d48s project-a sample goal fo… 6h41m ≥$57.91
|
|
53
|
+
✓ is9aaa project-a sample goal fo… 1h06m ≥$2.54
|
|
54
|
+
✓ uamgfi project-b sample goal fo… 34m ≈$2.16
|
|
55
|
+
✓ cqxyw2 project-a sample goal fo… 4m —
|
|
56
|
+
✓ 2yrcxi project-b sample goal fo… 1h45m ≥$8.02
|
|
57
|
+
✓ — — build task on … 1h00m —
|
|
58
|
+
✗ — — build task on … 0m —
|
|
59
|
+
✓ fuyyca project-a sample goal fo… 3h28m ≥$30.06
|
|
60
|
+
✗ — — analyze task o… 18m —
|
|
61
|
+
|
|
62
|
+
── Thu 17 Sep ──── 0 runs · 4 tasks · — · 4 unpriced ──
|
|
63
|
+
✗ — — build task on … 7m —
|
|
64
|
+
✓ — — build task on … 22m —
|
|
65
|
+
✓ — — build task on … 24m —
|
|
66
|
+
✓ — — build task on … 14m —
|
|
67
|
+
|
|
68
|
+
── Wed 16 Sep ──── 0 runs · 3 tasks · — · 3 unpriced ──
|
|
69
|
+
6 days loaded · older days load as you scroll
|
|
70
|
+
[Top] [End] [?.Help]
|
|
@@ -16,9 +16,9 @@
|
|
|
16
16
|
│ excepteur consequat ad ipsum deserunt labore irure do consequat…
|
|
17
17
|
│
|
|
18
18
|
│ [2m──[0m cost [2m─────────────────────────────────────────────────────────[0m
|
|
19
|
-
│ [2mAPI rate[0m [2m—[0m [2mno
|
|
20
|
-
│ [38;2;127;163;224mcodex[0m[2m plan[0m [2m—[0m [2mno
|
|
21
|
-
|
|
19
|
+
│ [2mAPI rate[0m [2m—[0m [2mno-rate-card[0m
|
|
20
|
+
│ [38;2;127;163;224mcodex[0m[2m plan[0m [2m—[0m [2mno API cost to price[0m
|
|
21
|
+
│ [1m$100/mo[22m · [2mweekly window[0m
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
|
|
@@ -18,8 +18,8 @@
|
|
|
18
18
|
commodo nulla tempor excepteur consequat ad ipsum…
|
|
19
19
|
|
|
20
20
|
[2m──[0m cost [2m───────────────────────────────────────────────[0m
|
|
21
|
-
[2mAPI rate[0m [2m—[0m [2mno
|
|
22
|
-
[38;2;127;163;224mcodex[0m[2m plan[0m [2m—[0m [2mno
|
|
21
|
+
[2mAPI rate[0m [2m—[0m [2mno-rate-card[0m
|
|
22
|
+
[38;2;127;163;224mcodex[0m[2m plan[0m [2m—[0m [2mno API cost[0m · [1m$100/mo[22m[2m weekly[0m
|
|
23
23
|
|
|
24
24
|
|
|
25
25
|
|
|
@@ -16,9 +16,9 @@
|
|
|
16
16
|
│ laborum sit et nostrud commodo nulla…
|
|
17
17
|
│
|
|
18
18
|
│ ── cost ────────────────────────────────
|
|
19
|
-
│ API rate — no
|
|
20
|
-
│ codex plan — no
|
|
21
|
-
|
|
19
|
+
│ API rate — no-rate-card
|
|
20
|
+
│ codex plan — no API cost to pri…
|
|
21
|
+
│ $100/mo · weekly window
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
|
|
@@ -16,9 +16,9 @@
|
|
|
16
16
|
│ excepteur consequat ad ipsum deserunt labore irure do consequat…
|
|
17
17
|
│
|
|
18
18
|
│ ── cost ─────────────────────────────────────────────────────────
|
|
19
|
-
│ API rate — no
|
|
20
|
-
│ codex plan — no
|
|
21
|
-
|
|
19
|
+
│ API rate — no-rate-card
|
|
20
|
+
│ codex plan — no API cost to price
|
|
21
|
+
│ $100/mo · weekly window
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
|
|
@@ -18,8 +18,8 @@
|
|
|
18
18
|
commodo nulla tempor excepteur consequat ad ipsum…
|
|
19
19
|
|
|
20
20
|
── cost ───────────────────────────────────────────────
|
|
21
|
-
API rate — no
|
|
22
|
-
codex plan — no
|
|
21
|
+
API rate — no-rate-card
|
|
22
|
+
codex plan — no API cost · $100/mo weekly
|
|
23
23
|
|
|
24
24
|
|
|
25
25
|
|
package/mods/bullswarm/README.md
CHANGED
|
@@ -9,10 +9,15 @@ counterpart: the strip is the run list, and the pane shows the dashboard's
|
|
|
9
9
|
**Run**, **Step**, and **Usage/Pools** view in the same meter colours. It does
|
|
10
10
|
not show the dashboard's **Home**, **Runs**, **Budget**, **Stats**, **History**,
|
|
11
11
|
**Fleet**, or **Help** pages, and deliberately exposes no `[edit]` or
|
|
12
|
-
`[install]` action. The pane's bottom row is `back` (on a step), the
|
|
13
|
-
buttons, `usage`, and `close`. Navigation matches the dashboard's mouse rules:
|
|
12
|
+
`[install]` action. The pane's bottom row is `back` (on a step), the workflow
|
|
13
|
+
and standalone-task buttons, `usage`, and `close`. Navigation matches the dashboard's mouse rules:
|
|
14
14
|
click any button, tab, run, or step, and use the wheel to scroll.
|
|
15
15
|
|
|
16
|
+
Workflow buttons keep their digit hotkeys. A standalone dispatch has its own
|
|
17
|
+
`task <8-character-tail>` button without taking a workflow digit; selecting it
|
|
18
|
+
opens that task, and `back` returns to the selected workflow. A task is promoted
|
|
19
|
+
automatically only when no workflow is in flight.
|
|
20
|
+
|
|
16
21
|
The pane's `usage` button is available even when no workflow is running, so it
|
|
17
22
|
always opens the read-only pools and rungs page. When the workflow list is
|
|
18
23
|
empty but a live `bullswarm run` assignment is present, the empty pane opens
|
|
@@ -33,7 +38,7 @@ What it adds beyond the packaged skill and the MCP server:
|
|
|
33
38
|
| `tool.call` on `Bash` | a `bullswarm run` / `bullswarm workflow goal` result gets the verdict appended in the doctrine's words |
|
|
34
39
|
| `command.run` `/bullswarm` | `pools`, `runs`, `pane`, `open <step> [run]`, `on`, `off`, `refresh`, `routed` |
|
|
35
40
|
| `ui.render` `AbovePrompt` | the strip: one header line (run count, dispatches in flight, `route off` when routing is off) with `[w]`, which opens or closes the runs pane; then one row per ongoing workflow run (progress, the step each pool is running with elapsed/expected minutes, the goal) and one per standalone dispatch; a digit in front of a run row opens that run. Routing and refresh are `/bullswarm on`, `off` and `refresh`. The `strip` option picks `runs` (default), `full` (pool meter rows too) or `off`. Nothing is pinned under the prompt |
|
|
36
|
-
| `ui.render` `Pane` + `ui.scroll` | the runs pane, docked beside the transcript. Fixed at the top: the run's header (with `first–last/total` while scrolled) and `[Top] [End]`. Fixed at the bottom: the pool rows, the page's hint line, then a button per
|
|
41
|
+
| `ui.render` `Pane` + `ui.scroll` | the runs pane, docked beside the transcript. Fixed at the top: the run's header (with `first–last/total` while scrolled) and `[Top] [End]`. Fixed at the bottom: the pool rows, the page's hint line, then a button per workflow and standalone task, `usage`, `close`. Under 20 body rows (a phone terminal, a short inline pane) the pane draws a compact layout: one header row, one nav row with `[Top] [End]` and no `close` (the frame's ✕ closes it), nothing else pinned; `ctrl+x up` grows an inline pane while it has focus. Between them the whole overview as `bullswarm workflow tui` draws it (Preflight with the accepted goal and the goal and plan files, every phase, Live workers with their latest activity, Next) from `bullswarm workflow tui <id> --overview`, with the pool meters last (each bar carries a white mark where the window's elapsed time falls, in the status line's colours). `Pools ▸` opens a pools page: every meter window of every pool as a full-width bar with reset time and pace, the credit meter where there is one, and the rungs (model, reasoning and record per pool × tier) grouped by lane or by provider with two tabs; read-only, `back` returns even when no workflow is running. The mod owns that window: the wheel over the pane, and arrows, PgUp/PgDn, Home/End once the pane has focus (click it), move the middle only. Every workflow step row opens the dashboard's finished Step v2 grammar from the rich `step` object in `bullswarm workflow action show <run> <step> --json`; a task button reads the same model from `bullswarm workflow task show <taskId> --json`. Both show one verdict header with the visible `overview · detail` toggle; the latest 10 turns (5 below 100 columns) and its `click for detail` fold line; the full turn-and-tool transcript in detail; structured result, task facts, and the dashboard cost rows. Phone order is result → activity → task → cost. The mod maps good/running/failure, dim, bold and pool-series roles onto its meter palette. `v` toggles the view, clicking either top tab selects it, and clicking expands overview turns. If the task JSON read fails, the honest unavailable fallback remains. The frame is re-read every 20 s while work is in flight. |
|
|
37
42
|
| `tool.call` `mcp__bullswarm__route` | a tool the mod registers so the model can switch auto-routing on or off when the person asks ("stop routing my subagents"); the same switch as `/bullswarm on|off` |
|
|
38
43
|
| `ui.close` | keeps the strip's `[w]` label in step when the person closes the pane |
|
|
39
44
|
|
|
@@ -14,7 +14,7 @@ import type {
|
|
|
14
14
|
} from '../types'
|
|
15
15
|
import type { OverviewLine } from './overview'
|
|
16
16
|
import { METER_AMBER, METER_GREEN, METER_RED, meterBar, poolRows, severityColor } from './pool-rows'
|
|
17
|
-
import { ageOf } from './runs'
|
|
17
|
+
import { ageOf, standaloneTasks } from './runs'
|
|
18
18
|
import { shapeStep, taskStepPane, type StepMode, type StepPaneRow } from './step'
|
|
19
19
|
|
|
20
20
|
export type PaneUi = Pick<ElementTable<'terminal' | 'desktop'>, 'Box' | 'Text' | 'Button'>
|
|
@@ -22,6 +22,8 @@ export type PaneUi = Pick<ElementTable<'terminal' | 'desktop'>, 'Box' | 'Text' |
|
|
|
22
22
|
export type PaneModel = {
|
|
23
23
|
runs: readonly BullswarmRun[]
|
|
24
24
|
selected: BullswarmRun | null
|
|
25
|
+
/** The standalone task explicitly selected, or promoted because no workflow exists. */
|
|
26
|
+
selectedTask: BullswarmAssignment | null
|
|
25
27
|
overview: readonly OverviewLine[] | null
|
|
26
28
|
detail: BullswarmRunDetail | null
|
|
27
29
|
/** The action the person opened, when one is open. */
|
|
@@ -62,6 +64,7 @@ export type PaneScroll = {
|
|
|
62
64
|
|
|
63
65
|
export type PaneActions = {
|
|
64
66
|
select: (shortId: string) => void
|
|
67
|
+
selectTask: (taskId: string) => void
|
|
65
68
|
openAction: (actionId: string) => void
|
|
66
69
|
/** Optional until the host wires the pane's v/Enter controls to state. */
|
|
67
70
|
toggleStep?: () => void
|
|
@@ -125,9 +128,6 @@ const assignmentWork = (a: BullswarmAssignment): string => {
|
|
|
125
128
|
return value ? pathTail(value) : 'task unavailable'
|
|
126
129
|
}
|
|
127
130
|
|
|
128
|
-
const standaloneTask = (assignments: readonly BullswarmAssignment[]): BullswarmAssignment | null =>
|
|
129
|
-
assignments.find(a => a.source === 'run') ?? null
|
|
130
|
-
|
|
131
131
|
/** Greedy word wrap to `width` cells, one string per row; long words are cut. */
|
|
132
132
|
export function wrapText(text: string, width: number): string[] {
|
|
133
133
|
const w = Math.max(8, width)
|
|
@@ -177,7 +177,7 @@ export function paneView(
|
|
|
177
177
|
const run = model.selected
|
|
178
178
|
const rule = '─'.repeat(Math.max(1, Math.min(kit.columns, 120)))
|
|
179
179
|
const nameOf = (pool: string | null) => (pool ? (model.names.get(pool) ?? pool) : '')
|
|
180
|
-
const looseTask =
|
|
180
|
+
const looseTask = model.selectedTask
|
|
181
181
|
|
|
182
182
|
// Compact: a phone terminal or a short inline pane. One header row, one
|
|
183
183
|
// nav row with [Top] [End] beside it and no [close] (the frame's ✕ does
|
|
@@ -192,7 +192,13 @@ export function paneView(
|
|
|
192
192
|
onPress={() => actions.select(r.shortId)}
|
|
193
193
|
/>
|
|
194
194
|
))
|
|
195
|
-
const
|
|
195
|
+
const taskButtons = standaloneTasks(model.assignments).map(task => {
|
|
196
|
+
const id = task.id!
|
|
197
|
+
const tail = id.length > 8 ? id.slice(-8) : id
|
|
198
|
+
const active = looseTask && (looseTask as AssignmentRecord).id === id && !model.poolsPage
|
|
199
|
+
return <Button key={`task-${id}`} label={`${active ? '● ' : ''}task ${tail}`} onPress={() => actions.selectTask(id)} />
|
|
200
|
+
})
|
|
201
|
+
const backButton = model.action || model.poolsPage || looseTask
|
|
196
202
|
? <Button key="back" hotkey="b" label="back" onPress={actions.back} />
|
|
197
203
|
: null
|
|
198
204
|
const usageButton = (
|
|
@@ -203,6 +209,7 @@ export function paneView(
|
|
|
203
209
|
<Box key="switcher" flexDirection="row" gap={1} flexWrap="nowrap" overflow="hidden">
|
|
204
210
|
{backButton}
|
|
205
211
|
{runButtons}
|
|
212
|
+
{taskButtons}
|
|
206
213
|
{usageButton}
|
|
207
214
|
<Button key="top" plain label="[Top]" onPress={() => actions.scrollTo('start')} />
|
|
208
215
|
<Button key="end" plain label="[End]" onPress={() => actions.scrollTo('end')} />
|
|
@@ -211,6 +218,7 @@ export function paneView(
|
|
|
211
218
|
<Box key="switcher" flexDirection="row" gap={1} flexWrap="nowrap" overflow="hidden">
|
|
212
219
|
{backButton}
|
|
213
220
|
{runButtons}
|
|
221
|
+
{taskButtons}
|
|
214
222
|
{usageButton}
|
|
215
223
|
{closeButton}
|
|
216
224
|
</Box>
|
|
@@ -392,7 +400,6 @@ export function paneView(
|
|
|
392
400
|
<Button
|
|
393
401
|
key={entry.key}
|
|
394
402
|
plain
|
|
395
|
-
hotkey={entry.turnIndex === 0 ? 'enter' : undefined}
|
|
396
403
|
label={first ?? entry.text}
|
|
397
404
|
onPress={() => entry.turnIndex === undefined ? undefined : actions.expandStepTurn?.(entry.turnIndex)}
|
|
398
405
|
/>,
|
|
@@ -411,7 +418,12 @@ export function paneView(
|
|
|
411
418
|
if (!compact) header.push(nav)
|
|
412
419
|
if (model.error) header.push(plain('err', model.error, 'red'))
|
|
413
420
|
// The hint sits whole above the nav, as the usage page's note does.
|
|
414
|
-
const
|
|
421
|
+
const hintText = looseTask
|
|
422
|
+
? `bullswarm workflow task show ${(looseTask as AssignmentRecord).id ?? a.id} · read-only Step view`
|
|
423
|
+
: shaped.runId
|
|
424
|
+
? `bullswarm workflow action show ${shaped.runId} ${a.id}`
|
|
425
|
+
: 'bullswarm run task · read-only Step view'
|
|
426
|
+
const hint = wrapText(hintText, width)
|
|
415
427
|
const stepModeButton = (
|
|
416
428
|
<Button
|
|
417
429
|
key="step-mode"
|