Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,5 @@ rust-toolchain.toml - 固定 Rust 编译器和质量检查工具
README.md / docs/README.en.md - 中文默认与英文独立产品入口,简明游戏使用与开发导航互相对应
src-tauri/tauri.conf.json - 窗口、安全策略、安装器和更新签名
</config>
边界: Rust 是 SQLite 设置、系统凭据与模型请求的唯一权威;主窗口模型编辑可查看自己的 Key,秘密不进入共享设置或数据库;模型预设/URL 分类(仅回环与私有网段可用 http)、外观主题、剪贴板、外链、资源路径及更新均由 Rust 执行,前端只渲染与编辑草稿。macOS 键盘创建、布局查询与短注入只在主线程,网络、等待与剪贴板留在后台;原位核验占位与焦点再替换/恢复,浮窗确认回填、不自动发送。录屏只通过单文件 asset scope 按需读取,视觉由用户验收;release 全部平台验证后才发布。
边界: Rust 是 SQLite 设置、系统凭据与模型请求的唯一权威;主窗口模型编辑可查看自己的 Key,秘密不进入共享设置或数据库;模型预设/URL 分类(仅回环与私有网段可用 http)、外观主题、剪贴板、外链、资源路径及更新均由 Rust 执行,前端只渲染与编辑草稿;无法解析的设置仅由主窗口在用户确认后完整备份并恢复默认,系统凭据保留。macOS 键盘创建、布局查询与短注入只在主线程,网络、等待与剪贴板留在后台;原位核验占位与焦点再替换/恢复,浮窗确认回填、不自动发送。录屏只通过单文件 asset scope 按需读取,视觉由用户验收;release 全部平台验证后才发布。
法则: 极简·稳定·导航·版本精确
2 changes: 1 addition & 1 deletion docs/CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@
> L2 | 父级: ../CLAUDE.md
成员清单
README.en.md: 根 README 的独立英文简明入口,以原版演示插图、平台下载表与游戏操作步骤引导使用;详细实现交给 issues.md,保存与输入边界保持中英文等价。
issues.md: 调查覆盖与发布后处理记录,将逐条取舍、公开产物证据和现场验收边界连接到实现。
issues.md: 调查覆盖与发布后处理记录,将逐条取舍、公开产物证据和现场验收边界连接到实现;#65 保持开放直至受影响配置验收。
[PROTOCOL]: 变更时更新此头部,然后检查 CLAUDE.md
3 changes: 3 additions & 0 deletions docs/issues.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ Rust 统一持有 SQLite 设置、系统凭据和模型请求。普通输入框
| [#62](https://github.com/liseami/DeepRant/issues/62) | Rust 明确区分空响应 / 非 JSON / 无最终文本,不再直接调用前端 Response.json。 | 响应解析有原生单测。 |
| [#63](https://github.com/liseami/DeepRant/issues/63) | 物理 code 录制,小键盘数字 / F 键单键,释放修饰键后执行,应用内冲突回滚。 | NumLock 必须开启;Windows 无法区分 NumpadEnter / Equal,明确拒绝。 |
| [#64](https://github.com/liseami/DeepRant/issues/64) | 2.0.1 为星际公民的自动游戏输入默认选择原生浮窗,不依赖聊天框复制;保留船名 / 航点语境,确认后核验原窗口与焦点再回填,消息由用户发送。 | 12 组路由回归覆盖星际公民 / LoL、日常及显式模式覆盖;游戏现场与 EAC 兼容由用户验收,不声称已获白名单或认证。 |
| [#65](https://github.com/liseami/DeepRant/issues/65) | 截图对应设置反序列化失败,所有页面共用设置入口因而同时阻塞。加载时移除只供界面渲染的旧模型状态;真正坏字段仍保留原文,并提供用户确认后的完整备份与默认值恢复,系统凭据不清除。 | 已重新打开。正常 1.1.7 配置本身可迁移,尚未取得报告者原始配置,不能断言具体坏字段;修复代码与回归不等于受影响 Windows 配置已验收,不自动关闭。 |
| [#66](https://github.com/liseami/DeepRant/issues/66) | 2.0.2 侧栏新增系统 / 浅色 / 深色外观,默认跟随系统;偏好存 SQLite,Rust 启动时只读数据库并下发应用级原生主题,标题栏、主窗口与浮窗 WebView 同步,前端只跟随 prefers-color-scheme 拨动 html.dark。 | 设置校验与 patch 有原生单测;深色视觉由用户验收。 |
| [#67](https://github.com/liseami/DeepRant/issues/67) | 2.0.2 Base URL 对回环与私有网段(RFC 1918、链路本地、CGNAT 100.64/10、IPv6 ULA / 链路本地、`*.local`)接受 http,Key 可选并显示明文提示;公网仍只接受 https 且必须有 Key,不跟随重定向。 | 17 组地址分类回归;普通域名不经 DNS 解析判断,指向内网的公网域名仍需 https;局域网中转现场由用户验收。 |

Expand Down Expand Up @@ -90,6 +91,8 @@ Rust 统一持有 SQLite 设置、系统凭据和模型请求。普通输入框

2026-10-19 追加 #66 / #67:[2.0.2](https://github.com/liseami/DeepRant/releases/tag/v2.0.2) 已通过 [Actions 39366145453](https://github.com/liseami/DeepRant/actions/runs/39366145453) 发布,标签固定受测提交 `23ed5d019172cf2a126055366f87605a99886a04`。三平台构建、Windows 兼容验收与发布五个 job 全部成功,首次推送到公开共 17 分 14 秒。本机先通过 fmt、25 项原生单测、clippy、7 项契约测试与发布脚本测试;发布后下载 10 个公开资产,SHA-256 全部一致,`latest.json` 为 2.0.2 且三平台更新签名与 `.sig` 一致,3 个安装包均有本仓库发布工作流的来源证明。[#66](https://github.com/liseami/DeepRant/issues/66) 与 [#67](https://github.com/liseami/DeepRant/issues/67) 已写明操作步骤与 http 明文边界后按 completed 关闭;深色视觉与局域网中转现场由用户验收。

2026-10-20 追加 #65:已重新打开,避免把没有诊断的关闭状态当成修复证据。截图精确命中设置反序列化错误,但没有报告者原始配置,不能确定具体字段。代码补齐旧模型运行时属性的兼容解码;其余格式错误由主窗口确认后先将固定 SQLite 文件与旧 JSON 完整复制到独立备份目录,再用 SQLite 事务写入默认值。备份失败不写入、写入失败回滚,Unix 备份目录权限为 700;旧 JSON 原文保留,恢复后的数据库关闭旧文件重新导入与清理待办,系统凭据不删除。新增 6 项回归,本机 31 项原生测试、7 项契约检查、前端构建、6 项发布脚本测试、fmt 与 clippy 通过;真实发布签名包验证仍按现有规则忽略,本轮没有发布新版本。Windows 与 macOS CI 及受影响配置的现场结果另行补充。

供应商资料:[DeepSeek](https://api-docs.deepseek.com/)、[OpenAI GPT-6 Luna](https://developers.openai.com/api/docs/models/gpt-6-luna)、[Ollama Qwen3.5 4B](https://ollama.com/library/qwen3.5:4b)、[腾讯 TokenHub](https://cloud.tencent.com/document/product/1823/130079)、[腾讯旧 R1 下线](https://cloud.tencent.com/announce/detail/2258)、[硅基](https://api-docs.siliconflow.cn/docs/api/chat-completions-post)、[302.AI](https://doc.302.ai/171145944e0)、[R1 历史兼容建议](https://github.com/deepseek-ai/DeepSeek-R1#usage-recommendations)。

[PROTOCOL]: 变更时更新此头部,然后检查 CLAUDE.md
7 changes: 4 additions & 3 deletions src-tauri/src/CLAUDE.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
# src-tauri/src/
> L2 | 父级: ../CLAUDE.md
成员清单
lib.rs: 生命周期与原生业务/系统 IPC 登记,管理更新状态;setup 先套用已存外观,Ready 先显示再初始化,主窗口隐藏/浮窗取消,警告日志不记录原文。
lib.rs: 生命周期与原生业务/系统 IPC 登记,管理更新状态;仅主窗口可恢复损坏设置,成功后重建快捷键;Ready 先显示再初始化,警告日志不记录原文。
desktop_services.rs: Rust 桌面服务边界,按窗口身份限制文本复制、固定外链 ID 和单录屏 URL;应用级主题驱动标题栏与全部 WebView 深浅色;前端不获得通用系统或路径插件能力,asset 仍按 Range 读取原资源。
input_diagnostics.rs: 实时权限与真实注册状态、最近输入的只内存快照;固定系统设置入口不代替用户授权,热键和复制阶段不进磁盘日志。
main.rs: 桌面程序入口,只调用库运行函数。
credentials.rs: 系统钥匙串凭据唯一边界,以协议及端点隔离 Key;仅主窗口模型编辑可按服务查看,不进入公开设置或诊断。
store.rs: 设置校验与升级迁移;所有设置经单一锁写入 SQLite,凭据先迁移验证、数据库提交后才清除旧 JSON 明文;启动外观只读 SQLite,不等待钥匙串。
settings_db.rs: 单行 JSON 文档的 SQLite 事务,保留未知根字段;首次读取旧文件,之后数据库唯一权威,待办标记让明文清理可重试。
store.rs: 设置校验与升级迁移;单锁写入 SQLite,加载时剥除旧模型运行时状态;格式错误仅经显式备份恢复,系统凭据保留;启动外观不等待钥匙串。
store_tests.rs: 设置迁移与写入边界回归,覆盖 1.1.7、旧运行时属性、凭据分离、损坏字段脱敏及合法设置往返。
settings_db.rs: 单行 JSON 文档的 SQLite 事务,保留未知根字段;首次读旧文件,之后数据库唯一权威;恢复前完整备份固定设置文件,备份失败不写默认值。
ai_translator.rs: 模型请求与最终文本解析;公网强制 Key,本机 / 局域网 Key 可选;直接消费可查看的同源提示词,现代 OpenAI 使用 developer/完成预算,Qwen 默认关闭思考,旧模型兼容不污染其他协议。
translation_prompt.rs: Rust 完整生效提示词唯一生成源;嘴臭创造性改写、自定义要求优先;主窗口查看/复制只读取已保存设置,不访问模型 Key。
model_presets.rs: Rust 唯一供应商目录,向界面提供当前预设、官方端点与精确 ID;历史标签仅兼容,迁移不重置用户地址。
Expand Down
21 changes: 20 additions & 1 deletion src-tauri/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/**
* [INPUT]: store 设置与凭据迁移、shortcut 注册事务、模型与游戏输入管道、input_diagnostics 的权限和阶段快照。
* [OUTPUT]: 设置/翻译/输入诊断 IPC 与仅主窗口的 Key 查看;启动先套用已存外观,Ready 先激活主窗口,再异步初始化凭据与快捷键。
* [OUTPUT]: 设置/翻译/输入诊断 IPC 与仅主窗口的 Key 查看、损坏设置备份恢复;Ready 先显示主窗口,再异步初始化凭据与快捷键。
* [POS]: 仅编排边界模块;主线程不等待 Keychain,输入失败显示主窗口,浮窗关闭取消;警告日志不记录聊天原文。
* [PROTOCOL]: 变更时更新此头部,然后检查 CLAUDE.md
*/
Expand Down Expand Up @@ -41,6 +41,24 @@ async fn get_settings(app_handle: tauri::AppHandle) -> Result<store::AppSettings
.map_err(|_| "设置任务被中断".to_string())?
}

#[tauri::command]
async fn restore_default_settings(window: tauri::WebviewWindow) -> Result<String, String> {
if window.label() != "main" {
return Err("只有主窗口可以恢复默认设置".into());
}
let app = window.app_handle().clone();
tauri::async_runtime::spawn_blocking(move || {
let backup = store::restore_default_settings(&app).map_err(|e| e.to_string())?;
desktop_services::apply_appearance(&app, "system");
if let Err(error) = shortcut::init_shortcuts(&app) {
shell_helper::report_status(&app, "error", &format!("快捷键注册失败:{error}"));
}
Ok(backup.to_string_lossy().into_owned())
})
.await
.map_err(|_| "设置恢复任务被中断,请重试读取设置".to_string())?
}

#[tauri::command]
async fn update_settings(
app_handle: tauri::AppHandle,
Expand Down Expand Up @@ -304,6 +322,7 @@ pub fn run() {
.invoke_handler(tauri::generate_handler![
get_version,
get_settings,
restore_default_settings,
update_settings,
clear_api_key,
read_api_key,
Expand Down
Loading
Loading