Skip to content

web: session archive is irreversible but UI labels it as recoverable #1008

Description

@tomsen02

Problem

In Kimi Code Web, the "归档" (Archive) action for sessions behaves like an irreversible delete, but the UI does not communicate this clearly and provides no recovery path.

Reproduction

  1. Create a session in any workspace.
  2. Open the session row kebab menu (or the chat header options) and choose 归档 / Archive.
  3. Confirm the inline prompt.
  4. The session disappears from the sidebar.

Expected behavior

One of the following should be true:

  • A) Archive is recoverable: There is a way to view archived sessions and unarchive them (e.g. an "Archived" section in the sidebar, like ChatGPT's "Archived Chats").
  • B) Archive is irreversible: The action is labeled and confirmed as "删除 / Delete", so users understand the session is gone from the UI.

Actual behavior

  • The session is marked archived: true in state.json but is no longer visible anywhere in the UI.
  • There is no "Archived" view, no search result for archived sessions, and no "Unarchive" action.
  • The API only supports archiving (POST /sessions/:id:archive); unarchive / restore actions return unsupported action.
  • The confirmation prompt only says "归档会话?" / "Archive session?", which does not imply the action is permanent.

Why this matters

Users familiar with Gmail or ChatGPT "Archive" expect the item to remain accessible in an archive folder. In Kimi Code, the same word means "remove forever from the UI", which is misleading and can cause users to think data is lost.

Data is not truly deleted (it is still in state.json and can be recovered by manually setting archived: false), but there is no supported UI/API path to do so.

Possible solutions

  1. Implement true unarchive (recommended long-term)

    • Backend: add an unarchive action (or allow archive to accept { archived: false }).
    • Web UI: add an "Archived" section in the sidebar where archived sessions can be viewed and restored.
    • Keep the "归档 / Archive" label.
  2. Rename archive to delete (short-term, minimal change)

    • Change all user-facing strings from "归档 / Archive" to "删除 / Delete".
    • Update the confirmation prompt to clearly state the action is irreversible.
    • This matches the current semantics without backend changes.
  3. Keep archive label but warn irreversibility (minimal change)

    • Keep "归档 / Archive".
    • Change the confirmation prompt to e.g. "归档会话?已归档的会话将无法恢复。" / "Archive session? Archived sessions cannot be restored."
    • Does not solve the recovery problem, but removes the misleading implication.

Affected code

  • apps/kimi-web/src/i18n/locales/zh/sidebar.ts
  • apps/kimi-web/src/i18n/locales/en/sidebar.ts
  • apps/kimi-web/src/i18n/locales/zh/header.ts
  • apps/kimi-web/src/i18n/locales/en/header.ts
  • apps/kimi-web/src/components/SessionRow.vue
  • apps/kimi-web/src/components/ChatHeader.vue
  • packages/server/src/routes/sessions.ts (for any backend action change)
  • packages/protocol/src/rest/session.ts

Environment

  • Kimi Code Web (apps/kimi-web)
  • Any browser

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions