kimi-code/reports
qer 49f2d46341 fix(web): first batch of review fixes (correctness + dead code + mobile)
Markdown local images (must-fix):
- Rewrite image srcs in the SOURCE TEXT before markstream parses it, instead
  of patching <img> via DOM after the fact — the old way raced the browser's
  immediate 404 and markstream's ImageNode unmounted the <img>, leaving a
  permanent broken image. In-flight srcs render a 1x1 transparent GIF, then
  the data URL swaps in (a src change resets ImageNode); failures keep the
  original src
- resolveImageUrl: pass length=10MiB (protocol default 1MiB silently
  truncated larger PNGs into broken data URLs), check result.truncated, and
  strip the session cwd from absolute paths (daemon only accepts relative)

Sidebar / workspace:
- Deleting a workspace with sessions now refuses with an explanation — the
  daemon DELETE is registry-only and mergedWorkspaces re-derived it from the
  leftover sessions, so it instantly 'revived' and looked broken
- Workspace delete needs a second confirming click (menu + mobile sheet)
- .ws-menu-item.del/.ghm-item.del get danger styling; ws-menu uses fixed
  positioning so bottom workspaces aren't clipped by the scroll container
- Truncated session lists always include the active session; empty
  workspaces stay visible when there are zero sessions globally
- SessionRow archive-confirm CSS class mismatch (del-confirm) restored;
  hover bg #f2f2f2 → var(--panel2)
- MobileSwitcherSheet parity: two-step archive confirm, running pulse dot,
  per-workspace truncation + expand, workspace … menu (copy path / delete)

ThinkingBlock / toasts:
- Historical sessions mount thinking blocks collapsed; expanded body clicks
  (incl. text selection) no longer collapse — only the head row toggles,
  with an always-visible chevron (touch had no hover affordance) + keyboard
  support; mobile drops the nested max-height scroll area
- WarningToasts timers are per-instance (repeated identical texts no longer
  killed by stale timers), cleared on manual close/unmount, pause on
  pointerenter with remaining-time resume, +4s on touch screens

ModelPicker / Composer:
- status gains modelId (raw id) — the ✓/is-current marks compared display
  names against ids and never matched; pickers now compare modelId exactly
- ctx ring pct clamped to 0-100 and guarded for ctxMax=0
- /compact chip stays visible on mobile (only context-pressure signal);
  textarea min-height 44px on phones; abort hover uses var(--err) mix
- removed: dead isFocused/.focused binding, unreachable mobile
  .perm-dropdown rule, .md-row-info CSS, orphan comments

ConversationPane / ChatPane:
- Empty session no longer traps users parked on tasks/todo/files (TabBar
  and composer both vanished) — snaps back to chat
- Removed the align toggle leftovers: persisted 'left' pref no longer
  freezes layout (old key cleaned up), align CSS classes hardcoded center
- Empty-workspace hint no longer renders 'Send in ' with no name
- Copy-success timer no longer cross-cancels between turns; cleared on
  unmount; copy buttons always visible on touch (incl. line-turn layout)
- Deleted the commented-out turn-summary code + dead CSS (git has it)

Cleanup:
- Code font setting fully removed (UI was deleted but the localStorage key
  still silently restyled the whole app with no way back): state, CSS
  rules, Google Fonts links (only Inter remains), old key cleared once
- Dark-flash fix: inline script applies persisted color scheme pre-bundle
- Dead i18n keys removed (thinking.* namespace, composer.queue,
  status.permissionLabel, layout.align*, sidebar.deleteConfirm,
  theme.codeFont*); workspace.deleteHasSessions added
- recentRoots dead state/export removed; workspaceEmpty dead prop removed
- Debug artifacts deleted (icon-preview.html, test-new-session.mjs,
  reports/latest/events-68607.jsonl); duplicate/hardcoded modern theme
  rules (#b91c1c, #f0f0f0) replaced with variable-based colors
2026-06-11 04:52:13 +08:00
..
dynamic-html-design-research.html feat(kimi-web): remove font settings and add dark mode support 2026-06-11 00:47:15 +08:00