mirror of
https://github.com/storytold/photocraft.git
synced 2026-10-27 17:51:59 +01:00
* Command params that are not a JSON object are an error (#506) `Session::dispatch` now rejects array, string, number and boolean params with "invalid parameters for `<id>`: params must be a JSON object" instead of running the command with every default; `null` still means no params. The one check covers the control channel, `serve`, MCP (headless and bridge) and the CLI, and batch steps fail per step. `photocraft-cli run --new` prefixes its error with `--new`. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Headless requests apply finished background jobs first (#503) A `wait: false` job was applied to its document only by a later command or `jobs.list`, so `doc.save`, export, `doc.inspect`, `doc.render` and `session.list` (and their MCP tools) still read and wrote the document without it. `Headless::sync_jobs` now runs at the top of every JSON-lines request and before every headless MCP tool call. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * `serve` stdio keeps the session after a rejected request line (#505) An over-long request line (or one that is not UTF-8) ended the stdio session, losing every open document. It now gets one error reply, the rest of that line is skipped without being dispatched, and the next request is served. `read_bounded_line` reads bytes, so a cut inside a multi-byte character is reported as too long instead of an I/O error. TCP connections still close after an oversized line. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * MCP `command_batch` keeps its step results when the reply budget stops it (#504) The batch budget charged each step's plain JSON size, but MCP sends the batch reply as escaped text content, so a batch the budget had already stopped could still exceed the tool-result ceiling and come back as a bare "response exceeds" error. MCP (headless and bridge) now uses `BatchReplyBudget::escaped`, which charges the escaped size, through the new `Headless::batch_with_budget`; `serve` keeps the plain budget. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * docs: the 1 MiB request-line limit does not apply to MCP stdio (#529) The book stated the 1 MiB request-line limit without naming a transport. It applies to desktop and headless TCP and to the headless JSON-lines stdio server; MCP over stdio reads its own lines and only its tool results are size-checked. Say so in the automation security pages and in the control protocol's transport limits. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>