Merge remote-tracking branch 'origin/master' into worktree/ci-native-windows-20260808

# Conflicts:
#	.agents/notes/archived/process/2026-07-27-wine-windows-gates-experiment.i18n.yaml
#	.agents/notes/implemented/process/2026-07-21-serial-cross-platform-ci-reference.i18n.yaml
#	.agents/notes/implemented/process/2026-07-21-serial-cross-platform-ci-reference.zh.md
#	.agents/notes/implemented/process/2026-07-23-portable-required-pull-request-ci.i18n.yaml
#	.agents/notes/implemented/process/2026-07-23-portable-required-pull-request-ci.zh.md
This commit is contained in:
Tianyi Cui
2026-08-09 13:26:11 +08:00
1007 changed files with 1965 additions and 1893 deletions
+1 -1
View File
@@ -3,4 +3,4 @@
# after editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write packages/util/README.md
README.md: b84f2cbb88981aa2edbde65d8a711b28cc5b48e9
README.zh.md: 44834041aad8d891b5dcaf63e02be5641e878cdc
README.zh.md: 3814dffe1eb8c68f6d38d39aa750c80ce325f9af
+1 -1
View File
@@ -9,6 +9,6 @@
| [`brand/`](brand/README.md) | 提供带名义品牌的类型 |
| [`paths/`](paths/README.md) | 解析 Harness 数据根目录和共享路径 |
| [`timeout/`](timeout/README.md) | 提供截止时间和超时分类原语 |
| [`retention/`](retention/README.md) | 限制保留文本和项集合的大小 |
| [`retention/`](retention/README.md) | 限制保留文本和项集合的大小 |
| [`atomic-write/`](atomic-write/README.md) | 以原子方式替换文件 |
| [`native-command/`](native-command/README.md) | 不经 shell 运行宿主原生命令 |
+1 -1
View File
@@ -3,4 +3,4 @@
# after editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write packages/util/atomic-write/README.md
README.md: 2ff4abb6ac10d8b592ccd2056b4f1f92cc8518b0
README.zh.md: 4284d06422564268bb9e31d1a1ed06ab5271e562
README.zh.md: 570a5243aefbe6870c1991786f711adc77faacae
+1 -1
View File
@@ -20,7 +20,7 @@ await withFileLock('/home/u/.dsh/settings.yaml', async () => {
})
```
`writeFileAtomic` 提交一份已经渲染好的字符串。约按故障利用它的先后顺序列出:
`writeFileAtomic` 提交一份已经渲染好的字符串。约按故障利用它的先后顺序列出:
- **独占创建临时文件**`wx` + 随机后缀):open 拒绝跟随预先埋在可猜测临时路径上的符号链接。
- **全新 inode 携带 `mode` 走完 rename**:替换权限过宽的旧文件时直接收窄,不存在 chmod 竞态。`mode` 为必填,让权限决策始终可见于每个调用点(与所有新建 inode 一样受进程 umask 影响)。
+1 -1
View File
@@ -3,4 +3,4 @@
# after editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write packages/util/environment/README.md
README.md: 599a9ba747905b66452b57717dabcc6f4678a3dd
README.zh.md: 69f9c670bbb3ea1b2fbddaa7508a19dfb47fad12
README.zh.md: ca1da309fda28913ee7b90953d50fc0a7172ca87
+1 -1
View File
@@ -32,5 +32,5 @@ const endpoint = environmentOf(ctx).get('DEEPSEEK_BASE_URL')?.value
## Known Limitations and Deferred Work
- **快照不是子进程边界**:每一层同样会被物化进 `process.env`,因此项目里的普通变量会按 [`dsh-subprocess`](../../subprocess/subprocess/README.md) 的清洗规则抵达子进程。产品启动器的 [`.env` ](../../boot/app-boot/README.md#profiles) 会在物化之前拒绝 bootstrap 变量。
- **快照不是子进程边界**:每一层同样会被物化进 `process.env`,因此项目里的普通变量会按 [`dsh-subprocess`](../../subprocess/subprocess/README.md) 的清洗规则抵达子进程。产品启动器的 [`.env` 约](../../boot/app-boot/README.md#profiles) 会在物化之前拒绝 bootstrap 变量。
- **没有按工作区划分的层**:项目层是*调用*目录,在启动时固定。之后在 Web UI 中选择的工作区不贡献任何内容,这是刻意的:跟随它等于让模型自己的工作区在会话中途改变 harness 的环境。
+1 -1
View File
@@ -3,4 +3,4 @@
# after editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write packages/util/retention/README.md
README.md: 45c88e9fc2d8df98f935fd1c3b43c4622802bd2a
README.zh.md: 0fcb76a8ae381d3e3da54e90640a38cba9de12e8
README.zh.md: 9419245908d7331c9db24019f1181fcaed848060
+1 -1
View File
@@ -57,7 +57,7 @@ import type {
| `web_fetch` | `TextRetainer``head``headTail` | 提供方/资源上限保留为提供方事实;retainer 只提供保留文本和省略元数据。 |
| `web_search` | `ItemRetainer<WebSearchSource>``head` | 当提供方返回的来源超过面向模型的结果应包含的数量时,标准化「来源已达上限」通知。 |
`read` 仍不属于这个通用库。其 `read-render` 辅助工具负责文件专用的分页约:`offset`/`limit`、行号、`totalLines`、偏移越界错误、每行预览截断,以及所选窗口的字节上限。这是行窗口渲染器。单个 `Omitted` 数量无法表示该窗口两侧。
`read` 仍不属于这个通用库。其 `read-render` 辅助工具负责文件专用的分页约`offset`/`limit`、行号、`totalLines`、偏移越界错误、每行预览截断,以及所选窗口的字节上限。这是行窗口渲染器。单个 `Omitted` 数量无法表示该窗口两侧。
## 使用形态