bullswarm 0.22.0 → 0.23.0

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 CHANGED
@@ -1,5 +1,17 @@
1
1
  # bullswarm changelog
2
2
 
3
+ ## 0.22.1 — unified workflow dashboard navigation
4
+
5
+ - The workflow dashboard now keeps V2 runs in the unified list and timeline
6
+ shell on both desktop and narrow terminals, with stable mobile borders and
7
+ the same phase-segmented timeline for current and historical runs.
8
+
9
+ - Timeline phases are numbered and presented in declared program order, so
10
+ parallel workers finishing out of order cannot place Phase 2 above Phase 1.
11
+ Preflight is selectable and opens the Workflow Planner; Up and Down move
12
+ through Preflight, Phase 1, Phase 2, and later phases, while Enter or Right
13
+ opens the selected planner or phase agents.
14
+
3
15
  ## 0.22.0 — autonomous Dynamic Workflow V2
4
16
 
5
17
  - Autonomous goals now run on the V2 kernel: agents propose bounded programs
package/README.md CHANGED
@@ -70,9 +70,10 @@ re-delegating and creating recursive swarms.
70
70
 
71
71
  ```bash
72
72
  bullswarm # first run: interactive setup wizard
73
- bullswarm setup # re-run or repair
73
+ bullswarm setup # interactive provider/model configuration
74
+ bullswarm setup --wizard # broader worktree + integration questionnaire
74
75
  bullswarm pools # meter state, pace position, quarantine status
75
- bullswarm strategy refresh --apply --yes # approve capability-aware tier autopilot
76
+ bullswarm strategy # explicit alias for the same routing control center
76
77
  bullswarm delegate --cwd ~/some-repo --prompt "Explain the parser" # one agent
77
78
  bullswarm delegate --cwd ~/some-repo --prompt "Audit all commands, fix help, and independently verify" # workflow
78
79
  bullswarm delegate --dry-run --json --cwd ~/some-repo --prompt "Your task" # bounded classification + decision/plan; no work dispatch
@@ -92,7 +93,7 @@ bullswarm health # re-judge saved outputs; catch gate failures
92
93
  | `run` | route → dispatch → watch → verify → one JSON verdict |
93
94
  | `health` | Re-judge saved outputs against their verdicts; surface verify-gate failures and quarantine clusters |
94
95
  | `pools` | Show each pool's meter state, pace position, quarantine status |
95
- | `strategy` | Discover models, record subscription value, recommend or assign high/medium/low effort routes |
96
+ | `strategy` | Interactive provider/model control center with live high/medium/low route previews and an agent-facing JSON API |
96
97
  | `doctor` | Machine-readable readiness report; self-heals on first call |
97
98
  | `workflow` | Start an autonomous goal, or run / validate / draft / inspect explicit workflows and their live instances. |
98
99
  | `runs` | Short alias for `workflow runs`, including list, show, result, delete, and cleanup operations. |
@@ -132,6 +133,15 @@ Bullswarm can inventory the models exposed by installed agent CLIs and combine
132
133
  connector-declared, dated pricing/benchmark metadata with live quota surplus:
133
134
 
134
135
  ```bash
136
+ bullswarm setup # TTY: interactive control center
137
+ bullswarm strategy # explicit routing-focused alias
138
+ bullswarm strategy inventory --json # agent-readable detection + policy + routes
139
+ bullswarm strategy routes --json # compact effective choices
140
+ bullswarm strategy set-provider codex off --yes
141
+ bullswarm strategy set-model opencode2 kaihk/gpt-5.6-luna \
142
+ --tiers high,medium,low --yes
143
+ bullswarm strategy configure --file strategy.json --yes # atomic agent-authored policy
144
+ bullswarm strategy reset-tier low --yes # restore one tier to automatic
135
145
  bullswarm strategy refresh
136
146
  bullswarm strategy show --json
137
147
  bullswarm strategy apply --yes --refresh-hours 24
@@ -143,6 +153,51 @@ bullswarm strategy exclude-model claude-fable-5
143
153
  bullswarm run --effort high --lane analyze --task-file /tmp/task.md --json
144
154
  ```
145
155
 
156
+ Setup first asks whether to analyze live usage and recommend routes or open the
157
+ current configuration for manual editing. Analysis shows a spinner plus
158
+ per-provider usage progress, then presents the proposed defaults before making
159
+ any routing change. Press `Y` to apply them or `N` to retain the current policy.
160
+ The analysis selects at most one default model for each provider and effort
161
+ tier. It uses OpenRouter's agentic, coding, and intelligence indices as quality
162
+ signals and API-equivalent pricing as the budget signal. A repository-owned
163
+ GitHub Actions job calls the authenticated OpenRouter APIs once per day and
164
+ replaces a public, validated `openrouter-benchmarks.json` asset on the rolling
165
+ `benchmark-data-latest` GitHub Release. Installed CLIs download only that public
166
+ file and never need or receive an OpenRouter key.
167
+ The sources are OpenRouter's [benchmarks API](https://openrouter.ai/docs/api/api-reference/benchmarks/list-benchmarks)
168
+ and [models API](https://openrouter.ai/docs/api/api-reference/models/list-all-models-and-their-properties).
169
+ The CLI caches the datapack under `~/.bullswarm/cache/`; network failure falls
170
+ back to a stale or bundled datapack, then connector metadata, without blocking
171
+ setup.
172
+
173
+ The TUI lists every detected provider/account separately so its toggle matches
174
+ its own quota meter. Enter drills into that provider's detected models. In the
175
+ model matrix, `Up`/`Down` selects a model, `Left`/`Right` moves a visibly
176
+ highlighted cell across High, Medium, and Low, and `Enter` toggles that cell.
177
+ Type to filter model names; assigned models sort above unassigned or disabled
178
+ models. Select `Finish setup` and press `Enter`, or press `F` directly, to leave
179
+ the control center. The effective-route panel is recomputed from the same policy
180
+ and live surplus used by real dispatch. Provider and model edits affect new
181
+ direct runs and workflow dispatches.
182
+
183
+ An external AI agent should first read `strategy inventory --json`, then use
184
+ the validated `set-provider` / `set-model` commands or write one JSON document
185
+ for `strategy configure --file`. Unknown pools and models are rejected before
186
+ state is saved. Existing automatic choices are preserved when a human begins
187
+ curating a tier; a model-level `off` never empties unrelated tiers.
188
+
189
+ ```json
190
+ {
191
+ "providers": { "codex": false, "opencode2": true },
192
+ "models": {
193
+ "opencode2": {
194
+ "kaihk/gpt-5.6-sol": ["high"],
195
+ "kaihk/gpt-5.6-luna": ["medium", "low"]
196
+ }
197
+ }
198
+ }
199
+ ```
200
+
146
201
  Interactive setup asks whether to enable strategy autopilot; non-interactive
147
202
  setup requires the explicit `setup --yes --strategy` flag. Recommendations are
148
203
  context-filtered before ranking: high requires analysis plus workflow-planning,
@@ -68,6 +68,7 @@
68
68
  "pricing": {"inputUsdPerMillion": null, "cacheReadUsdPerMillion": null, "outputUsdPerMillion": null},
69
69
  "pricingSource": "optional dated primary source",
70
70
  "pricingUpdatedAt": "YYYY-MM-DD",
71
+ "autoRecommend": true,
71
72
  "free": false
72
73
  }],
73
74
  "modelSelection": {"flag": "--model", "mode": "replace-or-append"},
@@ -59,7 +59,7 @@
59
59
  "resumeArgs": ["--resume", "{sessionId}"]
60
60
  },
61
61
  "modelProfiles": [
62
- { "match": "^claude-fable-5$", "tier": "high", "qualityRank": 6, "pricing": { "inputUsdPerMillion": 10, "cacheReadUsdPerMillion": 1, "outputUsdPerMillion": 50 }, "pricingSource": "https://platform.claude.com/docs/en/about-claude/pricing", "pricingUpdatedAt": "2026-08-27" },
62
+ { "match": "(?:^|/)claude-fable-", "tier": "high", "qualityRank": 6, "autoRecommend": false, "pricing": { "inputUsdPerMillion": 10, "cacheReadUsdPerMillion": 1, "outputUsdPerMillion": 50 }, "pricingSource": "https://platform.claude.com/docs/en/about-claude/pricing", "pricingUpdatedAt": "2026-08-27" },
63
63
  { "match": "^claude-opus-(5|4-[5-8])$", "tier": "high", "qualityRank": 5, "pricing": { "inputUsdPerMillion": 5, "cacheReadUsdPerMillion": 0.5, "outputUsdPerMillion": 25 }, "pricingSource": "https://platform.claude.com/docs/en/about-claude/pricing", "pricingUpdatedAt": "2026-08-27" },
64
64
  { "match": "^claude-sonnet-5$", "tier": "medium", "qualityRank": 4, "pricing": { "inputUsdPerMillion": 2, "cacheReadUsdPerMillion": 0.2, "outputUsdPerMillion": 10 }, "pricingSource": "https://platform.claude.com/docs/en/about-claude/pricing", "pricingUpdatedAt": "2026-08-27" },
65
65
  { "match": "^claude-sonnet-", "tier": "medium", "qualityRank": 4 },
@@ -56,7 +56,7 @@
56
56
  { "match": "^gpt-5\\.6-sol$", "tier": "high", "qualityRank": 6, "pricing": { "inputUsdPerMillion": 4, "cacheReadUsdPerMillion": 0.4, "outputUsdPerMillion": 20 }, "pricingSource": "https://help.openai.com/en/articles/20001415-chatgpt-rate-card-enterprise-token-based-pricing", "pricingUpdatedAt": "2026-08-27" },
57
57
  { "match": "^gpt-5\\.6-terra$", "tier": "medium", "qualityRank": 4, "pricing": { "inputUsdPerMillion": 2, "cacheReadUsdPerMillion": 0.2, "outputUsdPerMillion": 12 }, "pricingSource": "https://developers.openai.com/api/docs/models/gpt-5.6-terra", "pricingUpdatedAt": "2026-08-27" },
58
58
  { "match": "^gpt-5\\.6-luna$", "tier": "low", "qualityRank": 3, "pricing": { "inputUsdPerMillion": 0.2, "cacheReadUsdPerMillion": 0.02, "outputUsdPerMillion": 1.2 }, "pricingSource": "https://developers.openai.com/api/docs/models", "pricingUpdatedAt": "2026-08-27" },
59
- { "match": "^claude-fable-5$", "tier": "high", "qualityRank": 6, "pricing": { "inputUsdPerMillion": 10, "cacheReadUsdPerMillion": 1, "outputUsdPerMillion": 50 }, "pricingSource": "https://platform.claude.com/docs/en/about-claude/pricing", "pricingUpdatedAt": "2026-08-27" },
59
+ { "match": "(?:^|/)claude-fable-", "tier": "high", "qualityRank": 6, "autoRecommend": false, "pricing": { "inputUsdPerMillion": 10, "cacheReadUsdPerMillion": 1, "outputUsdPerMillion": 50 }, "pricingSource": "https://platform.claude.com/docs/en/about-claude/pricing", "pricingUpdatedAt": "2026-08-27" },
60
60
  { "match": "^claude-opus-", "tier": "high", "qualityRank": 5 },
61
61
  { "match": "^claude-sonnet-", "tier": "medium", "qualityRank": 4 },
62
62
  { "match": "^claude-haiku-", "tier": "low", "qualityRank": 3 },
@@ -33,7 +33,9 @@
33
33
  "modelDiscovery": { "cmd": ["opencode", "models"], "parse": "lines", "includePattern": "^[^\\s]+/[^\\s]+$", "timeoutMs": 20000, "maxModels": 250 },
34
34
  "modelSelection": { "flag": "--model", "mode": "replace-or-append" },
35
35
  "modelProfiles": [
36
- { "match": "(?:fable|opus|gpt-5\\.6-sol|gpt-5\\.5$)", "tier": "high", "qualityRank": 5 },
36
+ { "match": "(?:^|/)claude-fable-", "tier": "high", "qualityRank": 6, "autoRecommend": false },
37
+ { "match": "gpt-5\\.6-sol$", "tier": "high", "qualityRank": 6, "autoRecommend": true },
38
+ { "match": "(?:opus|gpt-5\\.5$)", "tier": "high", "qualityRank": 5 },
37
39
  { "match": "(?:sonnet|terra|gpt-5\\.4$|deepseek-v4)", "tier": "medium", "qualityRank": 4 },
38
40
  { "match": "(?:haiku|luna|(?:^|[/.-])mini(?:$|[/.-])|flash|free)", "tier": "low", "qualityRank": 2 }
39
41
  ],
package/data/README.md ADDED
@@ -0,0 +1,9 @@
1
+ # Benchmark datapack
2
+
3
+ `openrouter-benchmarks.json` is generated daily by
4
+ `.github/workflows/refresh-openrouter-benchmarks.yml` and published as the
5
+ replaceable asset on the `benchmark-data-latest` GitHub Release. Normal package
6
+ releases download that asset into this directory as an offline fallback. It
7
+ contains public model metadata and benchmark results only. The OpenRouter API
8
+ key remains in GitHub Actions secrets and is never written here or shipped with
9
+ the CLI.