# dsdriver **Repository Path**: x-itg/dsdriver ## Basic Information - **Project Name**: dsdriver - **Description**: 大师驾驶舱祝您管理n个亲密关系 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-04 - **Last Updated**: 2026-06-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 大师驾驶舱 (DSDriver) 复杂关系的工程化解法。以“攻略目标”为核心,辅助用户同时管理 N 段亲密关系,覆盖目标画像、互动、阶段计划、关键日程、统计分析、风险识别与预警。 ## 产品目标 大师驾驶舱不替用户做决策,而是持续提供: 1. 状态可视化:亲密度、活跃度、投入时间、风险、关键日程。 2. 过程管理:攻略计划、攻略阶段、阶段成果、时间轴日志。 3. 预警能力:关系降温风险、冲突日程干扰、高风险目标提示。 4. 全本地隐私:零云端、零账号、零第三方追踪。 ## 当前已实现功能 1. 安全与解锁 - 主密码 + Argon2id 派生主密钥。 - SQLite(移动端 SQLCipher / Web sql.js)+ 字段级 AES-256-GCM 双层保护。 - 自动锁定与解锁状态机。 2. 目标管理 - 目标画像(代号、标签、偏好、禁忌、重要日期、备注)。 - 角色面板(亲密度/情绪/风险可视化)。 3. 互动管理 - 互动记录(类型、时长、时间、地点、备注、情绪前后、亲密度增量)。 - 自动联动目标亲密度与最后互动时间。 4. 日程管理 - 新建/更新/删除日程。 - 单事件冲突检测。 - 范围级“日程相互干扰”扫描(按重叠分钟分级 low/mid/high)。 5. 统计与分析 - 仪表盘汇总:活跃目标、30 天互动次数、30 天投入时长、关键日程数、风险排行。 - 目标级 30 天活跃度指标:互动次数、互动天数、投入时长、距上次互动天数、活跃度评分。 - 统计页已改为真实聚合,不再使用占位逻辑。 6. 策略与日志基础设施(新增) - 策略计划表:strategy_plans。 - 攻略阶段表:strategy_stages。 - 时间轴日志表:activity_logs(可关联 target 与 stage)。 - 已提供 repository + service API,可直接接 UI。 ## 核心算法说明 ### 1) 亲密度算法 当前为“互动增量驱动模型”: 1. 每条互动携带 intimacyDelta(可正可负)。 2. 写入互动后,同步更新目标 intimacy: $$ intimacy_{new} = clamp(intimacy_{old} + intimacyDelta, 0, 100) $$ 3. 同时更新 lastInteractionAt。 趋势图通过累加历史 intimacyDelta 重建时序曲线。 ### 2) 风险识别算法 当前为“信号规则模型(可解释)”: 1. 时间信号: - $daysSinceLastInteraction \ge 14$:高风险信号。 - $7 \le daysSinceLastInteraction < 14$:中风险信号。 2. 变化信号: - 7 天 moodTrend 显著下降。 - 7 天 intimacyTrend 净下降。 3. 结构信号: - 高亲密度 + 长期无互动 -> 降温风险。 - 用户手动风险指数过高 -> 风险提示。 4. 风险分级:按信号条数聚合 low/mid/high。 输出包括:风险等级、风险信号列表、下一步建议动作。 ### 3) 目标活跃度算法(新增) 在 30 天窗口计算每个目标: - interactionCount:互动次数 - interactionDays:发生互动的自然日数 - investedMinutes:投入分钟 - daysSinceLastInteraction:距上次互动天数 活跃度评分 $activityScore \in [0,100]$: $$ score = freqPart + activeDaysPart + durationPart + recencyPart $$ 其中: - $freqPart = clamp(interactionCount/8,0,1) \times 40$ - $activeDaysPart = clamp(interactionDays/12,0,1) \times 30$ - $durationPart = clamp(investedMinutes/600,0,1) \times 20$ - $recencyPart = clamp(1-daysSinceLast/14,0,1) \times 10$ ### 4) 日程相互干扰识别(新增) 在给定时间窗口内,扫描 planned 事件两两重叠: $$ overlap = max(0, min(endA,endB) - max(startA,startB)) $$ 重叠时长转换为分钟后分级: - low: < 15 分钟 - mid: 15–45 分钟 - high: > 45 分钟 用于提前预警“时间冲突与相互干扰”。 ## 数据模型(核心) 1. 关系域 - targets:攻略目标画像 - interactions:互动记录 - events:关键日程与提醒 2. 策略域(新增) - strategy_plans:攻略计划 - strategy_stages:攻略阶段与进度/结果 3. 时间轴域(新增) - activity_logs:日志信息流(可关联 target 与 stage) ## 开发与运行 ### 安装 ```bash npm install ``` ### 开发 ```bash npm run dev ``` ### 类型检查 ```bash npm run typecheck ``` ### 构建 ```bash npm run build ``` ### 分阶段测试与统一产物管理 所有测试脚本与测试产物统一放在 qa 目录: - 脚本目录:[qa/scripts](qa/scripts) - 单测目录:[qa/tests](qa/tests) - 产物目录:[qa/artifacts](qa/artifacts) 执行分阶段测试流水线: ```bash npm run qa:stages ``` 该命令会依次执行: 1. Stage-1: 类型检查(typecheck) 2. Stage-2: 算法单测(vitest) 3. Stage-3: 构建验证(build) 产物示例: - [qa/artifacts/summary.json](qa/artifacts/summary.json) - [qa/artifacts/unit-report.json](qa/artifacts/unit-report.json) - [qa/artifacts/stage-1-typecheck.log](qa/artifacts/stage-1-typecheck.log) - [qa/artifacts/stage-2-unit.log](qa/artifacts/stage-2-unit.log) - [qa/artifacts/stage-3-build.log](qa/artifacts/stage-3-build.log) ### 端到端回归测试 基于 sql.js 内存数据库 + 真实 AES-256-GCM 字段加密,跑完整 `service → repo → DB` 链路的"有数据"回归: ```bash npx vitest run qa/tests/e2e-regression.test.ts --reporter=verbose ``` 覆盖三条核心功能链路: **链路 1 — 策略阶段推进** 创建目标 → 创建攻略计划 → 新增 3 个阶段 → 推进进度(50% → 100% done)→ 验证整体进度 `progress=43`、`doneStages=1`、阶段顺序与状态正确。 **链路 2 — 时间线筛选** 创建目标 → 在 4 个不同时间段创建互动(1h 前 / 3 天前 / 15 天前 / 60 天前)→ 验证 `today / week / month / older` 四组齐全、按目标过滤正确、时间降序排列。 **链路 3 — 日程冲突告警** - 完全重叠(60 min)→ `high` 严重度,`ConflictReport` 正确 - 部分重叠(30 min)→ `mid` 严重度 - 不重叠事件 → 无冲突 - `detectRangeInterference` 批量扫描 → 警告列表按 `overlapMin` 降序 **跨链路联动** 创建互动 → 目标亲密度自动累加(30+5=35)→ 时间线立即可见(`today` + `kind=interaction`)。 **测试环境说明** | 组件 | 实现方式 | |---|---| | 数据库 | sql.js 内存 SQLite(`window.initSqlJs` mock) | | 平台检测 | `vi.mock('@capacitor/core')` 返回 `'web'` | | 加密 | `crypto.getRandomValues` + `AES-GCM` 真实加解密 | | 密钥 | 绕过 Argon2 KDF,直接注入随机测试密钥 | | 迁移 | `runMigrations()` 执行完整 schema v1 + v2 | 测试文件:[qa/tests/e2e-regression.test.ts](qa/tests/e2e-regression.test.ts) ### 原生同步 ```bash npm run cap:sync ``` ## 目录结构 ```text src/renderer/ crypto/ # KDF + AES 字段加密 db/ connection.ts # SQLite 适配 migrations.ts # schema v1/v2 repositories/ # targets/interactions/events/strategy/activity_logs services/ target.service.ts interaction.service.ts schedule.service.ts risk.service.ts analytics.service.ts strategy.service.ts # 新增 logfeed.service.ts # 新增 pages/ Dashboard.tsx TargetDetail.tsx Schedule.tsx Stats.tsx ``` ## 未完成项与实施清单 以下能力已进入实现路线,当前版本完成了数据与算法基础,UI 或系统集成仍需继续: 1. 攻略计划/阶段前台管理界面 - [x] 数据表与服务 API - [ ] 页面与交互(创建计划、阶段看板、阶段成果回顾) 2. 时间维度日志信息流面板 - [x] activity_logs 数据表与服务 API - [ ] 全局 Timeline 页面 - [ ] TargetDetail 内嵌日志流与筛选 3. 日程提醒系统 - [x] 日程冲突/干扰识别算法 - [ ] 与 LocalNotifications 联动的实际触发、去重与补偿机制 4. 风险智能化 - [x] 可解释规则模型 - [ ] 组合评分模型(时间衰减 + 趋势斜率 + 阶段进展) - [ ] 风险变化趋势图与“预警原因溯源” 5. 统计维度扩展 - [x] 目标活跃度、互动天数、投入时长、风险排行 - [ ] 多窗口对比(7/30/90 天) - [ ] 阶段成果完成率、计划执行偏差 ## 隐私与安全 1. 无账号、无云端、无第三方追踪 SDK。 2. 主密码不落盘,忘记即不可恢复。 3. 数据加密采用“库级 + 字段级”双层模型。 ## 说明 本项目用于个人关系管理场景的工程化实践。请在合法、合规、尊重边界的前提下使用。