Skip to content

[Bug]: Playground Advanced Config panel is non-functional — still sends the removed code protocol to /config/dump #2260

Description

@ntohidi

Follow-up to #2222 / #2224. That PR stopped md/llm from being collateral damage. The underlying problem is still here, and it now fails more quietly than before.

What's wrong

The playground's Advanced Config panel still speaks the {type, code} protocol that /config/dump dropped in the 0.8.x security work. code is a globally forbidden field under the untrusted trust boundary, so the pre-flight always 400s:

CrawlerRunConfig.load({"type": "CrawlerRunConfig", "code": "..."}, provenance=Provenance.UNTRUSTED)
→ UntrustedConfigError: field 'code' is not permitted on CrawlerRunConfig from an untrusted request

crawl and crawl_stream survive only because of the regex fallback in runCrawl() (deploy/docker/static/playground/index.html), which checks the editor text for stream=True. Two consequences:

  1. Config is silently discarded. With the default snippet CrawlerRunConfig(stream=True, cache_mode=CacheMode.BYPASS), the fallback sends {crawler_config: {type: 'CrawlerRunConfig', params: {stream: true}}}. The cache_mode line never reaches the server. The run succeeds, so nothing tells the user their config was dropped. Anything they type beyond stream is ignored.
  2. BrowserConfig is a hard failure. That template has no stream=True, so no fallback fires and the run aborts with ✖ config error.

So the panel is non-functional on the only endpoint that still displays it.

Why it can't be patched in place

/config/dump used to eval the snippet. That was removed on purpose — it was a gadget-construction oracle. A Python-snippet editor can't work against the current server, so this isn't a matter of fixing the request shape.

Options

  • Replace the CodeMirror Python editor with a params/JSON editor that posts {type, params}, which is what /config/dump accepts today. Keeps the feature, matches the server.
  • Remove the panel. /crawl is still fully usable through the API; the playground just stops advertising a capability it doesn't have.

Either way the regex fallback in runCrawl() should go — it exists only to paper over the broken pre-flight, and it's what makes the config loss silent.

Repro

  1. Start the Docker server, open /playground/
  2. Endpoint crawl, default snippet, Run → succeeds, but cache_mode was never sent
  3. Switch Type to BrowserConfig, Run → ✖ config error, run aborts

Notes

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    ⚙ DoneBug fix, enhancement, FR that's completed pending release🐞 BugSomething isn't working🐳 DockerDocker issue📌 Root causedidentified the root cause of bug

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions