summaryrefslogtreecommitdiffhomepage
path: root/src/features/chat/logic
AgeCommit message (Collapse)Author
42 hourstest: run frontend verification natively under BunAdam Malczewski
Make Bun the explicit Vitest runtime. Detect cyclic tool input before slow native pretty serialization, preserve shared references, and use native abort signals in the live jsdom probe. 2587 tests repeatedly green and2 real HTTP/UI tests pass; Bun-run typecheck, lint and production build pass without NODE_OPTIONS.
5 daysfix(chat): delay delivery warning and shorten queued action labelAdam Malczewski
Wait one second before displaying pending-input recovery UI, cancelling on confirmation or removal. Label the queued-message stop action Flush without changing behavior. Verified: 2451 frontend tests passed twice, typecheck, Biome, and build.
5 daysfix(review-followup-fee): recover omitted chat payloads through historyAdam Malczewski
5 daysfix(review-followup-fea): clarify Stop with queued inputAdam Malczewski
11 daysfeat(tool-call-cards): distinct Phosphor icon per tool (phosphor-svelte, ↵Adam Malczewski
deep imports)
11 daysfeat(tool-call-cards): English tool names, no '{}' for argument-less calls, ↵Adam Malczewski
thinking-style dots while running
11 daysfeat(tool-call-cards): final visual polish — unified edit diff, quiet ↵Adam Malczewski
failed/orphan/pending headers
11 daysfeat(tool-call-cards): polish responsive headers and expanded detailsAdam Malczewski
11 daysfeat(tool-call-cards): pair calls and results in summarized collapsible bubblesAdam Malczewski
2026-09-18feat(chat): compress images at attach time (JPEG re-encode + rescale) with a ↵Adam Malczewski
per-image toggle Staged images now default to a compressed variant: LOSSLESS sources (PNG/BMP) are re-encoded to JPEG at q0.85, rescaled to cap the longest edge at 2048px (never upscaled, high-quality smoothing, alpha flattened onto white), and used only under a smaller-wins rule. JPEG/WebP/GIF are sent verbatim. Each staged thumbnail gets a Compress checkmark (default ON, reversible until send, cached so flipping never re-encodes); OFF sends the original untouched bytes. Conversion runs async at staging and any failure silently falls back to the original — sending is never blocked or broken. Pure decision logic lives in features/chat/logic/image-compress.ts (format selection, dimension math, smaller-wins); the canvas encode is a thin injected edge (features/chat/adapter/image-encode.ts, Composer prop encodeJpeg). No wire-contract, send-path, or backend changes; complements the backend's body-budget eviction safety net by shrinking payloads at the source. Verification: typecheck 0 errors, vitest 1720/1720 (twice), biome clean, build succeeds. New tests: 12 pure-logic, 2 encoder-edge, 6 component.