- define prompt.submitted schema and type in protocol\n- publish prompt.submitted from PromptService on submit and queue\n- project prompt.submitted into user messages in kimi-web\n- add unit and e2e tests for event propagation
- add session snapshot API and protocol schemas with epoch-aware cursors\n- track in-flight turn state and volatile delta offsets for exact rebuild\n- update web client and tests to seed snapshots before subscribing
Comment out turnSummary display in both mobile and desktop templates,
along with helper functions (countToolsAndFiles, extractFilePath).
Keep the code intact with TODO markers for restoration.
- Show union of (first 5 sessions) and (sessions updated within 5 days) by default
- Add '展开更多' / 'Show more' button when sessions are hidden
- Clicking expands all sessions for that workspace
- Collapsing then re-expanding a workspace resets to default truncated view
- Add updatedAt to Session type for recency filtering
- TasksPane: show '暂无后台任务' / 'No background tasks running' when empty
- TodoCard: always render header, show empty state when no todos
- i18n: add emptyTasks and emptyTodo keys for zh/en
- ThinkingBlock: foldable last-paragraph teaser, hover-only indicator,
auto-collapse when streaming ends, line-height aligned with content
- ChatPane: static turn-summary at end of assistant turns
- Composer: perm-pill background matches toggle-pill
- SessionRow: kebab button moved before timestamp
- ToolCall: replace text chevron with SVG
The daemon lock now records the host CLI version and entry path. When
kimi web / kimi daemon finds a healthy daemon started by a different
build (e.g. an older pkg.pr.new install), it warns that the running
daemon lags the invoked CLI instead of silently reusing it; the new
--restart flag stops the managed daemon and starts a fresh one with the
current build. A daemon whose lock does not match the requested port
(foreign process on the port) is never stopped.
- Simplify session timestamps: drop 'ago' suffix (1h ago → 1h)
- Replace running status text with a non-intrusive pulse dot on session title
- Add hover-triggered kebab menu for workspaces (copy path, rename)
- Speed up fold expand/collapse animation (0.28s → 0.12s)
- Quick-start input for empty workspaces in conversation pane
- add optional DaemonStartupReporter callback to ensureDaemonRunning\n- report startup progress in daemon and web CLI commands\n- update unit tests to cover reporter output
- Replace emoji with inline SVG icons for attach/permission/plan buttons
- Unify attach-btn, perm-pill, toggle-pill styles (same padding/radius/font)
- Add SVG icons in permission dropdown rows
- Convert context bar from horizontal bar to circular SVG ring
- Strip provider prefix from model display name; fall back to models list lookup
- Load models eagerly on app init for friendly name resolution
- Increase toolbar and dropdown font sizes
- Increase textarea default height from 40px to 56px
- Remove plan/permission/ctx from model dropdown (keep only models + thinking)
- Fix ctx number spacing (remove spaces around slash)
2f229b3 added the image-resolving watcher above the defineProps call.
watch() invokes its getter synchronously to collect dependencies, so
the closure read props while the const was still in its temporal dead
zone — every Markdown mount threw 'Cannot access props before
initialization', crashing the whole chat transcript (session content
rendered blank, Vue warn loop in console). vue-tsc can't catch this
(the reference sits inside a closure). Verified by a mount test that
reproduced the ReferenceError before the move and passes after, plus
an in-browser check that session content renders again.