跳转到内容

desktop/src-tauri/crates/core/src/adapters/hermes/common.rs

第 1 条注释,第 1 行

desktop/src-tauri/crates/core/src/adapters/hermes/common.rs:1

//! Hermes Agent 产品特有的公共部分(独立目录约定 architecture.md#adapter-layout):

第 2 条注释,第 2 行

desktop/src-tauri/crates/core/src/adapters/hermes/common.rs:2

//! - usage 映射(`map_hermes`/`HermesUsage`,列定义依据为固定源码,见下);

第 3 条注释,第 3 行

desktop/src-tauri/crates/core/src/adapters/hermes/common.rs:3

//! - `billing_base_url` 内存规范化(无凭据 provider 标识或本地摘要,不持久化原文);

第 4 条注释,第 4 行

desktop/src-tauri/crates/core/src/adapters/hermes/common.rs:4

//! - state.db 源库只读访问实现(只读连接 + Online Backup 暂存副本):

第 5 条注释,第 5 行

desktop/src-tauri/crates/core/src/adapters/hermes/common.rs:5

//! 小工具函数复制自 `adapters/kilo/common.rs`(各 Agent 目录保持独立,

第 6 条注释,第 6 行

desktop/src-tauri/crates/core/src/adapters/hermes/common.rs:6

//! 不共享模块;kilo 版本为 M3 已验收实现,语义一致仅前缀/注释不同)。

第 7 条注释,第 7 行

desktop/src-tauri/crates/core/src/adapters/hermes/common.rs:7

//!(空行)

第 8 条注释,第 8 行

desktop/src-tauri/crates/core/src/adapters/hermes/common.rs:8

//! 固定源码依据(A24,commit ef70b3661cbfcf57e583008ad91dd04d8ba46070):

第 9 条注释,第 9 行

desktop/src-tauri/crates/core/src/adapters/hermes/common.rs:9

//! - `hermes_state_common.py` SCHEMA_SQL:`session_model_usage` 18 列,

第 10 条注释,第 10 行

desktop/src-tauri/crates/core/src/adapters/hermes/common.rs:10

//! 主键前半部分为 session_id、model、billing_provider、billing_base_url,

第 11 条注释,第 11 行

desktop/src-tauri/crates/core/src/adapters/hermes/common.rs:11

//! billing_mode, task);`sessions` 含 id/source/parent_session_id/started_at/

第 12 条注释,第 12 行

desktop/src-tauri/crates/core/src/adapters/hermes/common.rs:12

//! ended_at/end_reason 与累计五列等(本适配器只读时间回退列)。

第 13 条注释,第 13 行

desktop/src-tauri/crates/core/src/adapters/hermes/common.rs:13

//! - `hermes_state_usage.py`:计数器按组合键 ADD 式累计(增量路径),

第 14 条注释,第 14 行

desktop/src-tauri/crates/core/src/adapters/hermes/common.rs:14

//! absolute 路径只覆盖 sessions 总量且不写模型行;`record_auxiliary_usage`

第 15 条注释,第 15 行

desktop/src-tauri/crates/core/src/adapters/hermes/common.rs:15

//! 只写 task 键行、不进主会话总量;first_seen 仅插入时写入,last_seen

第 16 条注释,第 16 行

desktop/src-tauri/crates/core/src/adapters/hermes/common.rs:16

//! 每次冲突更新推进。

第 17 条注释,第 17 行

desktop/src-tauri/crates/core/src/adapters/hermes/common.rs:17

//! - `hermes_constants.py`:get_hermes_home = 上下文覆盖 → HERMES_HOME →

第 18 条注释,第 18 行

desktop/src-tauri/crates/core/src/adapters/hermes/common.rs:18

//! 平台默认(Windows %LOCALAPPDATA%/hermes,其他 ~/.hermes);

第 19 条注释,第 19 行

desktop/src-tauri/crates/core/src/adapters/hermes/common.rs:19

//! 命名 profile 为 `<root>/profiles/<name>` 独立 state.db。

第 20 条注释,第 20 行

desktop/src-tauri/crates/core/src/adapters/hermes/common.rs:20

//!(空行)

第 21 条注释,第 21 行

desktop/src-tauri/crates/core/src/adapters/hermes/common.rs:21

//! 时间列(first_seen/last_seen/started_at/ended_at)为 REAL Unix epoch 秒

第 22 条注释,第 22 行

desktop/src-tauri/crates/core/src/adapters/hermes/common.rs:22

//!(Python time.time()),本模块统一换算毫秒。A24 与 0.21.5 固定源码的

第 23 条注释,第 23 行

desktop/src-tauri/crates/core/src/adapters/hermes/common.rs:23

//! normalize_usage 确认 input_tokens 为非缓存输入、reasoning 是输出子集。

第 24 条注释,第 24 行

desktop/src-tauri/crates/core/src/adapters/hermes/common.rs:24

//! 真实请求/续会话核对通过;来源初始化/缺字段均归零,零值保持未知。

第 25 条注释,第 34 行

desktop/src-tauri/crates/core/src/adapters/hermes/common.rs:34

/// session_model_usage 五个并行计数列(NOT NULL DEFAULT 0,i64)。

第 26 条注释,第 44 行

desktop/src-tauri/crates/core/src/adapters/hermes/common.rs:44

/// 正数按原生归一桶报告;默认零无法区分缺字段,保持未知。

第 27 条注释,第 45 行

desktop/src-tauri/crates/core/src/adapters/hermes/common.rs:45

/// 只有全部必需桶已知时才派生输入/完整总量,不用默认零补全。

第 28 条注释,第 83 行

desktop/src-tauri/crates/core/src/adapters/hermes/common.rs:83

/// REAL epoch 秒 → UTC 毫秒。非有限/早于 2000-01-01(秒毫秒误判守卫)→ None。

第 29 条注释,第 96 行

desktop/src-tauri/crates/core/src/adapters/hermes/common.rs:96

/// billing_base_url 内存规范化(adapters.md Hermes 约定:只在内存规范化成

第 30 条注释,第 97 行

desktop/src-tauri/crates/core/src/adapters/hermes/common.rs:97

/// 无凭据的 provider 标识或本机摘要,不持久化完整 URL/查询参数):

第 31 条注释,第 98 行

desktop/src-tauri/crates/core/src/adapters/hermes/common.rs:98

/// URL 形 → `scheme/host[:port]`(去 userinfo/path/query/fragment);

第 32 条注释,第 99 行

desktop/src-tauri/crates/core/src/adapters/hermes/common.rs:99

/// 非 URL 值使用 identity::content_hash 的本地 FNV-1a 摘要,不保留原文。

第 33 条注释,第 107 行

desktop/src-tauri/crates/core/src/adapters/hermes/common.rs:107

// 去 userinfo(user:pass@host):只取最后一个 @ 之后的 host 段。

第 34 条注释,第 123 行

desktop/src-tauri/crates/core/src/adapters/hermes/common.rs:123

// ---- 源库只读访问(复制自 adapters/kilo/common.rs,各目录独立约定)----

第 35 条注释,第 125 行

desktop/src-tauri/crates/core/src/adapters/hermes/common.rs:125

/// 只读访问来源;探测出现 busy、locked 或 CANTOPEN 时切换到暂存副本。

第 36 条注释,第 126 行

desktop/src-tauri/crates/core/src/adapters/hermes/common.rs:126

/// _staging 持有暂存副本清理对象,查询失败后的 drop 也会清理。

第 37 条注释,第 150 行

desktop/src-tauri/crates/core/src/adapters/hermes/common.rs:150

/// busy/锁/CANTOPEN 判定(这些错误表示无法一致读取)。

第 38 条注释,第 160 行

desktop/src-tauri/crates/core/src/adapters/hermes/common.rs:160

/// 暂存副本参数(architecture.md:设置页/时间/空间上限并清理)。

第 39 条注释,第 178 行

desktop/src-tauri/crates/core/src/adapters/hermes/common.rs:178

/// 打开源库只读连接。busy_timeout 设短:快速失败转暂存副本路径。

第 40 条注释,第 191 行

desktop/src-tauri/crates/core/src/adapters/hermes/common.rs:191

/// Online Backup 到系统临时目录的一致暂存副本(从只读连接发起,不写源库)。

第 41 条注释,第 222 行

desktop/src-tauri/crates/core/src/adapters/hermes/common.rs:222

// More:实际拷贝了页,计入空间限制。

第 42 条注释,第 233 行

desktop/src-tauri/crates/core/src/adapters/hermes/common.rs:233

// Busy/Locked(#[non_exhaustive] 其余):无进展重试,仍计入超时时间。

第 43 条注释,第 234 行

desktop/src-tauri/crates/core/src/adapters/hermes/common.rs:234

// 2026-09-30 修复:此前重试也计入页数,与超时出口竞速产生

第 44 条注释,第 235 行

desktop/src-tauri/crates/core/src/adapters/hermes/common.rs:235

// 平台相关的 space cap 误报(CI Linux 页上限先于超时触发)。

第 45 条注释,第 254 行

desktop/src-tauri/crates/core/src/adapters/hermes/common.rs:254

/// 先直接只读 state.db;探测出现 busy 类错误时尝试暂存副本,其他错误向上传递。

第 46 条注释,第 255 行

desktop/src-tauri/crates/core/src/adapters/hermes/common.rs:255

/// 绝不写源库(不调用上游可能迁移/修复的初始化 API)。

第 47 条注释,第 282 行

desktop/src-tauri/crates/core/src/adapters/hermes/common.rs:282

/// 按 kilo 规则短查询 sqlite_master 的条目数,不显式建立事务。

第 48 条注释,第 287 行

desktop/src-tauri/crates/core/src/adapters/hermes/common.rs:287

// ---- schema 指纹(固定源码 DDL 表/列名摘要;只含表/列名,可安全持久化)----

第 49 条注释,第 289 行

desktop/src-tauri/crates/core/src/adapters/hermes/common.rs:289

/// sessions 只读列(本适配器仅用身份与时间回退列;完整列集见固定源码)。

第 50 条注释,第 291 行

desktop/src-tauri/crates/core/src/adapters/hermes/common.rs:291

/// session_model_usage 全部 18 列(固定源码 SCHEMA_SQL 逐字列名)。

第 51 条注释,第 312 行

desktop/src-tauri/crates/core/src/adapters/hermes/common.rs:312

/// 组合键列(v22 起 task 参与主键;固定源码 _migrate_v22_session_model_usage)。

第 52 条注释,第 323 行

desktop/src-tauri/crates/core/src/adapters/hermes/common.rs:323

/// None = 表/关键列缺失或主键形状不符(探测层 fail closed 的依据分类)。

第 53 条注释,第 325 行

desktop/src-tauri/crates/core/src/adapters/hermes/common.rs:325

/// 必需列完整但一个或多个预期键列未参与主键时为 True。

第 54 条注释,第 329 行

desktop/src-tauri/crates/core/src/adapters/hermes/common.rs:329

/// 计算 schema 指纹 + 主键形状分类(adapters.md:必须探测真实列与主键,

第 55 条注释,第 330 行

desktop/src-tauri/crates/core/src/adapters/hermes/common.rs:330

/// 不只看版本整数)。

第 56 条注释,第 375 行

desktop/src-tauri/crates/core/src/adapters/hermes/common.rs:375

// 主键形状:SMU_KEY_COLUMNS 六列均须参与主键(v22 重建后形状)。

第 57 条注释,第 397 行

desktop/src-tauri/crates/core/src/adapters/hermes/common.rs:397

/// 读取最大 schema_version;固定源码 SCHEMA_VERSION=30,SQL 或类型错误向上传递。