Explorar o código

挂载openhands到容器中进行开发;添加环境变量 SANDBOX_USER_ID 解决权限读取失败问题;如果 settings 返回Not Found 需要在前端重新填写配置

mrh hai 11 meses
pai
achega
567ee6ab6c
Modificáronse 4 ficheiros con 42 adicións e 3 borrados
  1. 1 0
      .env
  2. 9 1
      dev.md
  3. 2 2
      docker-compose.yaml
  4. 30 0
      代码架构.md

+ 1 - 0
.env

@@ -7,6 +7,7 @@ OPENAI_API_BASE="https://aiapi.magong.site/v1"
 DEBUG=true
 LOG_ALL_EVENTS=true
 SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:0.18-nikolaik
+SANDBOX_USER_ID=1000
 # SANDBOX_RUNTIME_CONTAINER_IMAGE=all-hands-code-server:0.16-nikolaik
 # WORKSPACE_MOUNT_PATH=/home/mrh/program/openhands/testm/excel_tool
 WORKSPACE_MOUNT_PATH=/home/mrh/program/openhands/OpenHands

+ 9 - 1
dev.md

@@ -47,7 +47,15 @@ git merge 0.18.0
 ```
 
 ## 提交主仓库和子仓库
-
+```shell
+cd ~/program/openhands
+git add .
+git commit -m "合并到 0.18.0"
+git tag 0.18.0
+git push
+# 一次性推送所有本地标签
+git push origin --tags
+```
 
 
 # Runtime

+ 2 - 2
docker-compose.yaml

@@ -9,11 +9,11 @@ services:
     volumes:
       - /etc/localtime:/etc/localtime:ro
       - ./src/config.toml:/app/config.toml
-      - /home/mrh/program/openhands/OpenHands/openhands:/app/openhands
       - /home/mrh/program/openhands/.env:/app/.env
       - ${WORKSPACE_MOUNT_PATH}:${WORKSPACE_MOUNT_PATH}
+      - /home/mrh/program/openhands/OpenHands/openhands:/app/openhands
       - /var/run/docker.sock:/var/run/docker.sock
-      # - /home/mrh/.openhands-state:/.openhands-state
+      - /home/mrh/.openhands-state:/.openhands-state
       - /home/mrh/program/openhands/testm/logs:/app/logs
       # - /home/mrh/program/openhands/OpenHands/openhands/runtime/impl/eventstream/eventstream_runtime.py:/app/openhands/runtime/impl/eventstream/eventstream_runtime.py
       # - /home/mrh/program/openhands/OpenHands/openhands/server/listen_socket.py:/app/openhands/server/listen_socket.py

+ 30 - 0
代码架构.md

@@ -45,6 +45,36 @@ port 地址是 port_mapping 在文件 `eventstream_runtime.py`中 `self.containe
 > OpenHands/openhands/runtime/action_execution_server.py
 
 
+### 文件操作
+
+1. 前端通过 WebSocket 发送文件更新请求到 `listen_socket.py`
+   - 请求通过 `websocket_endpoint` 接收
+   - 消息格式包含操作类型(创建/修改/删除)和文件内容
+   - 消息被路由到对应的 session handler
+
+2. 在 `session_manager.py` 中处理请求
+   - `init_or_join_session` 获取或创建对应会话
+   - `handle_message` 方法解析消息类型
+   - 文件操作请求被转发到 `agent_session`
+
+3. `agent_session.py` 处理文件操作
+   - `process_file_operation` 方法处理具体操作
+   - 创建/修改操作通过 `write_file` 方法
+   - 删除操作通过 `delete_file` 方法
+   - 所有操作通过 runtime 的 API 执行
+
+4. 文件操作通过 runtime 执行
+   - 通过 `action_execution_server.py` 的 API 接口
+   - 使用 `FileOperationsPlugin` 处理具体文件操作
+   - 操作在容器内的 workspace 目录执行
+   - 结果通过 WebSocket 返回给前端
+
+5. 文件同步机制
+   - 使用 inotify 监控文件变化
+   - 变化通过 `FileWatcherPlugin` 处理
+   - 重要变化会通知前端更新
+   - 双向同步确保一致性
+
 
 ## vscode
 route: