Skip to content

fix(web): clarify archive is irreversible by relabeling as Delete - #1096

Open
itxaiohanglover wants to merge 3 commits into
MoonshotAI:mainfrom
itxaiohanglover:fix/archive-label-irreversible
Open

fix(web): clarify archive is irreversible by relabeling as Delete#1096
itxaiohanglover wants to merge 3 commits into
MoonshotAI:mainfrom
itxaiohanglover:fix/archive-label-irreversible

Conversation

@itxaiohanglover

Copy link
Copy Markdown

Fixes #1008

Problem

The "Archive" action in the session sidebar behaves like an irreversible delete — there is no recovery path. But the label says "Archive" which implies the session can be recovered later, misleading users.

What changed

Relabeled "Archive" to "Delete" in both English and Chinese locales:

  • archive: 'Archive'archive: 'Delete'
  • archiveConfirm: 'Archive session?'archiveConfirm: 'Permanently delete this session? This action cannot be undone.'
  • Chinese: 归档删除, 归档会话?永久删除此会话?此操作无法撤销。

The delete label already existed in the locale file (used for workspace removal), so there is no duplicate.

The Archive action behaves like delete (no recovery path), but
the label says Archive which implies recoverability.

Fix: relabel to Delete and update confirmation dialog to say
This action cannot be undone.

Fixes MoonshotAI#1008
@changeset-bot

changeset-bot Bot commented Jun 25, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: c924d72

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
Name Type
@moonshot-ai/kimi-code Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: ecc99f5910

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

newWorkspace: 'New Workspace',
emptyState: 'No sessions yet · click New Session to start',
archiveConfirm: 'Archive session?',
archiveConfirm: 'Permanently delete this session? This action cannot be undone.',

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Keep the irreversible warning visible

In the desktop session row, sidebar.archiveConfirm is rendered in .archive-label and that label is constrained to one line with overflow: hidden/text-overflow: ellipsis (SessionRow.vue lines 143-146 and 406-414). With the confirm/cancel buttons present, this longer sentence is truncated in the sidebar, so the important “cannot be undone” warning is not visible before users confirm the irreversible action. Use shorter copy that fits or change the confirmation UI to show the full warning.

Useful? React with 👍 / 👎.

copySessionId: 'Copy session ID ⧉',
copied: 'Copied ✓',
copyFailed: 'Copy failed',
archive: 'Delete',

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Rename the header archive action too

This updates the sidebar label to Delete, but the same destructive handler is still reachable from the active session header: ChatHeader.vue arms then emits archiveSession, while header.archiveSession/header.confirmArchive still render “Archive”/“Confirm archive?” in both locales. Users deleting the current session from the header menu still see the misleading recoverable-archive wording, so the relabeling should include the header namespace as well.

Useful? React with 👍 / 👎.

newWorkspace: '新建工作区',
emptyState: '还没有会话 · 点击 新建会话 开始',
archiveConfirm: '归档会话?',
archiveConfirm: '删除会话?',

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Add the no-undo warning to Chinese copy

The English confirmation now says the session is permanently deleted and cannot be undone, but the Chinese locale only says “删除会话?”. In the Chinese UI this irreversible action is still confirmed as a generic delete without the no-recovery warning, so the two locales are no longer semantically in sync for the destructive confirmation.

Useful? React with 👍 / 👎.

xsyetopz added a commit to xsyetopz/kimi-code that referenced this pull request Jul 31, 2026
Phase 1 — Non-PR issues (5):

- MoonshotAI#94: Read tool status now reports both MAX_LINES and MAX_BYTES when both
  limits are hit (was: else-if chain only reported the first). Fixed in v1
  (agent-core) and v2 (agent-core-v2). Added test for dual-limit case.

- MoonshotAI#250: KIMI_MODEL_* env config no longer gives OpenAI/Anthropic models the
  Kimi default capabilities (image_in, thinking). DEFAULT_CAPABILITIES is now
  a per-provider-type map: kimi gets ['image_in','thinking'], openai/anthropic
  get []. Fixed in v1 (env-model.ts) and v2 (envOverlay.ts). Added 2 tests.

- MoonshotAI#1972: Skill descriptions exceeding the 250-char model listing limit now
  emit a warning via onWarning during loadRoots, so the user knows the model
  sees a truncated version. Added 2 tests (warns / does not warn).

- MoonshotAI#1982: Added disabled_skills config denylist. config.toml now accepts
  disabled_skills = ['skill-name']. Matching skills (case-insensitive) are
  hidden from getSkill, getPluginSkill, listSkills, listInvocableSkills,
  register, loadRoots, and the TUI slash menu. Wired through SessionSkillConfig,
  resolveSessionSkillConfig, and TOML serialization. Added 3 tests.

- MoonshotAI#2224: Plugin-qualified skill names (e.g. 'superpowers:systematic-debugging')
  are now resolved by the native Skill tool. Falls back to getPluginSkill when
  bare-name getSkill misses and the name contains ':'. Fixed in v1 (skill-tool.ts)
  and v2 (skillTool.ts). Added 2 tests.

Phase 2 — PR-matching issues (5):

- MoonshotAI#1008 (PR MoonshotAI#1096): Web UI session archive relabeled from 'Archive' to 'Delete'.
  Confirm message now states the action is irreversible (en + zh).

- MoonshotAI#1106 (PR MoonshotAI#1108): WebSearch and FetchURL tools now forward the abort signal
  from ExecutableToolContext through to fetch() calls. Updated provider
  interfaces (WebSearchProvider, UrlFetcher) and all 3 provider implementations
  (MoonshotWebSearch, MoonshotFetchURL, LocalFetchURL). Updated 2 tests.

- MoonshotAI#1050 (PR MoonshotAI#1052): kosong streaming response loop now has an idle timeout
  (default 60s, configurable via idleTimeoutMs). Replaced bare for-await with
  manual iterator + Promise.race against timeout. Throws APITimeoutError on
  idle. Fixed in v1 (kosong/generate.ts) and v2 (agent-core-v2/generate.ts).
  Added 9 tests.

- MoonshotAI#1148 (PR MoonshotAI#1208): max_tokens/max_output_tokens now clamped to 128k ceiling
  in openai-legacy generate() and openai-responses withMaxCompletionTokens() +
  generate(). Kimi provider left unchanged (upstream clamping is intentional).
  Added 4 tests.

- MoonshotAI#1273 (PR MoonshotAI#1276): Added KimiCore.dispose() which iterates all live sessions
  and calls session.close() via Promise.allSettled. Wired into
  CoreProcessService.dispose(). Idempotent. Added 5 tests.

Skipped (already fixed in fork): MoonshotAI#1539, MoonshotAI#244, MoonshotAI#1218.
Checklist: .tmp/upstream-tracking/ISSUE-RESOLUTION-CHECKLIST.md
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

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

1 participant