bullswarm 0.28.1 → 0.28.2
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 +62 -0
- package/README.md +32 -0
- package/data/openrouter-benchmarks.json +10416 -10292
- package/package.json +1 -1
- package/src/cli.js +6 -2
- package/src/lib/glyphs.js +104 -0
- package/src/strategy-dashboard.js +6 -5
- package/src/workflow/dashboard.js +33 -33
- package/src/workflow/watch-cli.js +23 -22
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,67 @@
|
|
|
1
1
|
# bullswarm changelog
|
|
2
2
|
|
|
3
|
+
## 0.28.2 — terminal glyph fallback, issue watcher, health on a fresh home
|
|
4
|
+
|
|
5
|
+
- `bullswarm workflow` repainted flashing `?` characters on macOS
|
|
6
|
+
Terminal.app. Cause is font coverage, not encoding: parsing the `cmap` of
|
|
7
|
+
every monospace face Terminal.app offers shows **zero** glyphs in the
|
|
8
|
+
Braille block `U+2800-U+28FF` — Andale Mono, Menlo, SF Mono, Monaco and
|
|
9
|
+
Courier New are all 0/256 — and none of the five has `⧖` (`U+29D6`) or `⟡`
|
|
10
|
+
(`U+27E1`). The dashboard's 10-frame Braille spinner advances every 400ms,
|
|
11
|
+
so every repaint drew a question mark that flashed; the static `✓ ✗ ⊘ ◇ ↳
|
|
12
|
+
⚠ ● ○ ■ ♡ ◆ ↻ ↺ ▶ ⚙` icons beside it were the steady ones. Terminal.app
|
|
13
|
+
does not substitute another face for these ranges.
|
|
14
|
+
- New `src/lib/glyphs.js` holds one table per mode and the detection order:
|
|
15
|
+
`BULLSWARM_ASCII` forces ASCII, `BULLSWARM_UNICODE` forces Unicode and
|
|
16
|
+
overrides detection, then a non-UTF-8 locale, `TERM=dumb`/`TERM=linux`, and
|
|
17
|
+
`TERM_PROGRAM=Apple_Terminal` select ASCII. Every replacement is one column
|
|
18
|
+
of printable ASCII, because panel width maths uses `String#length` and a
|
|
19
|
+
wide substitute would shear the borders. Box drawing, `· › × … ≈ ≥ █` are in
|
|
20
|
+
all five fonts and are left alone, so panels keep their borders.
|
|
21
|
+
- Wired through the three live-refreshing renderers only:
|
|
22
|
+
`src/workflow/dashboard.js`, `src/workflow/watch-cli.js` and
|
|
23
|
+
`src/strategy-dashboard.js`. One-shot `✓`/`✗` message prefixes in
|
|
24
|
+
`src/workflow/cli.js`, `src/help.js`, `src/integrate.js`,
|
|
25
|
+
`src/workflow/runs-cli.js`, `src/strategy-cli.js` and
|
|
26
|
+
`src/lib/cli-flags.js` are untouched — they do not flash and are a separate
|
|
27
|
+
change.
|
|
28
|
+
- `spinnerGlyph` now parks a non-finite frame counter on frame 0. The previous
|
|
29
|
+
expression `SPINNER_FRAMES[Math.abs(Number(f) || 0) % SPINNER_FRAMES.length]`
|
|
30
|
+
returned `undefined` for `Infinity`, so a repaint could have painted the
|
|
31
|
+
string "undefined" into the frame.
|
|
32
|
+
- `tests/glyphs.test.js` covers the detection matrix (including that `''`,
|
|
33
|
+
`'0'` and `'false'` do not switch tables, and that `LC_ALL` outranks
|
|
34
|
+
`LANG`), asserts every Unicode entry has a one-column pure-ASCII twin that
|
|
35
|
+
is never `?`, and renders both dashboards, `renderWatchSnapshot`,
|
|
36
|
+
`renderWatchEvent` over 15 event shapes and `renderAnalysisProgress` at five
|
|
37
|
+
spinner frames, asserting no substituted glyph survives in ASCII mode while
|
|
38
|
+
the Braille spinner still appears in Unicode mode.
|
|
39
|
+
- `tests/strategy-cli.test.js`, `tests/workflow-dashboard.test.js` and
|
|
40
|
+
`tests/workflow-watch.test.js` assert the Unicode presentation, so they now
|
|
41
|
+
pin `BULLSWARM_UNICODE=1` and `delete process.env.BULLSWARM_ASCII`; without
|
|
42
|
+
the pin the suite's own output depended on which terminal the developer ran
|
|
43
|
+
it in, and without the delete an ambient `BULLSWARM_ASCII=1` — the very
|
|
44
|
+
workaround the README hands an affected user — outranked the pin and broke
|
|
45
|
+
22 tests.
|
|
46
|
+
- The four arrows `↑ ↓ ← →` are deliberately not substituted. They are only
|
|
47
|
+
missing from Monaco, and they live in the frozen `DASHBOARD_KEYS` constant,
|
|
48
|
+
which binds at import time — before any env pin could apply.
|
|
49
|
+
- `scripts/issue-watcher/` — a durable GitHub issue watcher for this
|
|
50
|
+
repository, installed as a launchd agent
|
|
51
|
+
(`node scripts/issue-watcher/install.mjs`). Idle costs ZERO model tokens:
|
|
52
|
+
a pass is one `gh issue list` and nothing else. Only when an issue appears
|
|
53
|
+
that is new since install does it delegate — one
|
|
54
|
+
`bullswarm run --lane analyze` to triage (label + plain-words comment),
|
|
55
|
+
and for a bug it judged fixable at confidence >= 0.7 one
|
|
56
|
+
`bullswarm run --lane build` to fix, which the watcher then verifies
|
|
57
|
+
itself (test suite green in its own clone, diff non-empty) before pushing
|
|
58
|
+
`fix/issue-<n>` and opening a pull request. Both delegations run on the
|
|
59
|
+
owner's subscriptions through normal bullswarm routing, never API tokens.
|
|
60
|
+
Capped at 6 triages and 2 fix attempts per UTC day, one fix attempt per
|
|
61
|
+
issue; guarded by a pass lock, a `paused` file, and a 3-attempt triage
|
|
62
|
+
retry cap. Delegates get no GitHub credentials and issue text is quoted as
|
|
63
|
+
untrusted data. It never merges, closes, or releases — a maintainer does.
|
|
64
|
+
|
|
3
65
|
## 0.28.1 — summary bytes on the wire, monthly pacing
|
|
4
66
|
|
|
5
67
|
- `workflow runs result <id> --summary` was budgeted by `fitResultSummary`
|
package/README.md
CHANGED
|
@@ -800,6 +800,25 @@ to toggle Timeline and Phases, then use Enter/Esc for agents and activity.
|
|
|
800
800
|
bullswarm workflow tui
|
|
801
801
|
```
|
|
802
802
|
|
|
803
|
+
#### Terminal glyphs
|
|
804
|
+
|
|
805
|
+
The live views draw a Braille spinner and symbol status icons. macOS
|
|
806
|
+
Terminal.app cannot render them: Andale Mono, Menlo, SF Mono, Monaco and
|
|
807
|
+
Courier New all have zero glyphs in `U+2800-U+28FF`, and none has `⧖`, so the
|
|
808
|
+
dashboard repaints a flashing `?` where each one should be. Apple Terminal is
|
|
809
|
+
detected and given a one-column ASCII table instead (`|/-\` spinner, `+`
|
|
810
|
+
succeeded, `x` failed, `:` waiting, `#` blocked). Panel borders are unchanged —
|
|
811
|
+
box drawing is present in every one of those fonts.
|
|
812
|
+
|
|
813
|
+
Override the detection either way:
|
|
814
|
+
|
|
815
|
+
```bash
|
|
816
|
+
BULLSWARM_ASCII=1 bullswarm workflow # force ascii (any terminal showing ?)
|
|
817
|
+
BULLSWARM_UNICODE=1 bullswarm workflow # force unicode (font does have them)
|
|
818
|
+
```
|
|
819
|
+
|
|
820
|
+
A non-UTF-8 locale, `TERM=dumb` and `TERM=linux` also select ASCII.
|
|
821
|
+
|
|
803
822
|
The same dashboard is agent-friendly and never requires a TTY when used with
|
|
804
823
|
JSON/control flags:
|
|
805
824
|
|
|
@@ -888,6 +907,19 @@ runtime value and uses its matching connector rate metadata for the attempt's
|
|
|
888
907
|
cost estimate. Unknown or provider-hidden model identity remains explicitly
|
|
889
908
|
unknown.
|
|
890
909
|
|
|
910
|
+
## Repository operations
|
|
911
|
+
|
|
912
|
+
`scripts/issue-watcher/` is a launchd agent that watches this repository's
|
|
913
|
+
GitHub issues. Idle it costs zero model tokens — a pass is one `gh issue
|
|
914
|
+
list` and nothing else. When an issue arrives that is new since install, it
|
|
915
|
+
delegates one analyze run to triage it (label plus a plain-words comment),
|
|
916
|
+
and for a bug it judged fixable at confidence >= 0.7 one build run to fix
|
|
917
|
+
it, verifying the result itself (suite green in its own clone, diff
|
|
918
|
+
non-empty) before pushing `fix/issue-<n>` and opening a pull request. Both
|
|
919
|
+
delegations route through `bullswarm run` on the owner's subscriptions. It
|
|
920
|
+
never merges, closes, or releases. Install, guards, cost model and paths:
|
|
921
|
+
[`scripts/issue-watcher/README.md`](scripts/issue-watcher/README.md).
|
|
922
|
+
|
|
891
923
|
## The verdict
|
|
892
924
|
|
|
893
925
|
```json
|