bullswarm 0.28.7 → 0.29.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/AGENTS.md +17 -9
- package/CHANGELOG.md +178 -20
- package/README.md +120 -898
- package/data/README.md +1 -1
- package/data/openrouter-benchmarks.json +12437 -11779
- package/docs/_config.yml +7 -0
- package/docs/audits/2026-09-09-codebase-audit.md +6 -6
- package/docs/dynamic-workflow-handoff.md +3 -3
- package/docs/dynamic-workflow-qa.md +1 -1
- package/docs/dynamic-workflow-v2-execution-plan.md +7 -7
- package/docs/experiments/2026-08-29-dogfood-bullswarm-builds-bullswarm.md +13 -13
- package/docs/experiments/2026-08-31-v2-component-probes.md +7 -7
- package/docs/guide/dashboard.md +192 -0
- package/docs/guide/doctrine.md +63 -0
- package/docs/guide/entry-points.md +71 -0
- package/docs/guide/getting-started.md +52 -0
- package/docs/guide/operations.md +132 -0
- package/docs/guide/providers.md +227 -0
- package/docs/guide/repository-operations.md +15 -0
- package/docs/guide/routing.md +168 -0
- package/docs/guide/strategy.md +171 -0
- package/docs/guide/workflows.md +312 -0
- package/docs/handoff-2026-09-13-custom-provider-config.md +49 -0
- package/docs/index.md +53 -0
- package/docs/planner-prompt-audit-2026-08-29.md +1 -1
- package/package.json +3 -2
- package/providers/contrib/README.md +32 -0
- package/{connectors/command-code.json → providers/contrib/command-code/connector.json} +4 -1
- package/{src/meters/command-code.js → providers/contrib/command-code/provider.mjs} +27 -16
- package/{connectors/opencode2.json → providers/contrib/opencode2/connector.json} +4 -3
- package/providers/contrib/opencode2/provider.mjs +7 -0
- package/skill/SKILL.md +75 -8
- package/skill/references/operations.md +101 -7
- package/skill/references/providers.md +97 -0
- package/src/cli.js +37 -9
- package/src/help.js +254 -20
- package/src/lib/auth-signatures.js +79 -0
- package/src/lib/cli-flags.js +14 -1
- package/src/lib/config.js +54 -28
- package/src/lib/providers.js +353 -0
- package/src/lib/state.js +47 -0
- package/src/lib/strategy.js +5 -0
- package/src/lib/update.js +285 -0
- package/src/lib/watch.js +49 -0
- package/src/meters/framework.js +84 -5
- package/src/meters/registry.js +50 -56
- package/src/provider-cli.js +780 -0
- package/src/provider-kit.js +146 -0
- package/src/providers/_schema.json +181 -0
- package/src/providers/claude-code/provider.mjs +372 -0
- package/{connectors/codex.json → src/providers/codex/connector.json} +3 -1
- package/src/{meters/codex.js → providers/codex/provider.mjs} +18 -9
- package/{connectors/echo.json → src/providers/echo/connector.json} +1 -1
- package/src/{meters/grok.js → providers/grok/provider.mjs} +23 -14
- package/src/setup.js +129 -40
- package/src/strategy-cli.js +57 -28
- package/src/workflow/cli.js +264 -11
- package/src/workflow/dashboard.js +2 -2
- package/src/workflow/execution-policy.js +11 -0
- package/src/workflow/ledger.js +22 -0
- package/src/workflow/runs-cli.js +2 -1
- package/src/workflow/v2-dispatch.js +40 -14
- package/src/workflow/v2-outcome.js +5 -3
- package/src/workflow/v2-planner.js +16 -5
- package/src/workflow/v2-presentation.js +53 -1
- package/src/workflow/v2-revision.js +362 -0
- package/src/workflow/v2-runtime.js +374 -30
- package/src/workflow/v2-scheduler.js +3 -1
- package/src/workflow/v2-state.js +133 -10
- package/src/workflow/watch-cli.js +56 -0
- package/connectors/_schema.json +0 -96
- package/src/lib/claude-accounts.js +0 -202
- package/src/lib/opencode-kaihk.js +0 -177
- package/src/meters/claude.js +0 -135
- package/src/meters/kaihk.js +0 -97
- /package/{connectors/claude-code.json → src/providers/claude-code/connector.json} +0 -0
- /package/{connectors → src/providers/echo}/echo-worker.mjs +0 -0
- /package/{connectors/grok.json → src/providers/grok/connector.json} +0 -0
package/AGENTS.md
CHANGED
|
@@ -14,7 +14,9 @@ content. Published as `bullswarm` on npm.
|
|
|
14
14
|
2. Pace by meter surplus = elapsed% (from provider resets_at) − used%.
|
|
15
15
|
Weekly/monthly windows pace; 5h windows are burst gates only (M1–M5 in
|
|
16
16
|
`src/meters/framework.js`).
|
|
17
|
-
3.
|
|
17
|
+
3. Provider quirks live in the provider's directory (`src/providers/<name>/`,
|
|
18
|
+
`providers/contrib/<name>/`, or `~/.bullswarm/providers/<name>/`), never in
|
|
19
|
+
core logic (see `docs/guide/providers.md`).
|
|
18
20
|
4. Quarantine always auto-releases; recursion depth is core-owned via env
|
|
19
21
|
(`BULLSWARM_DEPTH`).
|
|
20
22
|
5. Workflow dispatches must honor the same guarantees as single runs:
|
|
@@ -61,7 +63,8 @@ author (`bullswarm workflow plan contract` returns the schema). There is no
|
|
|
61
63
|
classifier or preview step. The skill is published alongside the package and
|
|
62
64
|
is the canonical reference for the CLI surface.
|
|
63
65
|
|
|
64
|
-
- Zero runtime dependencies. Node >=
|
|
66
|
+
- Zero runtime dependencies. Node >= 22.12 (providers load synchronously
|
|
67
|
+
through `require` of ES modules). Tests must never require network:
|
|
65
68
|
prime `~/.bullswarm/meters/*.json` caches with fresh timestamps if needed.
|
|
66
69
|
- Every verb must work non-interactively (no TTY). The interactive wizard is
|
|
67
70
|
a human convenience, never a requirement.
|
|
@@ -70,14 +73,19 @@ is the canonical reference for the CLI surface.
|
|
|
70
73
|
`git push --tags`
|
|
71
74
|
— CI publishes through npm trusted publishing (OIDC), no tokens.
|
|
72
75
|
|
|
73
|
-
## Adding a
|
|
76
|
+
## Adding a provider
|
|
74
77
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
78
|
+
A provider is a directory holding `connector.json` (a pool template checked
|
|
79
|
+
against `src/providers/_schema.json`) and/or `provider.mjs`. First-class
|
|
80
|
+
providers live in `src/providers/<name>/`, contrib providers in
|
|
81
|
+
`providers/contrib/<name>/` (enabled per machine through
|
|
82
|
+
`~/.bullswarm/providers.json`), and a user's own in
|
|
83
|
+
`~/.bullswarm/providers/<name>/`. Start from
|
|
84
|
+
`bullswarm provider scaffold <name> [--from <template>]`, then
|
|
85
|
+
`bullswarm provider validate` and `bullswarm provider probe <pool>`. Write a
|
|
86
|
+
`readUsage` export only if the vendor exposes a usage API — declared meters
|
|
87
|
+
are the fallback, never the goal. The contract is `docs/guide/providers.md`;
|
|
88
|
+
the authoring method is `skill/references/providers.md`.
|
|
81
89
|
|
|
82
90
|
## Releasing
|
|
83
91
|
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,163 @@
|
|
|
1
1
|
# bullswarm changelog
|
|
2
2
|
|
|
3
|
+
## 0.29.0 — steer a running workflow, providers become directories, a declared reset date
|
|
4
|
+
|
|
5
|
+
- workflow: the plan of a caller-planned program run can be changed at any
|
|
6
|
+
time. `bullswarm workflow plan export <id>` writes the live plan as an
|
|
7
|
+
editable revision document, and `bullswarm workflow plan revise <id>
|
|
8
|
+
--program plan.json` replaces it: the kernel matches actions by id and
|
|
9
|
+
applies the difference within about a second while agents keep running. A
|
|
10
|
+
new id is added; an unchanged action keeps its result and its running agent;
|
|
11
|
+
a changed action is stopped if running and starts over with the new
|
|
12
|
+
definition; an id in `rerun` discards its result and runs again; a missing id
|
|
13
|
+
is removed (stopped, never run, reported as `removed` and not counted against
|
|
14
|
+
the result); and every step downstream of a changed or rerun step runs again.
|
|
15
|
+
Evidence from a removed or rerun check stops counting until judged again.
|
|
16
|
+
Revisions carry `baseRevision`, so a revision written against an outdated
|
|
17
|
+
export is rejected instead of silently undoing another change, and an
|
|
18
|
+
invalid revision changes nothing. Revising a finished run reopens it and
|
|
19
|
+
archives the earlier result as `result-before-revision-<n>.json`.
|
|
20
|
+
- workflow: `bullswarm workflow pause <id>` stops new work while running agents
|
|
21
|
+
finish (`--now` stops them too and requeues their steps). The kernel exits
|
|
22
|
+
with `outcome: paused`; revisions apply while paused, and `workflow resume`
|
|
23
|
+
is the only way to continue.
|
|
24
|
+
- workflow: steering a caller-planned program run no longer halts it at the
|
|
25
|
+
next boundary. Watchers print `steering received`, the export lists the
|
|
26
|
+
pending messages, and a revision delivers them; only a run about to finish
|
|
27
|
+
with steering still unread pauses for the caller.
|
|
28
|
+
- watch: new lines for `plan revised`, `plan revision rejected`, pause
|
|
29
|
+
requested/lifted, run reopened, steering received, and steps stopped by a
|
|
30
|
+
revision or a pause.
|
|
31
|
+
- skill: SKILL.md gains "Steer a running workflow" and treats every watch
|
|
32
|
+
wake-up as a point to decide whether the plan still fits; operations.md
|
|
33
|
+
documents revision semantics, pause and resume, and steering.
|
|
34
|
+
|
|
35
|
+
- providers: every coding-agent CLI is now a provider directory holding
|
|
36
|
+
`connector.json`, `provider.mjs`, or both, loaded by one synchronous loader
|
|
37
|
+
(`src/lib/providers.js`) from three tiers. First-class (`src/providers/`)
|
|
38
|
+
always loads and holds claude-code, codex, grok and echo. Contrib
|
|
39
|
+
(`providers/contrib/`) ships in the package but loads only where
|
|
40
|
+
`~/.bullswarm/providers.json` lists it, and holds command-code and the
|
|
41
|
+
generic opencode2 connector. Local (`~/.bullswarm/providers/`) is the
|
|
42
|
+
operator's own and never appears in this repository. A module exports at most
|
|
43
|
+
`name`, `displayName`, `connectors(ctx)`, `readUsage(pool, ctx)` and
|
|
44
|
+
`doctor(ctx)`; everything else stays the connector JSON four CLIs already
|
|
45
|
+
ran through. Echo ships JSON-only and grok keeps its OAuth-refreshing meter
|
|
46
|
+
as real code, so both paths stay exercised.
|
|
47
|
+
- providers: `bullswarm provider list|enable|disable|validate|scaffold|probe`.
|
|
48
|
+
`probe` spawns one pool through the dispatcher's own runner with a one-word
|
|
49
|
+
task and then reads its meter once, which is the only evidence that a new
|
|
50
|
+
provider's model flag, event parsing and meter all actually work.
|
|
51
|
+
- core: the per-vendor branching is gone. The meter registry resolves a pool's
|
|
52
|
+
reader through its owning provider instead of a name-prefix map, connector
|
|
53
|
+
loading is one call into the loader, setup discovery and the strategy labels
|
|
54
|
+
come from provider entries, and both hard-coded connector expanders are
|
|
55
|
+
deleted. `credentialGroup` is the honest name for `upstreamGroup`, which is
|
|
56
|
+
still read.
|
|
57
|
+
- requires Node >= 22.12: the loader reads `provider.mjs` through
|
|
58
|
+
`require(esm)` so `loadConnectors` and `buildPools` stay synchronous for
|
|
59
|
+
their twenty-odd call sites.
|
|
60
|
+
- providers: built-in support for one specific reseller was removed entirely.
|
|
61
|
+
It is expressible as a local provider with no repository changes at all,
|
|
62
|
+
which was the point of the tiers.
|
|
63
|
+
- setup: `BULLSWARM_NO_PACKAGED_PROVIDERS=1` forces the packaged tiers off, for
|
|
64
|
+
tests that spawn the real CLI against a fixture home and assert an exact pool
|
|
65
|
+
list. Never set it in production.
|
|
66
|
+
- workflow: evidence actions are routed like any other action. They used to be
|
|
67
|
+
steered away from the pools that did the work, which bought little
|
|
68
|
+
independence (the judging model is chosen by tier, not by pool) and overrode
|
|
69
|
+
pacing. The `avoidPools` dispatch option is gone.
|
|
70
|
+
- codex: the connector runs `codex exec -s danger-full-access`. Codex sandboxes
|
|
71
|
+
writes to its workspace, so a workflow evidence action could do the work and
|
|
72
|
+
still fail with EPERM writing its candidate file into the run's state
|
|
73
|
+
directory under the bullswarm home.
|
|
74
|
+
- command-code: the connector passes `--max-turns 10000`. command-code's print
|
|
75
|
+
mode stops after 100 turns by default and exits 8 mid-task, which bullswarm
|
|
76
|
+
could only report as a non-zero exit and retry from scratch on another pool.
|
|
77
|
+
|
|
78
|
+
- routing: an upstream auth failure reported inside a provider's event stream
|
|
79
|
+
is now the `auth` failure kind with a quarantine hint, and it benches every
|
|
80
|
+
pool that shares the same upstream credential. On 2026-09-11 the pooled Codex
|
|
81
|
+
OAuth account behind `https://relay.example` was invalidated at 12:24 UTC and
|
|
82
|
+
answered every request with
|
|
83
|
+
`{"error":{"message":"Encountered invalidated oauth token for user, failing
|
|
84
|
+
request","type":"authentication_error","code":"auth_unavailable"}}` (401) or
|
|
85
|
+
`auth_unavailable: no auth available (providers=codex, model=gpt-5.6-luna; …)`
|
|
86
|
+
(503); non-GPT models on the same host answered `No available channel for
|
|
87
|
+
model <name> under group default`. `src/lib/watch.js` turned any stream
|
|
88
|
+
`error` event into a bare `provider` verdict before the auth gate ran, so no
|
|
89
|
+
pool was ever benched: a failed action's retry walked
|
|
90
|
+
`opencode2:relay-3` → `opencode2:relay-2` → `opencode2` — three names for the
|
|
91
|
+
one dead credential — and runs m4xiva and ytdsii ended `partial` with their
|
|
92
|
+
integrate/verify actions blocked (failures at 12:24, 12:25, 12:52, 12:53,
|
|
93
|
+
12:54; last good dispatch 11:22). Four upstream phrases now ship as
|
|
94
|
+
`DEFAULT_AUTH_SIGNATURES` (`src/lib/auth-signatures.js`), matched only on a
|
|
95
|
+
stream that already declared a failure and only on an error-shaped line or
|
|
96
|
+
the raw JSON error event itself, so an agent that merely reads auth code is
|
|
97
|
+
still never quarantined. Connectors may declare `upstreamGroup`;
|
|
98
|
+
`src/lib/opencode-relay.js` sets `relay:<host>` on every expanded Relay pool,
|
|
99
|
+
and an auth quarantine now spreads to that group on one shared 10-minute
|
|
100
|
+
deadline in both dispatch paths. Claude account pools get no group — separate
|
|
101
|
+
seats are separate credentials — and a `quota` quarantine never spreads,
|
|
102
|
+
because a sibling's own window still has work in it.
|
|
103
|
+
|
|
104
|
+
- cli: `bullswarm update [--check] [--json]` upgrades the installation in
|
|
105
|
+
place — the verb a teammate reached for and found missing (2026-09-11). It
|
|
106
|
+
reads the latest version from the npm registry, tells the install shape
|
|
107
|
+
from the running package's real path rather than from `which` or `npm root
|
|
108
|
+
-g` (which can name a different Node install), and acts accordingly: a
|
|
109
|
+
global install gets `npm install -g bullswarm@<latest> --prefix <its own
|
|
110
|
+
prefix>`; a source checkout, including a global `npm link` into one, gets
|
|
111
|
+
`git pull --ff-only` and is refused while it has local changes; anything
|
|
112
|
+
else prints the manual command and exits 1. Success is verified by
|
|
113
|
+
re-reading package.json on disk, never by npm's exit code, and a shell
|
|
114
|
+
whose `bullswarm` resolves elsewhere is called out. `--check` compares
|
|
115
|
+
without changing anything.
|
|
116
|
+
- routing: the reasoning level now reaches every model a Relay pool can run,
|
|
117
|
+
not only `gpt-5.6-luna`. opencode forwards `--variant <level>` only when its
|
|
118
|
+
config declares that variant for that exact model, and the config
|
|
119
|
+
`src/lib/opencode-relay.js` injects declared the five levels for luna alone,
|
|
120
|
+
so moving a tier onto `<id>/gpt-5.6-sol` (2026-09-12, when luna had no
|
|
121
|
+
upstream channel left but sol did) would have sent a `--variant medium` that
|
|
122
|
+
opencode silently dropped while `strategy rungs` kept reporting medium.
|
|
123
|
+
Discovery now records each provider's model list from opencode.json and the
|
|
124
|
+
variants are declared on all of them; a provider that lists none keeps the
|
|
125
|
+
luna default.
|
|
126
|
+
- meters: a Relay pool's used% is read against its own declared plan total
|
|
127
|
+
(`strategy set-subscription <pool> --included-usd <n>`) before the host-wide
|
|
128
|
+
`RELAY_PLAN_USD` and the $50 default. The wallets differ — relay-4 is a $20
|
|
129
|
+
newcomer plan — and one shared number would have shown a $10 spend on it as
|
|
130
|
+
20% used.
|
|
131
|
+
- meters: a pool whose provider reports usage but no reset date can be paced
|
|
132
|
+
from a reset the operator declares —
|
|
133
|
+
`bullswarm strategy set-subscription <pool> --resets-at <iso|unknown>`.
|
|
134
|
+
The Relay token API stopped returning `expires_at` for the `1` and `Moham`
|
|
135
|
+
wallets on 2026-09-03 (the fleetlens log holds 28 dated snapshots between
|
|
136
|
+
2026-08-31 and 2026-09-03, then only nulls), so `opencode2` and
|
|
137
|
+
`opencode2:relay-3` printed `unmetered` at 73.8% and 10.7% of their $50
|
|
138
|
+
wallets and ranked as neutral. With a declared reset the used% stays the
|
|
139
|
+
provider's, elapsed% runs to the declared date, the date rolls forward one
|
|
140
|
+
calendar month (or week) at a time once it passes, and `bullswarm pools`
|
|
141
|
+
labels the row `[live declared-reset]`; `pools --json` and
|
|
142
|
+
`strategy show` carry `resetSource` (`provider` | `declared`). A window
|
|
143
|
+
the provider does date is never overridden. Doctrine M2 in
|
|
144
|
+
`src/meters/framework.js` and the guide's rule 2 record the operator path.
|
|
145
|
+
|
|
146
|
+
## 0.28.8 — a README for visitors and a documentation site
|
|
147
|
+
|
|
148
|
+
- docs: README rewritten for external visitors landing on the GitHub page —
|
|
149
|
+
pitch, why it exists, install, quick start, how routing picks a pool, and
|
|
150
|
+
what a run gives back — with the detailed reference material moved to a
|
|
151
|
+
GitHub Pages site under `docs/`: `guide/entry-points`, `guide/doctrine`,
|
|
152
|
+
`guide/getting-started`, `guide/strategy`, `guide/workflows`,
|
|
153
|
+
`guide/operations`, `guide/dashboard`, `guide/repository-operations`, and
|
|
154
|
+
`guide/routing`. Terms a newcomer would trip on (pool, lane, kernel,
|
|
155
|
+
envelope, rung) are defined on first use; the 5-hour gate is documented as
|
|
156
|
+
clock-relative. The site needs the repository owner to enable Pages
|
|
157
|
+
(Settings → Pages → deploy from branch `main`, folder `/docs`) before
|
|
158
|
+
`https://cowcow02.github.io/bullswarm/` serves it; until then the same pages
|
|
159
|
+
are readable directly under `docs/guide/` in the repository.
|
|
160
|
+
|
|
3
161
|
## 0.28.7 — pools about to reset spend their leftover first
|
|
4
162
|
|
|
5
163
|
- routing: quota that expires sooner is worth more. A pool whose pacing window
|
|
@@ -197,7 +355,7 @@
|
|
|
197
355
|
`elapsedPct`, `pace` and `paceResetsAt` off `reading.windows`, so cache,
|
|
198
356
|
stale and live readings are paced identically; the pool view carries
|
|
199
357
|
`pacingWindow`. The 5h gate is untouched: `command-code` still gates on 5h
|
|
200
|
-
`25.2%`. Connectors already declared this — `command-code` and the
|
|
358
|
+
`25.2%`. Connectors already declared this — `command-code` and the relay
|
|
201
359
|
pools `monthly`, `claude-code`/`codex`/`grok` `weekly`; nothing read it for
|
|
202
360
|
pacing before.
|
|
203
361
|
- The spend model follows the pacing window. `WINDOW_KEYS` (framework.js)
|
|
@@ -357,7 +515,7 @@
|
|
|
357
515
|
no planner has to reason about. No shipped connector's routing changes
|
|
358
516
|
either way — all six declare all three lanes.
|
|
359
517
|
|
|
360
|
-
- The three
|
|
518
|
+
- The three Relay-backed OpenCode pools can now run gpt-5.6-luna at a
|
|
361
519
|
chosen reasoning level. `connectors/opencode2.json` declares
|
|
362
520
|
`reasoning: { flag: "--variant", levels: [low, medium, high, xhigh,
|
|
363
521
|
max], defaults: { high: high, medium: medium, low: low } }` — the same
|
|
@@ -365,25 +523,25 @@
|
|
|
365
523
|
backend — so rungs for these pools stop printing `— (unsupported)`.
|
|
366
524
|
opencode only forwards a `--variant` its config declares for that
|
|
367
525
|
model, so the flag alone would be silently dropped;
|
|
368
|
-
`
|
|
526
|
+
`expandOpenCodeRelayConnectors` (`src/lib/opencode-relay.js`) therefore
|
|
369
527
|
sets `env.OPENCODE_CONFIG_CONTENT` on the base pool and on every clone
|
|
370
528
|
to the variants for that pool's OWN provider id, via the new pure
|
|
371
|
-
helper `
|
|
372
|
-
`{"provider":{"
|
|
529
|
+
helper `relayVariantsConfig(providerId, model = RELAY_OPENCODE_MODEL)`:
|
|
530
|
+
`{"provider":{"relay-2":{"models":{"gpt-5.6-luna":{"variants":{"low":{"reasoningEffort":"low"},"medium":{"reasoningEffort":"medium"},"high":{"reasoningEffort":"high"},"xhigh":{"reasoningEffort":"xhigh"},"max":{"reasoningEffort":"max"}}}}}}}`.
|
|
373
531
|
opencode merges that JSON string over the config file, so the API key
|
|
374
532
|
and everything else in `~/.config/opencode/opencode.json` stays in
|
|
375
533
|
force. An `OPENCODE_CONFIG_CONTENT` the operator set by hand in the
|
|
376
534
|
installed connector is never overwritten, on the base pool or on the
|
|
377
|
-
clones. A medium/max dispatch on `opencode2:
|
|
378
|
-
`opencode run --auto --model
|
|
535
|
+
clones. A medium/max dispatch on `opencode2:relay-2` composes
|
|
536
|
+
`opencode run --auto --model relay-2/gpt-5.6-luna <taskFile> --variant
|
|
379
537
|
max --format json`; a level already pinned in the template is replaced,
|
|
380
538
|
not duplicated. Per pool:
|
|
381
|
-
`bullswarm strategy set-rung opencode2 medium --model
|
|
382
|
-
`bullswarm strategy set-rung opencode2:
|
|
383
|
-
`bullswarm strategy set-rung opencode2:
|
|
539
|
+
`bullswarm strategy set-rung opencode2 medium --model relay/gpt-5.6-luna --reasoning max`,
|
|
540
|
+
`bullswarm strategy set-rung opencode2:relay-2 medium --model relay-2/gpt-5.6-luna --reasoning max`,
|
|
541
|
+
`bullswarm strategy set-rung opencode2:relay-3 medium --model relay-3/gpt-5.6-luna --reasoning max`.
|
|
384
542
|
Existing installations pick the block up through
|
|
385
543
|
`upgradeConnectorMetadata` (`src/setup.js`), which backfills a missing
|
|
386
|
-
`reasoning` block and leaves a customised one alone. Non-
|
|
544
|
+
`reasoning` block and leaves a customised one alone. Non-Relay opencode
|
|
387
545
|
installations get no injected variants, so `--variant` is a no-op there
|
|
388
546
|
rather than an error — recorded in the connector's
|
|
389
547
|
`$comment-reasoning`.
|
|
@@ -1124,11 +1282,11 @@ behaviour, or pass the program you authored with `--program <file.json>`.
|
|
|
1124
1282
|
automatic LLM classification.
|
|
1125
1283
|
|
|
1126
1284
|
- OpenCode connector portability: `connectors/opencode2.json` no longer
|
|
1127
|
-
hardcodes `--model
|
|
1128
|
-
install with no
|
|
1129
|
-
own default model instead of failing to resolve a
|
|
1130
|
-
`src/lib/opencode-
|
|
1131
|
-
`--model <providerId>/gpt-5.6-luna` for each discovered
|
|
1285
|
+
hardcodes `--model relay/gpt-5.6-luna` in `spawn.cmd`. A plain OpenCode
|
|
1286
|
+
install with no Relay provider configured now dispatches with OpenCode's
|
|
1287
|
+
own default model instead of failing to resolve a Relay-only model.
|
|
1288
|
+
`src/lib/opencode-relay.js` still injects the explicit
|
|
1289
|
+
`--model <providerId>/gpt-5.6-luna` for each discovered Relay provider, so
|
|
1132
1290
|
the primary `opencode2` pool and any extra `opencode2:<id>` pools keep
|
|
1133
1291
|
dispatching with their pinned per-provider model exactly as before.
|
|
1134
1292
|
|
|
@@ -1163,7 +1321,7 @@ behaviour, or pass the program you authored with `--program <file.json>`.
|
|
|
1163
1321
|
- Historical workflow design documents now identify themselves as dated
|
|
1164
1322
|
implementation records and list the current `verify`, `decide`, and
|
|
1165
1323
|
`outputSchema` surfaces instead of presenting resolved gaps as current.
|
|
1166
|
-
- Extra
|
|
1324
|
+
- Extra Relay providers in `~/.config/opencode/opencode.json` (`relay-2`, …)
|
|
1167
1325
|
become `opencode2:<id>` pools, spawned with `--model <id>/gpt-5.6-luna`.
|
|
1168
1326
|
Spend is read from `GET /api/usage/token` plus
|
|
1169
1327
|
`/v1/dashboard/billing/usage` (USD = `total_usage / 100`). The HTML wallet
|
|
@@ -1288,7 +1446,7 @@ behaviour, or pass the program you authored with `--program <file.json>`.
|
|
|
1288
1446
|
spent a 97 s correction turn on it).
|
|
1289
1447
|
- Goal-4 rerun on `7724da1` (`8ebi8a`, rule 7 + PR #5): 42 min 03 s, three
|
|
1290
1448
|
planner turns (775 s, 31 %), parallelism 1.34, 23 dispatches (20 on
|
|
1291
|
-
`
|
|
1449
|
+
`relay/gpt-5.6-luna`), three repair rounds each rejected on re-verify for
|
|
1292
1450
|
reasons the prompts caused, tail of five actions blocked, recovery program
|
|
1293
1451
|
auto-completed, 315/315, existing tests +179/−1. Goal-4 line:
|
|
1294
1452
|
44 → 72 → 37 → 25 → 36 → 42 min.
|
|
@@ -1324,7 +1482,7 @@ behaviour, or pass the program you authored with `--program <file.json>`.
|
|
|
1324
1482
|
re-verify rejected the mandated extension, and a planner turn recovered.
|
|
1325
1483
|
- Goal-4 rerun on v0.16.0 (`euh622`): 36 min 00 s, four stage phases in the TUI
|
|
1326
1484
|
(implement, tests, verify, report) instead of sixteen one-action rows, 22/24
|
|
1327
|
-
dispatches on `
|
|
1485
|
+
dispatches on `relay/gpt-5.6-luna`, auto-completed, 319/319; two planner
|
|
1328
1486
|
turns because of the false rejection above (planner turn 2: "an append-only
|
|
1329
1487
|
rule that the goal itself makes unsatisfiable").
|
|
1330
1488
|
|
|
@@ -1345,7 +1503,7 @@ behaviour, or pass the program you authored with `--program <file.json>`.
|
|
|
1345
1503
|
wrote sixteen one-action phases — no scheduling cost (phases never gate;
|
|
1346
1504
|
`dependsOn` does), but a TUI phase list carrying no information.
|
|
1347
1505
|
- Goal-4 rerun on this release (`bizp4s`, runtime `9af8fdf`, workers on
|
|
1348
|
-
`
|
|
1506
|
+
`relay/gpt-5.6-luna`): **25 min 13 s** (attempt 3: 44 min; 0.15.0: 72 min;
|
|
1349
1507
|
audited contract alone: 37 min), one planner turn (247 s, 16 % of wall),
|
|
1350
1508
|
parallelism 1.77, 3 repair rounds each fixing a real defect, 0 schema
|
|
1351
1509
|
retries, 0 corrections, auto-completed, 319/319, existing tests +174/−0.
|