44d78105a9
重新审查迁移逻辑后的修正:本地文件操作应以「上游 QwenPaw 为准」, 此前把本地后端误当云端、曾计划把前端重映射到云端 /code-files 是错误方向。 本提交: - 新增 src/pineagents/services/workspace_files.py(上游 workspace_files 完整移植, 唯一本地改动:跳过 macOS 自定义文件夹图标资源 Icon\r) - workspace.py 移植 7 个上游端点:GET /tree、GET /file-metadata、 GET/PUT /file-content(乐观并发 ETag)、GET /file-download、 GET /html-file-uri、POST /file-upload(保留冲突策略 overwrite/skip/rename) - agent_context.py 移植请求级项目目录解析:get_project_dir_for_request / get_project_dirs_for_request,按 X-Chat-Id / X-Session-Project-Dir 头解析 会话级绑定目录;_resolve_files_root 支持 root=workspace|project|project:<path>, project:<path> 走目录身份成员校验(os.path.samefile),越权返回 403 - /workspace/watch 改为按 root+会话头解析监视目录(此前固定 agent coding dir) - coding_project.py 追加上游命名别名 router /workspace/project-directory (与 /workspace/coding-project 同一批 handler),API 面与上游对齐, 后续上游合并不会因命名差异 404 验证:curl 全链路通过——tree/metadata/content 读写/乐观并发 409/下载/HTML URI/ 上传/workspace 根/越权 403/无效会话目录 400/未知 chat 404;后端重启干净。