fix(opencode): built-in placeholder tools are the client agent toolset, not _noop #1

Merged
Sara merged 1 commit from fix/opencode-free-tier-placeholder-names into release/v3.8.51 2026-09-22 21:44:29 -04:00
Owner

The upstream free tier inspects which tool names a request declares and answers 403
FreeTierError for any set that omits both bash and read (measured 2026-09-22 against
opencode.ai/zen/v1: _noop alone never passes on any free model; bash+read does;
anything alongside the pair is harmless). The built-in fallback that an unconfigured
install ships was the single name _noop, so every keyless chat request on every free
model was refused. It is now the official client's agent toolset
(bash, edit, glob, grep, read).

The fallback applies in both entry points: applyFreeTierRequestContract's own default
and prepareFreeTierRequest's resolved-empty case, so a caller passing an empty list or
nothing at all sends a request the gate accepts. Configured and observed lists are the
operator's own choice and still pass through unchanged.

Summary

  • Describe the user-facing or operational change.
  • Closes #
  • Related to #

Validation

Choose the change type and focused loop from the
Contribution Golden Path. The full unit suite,
Vitest, the 60% coverage gate, and the production build all run in CI on this PR (#8329):

  • Change type: provider / routing / UI / i18n / CLI / DB / build-deploy / other
  • Focused tests and category gates from the golden path
  • npm run lint
  • Reconciled with the current active release base; focused checks rerun afterward
  • Production-code changes include a new or updated automated test in this PR
  • SonarQube is temporarily opt-in while the private project has no quota; it is not a PR gate.

Tests Added Or Updated

  • List every changed or added automated test file.
  • If no production code changed, state that here.

Coverage Notes

  • If this PR changes src/, open-sse/, electron/, or bin/, explain which tests cover the change.
  • If coverage moved down in any touched file, explain why and what follow-up task will recover it.

Reviewer Notes

  • Call out any risky areas, migrations, feature flags, or manual validation that reviewers should know about.
The upstream free tier inspects which tool names a request declares and answers 403 FreeTierError for any set that omits both bash and read (measured 2026-09-22 against opencode.ai/zen/v1: _noop alone never passes on any free model; bash+read does; anything alongside the pair is harmless). The built-in fallback that an unconfigured install ships was the single name _noop, so every keyless chat request on every free model was refused. It is now the official client's agent toolset (bash, edit, glob, grep, read). The fallback applies in both entry points: applyFreeTierRequestContract's own default and prepareFreeTierRequest's resolved-empty case, so a caller passing an empty list or nothing at all sends a request the gate accepts. Configured and observed lists are the operator's own choice and still pass through unchanged. ## Summary - Describe the user-facing or operational change. ## Related Issues - Closes # - Related to # ## Validation Choose the change type and focused loop from the [Contribution Golden Path](../docs/ops/CONTRIBUTION_GOLDEN_PATH.md). The full unit suite, Vitest, the 60% coverage gate, and the production build all run in CI on this PR (#8329): - [ ] Change type: provider / routing / UI / i18n / CLI / DB / build-deploy / other - [ ] Focused tests and category gates from the golden path - [ ] `npm run lint` - [ ] Reconciled with the current active release base; focused checks rerun afterward - [ ] Production-code changes include a new or updated automated test in this PR - SonarQube is temporarily opt-in while the private project has no quota; it is not a PR gate. ## Tests Added Or Updated - List every changed or added automated test file. - If no production code changed, state that here. ## Coverage Notes - If this PR changes `src/`, `open-sse/`, `electron/`, or `bin/`, explain which tests cover the change. - If coverage moved down in any touched file, explain why and what follow-up task will recover it. ## Reviewer Notes - Call out any risky areas, migrations, feature flags, or manual validation that reviewers should know about.
The upstream free tier inspects which tool names a request declares and answers 403
FreeTierError for any set that omits both bash and read (measured 2026-09-22 against
opencode.ai/zen/v1: _noop alone never passes on any free model; bash+read does;
anything alongside the pair is harmless). The built-in fallback that an unconfigured
install ships was the single name _noop, so every keyless chat request on every free
model was refused. It is now the official client's agent toolset
(bash, edit, glob, grep, read).

The fallback applies in both entry points: applyFreeTierRequestContract's own default
and prepareFreeTierRequest's resolved-empty case, so a caller passing an empty list or
nothing at all sends a request the gate accepts. Configured and observed lists are the
operator's own choice and still pass through unchanged.
Sara merged commit 08503de8e2 into release/v3.8.51 2026-09-22 21:44:29 -04:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
Sara/OmniRoute!1
No description provided.