bullswarm 0.38.0 → 0.38.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.
Files changed (96) hide show
  1. package/AGENTS.md +7 -1
  2. package/CHANGELOG.md +86 -0
  3. package/data/openrouter-benchmarks.json +8783 -8591
  4. package/docs/reference/cli.md +44 -6
  5. package/docs/reference/program.md +5 -3
  6. package/docs/reference/providers.md +1 -0
  7. package/package.json +1 -1
  8. package/providers/contrib/command-code/connector-history.json +36 -0
  9. package/providers/contrib/command-code/connector.json +78 -27
  10. package/skill/SKILL.md +23 -25
  11. package/skill/references/operations.md +13 -0
  12. package/skill/references/program.md +24 -1
  13. package/src/help.js +35 -6
  14. package/src/lib/cli-flags.js +1 -0
  15. package/src/lib/config.js +11 -2
  16. package/src/lib/model-pin.js +9 -1
  17. package/src/lib/provider-errors.js +26 -1
  18. package/src/lib/run-delegate.js +15 -0
  19. package/src/lib/strategy.js +161 -9
  20. package/src/lib/watch.js +43 -1
  21. package/src/provider-cli.js +5 -0
  22. package/src/providers/_schema.json +4 -0
  23. package/src/strategy-cli.js +83 -7
  24. package/src/workflow/action-validator.js +37 -4
  25. package/src/workflow/attempt-record.js +3 -0
  26. package/src/workflow/cli-goal.js +8 -3
  27. package/src/workflow/cli-launch.js +4 -3
  28. package/src/workflow/cli-plan.js +1 -1
  29. package/src/workflow/cli-steps.js +14 -2
  30. package/src/workflow/contract-v3.js +2 -2
  31. package/src/workflow/dashboard-agent-detail.js +117 -0
  32. package/src/workflow/dashboard-ansi.js +83 -0
  33. package/src/workflow/dashboard-cancel.js +37 -0
  34. package/src/workflow/dashboard-clamp.js +9 -0
  35. package/src/workflow/dashboard-clipboard.js +22 -0
  36. package/src/workflow/dashboard-details.js +60 -0
  37. package/src/workflow/dashboard-frame.js +134 -0
  38. package/src/workflow/dashboard-integration.js +80 -0
  39. package/src/workflow/dashboard-keys.js +49 -0
  40. package/src/workflow/dashboard-licence.js +108 -0
  41. package/src/workflow/dashboard-nav.js +164 -0
  42. package/src/workflow/dashboard-page-budget.js +22 -0
  43. package/src/workflow/dashboard-page-fleet.js +23 -0
  44. package/src/workflow/dashboard-page-help.js +80 -0
  45. package/src/workflow/dashboard-page-history.js +14 -0
  46. package/src/workflow/dashboard-page-stats.js +36 -0
  47. package/src/workflow/dashboard-pages.js +36 -0
  48. package/src/workflow/dashboard-panels.js +62 -0
  49. package/src/workflow/dashboard-render.js +194 -0
  50. package/src/workflow/dashboard-rows.js +127 -0
  51. package/src/workflow/dashboard-run-state.js +27 -0
  52. package/src/workflow/dashboard-stats-legend.js +186 -0
  53. package/src/workflow/dashboard-status.js +45 -0
  54. package/src/workflow/dashboard-value-text.js +122 -0
  55. package/src/workflow/dashboard.js +35 -1646
  56. package/src/workflow/dispatch-attempt-files.js +79 -0
  57. package/src/workflow/dispatch-deliverable.js +141 -0
  58. package/src/workflow/dispatch-handoff.js +86 -0
  59. package/src/workflow/dispatch-no-pool.js +94 -0
  60. package/src/workflow/dispatch-pools.js +103 -0
  61. package/src/workflow/dispatch-restart.js +122 -0
  62. package/src/workflow/dispatch-silence.js +47 -0
  63. package/src/workflow/dispatch-snapshot.js +245 -0
  64. package/src/workflow/goal-column.js +24 -2
  65. package/src/workflow/no-pool-why.js +8 -4
  66. package/src/workflow/pick-preview.js +7 -5
  67. package/src/workflow/retry-handoff.js +1 -1
  68. package/src/workflow/revision-v3.js +128 -13
  69. package/src/workflow/run-verdict.js +11 -2
  70. package/src/workflow/step-model-activity.js +232 -0
  71. package/src/workflow/step-model-basis-words.js +87 -0
  72. package/src/workflow/step-model-cost.js +178 -0
  73. package/src/workflow/step-model-counts.js +61 -0
  74. package/src/workflow/step-model-duration.js +29 -0
  75. package/src/workflow/step-model-events.js +110 -0
  76. package/src/workflow/step-model-files.js +67 -0
  77. package/src/workflow/step-model-pairs.js +162 -0
  78. package/src/workflow/step-model-presentation.js +233 -0
  79. package/src/workflow/step-model-report.js +62 -0
  80. package/src/workflow/step-model-stream.js +150 -0
  81. package/src/workflow/step-model-text.js +94 -0
  82. package/src/workflow/step-model-tool-kinds.js +56 -0
  83. package/src/workflow/step-model-tool-text.js +94 -0
  84. package/src/workflow/step-model-turn-rows.js +179 -0
  85. package/src/workflow/step-model-turns.js +179 -0
  86. package/src/workflow/step-model-usage.js +195 -0
  87. package/src/workflow/step-model-values.js +45 -0
  88. package/src/workflow/step-model.js +21 -1973
  89. package/src/workflow/step-route.js +7 -3
  90. package/src/workflow/step-vocabulary.js +5 -2
  91. package/src/workflow/time-box.js +15 -0
  92. package/src/workflow/v2-dispatch.js +70 -808
  93. package/src/workflow/v2-outcome.js +2 -0
  94. package/src/workflow/v2-planner.js +1 -0
  95. package/src/workflow/v2-revision.js +21 -1
  96. package/src/workflow/v2-state.js +5 -0
package/AGENTS.md CHANGED
@@ -51,11 +51,17 @@ before doing anything. Their readers and stored formats are unchanged.
51
51
  outlives a step is the 100% refusal marker a usage limit writes when the
52
52
  meter cannot be read, and it counts only when its reset was named or
53
53
  measured, never guessed (`refusalResetKnown` in `src/meters/framework.js`).
54
+ Beside it sits one plan fact: `state.strategy.planExcludedModels[pool]`,
55
+ the models a provider said that pool's subscription does not include
56
+ (failure kind `model-not-in-plan`). It is a fact about the plan, like its
57
+ price, not a spent or dead pool: the pool stays pickable with its other
58
+ models, and the record ends when the subscription changes or the operator
59
+ turns the model back on (`src/lib/strategy.js`).
54
60
  Recursion depth is core-owned via env (`BULLSWARM_DEPTH`).
55
61
  5. Workflow dispatches honor the same guarantees as single runs, in
56
62
  `src/workflow/v2-dispatch.js`: `BULLSWARM_DEPTH` is checked and propagated
57
63
  (`assertDepthAllowed` and `childDepthEnv` in `dispatchV2Action`), pools at
58
- a spent window are excluded (`preparePools`), and a sign-in failure is
64
+ a spent window are excluded (`preparePools`, in `dispatch-pools.js`), and a sign-in failure is
59
65
  failure kind `auth`: the step's retry skips every pool in the dead
60
66
  credential's group (`upstreamGroupOf`), a choice held for that dispatch
61
67
  only and never stored. A step's `route`, the run's pin and the step's
package/CHANGELOG.md CHANGED
@@ -2,6 +2,92 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 0.38.2 — Three large files split into one-concept modules
6
+
7
+ - internal: the three largest workflow files are split into one-concept
8
+ modules, with no behaviour change. `src/workflow/dashboard.js` goes from
9
+ 3,613 lines to 2,002 plus 24 `dashboard-*.js` modules (1,837 lines);
10
+ `step-model.js` from 2,540 to 588 plus 18 `step-model-*.js` modules (2,213
11
+ lines); `v2-dispatch.js` from 2,039 to 1,191 plus 8 `dispatch-*.js` modules
12
+ (917 lines). Each old file still exports the names the product reads from
13
+ it; names only tests read are now imported from the module that holds them.
14
+
15
+ ## 0.38.1 — Fewer wasted retries, honest no-pool reasons
16
+
17
+ - no eligible pool: when a pool lacks a tier only because free models are
18
+ off for it, or because its plan was seen not to include the tier's model,
19
+ the reason now says so (`free models are off for <pool>`, `<pool> has no
20
+ <tier>-tier model its plan includes (plan excludes <models>)`, or `<model>
21
+ is not in <pool>'s plan` for a model the step names), also under a step's
22
+ route and in `run --dry-run`. Before, a routed step read only `no
23
+ enabled pool left has a model on the <tier> tier`.
24
+ - dispatch: a worker can mark a blocker it may not change by starting a `##
25
+ Not done` line with `outside:` (`- outside: tests/router.test.js fails on
26
+ main before this change`); work tasks now ask for this. A step that fails
27
+ `failed-evidence`, `not-produced` or `semantic` with such a line skips its
28
+ one automatic retry and comes back to you at once, its `why` ending `retry
29
+ skipped: the worker reported a blocker outside this step: <item>`; the saved
30
+ attempt lists every such item as `outsideBlockers`. `schema` and process
31
+ failures keep their retry.
32
+ - workflow add: a fragment may carry `blocks: {"<new step id>": ["<existing
33
+ step id>", ...]}` to make existing steps that have not started also wait for
34
+ a step it adds, for example a fix in front of a report (then `step accept`
35
+ the failed step). It is the one change a fragment may make to an existing
36
+ step; a started step, a loop's step, a gate, a loop or a cycle is refused in
37
+ fragment words. A step already blocked behind a failed step stays blocked
38
+ (it is not reset and blocked again). The output prints `waits step <id>
39
+ now also waits for <ids>`, and `--json` carries `waits`.
40
+ - advisories: a new `suite-wider-than-files` advisory names a step that owns
41
+ files but runs a command check naming none of them (a bare `npm test`),
42
+ because a failure elsewhere in the suite would fail a step that cannot fix
43
+ it. Scope the command, or run the suite in a check step. Like every advisory
44
+ it never refuses a program or changes an exit code.
45
+ - advisories: with `--json`, `workflow goal` and `workflow plan validate` no
46
+ longer print advisory text; the advisories are in the JSON as `advisories`
47
+ (the detached launch document always, a foreground result when there are
48
+ any). In human mode `plan validate` now prints them on stderr, as `workflow
49
+ goal` does.
50
+ - run --json: the verdict has top-level `pool` and `model`, the last attempt's
51
+ (null when nothing was dispatched). `pick` keeps them too. Small flat
52
+ objects such as the reasoning record now print on one line, so the verdict
53
+ stays within 60 lines.
54
+ - workflow runs: the goal column skips constraint sentences that follow a
55
+ dropped leading folder (`Work in /abs/path (git branch x). Do not commit.
56
+ Fix the parser crash.` shows `Fix the parser crash.`); a goal that is only
57
+ constraints shows the folder name.
58
+ - strategy: new `bullswarm strategy set-free <allow|never> [--pool <name>]
59
+ --yes` (and `set-free reset --pool <name>`) stops free models being
60
+ suggested, applied or dispatched, for every pool or one; a pool's own
61
+ setting wins. A pool left with only free models for a tier is out of that
62
+ tier with the reason `free models are off for <pool>`: a step no pool can
63
+ take says it in its `why` and `routeCandidates`, `run --dry-run` says it
64
+ too, and `strategy show` prints it under the tier. A model you name
65
+ yourself is still allowed. `strategy show` prints a `free models:` line, and
66
+ the low tier's basis stops putting free models first when every pool has
67
+ them off.
68
+ - providers: a connector may list `modelPlanSignatures`, the text its CLI
69
+ prints when the subscription's plan does not include the requested model
70
+ (Command Code: `MODEL_NOT_IN_PLAN`). Only the provider's error output is
71
+ read: stderr, and on an event stream the records the provider flags as
72
+ errors (read even when the worker exits 0), so a worker's reply that quotes
73
+ the code, even on a line starting `Error:` or in a clean final record, is
74
+ still a reply. A hit is the new failure kind
75
+ `model-not-in-plan` (a process failure, labelled `model not in plan`): the
76
+ step's retry goes to another pool, and `state.strategy.planExcludedModels`
77
+ records the model for that pool. The pool keeps running its other models;
78
+ strategy, rungs, pins and dispatch pass that model over on that pool only.
79
+ `strategy show` prints `not in plan: <pool>: <model>`. `strategy
80
+ include-model <model>`, a changed `strategy set-subscription`, or turning
81
+ the model back on for the pool clears it, and `workflow resume` reruns such
82
+ a step.
83
+ - command-code: models are ranked by family (astra, sol, gpt, terra, luna,
84
+ mini, fable, opus, sonnet, haiku, grok), so a newly listed model is ranked
85
+ the day it appears and the newer version of a family ranks first
86
+ (`gpt-6.1-sol` above `gpt-5.6-sol`, `claude-opus-5-5` above
87
+ `claude-opus-4-7`). Dated prices and the deliberate overrides (`gpt-5.4` and
88
+ `grok-4.5` medium, `minimax-m3` high) stay as rows; kimi and glm stay
89
+ unranked.
90
+
5
91
  ## 0.38.0 — The removals release: v3 only, saved runs view-only, less code
6
92
 
7
93
  - removed: the mechanisms program v3 replaced (0.37.0) no longer run. The