bullswarm 0.35.1 → 0.35.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 +205 -13
- package/GOAL.md +1 -1
- package/data/openrouter-benchmarks.json +8463 -8463
- package/docs/audits/2026-09-09-codebase-audit.md +11 -11
- package/docs/design/cost-0.34.0/README.md +1 -1
- package/docs/design/cost-0.34.0/meter-precision-study.md +19 -19
- package/docs/design/dashboard-prototype.html +20 -20
- package/docs/design/dashboard-split/README.md +30 -30
- package/docs/design/mod-step-v2/README.md +29 -0
- package/docs/design/mod-step-v2/failed-detail-120.txt +26 -0
- package/docs/design/mod-step-v2/failed-detail-55.txt +32 -0
- package/docs/design/mod-step-v2/failed-overview-120.txt +26 -0
- package/docs/design/mod-step-v2/failed-overview-55.txt +32 -0
- package/docs/design/mod-step-v2/finished-detail-120.txt +355 -0
- package/docs/design/mod-step-v2/finished-detail-55.txt +604 -0
- package/docs/design/mod-step-v2/finished-overview-120.txt +63 -0
- package/docs/design/mod-step-v2/finished-overview-55.txt +54 -0
- package/docs/design/mod-step-v2/running-detail-120.txt +24 -0
- package/docs/design/mod-step-v2/running-detail-55.txt +28 -0
- package/docs/design/mod-step-v2/running-overview-120.txt +24 -0
- package/docs/design/mod-step-v2/running-overview-55.txt +28 -0
- package/docs/design/mod-step-v2/usage-no-run-after.txt +19 -0
- package/docs/design/mod-step-v2/usage-no-run-before.txt +16 -0
- package/docs/design/pricing-0.35.2/auto-reprice-study.md +233 -0
- package/docs/design/pricing-0.35.2/retention-and-capture-study.md +178 -0
- package/docs/design/prototype-frames/README.md +1 -2
- package/docs/design/prototype-frames/history-120.tagged.txt +18 -18
- package/docs/design/prototype-frames/history-120.txt +18 -18
- package/docs/design/prototype-frames/history-55.tagged.txt +10 -10
- package/docs/design/prototype-frames/history-55.txt +10 -10
- package/docs/design/prototype-frames/home-120.tagged.txt +4 -4
- package/docs/design/prototype-frames/home-120.txt +4 -4
- package/docs/design/prototype-frames/home-55.tagged.txt +2 -2
- package/docs/design/prototype-frames/home-55.txt +2 -2
- package/docs/design/prototype-frames/run-120.tagged.txt +7 -7
- package/docs/design/prototype-frames/run-120.txt +7 -7
- package/docs/design/prototype-frames/run-55.tagged.txt +5 -5
- package/docs/design/prototype-frames/run-55.txt +5 -5
- package/docs/design/prototype-frames/stats-projects-120.tagged.txt +2 -2
- package/docs/design/prototype-frames/stats-projects-120.txt +2 -2
- package/docs/design/prototype-frames/stats-projects-55.tagged.txt +2 -2
- package/docs/design/prototype-frames/stats-projects-55.txt +2 -2
- package/docs/design/prototype-frames/step-120.tagged.txt +6 -6
- package/docs/design/prototype-frames/step-120.txt +6 -6
- package/docs/design/prototype-frames/step-55.tagged.txt +5 -5
- package/docs/design/prototype-frames/step-55.txt +5 -5
- package/docs/design/prototype-frames-0.33.1/budget-120-v2.txt +2 -2
- package/docs/design/prototype-frames-0.33.1/budget-120-v3.txt +2 -2
- package/docs/design/prototype-frames-0.33.1/budget-120.txt +4 -4
- package/docs/design/prototype-frames-0.33.1/budget-55-v2.txt +2 -2
- package/docs/design/prototype-frames-0.33.1/budget-55-v3.txt +2 -2
- package/docs/design/prototype-frames-0.33.1/budget-55.txt +2 -2
- package/docs/design/prototype-frames-0.33.1/budget-README.md +3 -3
- package/docs/design/prototype-frames-0.33.1/home-today-120-v2.txt +4 -4
- package/docs/design/prototype-frames-0.33.1/home-today-120.txt +5 -5
- package/docs/design/prototype-frames-0.33.1/home-today-55-v2.txt +3 -3
- package/docs/design/prototype-frames-0.33.1/home-today-55.txt +6 -6
- package/docs/design/prototype-frames-0.33.1/home-today-README.md +10 -10
- package/docs/design/providers-0.35.2/CHANGELOG-draft.md +27 -0
- package/docs/design/providers-0.35.2/README.md +172 -0
- package/docs/design/stats-frames-0.33.2/spending-120.txt +2 -2
- package/docs/design/stats-frames-0.33.2/spending-55.txt +4 -4
- package/docs/design/stats-refactor-0.33.2.md +10 -10
- package/docs/design/step-economy-0.35.2/README.md +431 -0
- package/docs/design/step-page-0.35.0/README.md +31 -31
- package/docs/design/step-page-0.35.0/frames/real-failed-120.txt +6 -6
- package/docs/design/step-page-0.35.0/frames/real-failed-200.txt +6 -6
- package/docs/design/step-page-0.35.0/frames/real-failed-55.txt +7 -7
- package/docs/design/step-page-0.35.0/frames/real-finished-120.txt +2 -2
- package/docs/design/step-page-0.35.0/frames/real-finished-200.txt +2 -2
- package/docs/design/step-page-0.35.0/frames/real-finished-55.txt +3 -3
- package/docs/design/step-page-0.35.0/frames/real-running-120.txt +6 -6
- package/docs/design/step-page-0.35.0/frames/real-running-200.txt +6 -6
- package/docs/design/step-page-0.35.0/frames/running-120.txt +1 -1
- package/docs/design/step-page-0.35.0/frames/running-200.txt +3 -3
- package/docs/design/step-page-0.35.0/frames/running-55.txt +1 -1
- package/docs/design/tidy-0.35.1/README.md +1 -1
- package/docs/design/tidy-0.35.1/frames/colour/real-home-200.txt +41 -41
- package/docs/design/tidy-0.35.1/frames/colour/real-home-55.txt +30 -30
- package/docs/design/tidy-0.35.1/frames/colour/real-step-detail-finished-200.txt +55 -55
- package/docs/design/tidy-0.35.1/frames/colour/real-step-detail-finished-55.txt +42 -42
- package/docs/design/tidy-0.35.1/frames/colour/real-step-overview-finished-200.txt +30 -30
- package/docs/design/tidy-0.35.1/frames/colour/real-step-overview-finished-55.txt +33 -33
- package/docs/design/tidy-0.35.1/frames/colour/real-step-overview-running-200.txt +3 -3
- package/docs/design/tidy-0.35.1/frames/colour/real-step-overview-running-55.txt +6 -6
- package/docs/design/tidy-0.35.1/frames/colour/real-task-200.txt +2 -2
- package/docs/design/tidy-0.35.1/frames/colour/real-task-55.txt +1 -1
- package/docs/design/tidy-0.35.1/frames/home-120.txt +1 -1
- package/docs/design/tidy-0.35.1/frames/home-200.txt +1 -1
- package/docs/design/tidy-0.35.1/frames/home-55.txt +1 -1
- package/docs/design/tidy-0.35.1/frames/real-home-120.txt +41 -41
- package/docs/design/tidy-0.35.1/frames/real-home-200.txt +41 -41
- package/docs/design/tidy-0.35.1/frames/real-home-55.txt +29 -29
- package/docs/design/tidy-0.35.1/frames/real-stats-model-120.txt +1 -1
- package/docs/design/tidy-0.35.1/frames/real-stats-model-200.txt +1 -1
- package/docs/design/tidy-0.35.1/frames/real-stats-model-55.txt +1 -1
- package/docs/design/tidy-0.35.1/frames/real-stats-spending-120.txt +15 -15
- package/docs/design/tidy-0.35.1/frames/real-stats-spending-200.txt +14 -14
- package/docs/design/tidy-0.35.1/frames/real-stats-spending-55.txt +17 -17
- package/docs/design/tidy-0.35.1/frames/real-step-detail-failed-120.txt +55 -55
- package/docs/design/tidy-0.35.1/frames/real-step-detail-failed-200.txt +55 -55
- package/docs/design/tidy-0.35.1/frames/real-step-detail-failed-55.txt +40 -40
- package/docs/design/tidy-0.35.1/frames/real-step-detail-finished-120.txt +55 -55
- package/docs/design/tidy-0.35.1/frames/real-step-detail-finished-200.txt +55 -55
- package/docs/design/tidy-0.35.1/frames/real-step-detail-finished-55.txt +42 -42
- package/docs/design/tidy-0.35.1/frames/real-step-detail-running-120.txt +54 -54
- package/docs/design/tidy-0.35.1/frames/real-step-detail-running-200.txt +55 -55
- package/docs/design/tidy-0.35.1/frames/real-step-detail-running-55.txt +51 -51
- package/docs/design/tidy-0.35.1/frames/real-step-overview-failed-120.txt +2 -2
- package/docs/design/tidy-0.35.1/frames/real-step-overview-failed-200.txt +2 -2
- package/docs/design/tidy-0.35.1/frames/real-step-overview-failed-55.txt +1 -1
- package/docs/design/tidy-0.35.1/frames/real-step-overview-finished-120.txt +30 -30
- package/docs/design/tidy-0.35.1/frames/real-step-overview-finished-200.txt +30 -30
- package/docs/design/tidy-0.35.1/frames/real-step-overview-finished-55.txt +32 -32
- package/docs/design/tidy-0.35.1/frames/real-step-overview-running-120.txt +2 -2
- package/docs/design/tidy-0.35.1/frames/real-step-overview-running-200.txt +2 -2
- package/docs/design/tidy-0.35.1/frames/real-step-overview-running-55.txt +5 -5
- package/docs/design/tidy-0.35.1/frames/real-task-120.txt +2 -2
- package/docs/design/tidy-0.35.1/frames/real-task-200.txt +2 -2
- package/docs/design/tidy-0.35.1/frames/real-task-55.txt +1 -1
- package/docs/design/tidy-0.35.1/run-v2/README.md +1 -1
- package/docs/design/tidy-0.35.1/run-v2/after-200.txt +4 -4
- package/docs/design/tidy-0.35.1/run-v2/after-55.txt +2 -2
- package/docs/design/tidy-0.35.1/run-v2/before-200.txt +2 -2
- package/docs/design/tidy-0.35.1/run-v2/before-55.txt +2 -2
- package/docs/design/tidy-0.35.1/step-v2/0.35.2-before-detail-finished-200.txt +60 -0
- package/docs/design/tidy-0.35.1/step-v2/0.35.2-before-detail-finished-55.txt +60 -0
- package/docs/design/tidy-0.35.1/step-v2/0.35.2-before-overview-finished-200.txt +38 -0
- package/docs/design/tidy-0.35.1/step-v2/0.35.2-before-overview-finished-55.txt +71 -0
- package/docs/design/tidy-0.35.1/step-v2/0.35.2-detail-finished-200.txt +60 -0
- package/docs/design/tidy-0.35.1/step-v2/0.35.2-detail-finished-55.txt +60 -0
- package/docs/design/tidy-0.35.1/step-v2/0.35.2-detail-tool-open-200.txt +60 -0
- package/docs/design/tidy-0.35.1/step-v2/0.35.2-detail-tool-open-55.txt +60 -0
- package/docs/design/tidy-0.35.1/step-v2/0.35.2-overview-finished-200.txt +33 -0
- package/docs/design/tidy-0.35.1/step-v2/0.35.2-overview-finished-55.txt +42 -0
- package/docs/design/tidy-0.35.1/step-v2/0.35.2-overview-running-200.txt +25 -0
- package/docs/design/tidy-0.35.1/step-v2/0.35.2-overview-running-55.txt +42 -0
- package/docs/design/tidy-0.35.1/step-v2/README.md +55 -2
- package/docs/dynamic-workflow-handoff.md +2 -2
- package/docs/dynamic-workflow-v2-execution-plan.md +1 -1
- package/docs/experiments/2026-08-28-trending-ai-autonomy.md +31 -61
- package/docs/experiments/2026-08-29-dogfood-bullswarm-builds-bullswarm.md +3 -3
- package/docs/experiments/2026-09-06-caller-planner-evaluation.md +3 -3
- package/docs/guide/concepts.md +1 -1
- package/docs/guide/cost.md +73 -11
- package/docs/guide/observing.md +175 -38
- package/docs/guide/routing.md +13 -11
- package/docs/handoff-2026-09-13-custom-provider-config.md +2 -2
- package/docs/integration-audit-2026-08-31.md +32 -32
- package/docs/integrations/claude-code.md +1 -1
- package/docs/integrations/issue-watcher.md +3 -3
- package/docs/plans/0.33.1.goal.txt +1 -1
- package/docs/plans/0.33.1.program.json +13 -13
- package/docs/plans/0.33.2-stats.goal.txt +1 -1
- package/docs/plans/0.33.2-stats.program.json +7 -7
- package/docs/plans/cost-0.34.0.program.json +10 -10
- package/docs/plans/cost-audit.goal.txt +4 -4
- package/docs/plans/cost-audit.program.json +8 -8
- package/docs/plans/dashboard-0.33-fidelity.goal.txt +1 -1
- package/docs/plans/dashboard-0.33-fidelity.md +5 -5
- package/docs/plans/dashboard-0.33-fidelity.program.json +10 -10
- package/docs/plans/dashboard-0.33-fidelity.rev2.json +13 -13
- package/docs/plans/dashboard-0.33-review.goal.txt +8 -8
- package/docs/plans/dashboard-0.33-review.program.json +6 -6
- package/docs/plans/dashboard-0.33.goal.txt +1 -1
- package/docs/plans/dashboard-0.33.program.json +10 -10
- package/docs/plans/dashboard-split.program.json +5 -5
- package/docs/plans/fidelity.program.json +2 -2
- package/docs/plans/handoff.goal.txt +1 -1
- package/docs/plans/handoff.program.json +5 -5
- package/docs/plans/handoff.rev2.json +5 -5
- package/docs/plans/handoff.rev3.json +6 -6
- package/docs/plans/meter-ledger.program.json +6 -6
- package/docs/plans/providers-0.35.2.goal.txt +11 -0
- package/docs/plans/providers-0.35.2.program.json +160 -0
- package/docs/plans/step-page-0.35.0-build.goal.txt +1 -1
- package/docs/plans/step-page-0.35.0-build.program.json +7 -7
- package/docs/plans/step-page-0.35.0-design.goal.txt +2 -2
- package/docs/plans/step-page-0.35.0-design.program.json +3 -3
- package/docs/plans/tidy-0.35.1-colour.program.json +4 -4
- package/docs/plans/tidy-0.35.1.goal.txt +1 -1
- package/docs/plans/tidy-0.35.1.program.json +11 -11
- package/docs/reference/cli.md +151 -7
- package/docs/reference/configuration.md +36 -1
- package/docs/reference/program.md +31 -1
- package/docs/reference/providers.md +80 -2
- package/docs/reference/result.md +78 -1
- package/docs/studies/cost-audit-2026-09-18/budget-page-audit.md +50 -51
- package/docs/studies/cost-audit-2026-09-18/claude-actual-vs-recorded.md +14 -14
- package/docs/studies/cost-audit-2026-09-18/cost-fix-plan.md +5 -5
- package/docs/studies/cost-audit-2026-09-18/estimator-audit.md +13 -13
- package/docs/studies/cost-audit-2026-09-18/grok-codex-actual-vs-recorded.md +38 -39
- package/docs/studies/cost-audit-2026-09-18/step-timeline-120.txt +2 -2
- package/docs/studies/cost-audit-2026-09-18/step-timeline-55.txt +2 -2
- package/docs/studies/cost-audit-2026-09-18/step-timeline-design.md +8 -8
- package/docs/studies/portal-token-diet.md +24 -24
- package/docs/workflow-agent-usability-audit-2026-08-27.md +4 -4
- package/mods/bullswarm/.claude-plugin/plugin.json +1 -1
- package/mods/bullswarm/README.md +4 -4
- package/mods/bullswarm/hooks/pane.tsx +72 -44
- package/mods/bullswarm/hooks/register.ts +62 -2
- package/mods/bullswarm/hooks/step.ts +286 -374
- package/package.json +1 -1
- package/providers/contrib/command-code/connector.json +48 -3
- package/providers/contrib/command-code/provider.mjs +22 -1
- package/providers/contrib/opencode/connector.json +16 -0
- package/providers/contrib/opencode/provider.mjs +15 -0
- package/skill/SKILL.md +112 -21
- package/skill/references/operations.md +162 -17
- package/skill/references/program.md +28 -1
- package/src/cli.js +137 -17
- package/src/help.js +178 -16
- package/src/home-cli.js +170 -18
- package/src/lib/cli-flags.js +9 -2
- package/src/lib/glyphs.js +2 -0
- package/src/lib/prices.js +16 -5
- package/src/lib/quota.js +460 -13
- package/src/lib/retention.js +541 -0
- package/src/lib/route.js +93 -20
- package/src/lib/stale.js +457 -0
- package/src/lib/state.js +141 -6
- package/src/lib/subscription-cost.js +6 -4
- package/src/lib/transcripts/claude-code.js +146 -30
- package/src/lib/transcripts/codex.js +148 -30
- package/src/lib/transcripts/command-code.js +417 -0
- package/src/lib/transcripts/index.js +142 -32
- package/src/lib/transcripts/indexing.js +134 -0
- package/src/lib/transcripts/opencode.js +568 -0
- package/src/lib/watch.js +372 -70
- package/src/meters/framework.js +1 -1
- package/src/provider-cli.js +13 -0
- package/src/providers/_schema.json +10 -2
- package/src/providers/claude-code/connector.json +15 -1
- package/src/providers/claude-code/provider.mjs +9 -1
- package/src/providers/codex/connector.json +9 -1
- package/src/providers/codex/provider.mjs +9 -1
- package/src/providers/grok/connector.json +35 -1
- package/src/providers/grok/provider.mjs +9 -1
- package/src/setup.js +8 -0
- package/src/workflow/action-validator.js +54 -7
- package/src/workflow/budget-model.js +71 -9
- package/src/workflow/budget-view.js +18 -0
- package/src/workflow/cli.js +117 -3
- package/src/workflow/dashboard.js +178 -21
- package/src/workflow/history-view.js +105 -22
- package/src/workflow/home-model.js +180 -24
- package/src/workflow/home-view.js +576 -268
- package/src/workflow/reconcile.js +832 -0
- package/src/workflow/reprice.js +167 -45
- package/src/workflow/rollup.js +5 -2
- package/src/workflow/run-model.js +14 -6
- package/src/workflow/run-view.js +55 -10
- package/src/workflow/runs-view.js +5 -3
- package/src/workflow/spend-facts.js +152 -0
- package/src/workflow/stat-kit.js +6 -3
- package/src/workflow/stats-view.js +36 -19
- package/src/workflow/step-model.js +230 -72
- package/src/workflow/step-view.js +402 -117
- package/src/workflow/time-box.js +276 -0
- package/src/workflow/usage-preference.js +22 -0
- package/src/workflow/usage-view.js +2 -1
- package/src/workflow/v2-dispatch.js +148 -6
- package/src/workflow/v2-outcome.js +153 -11
- package/src/workflow/v2-planner.js +17 -4
- package/src/workflow/v2-revision.js +4 -1
- package/src/workflow/v2-runtime.js +348 -18
- package/src/workflow/v2-state.js +153 -2
- package/src/workflow/verify-rounds.js +828 -0
- package/src/workflow/watch-cli.js +206 -17
- package/docs/design/owner-review-2026-09-18/budget-page-current-0.33.1.png +0 -0
- package/docs/design/owner-review-2026-09-18/budget.jpeg +0 -0
- package/docs/design/owner-review-2026-09-18/history-unknown-project.jpeg +0 -0
- package/docs/design/owner-review-2026-09-18/home-licence-today-missing-codex-0.33.1.png +0 -0
- package/docs/design/owner-review-2026-09-18/home-phone-landscape.jpeg +0 -0
- package/docs/design/owner-review-2026-09-18/home-phone-portrait.jpeg +0 -0
- package/docs/design/owner-review-2026-09-18/round2-budget-phone.jpeg +0 -0
- package/docs/design/owner-review-2026-09-18/round2-trends-30d-horizontal-split.png +0 -0
- package/docs/design/owner-review-2026-09-18/round2-trends-desktop.png +0 -0
- package/docs/design/owner-review-2026-09-18/round2-trends-phone.png +0 -0
- package/docs/design/owner-review-2026-09-18/run-page-budget.jpeg +0 -0
- package/docs/design/owner-review-2026-09-18/runs-list.jpeg +0 -0
- package/docs/design/owner-review-2026-09-18/stats-pools.jpeg +0 -0
- package/docs/design/owner-review-2026-09-18/stats-trends-spent.jpeg +0 -0
- package/docs/design/owner-review-2026-09-19/stats-overview-current.png +0 -0
- package/docs/design/prototype-shots/Screenshot 2026-09-17 at 9.14.40/342/200/257AM.png +0 -0
- package/docs/design/prototype-shots/Screenshot 2026-09-17 at 9.15.23/342/200/257AM.png +0 -0
- package/docs/design/prototype-shots/Screenshot 2026-09-17 at 9.16.07/342/200/257AM.png +0 -0
- package/docs/design/prototype-shots/Screenshot 2026-09-17 at 9.16.18/342/200/257AM.png +0 -0
- package/docs/design/stats-frames-0.33.2/budget-120.png +0 -0
- package/docs/design/stats-frames-0.33.2/budget-55.png +0 -0
- package/docs/design/stats-frames-0.33.2/stats-spending-120.png +0 -0
- package/docs/studies/cost-audit-2026-09-18/owner-budget-page-2026-09-18.png +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,197 @@
|
|
|
1
1
|
# bullswarm changelog
|
|
2
2
|
|
|
3
|
+
## 0.35.2 — the Step page reads like a transcript; prices without a command, honest totals, a home that stops growing
|
|
4
|
+
|
|
5
|
+
- step: detail is now a scrollable transcript of every turn in order: the full
|
|
6
|
+
response followed by one row per command or tool call; opening a turn or
|
|
7
|
+
tool row still reaches every captured event field, argument, result and exit.
|
|
8
|
+
- step: overview opens on the latest ten turns on desktop and five on phones,
|
|
9
|
+
newest at the bottom, with one `turns 1–N · … · click for detail` line for
|
|
10
|
+
earlier work; a followed live window slides until the reader moves it.
|
|
11
|
+
- step: `overview · detail` sits in the activity heading, right after the
|
|
12
|
+
heading word, each word a click target; `v`, the footer and Help name the
|
|
13
|
+
same views, and standalone tasks use the same page.
|
|
14
|
+
- step: clicking a turn head toggles it exactly like Enter, and hover lights
|
|
15
|
+
only the turn's text rather than its padding or desktop side column.
|
|
16
|
+
- run: each timeline attempt row opens Step on that exact attempt; step and
|
|
17
|
+
phase rows that name no attempt continue to open the latest one.
|
|
18
|
+
- grok: `tool_call_update` captures merge into the `tool_call` with the same id,
|
|
19
|
+
so a call has one named row and one count instead of extra nameless `agent`
|
|
20
|
+
rows, while every update remains reachable from transcript detail.
|
|
21
|
+
- providers: every shipped connector declares `eventStream.toolKinds`, mapping
|
|
22
|
+
its tool vocabulary to command, read, search, edit or other; the Step model
|
|
23
|
+
contains no provider-specific tool-name table.
|
|
24
|
+
- design: the Step v2 record adds transcript, latest-turn-window and toggle
|
|
25
|
+
rules with before/after frames at 55 and 200 columns; committed real text and
|
|
26
|
+
colour frames are regenerated from scrubbed fixtures.
|
|
27
|
+
- mod: the Claude Code Step pane draws the same v2 header, turns, result, task,
|
|
28
|
+
cost, phone order, colours, transcript toggle and latest-turn window from
|
|
29
|
+
`action show --json`, for workflow steps and standalone tasks alike.
|
|
30
|
+
- mod: Usage opens with `u` or a click even with no workflow running, and back
|
|
31
|
+
returns to idle; validated temporary chunks carry large Step records within
|
|
32
|
+
hook limits and are removed immediately.
|
|
33
|
+
- reprice: an incremental reconciler prices every terminal attempt that is
|
|
34
|
+
still unknown or a bytes/4 estimate, with no user command. The kernel prices
|
|
35
|
+
its own run at quiet boundaries and before the result and rollup are
|
|
36
|
+
written; a single `bullswarm run` whose usage is unmeasured starts a detached
|
|
37
|
+
pass 30 s after it ends (only when the pool's provider keeps transcripts);
|
|
38
|
+
the dashboard starts one detached, throttled pass (one per 5 minutes, one at
|
|
39
|
+
a time) after its first paint and says `pricing N older records…` while it
|
|
40
|
+
runs. A per-attempt ledger in `pricing/reconcile.json` retries recent
|
|
41
|
+
attempts after 1 and 10 minutes, gives older ones one try, and reopens an
|
|
42
|
+
attempt only when a new or grown transcript covers its window, so a second
|
|
43
|
+
pass does nothing. The automatic pass never makes an attempt worse: no match
|
|
44
|
+
or an ambiguous match leaves it as it was. `workflow reprice` stays the
|
|
45
|
+
manual full backfill and gains `--incremental` (with `--trigger`,
|
|
46
|
+
`--transcript-home`, `--delay-ms`). On a copy of a real home the first pass
|
|
47
|
+
priced 165 of 281 eligible attempts; the second took milliseconds and wrote
|
|
48
|
+
nothing.
|
|
49
|
+
- transcripts: Codex and Claude matching tries the session id, then the task
|
|
50
|
+
text (the task-file path or exact text in the first user message), then cwd
|
|
51
|
+
+ time window; more than one candidate stays unknown, and the cwd/time step
|
|
52
|
+
skips transcripts that quote a different task file. On the same copy the
|
|
53
|
+
formerly ambiguous attempts resolved by task text: codex 100, claude-code 19,
|
|
54
|
+
claude-code:acme 14. Indexes store prompt paths and hashes, never the text.
|
|
55
|
+
Single tasks are priced too; a task's window now ends at its `endedAt`.
|
|
56
|
+
- capture: each attempt records an immutable `capture` block when its worker
|
|
57
|
+
exits — provider session id and its source, model, exclusive token classes,
|
|
58
|
+
provider-reported cost, exit code and signal — before the end meter read and
|
|
59
|
+
the transcript lookup, and persists it at once. Later pricing may upgrade an
|
|
60
|
+
estimate but never downgrades provider-reported usage. Planner and scout
|
|
61
|
+
attempts are captured too.
|
|
62
|
+
- grok: the final `end` event is decoded (session id, token classes, cost),
|
|
63
|
+
proven on a real grok 1.0.13 stream checked in scrubbed as
|
|
64
|
+
`tests/fixtures/stream/grok-capture.jsonl`; `"rate limit"` is no longer a
|
|
65
|
+
grok auth signature, so a grok 429 is a throttle, not a 10-minute auth pause.
|
|
66
|
+
- command-code: launched without `--no-session`, so its session transcript
|
|
67
|
+
exists afterwards and the reader matches it by session id.
|
|
68
|
+
- money: every money total on Home, Runs, Run, Stats and Budget that includes
|
|
69
|
+
unmeasured attempts reads `at least $X · N unmeasured`; a scope with no
|
|
70
|
+
recorded amount reads `api unknown`. Budget prints a `spent …` line per pool,
|
|
71
|
+
and the Stats hover, axis and coverage note use the same words. One month
|
|
72
|
+
length, `DAYS_PER_MONTH = 30.4375` (365.25/12), is used everywhere.
|
|
73
|
+
- home: the window-share cell shows the measured share from
|
|
74
|
+
`calibration/<pool>.json` (`5.0% measured`) when samples attribute a window
|
|
75
|
+
drop to today's runs, the labelled pace estimate only when none do, and a
|
|
76
|
+
dash otherwise. The recent list shows finished runs only — a reopened run
|
|
77
|
+
leaves it — and each row's mark is the Run page header's mark; a
|
|
78
|
+
non-terminal run's index row no longer carries a finish time.
|
|
79
|
+
- retention: `state.json.retention` `{ "enabled": true, "workspacesDays": 7 }`
|
|
80
|
+
removes the `workspaces/` copies inside terminal runs older than the limit,
|
|
81
|
+
in a detached background sweep started by the kernel, watch completion and
|
|
82
|
+
the dashboard (at most every 6 hours, one at a time, only when a run holds a
|
|
83
|
+
workspace copy). Records, reports, streams, task/out markdown, interrupted
|
|
84
|
+
runs and any leased run are never touched. `bullswarm home prune
|
|
85
|
+
[--dry-run|--yes] [--days n]` lists or removes the same set with bytes, and
|
|
86
|
+
`bullswarm home status` shows the policy, bytes on disk and the last prune
|
|
87
|
+
and reprice results.
|
|
88
|
+
- pauses: a limit notice pauses a pool for quota only on proof — the pool's
|
|
89
|
+
own meter at 95% or more on a running window, or a provider line that says a
|
|
90
|
+
usage window is spent and names its reset. Everything else, such as
|
|
91
|
+
`Rate limit exceeded. Please wait a moment and try again.`, is a transient
|
|
92
|
+
throttle: the same pool is retried after 20 s and 60 s (or the wait it
|
|
93
|
+
named), then the attempt moves on, and the pool is never paused. `pools`
|
|
94
|
+
prints `PAUSED until <time> · <proof> · provider: "<line>" · meter then: … ·
|
|
95
|
+
lift now: bullswarm pools resume <pool>`; `bullswarm pools resume <pool>`
|
|
96
|
+
lifts a pause, and `bullswarm strategy set-pausing off|on` turns automatic
|
|
97
|
+
pausing off or back on.
|
|
98
|
+
- pauses: `bullswarm strategy set-pausing off` now stops every automatic
|
|
99
|
+
pause, not only quota — auth, the credential-group siblings an auth pause
|
|
100
|
+
benches with it, and the soft bench a second strike writes — so with the
|
|
101
|
+
switch off nothing is taken out of service by a command's own judgement;
|
|
102
|
+
routing still reads meters and a failed attempt still moves to another pool.
|
|
103
|
+
It is stored as `strategy.pausing: "off"`. `pools` opens with `automatic
|
|
104
|
+
pausing: off`, and `pools resume` still lifts a pause that was already in
|
|
105
|
+
place. Quota and auth signatures are matched against the provider's own
|
|
106
|
+
error channel only — its stderr, the events it flags as errors and its
|
|
107
|
+
terminal `result` record — never an assistant's reply or a tool result: on
|
|
108
|
+
2026-09-21 a pool was paused for a sentence an agent wrote about
|
|
109
|
+
`usage_credits_required` in its own report.
|
|
110
|
+
- routing: an evidence step may run on the pool that wrote the judged work
|
|
111
|
+
when that pool is urgent; the reason then says `independence waived: <pool>
|
|
112
|
+
resets in <clock>`. Independence is judged by model family, so
|
|
113
|
+
`claude-code` and `claude-code:acme` are the same writer; with nothing
|
|
114
|
+
urgent, independence stays the tie-breaker.
|
|
115
|
+
- watch: `bullswarm workflow watch <run> --until outcome|trouble` prints only
|
|
116
|
+
trouble lines (failed, rejected, paused, stalled, stale, steering) and the
|
|
117
|
+
outcome; `trouble` exits at the first one with a `next:` relaunch line. A
|
|
118
|
+
running attempt gets a stale score (quiet with no command running, no file
|
|
119
|
+
change while commands continue, the same command repeated, wall time over 3×
|
|
120
|
+
the expected minutes) and one `⚠ <step> looks stale: <reasons>` line.
|
|
121
|
+
`bullswarm workflow step restart <run> <step> [--pool <pool>]` stops that
|
|
122
|
+
attempt and requeues the step with its durable handoff; nothing restarts on
|
|
123
|
+
its own. The packaged skill teaches one background `--until trouble` watch
|
|
124
|
+
per run and one tool call per wake.
|
|
125
|
+
- providers: OpenCode and Command Code expose the same durable-transcript
|
|
126
|
+
reader contract as the first-class providers. OpenCode reads its SQLite
|
|
127
|
+
sessions read-only; Command Code reads persisted project JSONL only when a
|
|
128
|
+
session transcript exists and carries usage.
|
|
129
|
+
- reprice: transcript lookup follows the loaded provider registry, so
|
|
130
|
+
`opencode2*`, `opencode2:kaihk-*`, and `command-code` pools reach their
|
|
131
|
+
provider-owned readers without a hard-coded provider list. Ambiguous,
|
|
132
|
+
missing, and checkpoint-only records stay unknown rather than becoming
|
|
133
|
+
zero-cost attempts.
|
|
134
|
+
- command-code: the 116 historical attempts studied for this release used
|
|
135
|
+
`--no-session`, so their checkpoints are documented as non-recoverable
|
|
136
|
+
history.
|
|
137
|
+
- pricing: public model cards are retained only with a source and date (the
|
|
138
|
+
cards were checked 2026-09-20). `kaihk/*` and `opencode/union-alpha` relay
|
|
139
|
+
identifiers have no public card, so the underlying OpenAI card is not
|
|
140
|
+
substituted; observed Command Code models use the cited Command Code card.
|
|
141
|
+
- evidence: live OpenCode and Command Code streams captured on 2026-09-20 are
|
|
142
|
+
checked in as `tests/fixtures/streams/opencode-hello.jsonl` and
|
|
143
|
+
`tests/fixtures/streams/command-code-hello.jsonl`; each contrib connector
|
|
144
|
+
claims the `eventStream.usage` rules those captures prove.
|
|
145
|
+
- tests: detached reprice and prune children never recreate a home that was
|
|
146
|
+
deleted under them, and the OpenCode read-only test runs everywhere against
|
|
147
|
+
the exported rows instead of skipping without a local database.
|
|
148
|
+
- time box: every work and evidence step's task ends with a soft time box: the
|
|
149
|
+
box in minutes, the start clock, a wrap-up point at 70% of the box, and an
|
|
150
|
+
invitation to stop and report `## Done`, `## Not done` and `## Suggested next
|
|
151
|
+
step`. The box is the action's `timeBox` (whole minutes, 0-240), else
|
|
152
|
+
`defaults.timeBox`, else 1.5 × the median wall minutes of this home's
|
|
153
|
+
succeeded attempts for the pool and kind (5 or more attempts), else for the
|
|
154
|
+
kind, else 20, rounded to 5 and kept within 10-60; `opencode` attempts never
|
|
155
|
+
feed it, and `timeBox: 0` leaves the paragraph out. It is a guide: timeouts,
|
|
156
|
+
stall detection, cancellation and routing are unchanged and nothing stops at
|
|
157
|
+
the box. On the fixture home the (codex, implement) pair has a median of
|
|
158
|
+
18.86 minutes over 80 attempts, so its box is 30. In an experiment on one
|
|
159
|
+
task (two runs per arm) a 15-minute box ran 10m54s and 10m03s against 23m30s
|
|
160
|
+
and 48m44s without one, with honest partial reports: a direction, not a
|
|
161
|
+
measurement.
|
|
162
|
+
- early return: a work step whose `## Not done` lists items still succeeds and
|
|
163
|
+
records `returnedEarly` with the count and the items. The Step page header and
|
|
164
|
+
the Run timeline row read `returned early · N not done`, the Step page shows
|
|
165
|
+
`box 20m · ran 34m` when an attempt ran past its box, `workflow watch` prints
|
|
166
|
+
`◐ <step> returned early · N not done`, and the items reach the verifiers with
|
|
167
|
+
the rest of the evidence.
|
|
168
|
+
- verify rounds: a failed verify no longer waits for the caller. The kernel runs
|
|
169
|
+
a bounded repair loop of at most 3 verify rounds (`defaults.verifyRounds`
|
|
170
|
+
1-3, default 3, 1 = the old single round): round 1 judges every requirement,
|
|
171
|
+
each failure starts a kernel `repair-<n>` step built from the verifier's
|
|
172
|
+
evidence, the not-done items and the handoffs of the steps that affect it,
|
|
173
|
+
round 2 re-checks the failures and looks for regressions and the same defect
|
|
174
|
+
elsewhere, and round 3 is final closure. A requirement that passed carries
|
|
175
|
+
forward and is judged again only when a repair changed a file its evidence
|
|
176
|
+
names. There is never a fourth round and a program still cannot declare a
|
|
177
|
+
repair step; the planner contract allows `timeBox` and says the kernel adds
|
|
178
|
+
`repair-<n>` and `verify-round-<n>`.
|
|
179
|
+
- verify rounds: the run ends `completed · verified`, or `completed · not
|
|
180
|
+
verified · verify rounds 3/3` with a caller-decision block (each requirement
|
|
181
|
+
still failing, its latest evidence and one suggested next step) in
|
|
182
|
+
`workflow runs result <run> --json --summary`. The result also lists each
|
|
183
|
+
verify round and each repair with its wall minutes, pool and cost. The Run
|
|
184
|
+
page, Home, Runs and `workflow watch` show each round and repair; the events
|
|
185
|
+
are `workflow.verify-round` and `workflow.repair`. A plan revision during the
|
|
186
|
+
loop is still accepted and never adds or refunds a round; its
|
|
187
|
+
`defaults.verifyRounds` sets the cap for the rest of the run, and a revision
|
|
188
|
+
that changes only the cap is accepted.
|
|
189
|
+
- docs: the skill, its operations and program references, the program and result
|
|
190
|
+
references and `docs/design/step-economy-0.35.2/README.md` teach `timeBox`,
|
|
191
|
+
`verifyRounds`, the early-return report and the caller-decision block; the
|
|
192
|
+
skill's "Observe and judge" no longer tells the caller to hand-add a fix step
|
|
193
|
+
for an ordinary failed check.
|
|
194
|
+
|
|
3
195
|
## 0.35.1 — a calmer dashboard with honest active time
|
|
4
196
|
|
|
5
197
|
- durations: Home, Runs, Run, Step, and Stats use the union-based
|
|
@@ -178,7 +370,7 @@
|
|
|
178
370
|
colour codes, so every bar came out grey while the legend beside it stayed
|
|
179
371
|
coloured — a chart titled "by pool" painted all five pools identically.
|
|
180
372
|
- stats: no two series in one chart share a hue. Colours were hashed per name,
|
|
181
|
-
which put `claude-code:
|
|
373
|
+
which put `claude-code:acme` and `codex` on the same blue.
|
|
182
374
|
|
|
183
375
|
## 0.33.1 — say what a number is, or say you do not know
|
|
184
376
|
|
|
@@ -307,8 +499,8 @@
|
|
|
307
499
|
price exactly as it spends a declared one and labels which it is —
|
|
308
500
|
`detected` or `declared` — so an operator's own figure is never confused with
|
|
309
501
|
one bullswarm inferred. The plan table is keyed by provider, not by pool, so a
|
|
310
|
-
discovered per-account pool such as `claude-code:
|
|
311
|
-
`claude-code`'s plans; it used to ask for `claude-code:
|
|
502
|
+
discovered per-account pool such as `claude-code:acme` resolves against
|
|
503
|
+
`claude-code`'s plans; it used to ask for `claude-code:acme`'s own plans and
|
|
312
504
|
find nothing, which left exactly the pools with one login per account
|
|
313
505
|
without a price.
|
|
314
506
|
- Mod: the pane's `usage` button works with no run in flight — it renders the
|
|
@@ -374,7 +566,7 @@ drawn from the real pool figures of 2026-09-18.
|
|
|
374
566
|
- dashboard: the phone `Home` no longer hides data behind its width. The
|
|
375
567
|
`budget · this week` block draws every pool the desktop draws — four today —
|
|
376
568
|
or ends with `+N more` when the rows genuinely do not fit, and its names are
|
|
377
|
-
wide enough that `claude-code:
|
|
569
|
+
wide enough that `claude-code:acme` and `claude-code` read as two pools
|
|
378
570
|
rather than one truncated one. The by-pool, by-model and by-project lists
|
|
379
571
|
keep at least their top three rows (`+N more` for the rest) and always paint
|
|
380
572
|
the whole percentage, never `24…`. The summary figures sit one per line, so
|
|
@@ -949,7 +1141,7 @@ drawn from the real pool figures of 2026-09-18.
|
|
|
949
1141
|
from a reset the operator declares —
|
|
950
1142
|
`bullswarm strategy set-subscription <pool> --resets-at <iso|unknown>`.
|
|
951
1143
|
The Relay token API stopped returning `expires_at` for the `1` and `Moham`
|
|
952
|
-
wallets on 2026-09-03 (the
|
|
1144
|
+
wallets on 2026-09-03 (the project-n log holds 28 dated snapshots between
|
|
953
1145
|
2026-08-31 and 2026-09-03, then only nulls), so `opencode2` and
|
|
954
1146
|
`opencode2:relay-3` printed `unmetered` at 73.8% and 10.7% of their $50
|
|
955
1147
|
wallets and ranked as neutral. With a declared reset the used% stays the
|
|
@@ -982,8 +1174,8 @@ drawn from the real pool figures of 2026-09-18.
|
|
|
982
1174
|
— its effective surplus divided by the fraction of the window still to run —
|
|
983
1175
|
ahead of every pool whose window is not about to close, instead of on the
|
|
984
1176
|
surplus alone. At 2026-09-11 12:26 HKT the medium lane went to
|
|
985
|
-
`claude-code:
|
|
986
|
-
`grok` (+13.8 points, 2h02m and 1.2% left, urgency ~1150 against
|
|
1177
|
+
`claude-code:acme` (+22.9 points, 13h33m and 8.1% of its week left) over
|
|
1178
|
+
`grok` (+13.8 points, 2h02m and 1.2% left, urgency ~1150 against acme's
|
|
987
1179
|
~283), and grok's points expired unspent two hours later; the owner had been
|
|
988
1180
|
pinning grok by hand for such runs. Three states for an expiring pool:
|
|
989
1181
|
`urgent` (surplus still to spend and a pacing forecast — the reading plus
|
|
@@ -1004,17 +1196,17 @@ drawn from the real pool figures of 2026-09-18.
|
|
|
1004
1196
|
- routing: the 5-hour near-limit line is now clock-relative. A pool is
|
|
1005
1197
|
deprioritized only when its 5h forecast is at/above 75% AND ahead of the
|
|
1006
1198
|
share of the 5h window that has already elapsed. On 2026-09-10 at 22:19Z a
|
|
1007
|
-
high-tier integrator skipped `claude-code:
|
|
1199
|
+
high-tier integrator skipped `claude-code:acme` (81% used, 23 minutes to the
|
|
1008
1200
|
reset — 92.3% of the window elapsed, 88.1% projected) and
|
|
1009
|
-
`claude-code:
|
|
1010
|
-
account already ahead of its weekly pace, while
|
|
1201
|
+
`claude-code:initech` (75.3% projected, 85.7% elapsed) and went to the one
|
|
1202
|
+
account already ahead of its weekly pace, while acme still held 34% of its
|
|
1011
1203
|
weekly quota unspent with 13% of the week left to spend it. Both pools now keep the lane:
|
|
1012
1204
|
88.1% with 23 minutes left is a pool spending at the clock's pace, not a pool
|
|
1013
1205
|
about to hit a wall. Pools with no `resets_at`, an unparsable one, or a reset
|
|
1014
1206
|
already past keep the fixed 75% line, and the 90% burst gate is unchanged —
|
|
1015
1207
|
it ignores the clock. The routing reason and the `candidates[]` rows say
|
|
1016
1208
|
which case applied: `5h used 81% -> 88.1% projected, under the clock (92.3%
|
|
1017
|
-
elapsed)`, `skipped near 5h limit (projected): claude-code:
|
|
1209
|
+
elapsed)`, `skipped near 5h limit (projected): claude-code:acme 88.1% (20.0%
|
|
1018
1210
|
elapsed)`, and a new `fiveHourElapsedPct` field. `bullswarm pools` shows the
|
|
1019
1211
|
same clock: `5h=81% (92% elapsed)`.
|
|
1020
1212
|
- routing: 5-hour spend is clipped at the reset. Quota spent after the window
|
|
@@ -1720,7 +1912,7 @@ drawn from the real pool figures of 2026-09-18.
|
|
|
1720
1912
|
|
|
1721
1913
|
- All of it is visible after the fact. The routing reason names the in-flight
|
|
1722
1914
|
counts and projections that moved the pick (`5h used 30% -> 41% projected, 2
|
|
1723
|
-
in flight`, `skipped near 5h limit (projected):
|
|
1915
|
+
in flight`, `skipped near 5h limit (projected): acme 76%`, `forecast-gated
|
|
1724
1916
|
at/above 90%: …`, `preferred over busier: …`), every candidate row carries
|
|
1725
1917
|
`pace`, `effectiveSurplus`, `inflight`, `projectedFiveHourPct`,
|
|
1726
1918
|
`forecastFiveHourPct`, `projectedWeeklyPct`, `ratePerMinute`,
|
|
@@ -2776,7 +2968,7 @@ Adopts the driving mechanics of Claude Code's dynamic workflow (documented in
|
|
|
2776
2968
|
former 900-second planner/action timeout defaults.
|
|
2777
2969
|
- Fixed adaptive completion policy, current-action metadata, provider routing
|
|
2778
2970
|
history, usage aggregation, latest-worker verification, and truthful partial
|
|
2779
|
-
token/cost accounting found during the
|
|
2971
|
+
token/cost accounting found during the project-b battle test.
|
|
2780
2972
|
- Added connector-owned native JSONL event adapters for Codex, Claude, Grok,
|
|
2781
2973
|
Command Code, and OpenCode. Workflows now retain and display the latest three
|
|
2782
2974
|
semantic shell/read/edit/write/response actions for every active agent.
|
package/GOAL.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> Historical (2026-08-21): accurate when written; see CHANGELOG for what changed since.
|
|
4
4
|
|
|
5
|
-
**Status:** HISTORICAL PROTOTYPE CHARTER · **Owner:**
|
|
5
|
+
**Status:** HISTORICAL PROTOTYPE CHARTER · **Owner:** dev · **Created:** 2026-08-21
|
|
6
6
|
|
|
7
7
|
## One sentence
|
|
8
8
|
|