fix: route List[Path] outputs through FileOutput IPC for upload (#2779)
* fix: route List[Path] outputs through FileOutput IPC for upload
When a predict function returns List[Path] (not an iterator), the list
was being processed by output::process_output which base64-encodes Path
objects inline. This caused multi-megabyte data URIs in the response
instead of uploaded URLs. Now process_single_output detects list/tuple
returns and iterates their items through send_output_item, which routes
Path objects through the FileOutput IPC path for proper upload.
Adds coglet_list_path_upload_url integration test to verify List[Path]
outputs are uploaded via --upload-url and not base64-encoded.
* fix: use schema Output type to preserve array shape for single-element List[Path]
Single-element List[Path] returns were collapsed to a scalar string instead
of a one-element array, breaking the API contract. The orchestrator now
checks the schema's Output type ("type": "array") to decide Single vs
Stream wrapping. For Any/missing schemas, a predictor-side is_stream flag
on the Done message serves as fallback.
- Add wrap_outputs() helper with schema + predictor signal priority
- Propagate is_stream through PredictionOutcome -> worker -> Done IPC
- 13 unit tests covering all wrapping combinations + serde round-trip
- Integration tests for List[Path] single-element and scalar Path output
* fix: rustfmt formatting in tests