bullswarm 0.27.0 → 0.27.1
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 +89 -0
- package/GOAL.md +3 -1
- package/README.md +13 -14
- package/data/README.md +8 -3
- package/docs/audits/2026-09-09-codebase-audit.md +1718 -0
- package/docs/claude-dynamic-workflow-mechanics.md +9 -5
- package/docs/design/2026-09-06-caller-first-cli.md +2 -0
- package/docs/dynamic-workflow-qa.md +2 -0
- package/docs/dynamic-workflow-v2-execution-plan.md +2 -0
- package/docs/experiments/2026-08-28-trending-ai-autonomy.md +2 -0
- package/docs/experiments/2026-08-29-dogfood-bullswarm-builds-bullswarm.md +2 -0
- package/docs/experiments/2026-08-29-ultracode-vs-bullswarm.md +2 -0
- package/docs/experiments/2026-08-31-v2-component-probes.md +2 -0
- package/docs/experiments/2026-09-06-caller-planner-evaluation.md +2 -0
- package/docs/integration-audit-2026-08-31.md +2 -0
- package/docs/planner-prompt-audit-2026-08-29.md +2 -0
- package/docs/workflow-agent-usability-audit-2026-08-27.md +2 -0
- package/fixtures/failures/late-failure.json +6 -0
- package/fixtures/failures/structured-error.json +6 -0
- package/package.json +1 -1
- package/skill/SKILL.md +6 -1
- package/skill/references/operations.md +8 -3
- package/src/cli.js +149 -53
- package/src/help.js +35 -12
- package/src/lib/agent-events.js +0 -56
- package/src/lib/assignments.js +1 -1
- package/src/lib/cli-flags.js +212 -0
- package/src/lib/config.js +24 -9
- package/src/lib/epoch-benchmarks.js +5 -6
- package/src/{workflow → lib}/fsjson.js +5 -0
- package/src/lib/num.js +31 -0
- package/src/lib/openrouter-models.js +17 -13
- package/src/lib/quota.js +28 -25
- package/src/lib/route.js +46 -28
- package/src/lib/spend.js +12 -9
- package/src/lib/state.js +98 -3
- package/src/lib/strategy.js +71 -10
- package/src/lib/usage.js +0 -50
- package/src/lib/verify.js +39 -11
- package/src/meters/framework.js +4 -7
- package/src/setup.js +76 -55
- package/src/strategy-cli.js +232 -164
- package/src/strategy-dashboard.js +35 -28
- package/src/workflow/cli.js +47 -8
- package/src/workflow/dashboard.js +7 -4
- package/src/workflow/evidence-output.js +0 -21
- package/src/workflow/ownership.js +0 -2
- package/src/workflow/runs-cli.js +67 -10
- package/src/workflow/short-id.js +15 -1
- package/src/workflow/v2-dispatch.js +30 -14
- package/src/workflow/v2-runtime.js +1 -4
- package/src/workflow/v2-scheduler.js +0 -4
- package/src/workflow/v2-state.js +0 -4
- package/src/workflow/watch-cli.js +13 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,94 @@
|
|
|
1
1
|
# bullswarm changelog
|
|
2
2
|
|
|
3
|
+
## 0.27.1 — audit cleanup
|
|
4
|
+
|
|
5
|
+
- Deleted the remaining dead symbols the 2026-09-09 audit listed as Tier A:
|
|
6
|
+
`recordAgentAction` and `classifyAgentProgress`, `aggregateUsage`,
|
|
7
|
+
`parseEvidenceOutput`, `fiveHourTier`, `REASONING_DEFAULT_TIERS`, the twelve
|
|
8
|
+
alias re-exports around `runAutonomousV2` /
|
|
9
|
+
`assertV2ResumeCompatible` / `validateEvidenceEnvelope`, and
|
|
10
|
+
`integrationBlock`. `'workflow-v1'` is no longer an assignment source.
|
|
11
|
+
`currentUsedPct` no longer reads a `weeklyUsedPct` field no producer writes,
|
|
12
|
+
and the identical `--json` ternary in `strategy-cli` collapsed to one
|
|
13
|
+
`JSON.stringify`. `fixtures/openrouter/` stays; a new
|
|
14
|
+
`tests/refresh-openrouter-benchmarks.test.js` runs the refresh script against
|
|
15
|
+
those fixtures instead of deleting them.
|
|
16
|
+
|
|
17
|
+
- `state.json` is no longer last-writer-wins (D5). EVERY state writer goes
|
|
18
|
+
through one locked read-modify-write — take `state.lock`, reload FRESH,
|
|
19
|
+
mutate, atomically replace the file, release. That is `run`, `pools`,
|
|
20
|
+
`health` and the fixture migration plus the twenty-two remaining
|
|
21
|
+
load-mutate-save sites: fifteen in `strategy-cli` (set-rung, set-model,
|
|
22
|
+
reset-tier, set/reset-reasoning, configure, apply, auto off, assign,
|
|
23
|
+
clear-assignment, exclude/include-model, set-subscription and the persisted
|
|
24
|
+
refresh report), three in the strategy TUI, and four in `setup`
|
|
25
|
+
(`setup --yes`, both writing steps of the wizard, and the reasoning step).
|
|
26
|
+
`grep -n 'saveState(' src/` now finds only `src/lib/state.js`, which defines
|
|
27
|
+
it and calls it once, inside `updateState`. Waiters retry for 10 s and a lock
|
|
28
|
+
older than 30 s is taken over so a killed process cannot bench the file
|
|
29
|
+
forever. `run --dry-run` no longer refreshes strategy or hits the network
|
|
30
|
+
(D3). The fixture migration no longer force-disables a pool the operator
|
|
31
|
+
explicitly enabled (D1). Disabled pools are no longer polled (D6). When every
|
|
32
|
+
lane-capable pool was dropped by an empty tier allow-list, the routing reason
|
|
33
|
+
now says so instead of blaming missing capabilities (D7). `pools`, `health`
|
|
34
|
+
and `run --dry-run` leave `state.json` byte-for-byte alone when they have
|
|
35
|
+
nothing to change. `src/workflow/fsjson.js` — the re-export shim that carried
|
|
36
|
+
the workflow importers through the move of the atomic writer into
|
|
37
|
+
`src/lib/fsjson.js` — is deleted; both layers import `src/lib/fsjson.js`
|
|
38
|
+
directly.
|
|
39
|
+
|
|
40
|
+
- The content gate no longer treats an error-shaped JSON object as an answer,
|
|
41
|
+
and long outputs are scanned at both the head and the tail for failure
|
|
42
|
+
patterns.
|
|
43
|
+
|
|
44
|
+
- An unrecognized `--flag` is a usage error on every command: Bullswarm prints
|
|
45
|
+
`unknown flag --name` plus that command's synopsis and exits 2, before
|
|
46
|
+
self-initializing, routing, or spawning anything. `--lane` is required on
|
|
47
|
+
`run` (omitting it, or passing anything else, exits 2). `--limit` on
|
|
48
|
+
`workflow runs` must be a positive integer. `health --json` now selects the
|
|
49
|
+
machine-readable report; the default is a human summary of the same facts.
|
|
50
|
+
Help for `run --no-caller`, the always-JSON verbs, and the plan-contract /
|
|
51
|
+
plan-validate worker flags matches what the parsers actually accept.
|
|
52
|
+
|
|
53
|
+
- A dead kernel is visible: `watch`, `runs show`, `runs result --json`, and the
|
|
54
|
+
TUI surface the last 20 lines of `stderr.log` instead of a silent stall.
|
|
55
|
+
|
|
56
|
+
- Four small refactors from the audit's C1–C4 list: `TIER_LANES` is derived
|
|
57
|
+
from the 0.26 kind/effort tables so the strategy preview cannot disagree with
|
|
58
|
+
the validator; `clearTierAssignment` is the one writer of a cleared tier pin;
|
|
59
|
+
`finiteOrNull` is the one numeric coercion (blank/null prices and scores stay
|
|
60
|
+
unmeasured instead of becoming 0); quota signatures live in one table.
|
|
61
|
+
|
|
62
|
+
- The OpenRouter datapack no longer pretends to have a bundled last-resort
|
|
63
|
+
file. Loaders try `~/.bullswarm/cache/` then the rolling GitHub Release; a
|
|
64
|
+
cache miss with no network yields an empty catalog. Epoch still ships
|
|
65
|
+
`data/epoch-benchmarks.json`.
|
|
66
|
+
|
|
67
|
+
- Documentation made true: README no longer lists `runs cleanup`; bare
|
|
68
|
+
`bullswarm` is a TTY wizard and non-TTY callers self-initialize; the
|
|
69
|
+
OpenRouter/Epoch datapack fallback is described as it actually works; the
|
|
70
|
+
duplicated planning-targets paragraph appears once; `--name` is an exact
|
|
71
|
+
goal/name filter; `--classic` is V2-only and legacy watch exits 2;
|
|
72
|
+
`workflow-v1` is gone from the skill; `workflow goal` is no longer described
|
|
73
|
+
as an LLM-at-every-checkpoint loop; `delegate` is marked historical in the
|
|
74
|
+
2026-09-06 design note; GOAL.md and the ten dated `docs/` files that needed
|
|
75
|
+
a banner carry one.
|
|
76
|
+
|
|
77
|
+
- Tests: 661 -> 713, 0 failures. Eight new files carry the new behaviour:
|
|
78
|
+
`unknown-flags` (11 — one bogus flag per parser, the two typed inputs, and a
|
|
79
|
+
drift guard that re-extracts every documented command form), `cli-run` (6 —
|
|
80
|
+
the D3/D1/D7 CLI contracts), `config` (5 — D6), `num` (4 — strict
|
|
81
|
+
`finiteOrNull`), `workflow-dead-kernel` (4), `state-race` (1 — an operator
|
|
82
|
+
write during a live run), `state-lock-sites` (3 — two real `strategy`
|
|
83
|
+
processes racing one home, four issued at once, and a `configure` document
|
|
84
|
+
that throws mid-mutation, writing nothing and freeing the lock) and
|
|
85
|
+
`refresh-openrouter-benchmarks` (1 — the refresh script against
|
|
86
|
+
`fixtures/openrouter/`). Existing files lost the
|
|
87
|
+
cases that only covered deleted symbols (`agent-events` 19 -> 13, and the
|
|
88
|
+
`fiveHourTier` case in `route`, which kept its
|
|
89
|
+
`FIVE_HOUR_NEAR_LIMIT_PCT === 75` assertion) and gained coverage for the
|
|
90
|
+
locked state writers, the fixture-migration rule, and the content gate.
|
|
91
|
+
|
|
3
92
|
## 0.27.0 — one workflow engine
|
|
4
93
|
|
|
5
94
|
- Fixed: a worker that floods its stdout could kill the kernel. Every chunk of a
|
package/GOAL.md
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
# bullswarm — Goal Statement
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
> Historical (2026-08-21): accurate when written; see CHANGELOG for what changed since.
|
|
4
|
+
|
|
5
|
+
**Status:** HISTORICAL PROTOTYPE CHARTER · **Owner:** cowcow02 · **Created:** 2026-08-21
|
|
4
6
|
|
|
5
7
|
## One sentence
|
|
6
8
|
|
package/README.md
CHANGED
|
@@ -88,7 +88,7 @@ re-delegating and creating recursive swarms.
|
|
|
88
88
|
## Quick start
|
|
89
89
|
|
|
90
90
|
```bash
|
|
91
|
-
bullswarm # first run: interactive setup wizard
|
|
91
|
+
bullswarm # first run: interactive setup wizard on a TTY; non-TTY callers self-initialize
|
|
92
92
|
bullswarm setup # interactive provider/model configuration
|
|
93
93
|
bullswarm setup --wizard # broader worktree + integration questionnaire
|
|
94
94
|
bullswarm pools # meter state, pace position, quarantine status
|
|
@@ -98,7 +98,7 @@ bullswarm run --lane analyze --add-dir ~/some-repo --prompt "Inspect the parser"
|
|
|
98
98
|
bullswarm workflow plan contract "Fix the failing tests and verify the change" --cwd ~/some-repo --json # you are the planner
|
|
99
99
|
bullswarm workflow goal "Fix the failing tests and verify the change" --cwd ~/some-repo --program plan.json
|
|
100
100
|
bullswarm workflow goal "Fix the failing tests and verify the change" --cwd ~/some-repo --orchestrator auto # dispatch a planner agent
|
|
101
|
-
bullswarm health # re-judge saved outputs; catch gate failures
|
|
101
|
+
bullswarm health --json # re-judge saved outputs; catch gate failures (omit --json for a human summary)
|
|
102
102
|
```
|
|
103
103
|
|
|
104
104
|
## Verbs
|
|
@@ -113,7 +113,7 @@ bullswarm health # re-judge saved outputs; catch gate failures
|
|
|
113
113
|
| `strategy` | Interactive provider/model control center with live high/medium/low route previews and an agent-facing JSON API |
|
|
114
114
|
| `doctor` | Machine-readable readiness report; self-heals on first call |
|
|
115
115
|
| `workflow` | Plan, execute, observe, and operate one autonomous workflow engine and its live instances. |
|
|
116
|
-
| `runs` | Short alias for `workflow runs`, including list, show, result,
|
|
116
|
+
| `runs` | Short alias for `workflow runs`, including list, show, result, and delete operations. |
|
|
117
117
|
| `version` / `--version` | Print the installed Bullswarm version. |
|
|
118
118
|
| `release` | Run the guarded local version-bump, commit, and tag workflow used before CI publishes to npm. |
|
|
119
119
|
|
|
@@ -203,9 +203,12 @@ Installed CLIs download only those public files and never need or receive an
|
|
|
203
203
|
OpenRouter key.
|
|
204
204
|
The sources are OpenRouter's [benchmarks API](https://openrouter.ai/docs/api/api-reference/benchmarks/list-benchmarks)
|
|
205
205
|
and [models API](https://openrouter.ai/docs/api/api-reference/models/list-all-models-and-their-properties).
|
|
206
|
-
The CLI caches
|
|
207
|
-
|
|
208
|
-
|
|
206
|
+
The CLI caches each datapack under `~/.bullswarm/cache/`. OpenRouter is
|
|
207
|
+
cache-or-network only: a fresh cache is used as-is, otherwise the rolling
|
|
208
|
+
release is fetched, and a cache miss with no network yields an empty catalog
|
|
209
|
+
plus connector metadata — there is no bundled `data/openrouter-benchmarks.json`.
|
|
210
|
+
Epoch keeps `data/epoch-benchmarks.json` as a bundled last-resort, so a missing
|
|
211
|
+
network never blocks setup when that file exists.
|
|
209
212
|
|
|
210
213
|
The TUI lists every detected provider/account separately so its toggle matches
|
|
211
214
|
its own quota meter. Enter drills into that provider's detected models. In the
|
|
@@ -343,7 +346,9 @@ caller asks for it by name.
|
|
|
343
346
|
planning targets. They encourage the Workflow Planner to consolidate optional
|
|
344
347
|
work, but the kernel never stops or rejects essential work merely because a
|
|
345
348
|
target was reached. `--concurrency` still bounds simultaneous dispatches so
|
|
346
|
-
the scheduler can batch a wider useful program safely.
|
|
349
|
+
the scheduler can batch a wider useful program safely. There is no default
|
|
350
|
+
wall-clock timeout: fresh semantic/transport heartbeats allow a useful worker
|
|
351
|
+
to continue, while silence is inspected rather than blindly killed.
|
|
347
352
|
|
|
348
353
|
The caller authors a complete program, or explicitly asks for a dispatched
|
|
349
354
|
planner. The kernel validates the graph, executes it, and returns every action
|
|
@@ -502,12 +507,6 @@ per provider — the first as the primary `opencode2` pool, each additional one
|
|
|
502
507
|
as its own `opencode2:<id>` pool — which is what the `--worker-model
|
|
503
508
|
kaihk/gpt-5.6-luna` example above locks onto.
|
|
504
509
|
|
|
505
|
-
`--max-agents`, `--max-actions`, and `--max-expansion-rounds` are soft V2
|
|
506
|
-
planning targets: they guide the planner toward a small program but do not
|
|
507
|
-
hard-stop useful work. `--concurrency` is the actual bound on simultaneous
|
|
508
|
-
dependency-ready dispatches. There is no default wall-clock timeout: fresh
|
|
509
|
-
semantic/transport heartbeats allow a useful worker to continue, while silence
|
|
510
|
-
is inspected rather than blindly killed.
|
|
511
510
|
New goal runs use the shared workspace regardless of the older setup
|
|
512
511
|
worktree-isolation preference. Add `--isolation` to `workflow goal` when you
|
|
513
512
|
explicitly want per-worker worktrees and strict ownership before integration.
|
|
@@ -569,7 +568,7 @@ no `0/1/i/l/o`). The full `wf-...` runId stays the durable handle.
|
|
|
569
568
|
bullswarm workflow runs # ongoing only (default)
|
|
570
569
|
bullswarm workflow runs --all # ongoing + historical
|
|
571
570
|
bullswarm workflow runs --historical # only historical
|
|
572
|
-
bullswarm workflow runs --name audit-code # filter by
|
|
571
|
+
bullswarm workflow runs --name audit-code # filter by exact goal/name
|
|
573
572
|
bullswarm workflow runs --all --since 7d # initiated in the last 7 days
|
|
574
573
|
bullswarm workflow runs --historical --since yesterday --until today
|
|
575
574
|
bullswarm workflow runs --all --from 2026-08-20 --to 2026-08-27
|
package/data/README.md
CHANGED
|
@@ -7,9 +7,14 @@ secrets and are never written here or shipped with the CLI.
|
|
|
7
7
|
Both datapacks are published as replaceable assets on the
|
|
8
8
|
`benchmark-data-latest` GitHub Release by
|
|
9
9
|
`.github/workflows/refresh-benchmarks.yml`. Installed CLIs try
|
|
10
|
-
`~/.bullswarm/cache/` first, then
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
`~/.bullswarm/cache/` first, then that release URL.
|
|
11
|
+
|
|
12
|
+
OpenRouter is cache-or-network only: there is no bundled
|
|
13
|
+
`data/openrouter-benchmarks.json`. A cache miss with no network yields an
|
|
14
|
+
empty catalog (and connector metadata), and never blocks setup.
|
|
15
|
+
|
|
16
|
+
Epoch keeps `data/epoch-benchmarks.json` as a bundled last-resort, so a
|
|
17
|
+
missing network never blocks setup when that file exists.
|
|
13
18
|
|
|
14
19
|
## `openrouter-benchmarks.json`
|
|
15
20
|
|