Skip to content

fix(schema): inline config schema root - #41127

Closed
zcxGGmu wants to merge 1 commit into
anomalyco:devfrom
zcxGGmu:config-schema-root
Closed

zcxGGmu wants to merge 1 commit into
anomalyco:devfrom
zcxGGmu:config-schema-root

Conversation

@zcxGGmu

@zcxGGmu zcxGGmu commented Aug 7, 2026 •

Copy link
Copy Markdown

Issue for this PR

Closes #41014

Type of change

  • Bug fix
  • New feature
  • Refactor / code improvement
  • Documentation

What does this PR do?

Makes the generated public config schema expose its root object schema directly instead of publishing a bare top-level $ref. The generated schema keeps $defs for nested references, but the top level now has type/properties so standard JSON language servers can apply completions and validation.

It also avoids emitting the non-standard top-level allowComments and allowTrailingCommas keys in the generated schema output.

How did you verify your code works?

  • bun test ./test/script/schema.test.ts --test-name-pattern 'generated config schema exposes root properties'
  • bun typecheck in packages/opencode
  • bun run lint packages/opencode/script/schema.ts packages/opencode/test/script/schema.test.ts
  • git diff --check

Note: repo-wide pre-push typecheck is currently blocked by an existing @opencode-ai/enterprise/src/custom-elements.d.ts parse error unrelated to this diff, so I pushed with --no-verify after the focused checks passed.

Screenshots / recordings

Not a UI change.

Checklist

  • I have tested my changes locally
  • I have not included unrelated changes in this PR

@github-actions

github-actions Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Thanks for your contribution!

This PR doesn't have a linked issue. All PRs must reference an existing issue.

Please:

  1. Open an issue describing the bug/feature (if one doesn't exist)
  2. Add Fixes #<number> or Closes #<number> to this PR description

See CONTRIBUTING.md for details.

@anujbolewar anujbolewar left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nice, inlining the root ref is way cleaner than leaving a dangling top-level $ref for tools that don't resolve it. small q: if the root ref points at a non-object def (like an array or enum) it silently falls through to the old behavior — just curious if that's intentional or if a root array config is even possible.

@zcxGGmu

zcxGGmu commented Aug 9, 2026

Copy link
Copy Markdown
Author

Thanks! Yes, that fallback is intentional.

The generated config schema root is expected to be an object today, so the useful compatibility fix is to inline the resolved object root and expose type / properties directly for JSON language servers. If the root $ref ever resolved to a non-object definition, preserving the original $ref is safer than manufacturing an object-shaped root or dropping semantics. In other words, the fallback is defensive rather than support for an expected array/enum config root.

@github-actions

github-actions Bot commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

Automated PR Cleanup

Thank you for contributing to opencode.

Due to the high volume of PRs from users and AI agents, we periodically close older PRs using automated criteria so maintainers can focus review time on the most active and community-supported contributions.

This PR was closed because it matched the following cleanup criteria:

  • The PR was created more than 1 month ago
  • The PR had fewer than 2 positive reactions
  • Positive reactions are counted as thumbs-up, heart, celebration, or rocket reactions on the PR

PRs created within the last month are not affected by this cleanup.

If you believe this PR was closed incorrectly, or if you are still actively working on it, please leave a comment explaining why it should be reopened. A maintainer can review and reopen it if appropriate.

Thanks again for taking the time to contribute.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

opencode.ai/config.json schema uses top-level $ref/$defs, which breaks autocomplete/validation in the standard JSON LSP (neovim jsonls / VS Code)

3 participants