Releases: dianlight/opencode-modelselect-action
Releases · dianlight/opencode-modelselect-action
Release list
0.4.0
Paid free-tier failover (first paid go_ranked row while the latch is fresh), auto mode with routing sync, opencode/auto virtual model, host detection, /modelselect command, Agent/Think status fields, rebuilt Work Status bundle. See CHANGELOG.md for the full list. Use dianlight/opencode-modelselect-action@0.4.0 (or @v1).
0.3.0
[0.3.0]
Fixed
tier: autonow honorsauto-preference: the free probe strips the
opencode/engine prefix before calling Zen (prefixed names answer 401
"not supported" even for valid keys) and probes the chat and responses
endpoints in parallel (newprobe-responses-urlinput, derived from
probe-urlby default) since free models live on either per the Zen docs
endpoint table. A 400 session gate (MissingSessionID/ "only be used in
OpenCode") counts as selectable — the key is accepted and free serves the
downstream OpenCode step — sofree-firstpicks free even while Go quota
remains. A 401 from one tier falls back to the other; the step fails as
invalid token only when both tiers reject auth
Removed
- No-op file-sync job, keep deprecated-workflow cleanup
Changed
tierinput is now dynamic when omitted (wasgo):autowhen a token
(opencode-tokenorOPENCODE_API_KEY) is available, elsefree- README Inputs table now lists Description before Default
Added
- README badges (release, last commit, issues, pull requests, license),
Sponsor section (copied fromdianlight/srat, incl. OpenCode Go referral),
and License section - README Task types cross-links from the
task-typeinput, requirements, and
How it works; LiveBench Score Reference now explains the Value column
(Overall ÷ Blended $/1M) and what a missing—means (Free $0 cost or
unknown pricing)
0.2.0
Removed
- Workflow Model Audit: models are resolved dynamically at runtime from the
centraldata/model-config.json(committed directly each run), so the
per-workflow audit table, the issue's suboptimal-configurations section,
the workflow scanner (scan_workflows,classify_task_type,
classify_model_status),data/workflow_scan.json,
config/workflow-task-map.yaml, and thesignalskeys in
config/task-types.yamlare gone; the maintenance issue now only covers
model coverage (config/model-scores.yamlPRs)
Added
- Model Audit issue: new "Correct the model coverage issues" checkbox that opens
a PR scoped toconfig/model-scores.yamlonly (removes stale fallback entries
now on LiveBench, adds scores for models missing data) - Test coverage: new
test/coverage-extra.test.js(36 tests, JS at 99% lines
vianpm run coverage) andtests/test_maintenance.py(52 offline unit
tests for the maintenance script viamise run test-python); CI lints
tests/and runs the Python suite
Changed
- Model evaluation now uses a blended in/out token-cost selector: each tier
picks the cheapest blended $/1M cost among models within the free-first
threshold of the top LiveBench score (weights fromcost_blendin
config/task-types.yaml, default 75% in / 25% out; unknown costs sort last) - Rename the project and repository to Opencode Modelselect
(dianlight/opencode-modelselect-action): updateaction.ymlname,
config-urldefault, README, workflows,package.json, and User-Agent
Added
- New select-model GitHub Action (
action.yml+src/index.js, Node 24, zero
dependencies): preselect the OpenCode model for atask-type+tier
(go/free) step before the OpenCode step, reading the live central
data/model-config.json. Fails hard when the config is unreachable or the
task-type has no entry (optionalfallback-modelescape hatch). Downstream
usage:dianlight/opencode-modelselect-action@<tag>withtask-type/tierinputs,
thenmodel: ${{ steps.resolve.outputs.model }}in the OpenCode step - Key the central
data/model-config.jsonby task-type only
(task-types.<name>.{go,free}) for all 11 task types, so any downstream
workflow can preselect a model without workflow/job coupling - sync-actions now opens (or updates) a
repo-sync/cleanup-deprecated-opencode-workflows
PR in each target repo deleting the six deprecated no-op workflows (opencode.yml,
opencode-triage*.yaml,opencode-implement.yaml,opencode-review.yaml) - Fetch Zen model prices from the Zen docs pricing page during maintenance and
store them per model indata/zen_models.json; treat models published as
"Free" (e.g.big-pickle, which has no-freesuffix) as usable free models - Surface in/out token costs ($/1M) in the README recommendation/audit cells
and the score reference table (new In/Out/Blended/Value columns), include
input_cost/output_cost/blended_costinbenchmark_results.jsonand
audit_results.json, and report paid models with unknown pricing under
coverage_issues.jsonmissing_prices(warn-only) - New select-model
max-costinput (blended $/1M budget cap): an over-budget
pick is replaced by the best-scoring ranked model within budget from the new
per-task-typego_ranked/free_rankedlists (best-to-worst with scores and
costs) indata/model-config.json; the step fails when nothing fits unless
fallback-modelis given. Newmodel-costoutput reports the resolved
model's blended $/1M - New select-model
tier: automode: probes live quota withopencode-token
(orOPENCODE_API_KEY) via a tiny free-model request plusGET /zen/go/v1/usagefor the Go plan windows.auto-preference
(free-first/go-first) sets the order,max-wait-seconds/
poll-interval-secondspoll until quota frees up instead of failing fast.
Newtier-selectedoutput reports the tier actually used
Removed
- Delete the 6-process pipeline workflows (
opencode-pr-review.yml,
opencode-pr-comment.yml,opencode-issue-handler.yml;opencode-implement.yaml
was already gone): drop their entries from.github/sync.ymland
config/workflow-task-map.yaml, replaceWORKFLOWS.mdwith a deprecation
pointer, and extend the sync-actions cleanup job to open downstream removal PRs - Delete
.github/scripts/resolve-model.sh; model resolution now lives in the
select-model action. All active workflows use it (uses: ./here,
dianlight/opencode-modelselect-action@<tag>downstream) and it is dropped from
.github/sync.ymlsince model selection needs no file sync - Drop the per-workflow
fix-suboptimal-configscheckbox flow from maintenance
issues: workflows no longer pin models, soapply-model-configis the only
model fix path - Drop the six deprecated no-op workflow entries from
.github/sync.ymland delete
the local stub files; deletion in target repos is now handled by the sync-actions cleanup PR job - Drop the alt models concept and its token-multiplier-driven second
checkbox from maintenance issues, and removetoken_multipliersfrom
config/model-scores.yaml; the maintenance issue now offers only the single
"Apply the proposed model config update" checkbox - Remove the last
/oc//ocfslash-command remains: delete
.github/scripts/auth.sh(command parser, the only file still synced
downstream —.github/sync.ymlnow carries an empty file list),RUNBOOK.md,
and.github/workflows/WORKFLOWS.md; drop the dead conditional-model
expression parser fromscripts/opencode_maintenance.py(all steps resolve
via the select-model action now, audit shows the free model asfreeinstead
of/ocf); rewordaction.yml,README.md,AGENTS.md, and the maintenance
workflow togo/freetiers with no slash-command references; extend the
sync-actions cleanup job to deleteauth.shdownstream as well
Fixed
- Restore emoji icons (✅/📋/❌) in the README LiveBench Score Reference
Source column, replacing the plainv/f/xletters - Fix
Handle Checked Tasksfailing withDuplicate header: Authorizationby
passinguse_github_token: trueto the OpenCode action (the OIDC token
exchange previously added a secondAuthorizationheader on top of the one
persisted byactions/checkout); checkout now also fetches full history and
the job grantspull-requests: writeso the OpenCode CLI can open the PR it
wraps task changes in (previously403 Resource not accessible by integration)
after the task itself succeeded - Fix the opencode-pr-comment workflow failing with
fatal: could not read Username for 'https://github.com'during the OpenCode
step'sgit push(process-3): withuse_github_token: truethe OpenCode CLI
skips configuring git credentials, so push-capable jobs must persist the
actions/checkouttoken and grantcontents: write. process-3 now persists
credentials, configures the git identity, and grantscontents: write;
process-6 also grantscontents: writefor its push path
Resolves #31
Release 0.1.3
Release 0.1.2
Release 0.1.1
What's Changed
- Update actions/checkout action to v7 by @renovate[bot] in #19
- big-pickle scores added; issue #20 closed by @github-actions[bot] in #22
- Add qwen3.8-max benchmark scores to model-scores.yaml by @github-actions[bot] in #24
- Update central model config by @github-actions[bot] in #28
- 🐛 fix(ci): apply all 10 coderabbit findings from #29 by @dianlight in #30
Full Changelog: 0.1.0...0.1.1