Điểm vào
- RPC của Gateway:
agentvàagent.wait. - CLI:
openclaw agent.
Trình tự chạy
- RPC
agentxác thực tham số, phân giải phiên (sessionKey/sessionId), lưu trữ bền vững siêu dữ liệu phiên và trả về{ runId, acceptedAt }ngay lập tức. agentCommandchạy lượt: phân giải giá trị mặc định cho mô hình + chế độ suy nghĩ/chi tiết/theo vết, tải bản chụp Skills, gọirunEmbeddedAgentvà phát một sự kiện dự phòng kết thúc/lỗi vòng đời nếu vòng lặp nhúng chưa phát sự kiện đó.runEmbeddedAgent: tuần tự hóa các lượt chạy qua hàng đợi theo từng phiên và hàng đợi toàn cục, phân giải mô hình + hồ sơ xác thực, xây dựng phiên OpenClaw, đăng ký nhận sự kiện thời gian chạy, truyền phát các phần gia tăng của trợ lý/công cụ, thực thi thời gian chờ của lượt chạy (hủy khi hết hạn) và trả về các tải trọng cùng siêu dữ liệu mức sử dụng. Đối với các lượt Codex app-server, nó cũng hủy một lượt đã được chấp nhận nếu lượt đó ngừng tạo tiến trình app-server trước một sự kiện kết thúc.subscribeEmbeddedAgentSessionbắc cầu các sự kiện thời gian chạy sang luồngagent: sự kiện công cụ sangstream: "tool", phần gia tăng của trợ lý sangstream: "assistant", sự kiện vòng đời sangstream: "lifecycle"(phase: "start" | "end" | "error").agent.wait(waitForAgentRun) chờ kết thúc/lỗi vòng đời trên mộtrunIdvà trả về{ status: ok|error|timeout, startedAt, endedAt, error? }.
Xếp hàng và đồng thời
Các lượt chạy được tuần tự hóa theo khóa phiên (luồng phiên) và tùy chọn qua một luồng toàn cục, ngăn chặn xung đột công cụ/phiên. Các kênh nhắn tin chọn một chế độ hàng đợi (điều hướng/theo dõi/thu thập/ngắt) để đưa vào hệ thống luồng này; xem Hàng đợi lệnh. Các thao tác ghi bản chép lời còn được bảo vệ bằng khóa ghi phiên trên tệp phiên. Khóa nhận biết tiến trình và dựa trên tệp, nên có thể phát hiện các trình ghi bỏ qua hàng đợi trong tiến trình hoặc đến từ tiến trình khác. Theo mặc định, trình ghi chờ tối đa 60 giây (ghi đè bằng biến môi trườngOPENCLAW_SESSION_WRITE_LOCK_ACQUIRE_TIMEOUT_MS) trước khi báo cáo phiên đang bận.
Theo mặc định, khóa ghi phiên không thể tái nhập. Một trình trợ giúp cố ý lồng việc lấy cùng một khóa trong khi vẫn duy trì một trình ghi logic phải chủ động bật allowReentrant: true.
Chuẩn bị phiên và không gian làm việc
- Không gian làm việc được phân giải và tạo; các lượt chạy trong sandbox có thể được chuyển hướng đến thư mục gốc không gian làm việc sandbox.
- Skills được tải (hoặc tái sử dụng từ bản chụp) và chèn vào môi trường cùng lời nhắc.
- Các tệp khởi động/ngữ cảnh được phân giải và chèn vào lời nhắc hệ thống.
- Khóa ghi phiên được lấy và đích bản chép lời phiên được chuẩn bị trước khi bắt đầu truyền phát. Mọi đường dẫn ghi lại, Compaction hoặc cắt ngắn bản chép lời sau đó đều phải lấy cùng khóa trước khi sửa đổi các hàng bản chép lời SQLite.
Tập hợp lời nhắc
Lời nhắc hệ thống được xây dựng từ lời nhắc cơ sở của OpenClaw, lời nhắc Skills, ngữ cảnh khởi động và các ghi đè theo từng lượt chạy. Các giới hạn dành riêng cho mô hình và token dự phòng cho Compaction được thực thi. Xem Lời nhắc hệ thống để biết mô hình nhìn thấy gì.Hook
OpenClaw có hai hệ thống hook:- Hook nội bộ (hook Gateway): các tập lệnh hướng sự kiện cho lệnh và sự kiện vòng đời.
- Hook Plugin: các điểm mở rộng bên trong vòng đời tác nhân/công cụ và pipeline Gateway.
Hook nội bộ (hook Gateway)
agent:bootstrap: chạy trong khi xây dựng các tệp khởi động trước khi lời nhắc hệ thống được hoàn thiện. Dùng hook này để thêm hoặc xóa các tệp ngữ cảnh khởi động.- Hook lệnh:
/new,/reset,/stopvà các sự kiện lệnh khác (xem tài liệu Hook).
Hook Plugin
Các hook này chạy bên trong vòng lặp tác nhân hoặc pipeline Gateway:
Quy tắc quyết định của hook cho các lớp bảo vệ đầu ra/công cụ:
before_tool_call:{ block: true }là kết thúc và dừng các trình xử lý có mức ưu tiên thấp hơn.{ block: false }không thực hiện thao tác nào và không xóa một lệnh chặn trước đó.before_install: có cùng ngữ nghĩa kết thúc/không thao tác như trên. Dùngsecurity.installPolicy, không dùngbefore_install, cho các quyết định cho phép/chặn cài đặt do người vận hành sở hữu và phải bao quát các đường dẫn cài đặt lẫn cập nhật qua CLI.message_sending:{ cancel: true }là kết thúc và dừng các trình xử lý có mức ưu tiên thấp hơn.{ cancel: false }không thực hiện thao tác nào và không xóa một lệnh hủy trước đó.
Truyền phát
- Các phần gia tăng của trợ lý được truyền phát từ thời gian chạy tác nhân dưới dạng sự kiện
assistant. - Truyền phát theo khối có thể phát các phản hồi từng phần trên
text_endhoặcmessage_end. - Truyền phát suy luận có thể là một luồng riêng hoặc các phản hồi theo khối.
- Xem Truyền phát để biết hành vi chia đoạn và phản hồi theo khối.
Thực thi công cụ
- Các sự kiện bắt đầu/cập nhật/kết thúc công cụ được phát trên luồng
tool. - Kết quả công cụ được làm sạch về kích thước và tải trọng hình ảnh trước khi ghi nhật ký/phát.
- Các lượt gửi bằng công cụ nhắn tin được theo dõi để ngăn xác nhận trùng lặp từ trợ lý.
Định hình phản hồi
Các tải trọng cuối cùng được tập hợp từ văn bản của trợ lý (cùng phần suy luận tùy chọn), bản tóm tắt công cụ nội tuyến (khi bật chế độ chi tiết và được phép) và văn bản lỗi của trợ lý khi mô hình gặp lỗi.- Token im lặng chính xác
NO_REPLYđược lọc khỏi các tải trọng gửi đi. - Các mục trùng lặp từ công cụ nhắn tin được loại khỏi danh sách tải trọng cuối cùng.
- Nếu không còn tải trọng nào có thể hiển thị và một công cụ gặp lỗi, phản hồi lỗi công cụ dự phòng sẽ được phát, trừ khi một công cụ nhắn tin đã gửi phản hồi hiển thị cho người dùng.
Compaction và thử lại
Compaction tự động phát các sự kiện luồngcompaction và có thể kích hoạt thử lại. Khi thử lại, các bộ đệm trong bộ nhớ và bản tóm tắt công cụ được đặt lại để tránh đầu ra trùng lặp. Xem Compaction.
Luồng sự kiện
lifecycle: được phát bởisubscribeEmbeddedAgentSession(và dưới dạng dự phòng bởiagentCommand).assistant: các phần gia tăng được truyền phát từ thời gian chạy tác nhân.tool: các sự kiện công cụ được truyền phát từ thời gian chạy tác nhân.
Xử lý kênh trò chuyện
Các phần gia tăng của trợ lý được lưu vào bộ đệm thành tin nhắndelta của cuộc trò chuyện. Một final của cuộc trò chuyện được phát khi kết thúc/lỗi vòng đời.
Thời gian chờ
Chẩn đoán phiên bị kẹt
Khi bật chẩn đoán, ngưỡng tích hợp sẵn là hai phút sẽ phân loại các phiênprocessing kéo dài mà không quan sát thấy phản hồi, công cụ, trạng thái, khối hoặc tiến trình ACP:
- Các lượt chạy nhúng, lệnh gọi mô hình và lệnh gọi công cụ đang hoạt động được báo cáo là
session.long_running. Các lệnh gọi mô hình im lặng có chủ sở hữu vẫn ở trạng tháisession.long_runningcho đến ngưỡng hủy để các nhà cung cấp chậm hoặc không truyền phát không bị gắn cờ là ngưng trệ quá sớm. - Công việc đang hoạt động nhưng không có tiến trình gần đây được báo cáo là
session.stalled. Các lệnh gọi mô hình có chủ sở hữu chuyển sangsession.stalledtại hoặc sau ngưỡng hủy; hoạt động mô hình/công cụ cũ không có chủ sở hữu không bị che giấu dưới dạng chạy lâu. session.stuckđược dành riêng cho dữ liệu quản lý phiên cũ có thể khôi phục, bao gồm các phiên nhàn rỗi trong hàng đợi có hoạt động mô hình/công cụ cũ không có chủ sở hữu.
session.stuck lặp lại sẽ giãn dần trong khi phiên vẫn không thay đổi.
Những trường hợp có thể kết thúc sớm
- Hết thời gian chờ của agent (hủy)
- AbortSignal (hủy)
- Gateway ngắt kết nối hoặc hết thời gian chờ RPC
- Hết thời gian chờ
agent.wait(chỉ chờ, không dừng agent)
Liên quan
- Công cụ - các công cụ agent khả dụng
- Hook - các tập lệnh hướng sự kiện được kích hoạt bởi các sự kiện vòng đời của agent
- Compaction - cách tóm tắt các cuộc hội thoại dài
- Phê duyệt thực thi - các cổng phê duyệt cho lệnh shell
- Suy nghĩ - cấu hình cấp độ suy nghĩ/lập luận