aed7dbefaa
Pandoc is the de-facto Swiss Army knife for moving prose between the formats engineers and writers actually use: Markdown to HTML, HTML to Markdown, reST to anything, anything to LaTeX / DOCX / EPUB. Surfacing it as a model-callable tool unblocks a large class of "rewrite this report as ..." / "publish this changelog as ..." workflows that previously required the user to drop into a terminal between turns. The tool reads `source_path` (any pandoc-supported input format — pandoc autodetects from the extension), converts to one of the 11 whitelisted target formats, and either writes the result to `output_path` (when provided) or returns the converted text inline. Target whitelist: markdown, gfm, commonmark, html, rst, latex, docx, odt, epub, plain, asciidoc Picked for coverage of real document-handling without dragging in additional system tooling (no PDF target — that needs a LaTeX engine; no S5/Slidy — niche and surprising). Binary targets (docx, odt, epub) reject inline-text requests with a clear error naming the required `output_path`; text targets work in either mode. Registration is gated on `crate::dependencies::resolve_pandoc()` through the new `ToolRegistryBuilder::with_pandoc_tools()` builder method, hooked into `with_agent_tools` so the tool surface picks it up everywhere the existing diagnostics / project tools do. When pandoc is missing the tool simply isn't registered (same probe-then-decide pattern v0.8.31 introduced for Python). Approval routes through the WritesFiles / Suggest tier matching other file-writing tools. `deepseek doctor`'s "Tool Dependencies" section reports pandoc as present / absent with platform-aware install hints (`brew install pandoc` / `apt install pandoc` / `winget install JohnMacFarlane.Pandoc`). Tests cover the format whitelist round-tripping into the schema's `enum` field, the binary-format rejection path, the unsupported- format rejection path, the missing-source-file rejection, the Markdown→HTML inline round-trip, and the `output_path` write roundtrip + summary message. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>