- pdf-split: page range input (1-3,5,7-9) with example
- pdf-compress: upload zone with description
- tool-grid: split/compress jadi phase 1 (backend udah implement)
- merge/images-to-pdf tetap phase 2 (butuh multi-file upload)
Co-Authored-By: Kilo <kilo@kilo.ai>
Image tools now actually process images:
- Compress: re-encode JPEG with configurable quality
- Resize: Lanczos3 resize with fit modes (inside/fill/crop)
- Convert: cross-format conversion (JPEG/PNG/WebP/GIF/BMP)
PDF tools:
- Merge: combine multiple PDFs into one document
- Split: extract page ranges via pagespec (1-3,5,7-9)
- Images to PDF: embed images as JPEG in A4 pages with scaling
- Compress: re-save PDF with optimized cross-reference table
Also fix metrics format to emit default zero values.
Co-Authored-By: Kilo <kilo@kilo.ai>
imageproc::find_contours panics on some edge images (called
Option::unwrap() on None). Wrap with catch_unwind and provide
a safe fallback (use full image bounds).
Also add catch_unwind around the entire pipeline so no panic
can crash the worker thread.
Co-Authored-By: Kilo <kilo@kilo.ai>
Binary paths differ between builder stages (nested in source dirs
like /app/gateway/tools-gateway instead of /app/gateway).
Make entrypoint search multiple candidate paths.
Co-Authored-By: Kilo <kilo@kilo.ai>
Dependencies built, icu_collections, icu_locale_core require rustc >=1.86.
Update toolchain to 1.89 to match production Docker image.
Co-Authored-By: Kilo <kilo@kilo.ai>
TypeScript error: Property 'abort' does not exist on type
'Dispatch<SetStateAction<AbortController | null>>'. Fixed by using
useRef which properly stores the controller reference.
Co-Authored-By: Kilo <kilo@kilo.ai>
Github icon doesn't exist in lucide-react 1.26.0, replaced with ExternalLink.
ImageResize doesn't exist, replaced with Crop.
reactCompiler requires babel-plugin-react-compiler which isn't installed.
Co-Authored-By: Kilo <kilo@kilo.ai>