From ac16d891501f22363b345b573f0dc0dfcd403c5d Mon Sep 17 00:00:00 2001 From: qing <1776177662@qq.com> Date: Mon, 3 Aug 2026 22:05:52 +0800 Subject: [PATCH] =?UTF-8?q?docs(aibox):=20=E6=B7=BB=E5=8A=A0=E6=96=87?= =?UTF-8?q?=E4=BB=B6/=E7=BD=91=E7=BB=9C=E6=93=8D=E4=BD=9C=E5=91=BD?= =?UTF-8?q?=E4=BB=A4=E8=A1=8C=E5=8C=96=E5=BC=80=E5=8F=91=E8=AE=A1=E5=88=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/aibox_file_network_cli_refactor.md | 172 ++++++++++++++++++++++++ 1 file changed, 172 insertions(+) create mode 100644 docs/aibox_file_network_cli_refactor.md diff --git a/docs/aibox_file_network_cli_refactor.md b/docs/aibox_file_network_cli_refactor.md new file mode 100644 index 0000000..0e89d1e --- /dev/null +++ b/docs/aibox_file_network_cli_refactor.md @@ -0,0 +1,172 @@ +# aibox 文件操作与网络操作命令行化 开发计划 + +## 目标 + +将 aibox 中所有 Python 原生实现的文件操作和网络操作改为通过系统命令行工具实现,统一工具执行模式,减少 Python 依赖。 + +## 涉及模块 + +| 现有类 | 作用 | 替换方案 | +|--------|------|----------| +| `FileToolBase` | 文件工具基类 | 简化为命令行工具基类 | +| `ReadFileTool` | 读文件 | `cat` / `head` / `tail` / `wc` | +| `WriteFileTool` | 写文件 | `mkdir -p` + shell 重定向 | +| `ListFilesTool` | 列目录 | `ls` / `find` / `du` | +| `SimpleWebClient` | HTTP 客户端 | `curl` | +| `WebPage` | 网页解析对象 | 移除,curl + grep/sed 替代 | +| `SimpleWebCrawlerTool` | 网页爬虫工具 | `curl` + 文本处理管道 | + +## 阶段一:文件操作命令行化 + +### 1.1 ReadFileTool 重构 + +用以下命令行工具替代 Python 文件 I/O: + +| 原功能 | 命令行实现 | +|--------|-----------| +| `head=True` 读取开头 N 行 | `head -n N` | +| `tail=True` 读取末尾 N 行 | `tail -n N` | +| 指定行范围 `start_line ~ end_line` | `sed -n 'start,endp'` | +| 统计行数 `_count_lines` | `wc -l` | +| 文件编码检测 | `file -b --mime-encoding` | +| 单行超长截断 | `cut -c 1-10000` | + +保留的安全限制: +- 文件大小限制 `MAX_FILE_SIZE`:通过 `wc -c` 或 `stat -f%z` 检查 +- 行数上限 500 行:`head -n 500` 作为最后一道防线 +- 单行 10KB 限制:`cut -c 1-10000` + +### 1.2 WriteFileTool 重构 + +| 原功能 | 命令行实现 | +|--------|-----------| +| 创建目录 | `mkdir -p` | +| 覆盖写入 `mode=w` | `content > filepath` | +| 追加写入 `mode=a` | `content >> filepath` | +| 检查文件大小 | `wc -c` 或 `stat -f%z` | +| 路径安全检查 | `realpath` / `test -f` | + +### 1.3 ListFilesTool 重构 + +| 原功能 | 命令行实现 | +|--------|-----------| +| 列出目录内容 | `ls -la` 或 `find . -maxdepth 1` | +| 隐藏文件过滤 | `ls -la` 默认不显示 `.` 开头的隐藏文件(或 `find` 排除) | +| 文件大小统计 | `du -sh *` 或 `ls -lh` | +| 目录/文件区分 | `ls -F` 或 `find -type f/d` | + +### 1.4 FileToolBase 简化 + +移除 `normalize_path()`、`check_path_safety()` 中 Python `os` 模块调用,改为: +- 路径规范化:`realpath` +- 文件存在性检查:`test -f` / `test -d` +- 文件大小检查:`wc -c` 或 `stat` + +### 1.5 安全边界保留 + +- `MAX_FILE_SIZE`(默认 10MB):通过命令检查 +- 行数上限 500 行:`head -n 500` 兜底 +- 单行长度上限 10KB:`cut -c 1-10000` 兜底 +- 所有路径参数 `shlex.quote()` 转义 + +## 阶段二:网络操作命令行化 + +### 2.1 SimpleWebClient → curl + +| 原功能 | 命令行实现 | +|--------|-----------| +| HTTP GET 请求 | `curl -sL --max-time N` | +| 自定义 User-Agent | `curl -A "..."` | +| SOCKS5 代理 | `curl --socks5 host:port` 或环境变量 `ALL_PROXY` | +| 请求间隔控制 | `SubprocessCommandExecutor` 层面控制 | +| 响应状态码 | `curl -sL -o /dev/null -w '%{http_code}'` | +| 下载大小限制 | `curl --max-filesize N` 或管道 `head -c N` | + +### 2.2 WebPage 移除 + +`WebPage` 类不再需要,其功能由命令行管道实现: + +| 原属性/方法 | 命令行实现 | +|------------|-----------| +| `title` | `curl -sL | grep -oP '