docs(i18n): proofread README translations 101-120

This commit is contained in:
j-xiang
2026-07-29 15:29:38 +08:00
parent 42840394c4
commit f6c8fe4dcb
20 changed files with 164 additions and 164 deletions
@@ -2,17 +2,17 @@
[English](README.md) | 中文
SQLite 持久会话持久化后端:第二个 `SessionPersistence` 实现(见[会话持久化](../../../.agents/notes/implemented/architecture/2026-06-14-session-persistence.md)),用于验证抽象 seam 和共享 `runPersistenceContract` 套件真正与后端无关。它满足与 `dsh-session-persistence-jsonl` 相同的契约(仅追加、连续 seq、延迟实体化、在 load 时关闭中断轮次),但用 `node:sqlite` 行而非文件字节表达。
SQLite 持久会话存储后端:第二个 `SessionPersistence` 实现(见[会话持久化](../../../.agents/notes/implemented/architecture/2026-06-14-session-persistence.md)),用于验证抽象 seam 和共享 `runPersistenceContract` 套件真正与后端无关。它满足与 `dsh-session-persistence-jsonl` 相同的契约(仅追加、连续 seq、延迟实体化、在 load 时关闭中断轮次),但用 `node:sqlite` 行而非文件字节表达。
`locate(meta)` 返回 `undefined`:所有会话共享一个数据库,因此不存在真实独立会话 transcript 路径。
`locate(meta)` 返回 `undefined`:所有会话共享一个数据库,因此不存在真实独立的逐会话 transcript(文本记录)路径。
> **TODO** 该后端直接调用 `node:sqlite`。如果采用 Cordis 数据库服务(`cordis/db` / `@cordisjs` SQL driver 插件),应改为通过该服务路由,而不在此保持原始 `DatabaseSync`;契约接口(`SessionPersistence`)不会变,只更换存储 driver
> **TODO** 该后端直接调用 `node:sqlite`。如果采用 Cordis 数据库服务(`cordis/db` / `@cordisjs` SQL driver 插件),应改为通过该服务路由,而不在此直接持有 `DatabaseSync`;契约接口(`SessionPersistence`)不会变,只更换存储驱动
## 存储模型
每个 `SessionEvent` 1:1 映射到 `events` 表中的一行 `(session_id, seq, type, time, data, source_event_seqs, surface_op)``data` 是作为 JSON 文本的事件 payload,因此行形态就是原事件(包括 `assistant/chunk`,保持 `seq` 连续)。两个 `TEXT``source_event_seqs``surface_op` 可为空,存储事件可选接口元数据字段(见[会话接口](../../../.agents/notes/implemented/architecture/2026-06-18-session-surface.md))。日志外元数据(`SessionHeader`)、每实体化 incarnation id 和每日志单调修订位于 `sessions` 行;`createdAt` 是存储在 strict `INTEGER` 列中的非负安全整数。单例状态行携带不可变存储 id。`sessions` 行只由第一次 `append` 写入,其存在性是延迟实体化信号(`list` 精确报告有行的会话)。
每个 `SessionEvent` 1:1 映射到 `events` 表中的一行 `(session_id, seq, type, time, data, source_event_seqs, surface_op)``data` 是作为 JSON 文本的事件 payload,因此行结构就是原事件本身(包括 `assistant/chunk`,保持 `seq` 连续)。两个 `TEXT``source_event_seqs``surface_op` 可为空,存储事件可选接口元数据字段(见[会话接口](../../../.agents/notes/implemented/architecture/2026-06-18-session-surface.md))。日志外元数据(`SessionHeader`)、每实体化 incarnation id 和每日志单调修订位于 `sessions` 行;`createdAt` 是存储在 strict `INTEGER` 列中的非负安全整数。单例状态行携带不可变存储 id。`sessions` 行只由第一次 `append` 写入,其存在性是延迟实体化信号(`list` 精确报告有行的会话)。
仓库支持的 Node 范围可不加 flag 使用 `node:sqlite`。数据库启用外键,并使用已配置 journal mode(默认 `wal`;WAL 共享内存文件不适用时使用 rollback mode)。`PRAGMA application_id` 标识规范持久化数据库,`PRAGMA user_version` 存储布局版本。新数据库必须没有 application identity 或用户定义 schema 对象;初始化在一个事务中创建全部表并盖上两个 pragma。非 pristine 无版本数据库、外部 application identity 和所有非当前版本在 journal-mode 变更前拒绝,因为该未发布格式无迁移。
仓库支持的 Node 范围可不加 flag 使用 `node:sqlite`。数据库启用外键,并使用已配置 journal mode(默认 `wal`;WAL 共享内存文件不适用时使用 rollback mode)。`PRAGMA application_id` 标识规范持久化数据库,`PRAGMA user_version` 存储布局版本。新数据库必须没有 application identity 或用户定义 schema 对象;初始化在一个事务中创建全部表并盖上两个 pragma。非 pristine 无版本数据库、外部 application identity 和所有非当前版本在 journal-mode 变更前均会被拒绝,因为该未发布格式无迁移。
在具有 POSIX mode 的文件系统上,后端为缺失目录请求 mode `0700`,并在 SQLite 打开前以 mode `0600` 排他创建缺失数据库;进程 umask 可进一步限制两者。新 WAL、共享内存和持久 rollback-journal sidecar 获得数据库最终的仅所有者 mode。现有目录、数据库文件和 sidecar 保留原 mode;除已存在数据库外的文件系统设置错误会使初始化失败。这些默认值防止宽松进程 umask 造成的意外暴露,但当其他 principal 能替换父目录中的数据库条目时,不保护数据库机密性或完整性。
@@ -35,7 +35,7 @@ interface Config {
## 写入路径
与 JSONL 后端一样,插件将每个冻结 `session/event` 复制到每个实时会话的一个 controller,并启动急切 drain。并发事件共享当前事务;期间接纳的事件形成后续批次,`session/flush` 则等待当前和 pending 批次持久。Controller fork 种子持久一次,保留写入游标,使 resume 绝不重新 append 已存储事件,并在 apply 时为实时会话播种,因为 HMR 不回放 `session/created`Dispose 在关闭数据库前 drain 每个保留 controller。
与 JSONL 后端一样,插件将每个冻结 `session/event` 复制到每个活动会话各自的 controller,并启动主动排空流程。并发事件共享当前事务;期间接纳的事件形成后续批次,`session/flush` 则等待当前和待处理批次完成持久。Controller 会持久化一次 fork 种子,保留写入游标,使恢复操作绝不重新 append 已存储事件;它还会在 apply 时为活动会话设置初始状态,因为 HMR(热模块替换)不回放 `session/created`dispose(资源释放)会在关闭数据库前排空每个保留 controller。
## 模型体验
@@ -43,19 +43,19 @@ interface Config {
#### 模型所见
SQLite 存储不贡献实时提示词或 schema。加载恢复与 JSONL 相同的接口历史,并保留之前的 header 用于重建;新 loop 组合当前 envelope。恢复将无持久调用的 assistant 请求平衡为 `TOOL_NOT_STARTED`;有持久调用但无结果时变为 `TOOL_OUTCOME_UNKNOWN`,它要求模型只重试只读或幂等工作,并验证可能副作用或请求用户。行元数据和原始分片不消息。
SQLite 存储不影响当前提示词或 schema。加载恢复与 JSONL 相同的呈现历史,并保留之前的 header 用于重建;新 loop 组合当前 envelope。恢复会用 `TOOL_NOT_STARTED` 平衡没有已持久化调用的 assistant 请求;已有已持久调用但无结果时变为 `TOOL_OUTCOME_UNKNOWN`,它要求模型只重试只读或幂等工作,并验证可能副作用或询问用户。行元数据和原始分片不会成为消息。
#### Token 影响
实时请求为零 token。Resume 恢复已保留历史并支付当前 envelope以及每个中断调用的引用修复结果。
当前请求不会新增 token。恢复会还原已保留历史,并产生当前 envelope 以及每个中断调用所附修复结果文本的 token 开销
#### KV 缓存影响
#### KV Cache 影响
SQLite 存储不修改实时请求前缀。只有重建历史、当前 envelope 和模型路由匹配时,恢复 loop 才能重用提供方缓存;崩溃修复结果追加。
SQLite 存储不修改当前请求前缀。只有重建历史、当前 envelope 和模型路由匹配时,恢复 loop 才能重用提供方缓存;崩溃修复结果追加到末尾
## 已知限制与待完成工作
## 已知限制与暂缓工作
- **`DatabaseSync` 是同步的**:每个 append 事务在整个期间阻塞事件 loop;对本地存储可接受,对繁忙多会话服务器是吞吐上限。
- **`DatabaseSync` 是同步的**:每个 append 事务在整个期间阻塞事件循环;对本地存储可接受,对繁忙多会话服务器是吞吐上限。
- **写入争用无等待或重试策略**:后端不设置 busy timeout,也不重试 locked-database 错误,因此其他连接持有写事务时操作立即拒绝。
- **只打开 pristine 新数据库或当前自有 `SCHEMA_VERSION`**:无版本 schema 对象、外部 application identity 和所有其他 schema 版本被拒绝,而不是迁移(未发布软件,无持久用户数据需要保留)。
- **不删除已存储会话**:行会累积,直到外部移除(seam 无删除接口;`ON DELETE CASCADE` 已为这种带外清理接线)。
- **只 pristine 新数据库或当前自有 `SCHEMA_VERSION` 才能打开**:无版本 schema 对象、外部 application identity 和所有其他 schema 版本被拒绝,而不是迁移(未发布软件,无持久用户数据需要保留)。
- **不删除已存储会话**:行会累积,直到外部移除(seam 无删除接口;`ON DELETE CASCADE` 已为这种带外清理配置)。