Files
agent-desktop/src/pineagents/services
Pine 44d78105a9 feat(files): 完整移植上游 Files 工作区文件操作 API(修正迁移偏差)
重新审查迁移逻辑后的修正:本地文件操作应以「上游 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;后端重启干净。
2026-09-04 15:08:19 +08:00
..