@epoch-agent/infra 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -17,26 +17,26 @@
17
17
 
18
18
  ## 文件
19
19
 
20
- | 文件 | 内容 |
21
- | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
22
- | `paths.ts` | `~/.epoch/` 下每个文件的**唯一**真源,外加机器级的 `managedSettingsPath()`。别处再 `join(homedir(), '.epoch')` 就是埋雷 |
23
- | `artifact-store.ts` | 往 artifact 目录写文件的**唯一**写法:`0700` 目录 / `0600` 文件 / `open(path,'wx')` 独占写。core 的多模态闸门和 plugin-terminal 的大输出落盘共用 |
24
- | `text-slice.ts` | 按 **Unicode 码点**取头尾,截断不许切出半个字符(emoji 和 CJK 扩展 B 是代理对)。命令输出预览和工具结果裁剪共用 |
25
- | `workspace.ts` | `isInWorkspace(target, workDir, extraRoots)`——「这个路径算不算在地盘里」的**唯一**判定,权限层 / plugin-file / plugin-terminal 共用 |
26
- | `sqlite.ts` | 连接池(引用计数)+ 迁移。`openDatabase` / `releaseDatabase` 配对使用 |
27
- | `logger.ts` | 结构化日志 |
28
- | `mask.ts` | 脱敏(`maskApiKey` / `isSensitiveKey`),`epoch config show` 靠它 |
29
- | `platform.ts` | Windows / POSIX 差异:shell 选择、spawn 与 pty 参数、控制台编码探测与解码 |
30
- | `ripgrep.ts` | `rg` 从哪来的三级解析:系统 PATH → 随包带的 vendor 二进制 → 都没有。`file_search` 和将来的 `@` 补全共用 |
31
- | `process-tree.ts` | 进程树清理——杀干净孙进程,且只杀该杀的 |
32
- | `child-process.ts` | 长期子进程(后台任务 / language server)的启动、登记、回收;`detached: false` 的理由写在文件头。还有 `EXEC_PATH_AS_NODE_ENV`——「拿 `process.execPath` 当 node 使」的地方必须带的那一格(嵌入 Electron 的宿主里它不是 node),两个消费者分在 core 和 plugin-lsp |
33
- | `shell-parse.ts` | 命令分词与分段(引号感知,带 POSIX / Windows 两种口味)。危险判定、权限规则匹配、斜杠命令的位置参数都建在它上面 |
34
- | `command-safety.ts` | 危险命令与混淆的启发式表,建在 `shell-parse` 之上。**是护栏不是沙箱** |
35
- | `sandbox/` | **这个才是沙箱**:Seatbelt(macOS)/ bubblewrap(Linux,运行时暂未验证)/ 探测不到就降级。`confine()` 按调用带 policy 并如实报强制完整度;两组 stderr 分类器分开「被挡住」和「沙箱没起来」。2026-08-16 从 core 搬来,理由同 `command-safety.ts`:`code_exec` 和 `plugin-terminal` 共用,而 plugin 够不着 core |
36
- | `schema.ts` | 配置校验(zod + 宽松解析,坏字段降级而不是整份拒绝) |
37
- | `i18n.ts` | `t()` / 语言解析 / catalog 加载与三层回落。文案真源是仓库根的 `locales/*.yaml` |
38
- | `async.ts` | 异步小工具 |
39
- | `secret/` | 凭据存储:DPAPI(Windows)/ Keychain(macOS)/ libsecret / 明文回落 + 迁移 |
20
+ | 文件 | 内容 |
21
+ | ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
22
+ | `paths.ts` | `~/.epoch/` 下每个文件的**唯一**真源,外加机器级的 `managedSettingsPath()`。别处再 `join(homedir(), '.epoch')` 就是埋雷 |
23
+ | `artifact-store.ts` | 往 artifact 目录写文件的**唯一**写法:`0700` 目录 / `0600` 文件 / `open(path,'wx')` 独占写。core 的多模态闸门和 plugin-terminal 的大输出落盘共用 |
24
+ | `text-slice.ts` | 按 **Unicode 码点**取头尾,截断不许切出半个字符(emoji 和 CJK 扩展 B 是代理对)。命令输出预览和工具结果裁剪共用 |
25
+ | `workspace.ts` | `isInWorkspace(target, workDir, extraRoots)`——「这个路径算不算在地盘里」的**唯一**判定,权限层 / plugin-file / plugin-terminal 共用 |
26
+ | `sqlite.ts` | 连接池(引用计数)+ 迁移。`openDatabase` / `releaseDatabase` 配对使用 |
27
+ | `logger.ts` | 结构化日志 |
28
+ | `mask.ts` | 脱敏(`maskApiKey` / `isSensitiveKey`),`epoch config show` 靠它 |
29
+ | `platform.ts` | Windows / POSIX 差异:shell 选择、spawn 与 pty 参数、控制台编码探测与解码 |
30
+ | `ripgrep.ts` | `rg` 从哪来的三级解析:系统 PATH → 随包带的 vendor 二进制 → 都没有。`file_search` 和将来的 `@` 补全共用 |
31
+ | `process-tree.ts` | 进程树清理——杀干净孙进程,且只杀该杀的 |
32
+ | `child-process.ts` | 长期子进程(后台任务 / language server / PTY)的启动、登记、回收。**表按所有者分**:每个 runtime 一张(`createProcessTable()`,按 `sessionId` 路由)+ 一张进程级兜底表(引用计数,归零才收)—— 判据和那条真 bug 写在文件头。`detached: false` 的理由也在那儿。还有 `EXEC_PATH_AS_NODE_ENV`——「拿 `process.execPath` 当 node 使」的地方必须带的那一格(嵌入 Electron 的宿主里它不是 node),两个消费者分在 core 和 plugin-lsp |
33
+ | `shell-parse.ts` | 命令分词与分段(引号感知,带 POSIX / Windows 两种口味)。危险判定、权限规则匹配、斜杠命令的位置参数都建在它上面 |
34
+ | `command-safety.ts` | 危险命令与混淆的启发式表,建在 `shell-parse` 之上。**是护栏不是沙箱** |
35
+ | `sandbox/` | **这个才是沙箱**:Seatbelt(macOS)/ bubblewrap(Linux,运行时暂未验证)/ 探测不到就降级。`confine()` 按调用带 policy 并如实报强制完整度;两组 stderr 分类器分开「被挡住」和「沙箱没起来」。2026-08-16 从 core 搬来,理由同 `command-safety.ts`:`code_exec` 和 `plugin-terminal` 共用,而 plugin 够不着 core |
36
+ | `schema.ts` | 配置校验(zod + 宽松解析,坏字段降级而不是整份拒绝) |
37
+ | `i18n.ts` | `t()` / 语言解析 / catalog 加载与三层回落。文案真源是仓库根的 `locales/*.yaml` |
38
+ | `async.ts` | 异步小工具 |
39
+ | `secret/` | 凭据存储:DPAPI(Windows)/ Keychain(macOS)/ libsecret / 明文回落 + 迁移 |
40
40
 
41
41
  ## 界面文案:`t()` 与三层回落
42
42