Skip to content

feat: style pack i18n + 差量缓存 + 内置三包升级到 v2 - #460

Merged
appergb merged 4 commits into
betafrom
feat/style-packs-v2-marketplace-i18n-cache
May 17, 2026
Merged

feat: style pack i18n + 差量缓存 + 内置三包升级到 v2#460
appergb merged 4 commits into
betafrom
feat/style-packs-v2-marketplace-i18n-cache

Conversation

@appergb

@appergbappergb commented May 16, 2026

Copy link
Copy Markdown
Collaborator

User description

Summary

三件事捆在一起发:

  • i18n(5 个 locale 全覆盖):补齐 ja/ko 缺失的 marketplace.* 段;新增 style.pack.* 命名空间(~70 keys)。Style.tsx 把 100+ 行 isEnglish ? 中 : 英 三元 copy 全走 t();Marketplace.tsx + MarketplaceModal.tsx 把硬编码 '我赞过的'/'我的发布'/'确定上传'/'已下架'/'撤回发布'/'未登录'/'衍生自'/状态标签等 30+ 处走 t(),含 statusLabel(state, t) 重构。后续翻译可以直接接入 style.pack.* / marketplace.* 各 key。
  • Marketplace 差量缓存:list cache 升级到 localStorage(跨重启秒呈现,TTL 24h)。新增 detail cache,按 (id, version, updatedAt) 三元组作为内容版本签名缓存 marketplace_detail;命中 = 0 请求,未命中再走 IPC。写 list 时自动驱逐三元组消失的 detail 条目(云端撤回 → 本机同步移除)。安全审计:UUID v4 校验、detail.id 匹配请求 ID、单条 prompt ≤ 200KB、detail 上限 64 条 LRU。
  • 内置三个 style pack 升级到 v2.0:「轻度润色」「清晰结构」「正式表达」整体替换为社区维护的 PRO v2 prompt(独立角色 + {{HOTWORDS}} + 七/八节中文序号骨架 + 高密度示例 + ASR 纠错词表)。default_style_system_prompt_for_mode 对这三个 mode 早返回各自的 BUILTIN_PROMPT,跳过标准 wrapper 避免段落重复;name 保留中文短名(去 PRO 后缀),version → 2.0.0老用户磁盘已有 builtin pack 不会被自动覆盖(保护用户编辑),要应用 v2 需在「风格」页面点一次「重置」;新装用户直接拿 v2。

后端服务(apic.openless.top)这次没动。

Test plan

  • cargo check --manifest-path src-tauri/Cargo.toml clean
  • cargo test --lib -- --test-threads=1 268 passed / 0 failed
  • npm run build clean(含 tsc && vite build
  • 本地装包后手动验:切到 en/ja/ko/zh-TW 看 Style 页面 + Marketplace + 上传 picker + OAuth 弹窗全无中文残留
  • 在「风格」页面对内置三个 pack 各点一次「重置」→ 看到 v2 prompt 与 3 个新示例
  • Marketplace 开两次:第二次秒呈现(list cache 命中);点同一个 pack 详情两次:第二次跳过网络(detail cache 命中);后台撤回某 pack → 重新打开 marketplace 应自动从 detail cache 驱逐

PR Type

Enhancement, Bug fix, Documentation


Description

  • Upgrade built-in style pack prompts to v2.0

  • Route English translations to dedicated prompt

  • Cache marketplace details and improve states

    • Detail cache hits skip network requests
  • Localize marketplace, style, and docs


Diagram Walkthrough

flowchart LR
A["Prompt updates"] -- "v2.0 built-ins" --> B["Style pack modes"]
A -- "English target routing" --> C["Dedicated EN translate prompt"]
D["Marketplace UI"] -- "localized copy" --> E["i18n resources"]
D -- "detail/list cache" --> F["Marketplace cache helpers"]
G["Windows overlay notes"] -- "documented limits" --> H["Fullscreen behavior docs"]
Loading

File Walkthrough

Relevant files
Enhancement
6 files
types.rs
Upgrade built-in style pack prompts
+460/-137
polish.rs
Add English-specific translate prompt
+153/-22
Marketplace.tsx
Add cached, localized marketplace UX
+164/-89
Style.tsx
Replace style page copy with i18n
+105/-228
ipc.ts
Add marketplace cache IPC helpers
+119/-9
MarketplaceModal.tsx
Localize marketplace upload modal
+6/-4
Documentation
2 files
coordinator.rs
Document fullscreen overlay limitations
+12/-0
USAGE.md
Document fullscreen game overlay limits
+9/-0
Localization
5 files
ja.ts
Add Japanese marketplace translations
+194/-0
ko.ts
Add Korean marketplace translations
+194/-0
zh-TW.ts
Expand Traditional Chinese translations
+165/-0
zh-CN.ts
Expand Simplified Chinese translations
+165/-0
en.ts
Add English marketplace translations
+165/-0

baiqing added 2 commits May 16, 2026 20:02
- coordinator.rs: 在 show_capsule_window_no_activate (Windows 路径) 上方加注释,
说明 SetWindowPos(HWND_TOPMOST) 在独占全屏 DirectX/OpenGL 应用之上失效,以及
UIPI 阻挡 hotkey 的同源现象,避免后续维护者再次尝试用户空间 workaround。
- USAGE.md: 给最终用户加 FAQ —— Minecraft 等全屏游戏下应切换到 borderless
windowed fullscreen,对齐管理员权限,预先打开游戏聊天框。
此次仅文档与注释改动,不修改运行时行为。修复独占全屏 overlay 需要 DirectX
overlay 注入(Discord / MSI Afterburner 路线),工程量与风险都不在 surgical
修复范围。
i18n(5 个 locale 全覆盖)
- 新增 style.pack.* 命名空间(~70 keys)覆盖 Style 页面所有 UI 文案。
- 扩展 marketplace.* 命名空间(~50 keys,含 myPacks/upload/oauth/state/modal/derivativeBadge/sortLiked/likedEmpty 等)。
- ja.ts / ko.ts 原本完全缺失 marketplace.* —— JP/KR 用户进风格市场会 fallback 看见中文,本次补齐。
- Style.tsx 删除 100+ 行 `isEnglish ? '...' : '...'` 三元 copy 对象,全走 t()。
- Marketplace.tsx + MarketplaceModal.tsx 把硬编码 '我赞过的'/'我的发布'/'确定上传'/'已下架'/'撤回发布'
/'审核中'/'已上架'/'未通过'/'未登录'/'衍生自' 等 30+ 处全走 t(),含 statusLabel(state, t) 重构。
差量缓存(src/lib/ipc.ts + Marketplace.tsx)
- list cache 从 sessionStorage 升到 localStorage,跨重启秒呈现,TTL 24h。
- 新增 detail cache:按 (id, version, updatedAt) 三元组缓存 marketplace_detail;
三元组等价于内容版本签名,version/updatedAt 任一变化即失效重拉。命中 = 0 请求。
- 自动驱逐:写入 list cache 时根据当前三元组集合 prune 不在列表里的 detail 条目
—— 满足「云端哈希被移除时本机也移除」的语义。
- 安全审计:
- 包 ID 必须匹配 UUID v4 正则(防 key 注入)。
- detail.id 必须等于请求 packId(防服务端返回错位内容)。
- 单条 prompt 长度上限 200KB(防 OOM)。
- detail 条目上限 64,LRU 淘汰(防 localStorage 配额耗尽)。
- openDetail 先查本机三元组缓存,命中即渲染 + 跳过网络;未命中再走 IPC + 校验回写。
内置 style pack 升级到 v2.0(types.rs + polish.rs tests)
- 「轻度润色」「清晰结构」「正式表达」三个 builtin pack 整体替换为社区维护的 PRO v2 prompt
(含独立角色 + {{HOTWORDS}} + 七/八节中文序号骨架 + 高密度示例 + ASR 纠错词表)。
- default_style_system_prompt_for_mode 对这三个 mode 早返回各自的 BUILTIN_PROMPT,
跳过标准 ROLE_BLOCK + COMMON_RULES + OUTPUT_BLOCK wrapper,避免与 v2 内同名段落重复。
- StylePack literal 同步:name 保留中文短名(去掉 PRO 后缀),version → 2.0.0,
description/examples/tags 同步 manifest。
- 老用户磁盘已有的 builtin pack 不会被自动覆盖(persistence migration 只填空字段,
保护用户对内置包的编辑);要应用 v2 需在「风格」页面点一次「重置」;新装用户直接拿 v2。
- polish.rs 的 4 处依赖旧 heading 的断言更新为 v2 实际锚点;
common_rules_include_auto_correction_and_natural_organization 拆为
Raw(走 wrapper)+ Light/Structured/Formal(走 v2 PRO 自带 ASR 纠错段)两组。
后端服务(apic.openless.top)这次没动。
@github-actions

github-actionsBot commented May 16, 2026

Copy link
Copy Markdown
Contributor

PR Reviewer Guide 🔍

(Review updated until commit bfe101d)

Here are some key observations to aid the review process:

⏱️ Estimated effort to review: 3 🔵🔵🔵⚪⚪
🧪 PR contains tests
🔒 No security concerns identified
⚡ Recommended focus areas for review

英文翻译加专用补丁
- translate_system_prompt 检测 target_language == English(含 '美式英文' / '英文' / 'english'
/ 'British English' 等别名)时,在基础 prompt 末尾拼一段 EN 专用指引:
· ASR 纠错优先策略(高/中/低置信度分级)
· 中→英技术词规范化表(令牌→Token / 密钥→Secret Key / 应用ID→App ID /
鉴权失败→authentication failure / 调用接口→call the API …)
· 模型名 / 产品名还原(克劳德→Claude、双子座→Gemini、卡布奇诺→Cappuccino …)
· 自然英文要求(idiomatic、avoid Chinglish、code/URL/版本号原样保留)
- 其它语言行为不变。
- 来源:社区贡献的「重写为英文」prompt,精简后避免与 base 重复。
- 新增 translate_prompt_appends_en_extras_only_for_english 单测覆盖 happy path + 别名 + 非英文。
修「我的发布」三个 bug
1. 数据拉取态:新增 myPacksLoading / myPacksError 状态机。
原行为:拉取中显示「你还没有发布过风格包」,失败只弹 toast;用户分不清"empty"和"loading"。
现行为:四态优先级 loading → error → empty → list;loading 显示「正在拉取,请稍后…」;
error 单独成块带「重试」按钮(inline 比 toast 更稳定可达)。
2. 计数错位:visibleMyPacks 立即过滤 withdrawn / superseded(移除原 5 分钟可见窗口)。
原 bug:发布 1 个删 1 个后,刚下架的那个还在 5 分钟窗口内 → 计数显示 2,跟实际不符。
下架的反馈走 actionMsg toast 即可,不需要在列表里继续占位。
3. 计数源切换:'已发布 N 个'里的 N 改用 visibleMyPacks.length(active 包),
跟列表里实际看到的卡片数对得上。pending 计数同样基于 visible。
4. 顺手清理:刷新按钮在 myPacksLoading=true 时 disabled,避免并发请求;
删掉只为旧 5 分钟窗口存在的 nowTick / setInterval 状态与 effect。
i18n(5 个 locale):marketplace.myPacks 新增 loadingTitle / loadingHint /
loadErrorTitle / loadErrorRetry 四个 key。
@github-actions

Copy link
Copy Markdown
Contributor

Persistent review updated to latest commit afd2476

上一版是「通用 base + 末尾追加 EN 专用补丁」,两段重复 / 注意力被稀释。这版改为:
- target_language 命中 English 时(含 '美式英文' / '英文' / 'english' / 'British English' 别名)
→ translate_system_prompt 直接 return 新增的 EN_TRANSLATE_SYSTEM_PROMPT 整段,不再拼通用 base。
- 其它语言行为不变(继续走原通用 # 任务(翻译输出) base)。
新 EN_TRANSLATE_SYSTEM_PROMPT 自包含、~60 行精简版(来源:社区「重写为英文」prompt):
· 角色 + 输入是 ASR 不可靠 + 任务定义(先纠错再翻译,结果直插光标)
· 工作流程 6 步(不可换顺序)
· ASR 纠错按高/中/低置信度分级
· 中→英技术术语规范化表(Token / Secret Key / App ID / Access Token / Endpoint /
Webhook / authentication failure / call the API / quota / front-end / back-end /
Claude / Gemini / Cappuccino / Coder / LongCat …)
· 翻译要求:自然 idiomatic、不要 Chinglish、保持原语气、英语写法的日期数字
· 原样保留:代码标识符 / 命令 / 路径 / env vars / 布尔值 / 完整版本号 /
大写缩略语(API SDK JWT OAuth …)/ 人名地名品牌名
· 边界 case + 5 条禁止 + 输出约束
替换 translate_prompt_appends_en_extras_only_for_english 单测为
translate_prompt_swaps_to_en_dedicated_when_target_is_english:断言
- 英文目标命中 EN 专用 prompt("# 任务(中文转写 → 英文翻译)"),不再含通用 base 标题
- 非英文目标仍走通用 base
- 别名 '美式英文' / '英文' / 'english' / 'British English' 都解析为英文
cargo test 269 / 0 / 0;tsc clean。
@github-actions

Copy link
Copy Markdown
Contributor

Persistent review updated to latest commit bfe101d

@appergb
appergb merged commit ecf2b0f into betaMay 17, 2026
4 checks passed
@appergb
appergb deleted the feat/style-packs-v2-marketplace-i18n-cache branch September 9, 2026 05:37
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@appergb