📝 docs: point Sandbox setup at OpenSandbox only The Dify sidecar is no longer a backend. Operator pages now use the Sandbox tool and OPENSANDBOX_* settings.
📝 docs: publish the OpenSandbox per-conversation setup page The Dify page still told operators to expect no sandbox after each turn. Reuse, the expiry volume, and the create-timeout footgun now live on their own page.
📝 docs: add the OpenSandbox Compose setup used beside ChatHub
📝 docs: count sandbox basename order by content changes
📝 docs: say the last same-name sandbox write is the returned file
📝 docs: describe real absolute paths and capped sandbox downloads
📝 docs: document the OpenSandbox Code Interpreter backend
📝 docs: keep foreign citations and code out of PDF link rewrites
📝 docs: describe downloadable Code Interpreter PDF links Co-authored-by: Cursor <cursoragent@cursor.com>
📝 docs: Code Interpreter tool-card preview and download Generated files show on the tool card as preview, copyable URL, and download — not in the model markdown table or Picbed.
📝 docs: zipfile io.open and plt.show PNG collection in the jail
📝 docs: pyplot hang is FontManager Timer/unlink, not font-cache warmup
📝 docs: isolated pyplot import timeout is a hang, not font-cache warmup
📝 docs: pyplot 60s hang needs Popen stub, not only MPL_IGNORE_SYSTEM_FONTS
📝 docs: matplotlib pyplot 60s hang is fc-list, not a timeout tweak
📝 docs: print hello EPERM is eager matplotlib import in ChatHub wrapper
📝 docs: Code Interpreter success follows wrapper sentinel not stderr Library warnings still appear as stderr; they do not fail the tool.
📝 docs: require ENABLE_PRELOAD=true on Code Interpreter sidecar Dify 0.2.10+ ignores HTTP preload by default, so ChatHub cannot create the isolated workdir until the sidecar sets ENABLE_PRELOAD=true.
📝 docs: Code Interpreter workdir is created in Dify preload Document why guest mkdir fails under 0.2.15 seccomp and that ChatHub, not the sidecar, must be recreated for the isolated working directory fix.
📝 docs: 1Panel Code Interpreter Compose pitfalls from prod bring-up Record mapping-only depends_on, health vs pip-ready logs, no user: on the sidecar, starter python-requirements.txt, and chat-vs-KB attachments.
📝 docs: add Code Interpreter env_file samples for 1Panel Document code-interpreter.env plus lobe.env keys so split-file Compose matches MarkItDown, without requiring Dify config.yaml.
📝 docs: Code Interpreter per-run tmp dir and newest-first files Document isolated /tmp/chathub-ci directories, newest-first paging, newest-wins names, edited inputs, and sys.exit handling.
📝 docs: sandbox provider, portal file scope, and paging Document SANDBOX_PROVIDER=dify, main vs portal Code Interpreter files, and newest-first paging on long topics.
📝 docs: add Code Interpreter DifySandbox sidecar Document the Compose sibling, operator setup, and that Graphile runs Python on the sandbox instead of the tab.