MoonshotAI / MoonshotAI/kimi-code
web: session archive is irreversible but UI labels it as recoverable
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 7.5k
- Forks
- 1.2k
- Avg merge
- 11h 53m
- Merged PRs (30d)
- 350
Description
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
- Create a session in any workspace.
- Open the session row kebab menu (or the chat header options) and choose 归档 / Archive.
- Confirm the inline prompt.
- 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: trueinstate.jsonbut 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/restoreactions returnunsupported 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
-
Implement true unarchive (recommended long-term)
- Backend: add an
unarchiveaction (or allowarchiveto accept{ archived: false }). - Web UI: add an "Archived" section in the sidebar where archived sessions can be viewed and restored.
- Keep the "归档 / Archive" label.
- Backend: add an
-
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.
-
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.tsapps/kimi-web/src/i18n/locales/en/sidebar.tsapps/kimi-web/src/i18n/locales/zh/header.tsapps/kimi-web/src/i18n/locales/en/header.tsapps/kimi-web/src/components/SessionRow.vueapps/kimi-web/src/components/ChatHeader.vuepackages/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
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with SessionRow.vue and ChatHeader.vue, then review the English and Chinese sidebar/header locales alongside packages/server/src/routes/sessions.ts and packages/protocol/src/rest/session.ts. Confirm whether the project will support recovery or present archive as irreversible, then trace the affected UI and API behavior. Done means the chosen semantics are consistent in labels, confirmation text, visibility, and supported actions.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- api, frontend
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100