fix(web): clarify archive is irreversible by relabeling as Delete - #1096
fix(web): clarify archive is irreversible by relabeling as Delete#1096itxaiohanglover wants to merge 3 commits into
Conversation
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 detectedLatest commit: c924d72 The changes in this PR will be included in the next version bump. This PR includes changesets to release 1 package
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 |
There was a problem hiding this comment.
💡 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.', |
There was a problem hiding this comment.
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', |
There was a problem hiding this comment.
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: '删除会话?', |
There was a problem hiding this comment.
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 👍 / 👎.
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
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.'归档→删除,归档会话?→永久删除此会话?此操作无法撤销。The
deletelabel already existed in the locale file (used for workspace removal), so there is no duplicate.