Trạng thái
Đặc tả triển khai bản nháp.Mục tiêu
Làm cho bộ điều phối app-server Codex được đóng gói sẵn tôn trọng cùng hợp đồng vòng đời công cụ ngữ cảnh OpenClaw mà các lượt OpenClaw nhúng đã tôn trọng. Một phiên dùng nhà cung cấp/mô hìnhagentRuntime.id: "codex" hoặc mô hình
codex/* vẫn nên cho phép Plugin công cụ ngữ cảnh được chọn, chẳng hạn như
lossless-claw, kiểm soát việc lắp ráp ngữ cảnh, thu nạp sau lượt, bảo trì và
chính sách Compaction cấp OpenClaw trong phạm vi mà ranh giới app-server Codex
cho phép.
Không phải mục tiêu
- Không triển khai lại nội bộ app-server Codex.
- Không khiến Compaction luồng gốc của Codex tạo ra bản tóm tắt lossless-claw.
- Không yêu cầu các mô hình không phải Codex dùng bộ điều phối Codex.
- Không thay đổi hành vi phiên ACP/acpx. Đặc tả này chỉ dành cho đường dẫn bộ điều phối tác tử nhúng không thuộc ACP.
- Không khiến Plugin bên thứ ba đăng ký các factory tiện ích mở rộng app-server Codex; ranh giới tin cậy Plugin đóng gói sẵn hiện có vẫn giữ nguyên.
Kiến trúc hiện tại
Vòng lặp chạy nhúng phân giải công cụ ngữ cảnh đã cấu hình một lần cho mỗi lượt chạy trước khi chọn một bộ điều phối cấp thấp cụ thể:src/agents/embedded-agent-runner/run.ts- khởi tạo các Plugin công cụ ngữ cảnh
- gọi
resolveContextEngine(params.config) - truyền
contextEnginevàcontextTokenBudgetvàorunEmbeddedAttemptWithBackend(...)
runEmbeddedAttemptWithBackend(...) ủy quyền cho bộ điều phối tác tử được chọn:
src/agents/embedded-agent-runner/run/backend.tssrc/agents/harness/selection.ts
extensions/codex/index.tsextensions/codex/harness.ts
EmbeddedRunAttemptParams như các lượt
thử OpenClaw tích hợp sẵn:
extensions/codex/src/app-server/run-attempt.ts
thread/start, thread/resume và turn/start, và có thể
quan sát thông báo, nhưng không thể thay đổi kho luồng nội bộ hoặc bộ Compaction
gốc của Codex.
Khoảng trống hiện tại
Các lượt thử OpenClaw tích hợp sẵn gọi trực tiếp vòng đời công cụ ngữ cảnh:- khởi động/bảo trì trước lượt thử
- lắp ráp trước lời gọi mô hình
- afterTurn hoặc thu nạp sau lượt thử
- bảo trì sau một lượt thành công
- Compaction công cụ ngữ cảnh cho các công cụ sở hữu Compaction
src/agents/embedded-agent-runner/run/attempt.tssrc/agents/embedded-agent-runner/run/attempt.context-engine-helpers.tssrc/agents/embedded-agent-runner/context-engine-maintenance.ts
params.contextEngine.bootstrap,
params.contextEngine.assemble, params.contextEngine.afterTurn,
params.contextEngine.ingestBatch, params.contextEngine.ingest hoặc
params.contextEngine.maintain.
Mã Codex liên quan:
extensions/codex/src/app-server/run-attempt.tsextensions/codex/src/app-server/thread-lifecycle.tsextensions/codex/src/app-server/event-projector.tsextensions/codex/src/app-server/compact.ts
Hành vi mong muốn
Đối với các lượt của bộ điều phối Codex, OpenClaw nên duy trì vòng đời này:- Đọc bản ghi hội thoại phiên OpenClaw đã phản chiếu.
- Khởi động công cụ ngữ cảnh đang hoạt động khi có tệp phiên trước đó.
- Chạy bảo trì khởi động khi có.
- Lắp ráp ngữ cảnh bằng công cụ ngữ cảnh đang hoạt động.
- Chuyển đổi ngữ cảnh đã lắp ráp thành đầu vào tương thích với Codex.
- Bắt đầu hoặc tiếp tục luồng Codex với hướng dẫn dành cho nhà phát triển có
bao gồm mọi
systemPromptAdditioncủa công cụ ngữ cảnh. - Bắt đầu lượt Codex với lời nhắc hướng tới người dùng đã lắp ráp.
- Phản chiếu kết quả Codex trở lại bản ghi hội thoại OpenClaw.
- Gọi
afterTurnnếu được triển khai, nếu không thìingestBatch/ingest, bằng ảnh chụp bản ghi hội thoại đã phản chiếu. - Chạy bảo trì lượt sau các lượt thành công không bị hủy.
- Duy trì tín hiệu Compaction gốc của Codex và các móc Compaction của OpenClaw.
Ràng buộc thiết kế
App-server Codex vẫn là nguồn chuẩn cho trạng thái luồng gốc
Codex sở hữu luồng gốc của nó và mọi lịch sử mở rộng nội bộ. OpenClaw không nên cố gắng sửa đổi lịch sử nội bộ của app-server ngoài các lời gọi giao thức được hỗ trợ. Bản phản chiếu bản ghi hội thoại của OpenClaw vẫn là nguồn cho các tính năng OpenClaw:- lịch sử trò chuyện
- tìm kiếm
- sổ sách cho
/newvà/reset - chuyển đổi mô hình hoặc bộ điều phối trong tương lai
- trạng thái Plugin công cụ ngữ cảnh
Việc lắp ráp công cụ ngữ cảnh phải được chiếu vào đầu vào Codex
Giao diện công cụ ngữ cảnh trả vềAgentMessage[] của OpenClaw, không phải một
bản vá luồng Codex. turn/start của app-server Codex nhận đầu vào người dùng
hiện tại, trong khi thread/start và thread/resume nhận hướng dẫn dành cho
nhà phát triển.
Vì vậy, triển khai cần một lớp chiếu. Phiên bản đầu tiên an toàn nên tránh giả
vờ rằng nó có thể thay thế lịch sử nội bộ Codex. Nó nên chèn ngữ cảnh đã lắp ráp
dưới dạng nội dung lời nhắc/hướng dẫn dành cho nhà phát triển có tính xác định
xung quanh lượt hiện tại.
Độ ổn định bộ nhớ đệm lời nhắc rất quan trọng
Đối với các công cụ như lossless-claw, ngữ cảnh đã lắp ráp nên có tính xác định khi đầu vào không đổi. Không thêm dấu thời gian, id ngẫu nhiên hoặc thứ tự không xác định vào văn bản ngữ cảnh được tạo.Ngữ nghĩa chọn runtime không thay đổi
Việc chọn bộ điều phối giữ nguyên như hiện tại:runtime: "openclaw"chọn bộ điều phối OpenClaw tích hợp sẵnruntime: "codex"chọn bộ điều phối Codex đã đăng kýruntime: "auto"cho phép các bộ điều phối Plugin nhận các nhà cung cấp được hỗ trợ- các lượt chạy
autokhông khớp dùng bộ điều phối OpenClaw tích hợp sẵn
Kế hoạch triển khai
1. Xuất hoặc di chuyển các helper lượt thử công cụ ngữ cảnh có thể tái sử dụng
Hiện nay các helper vòng đời có thể tái sử dụng nằm dưới trình chạy tác tử nhúng:src/agents/embedded-agent-runner/run/attempt.context-engine-helpers.tssrc/agents/embedded-agent-runner/run/attempt.prompt-helpers.tssrc/agents/embedded-agent-runner/context-engine-maintenance.ts
src/agents/harness/context-engine-lifecycle.ts
runAttemptContextEngineBootstrapassembleAttemptContextEnginefinalizeAttemptContextEngineTurnbuildAfterTurnRuntimeContextbuildAfterTurnRuntimeContextFromUsage- một wrapper nhỏ quanh
runContextEngineMaintenance
bootstrapHarnessContextEngineassembleHarnessContextEnginefinalizeHarnessContextEngineTurnbuildHarnessContextEngineRuntimeContextrunHarnessContextEngineMaintenance
2. Thêm helper chiếu ngữ cảnh Codex
Thêm một mô-đun mới:extensions/codex/src/app-server/context-engine-projection.ts
- Nhận
AgentMessage[]đã lắp ráp, lịch sử phản chiếu gốc và lời nhắc hiện tại. - Xác định ngữ cảnh nào thuộc về hướng dẫn dành cho nhà phát triển so với đầu vào người dùng hiện tại.
- Giữ lời nhắc người dùng hiện tại làm yêu cầu có thể hành động cuối cùng.
- Kết xuất các tin nhắn trước đó theo định dạng ổn định, rõ ràng.
- Tránh siêu dữ liệu biến động.
- Đặt
systemPromptAdditionvào hướng dẫn dành cho nhà phát triển. - Đặt ngữ cảnh bản ghi hội thoại đã lắp ráp trước lời nhắc hiện tại trong
promptText. - Gắn nhãn rõ đó là ngữ cảnh đã lắp ráp của OpenClaw.
- Giữ lời nhắc hiện tại ở cuối.
- Loại trừ lời nhắc người dùng hiện tại bị trùng nếu nó đã xuất hiện ở phần đuôi.
3. Nối khởi động trước khi khởi động luồng Codex
Trongextensions/codex/src/app-server/run-attempt.ts:
- Đọc lịch sử phiên phản chiếu như hiện nay.
- Xác định liệu tệp phiên đã tồn tại trước lượt chạy này hay chưa. Ưu tiên một
helper kiểm tra
fs.stat(params.sessionFile)trước các lần ghi phản chiếu. - Mở
SessionManagerhoặc dùng adapter trình quản lý phiên hẹp nếu helper yêu cầu. - Gọi helper khởi động trung lập khi
params.contextEnginetồn tại.
sessionKey như cầu nối công cụ Codex và bản phản chiếu bản
ghi hội thoại. Hiện nay Codex tính sandboxSessionKey từ params.sessionKey
hoặc params.sessionId; dùng nhất quán giá trị đó trừ khi có lý do để giữ
params.sessionKey thô.
4. Nối lắp ráp trước thread/start / thread/resume và turn/start
Trong runCodexAppServerAttempt:
- Trước tiên xây dựng công cụ động, để công cụ ngữ cảnh thấy tên công cụ thực sự có sẵn.
- Đọc lịch sử phiên phản chiếu.
- Chạy
assemble(...)của công cụ ngữ cảnh khiparams.contextEnginetồn tại. - Chiếu kết quả đã lắp ráp vào:
- phần bổ sung hướng dẫn dành cho nhà phát triển
- văn bản lời nhắc cho
turn/start
- tính hướng dẫn dành cho nhà phát triển cơ sở bằng
buildDeveloperInstructions(params) - áp dụng lắp ráp/chiếu công cụ ngữ cảnh
- chạy
before_prompt_buildvới lời nhắc/hướng dẫn dành cho nhà phát triển đã chiếu
systemPromptAddition của công cụ ngữ cảnh vào lời nhắc hệ thống cuối cùng sau
đường ống lời nhắc của nó. Bất biến quan trọng là cả công cụ ngữ cảnh và các
móc đều có thứ tự xác định, được lập tài liệu.
Thứ tự khuyến nghị cho triển khai đầu tiên:
buildDeveloperInstructions(params)assemble()của công cụ ngữ cảnh- thêm
systemPromptAdditionvào đầu/cuối hướng dẫn dành cho nhà phát triển - chiếu các tin nhắn đã lắp ráp vào văn bản lời nhắc
resolveAgentHarnessBeforePromptBuildResult(...)- truyền hướng dẫn dành cho nhà phát triển cuối cùng tới
startOrResumeThread(...) - truyền văn bản lời nhắc cuối cùng tới
buildTurnStartParams(...)
5. Duy trì định dạng ổn định cho bộ nhớ đệm lời nhắc
Helper chiếu phải tạo đầu ra ổn định theo byte cho các đầu vào giống hệt nhau:- thứ tự tin nhắn ổn định
- nhãn vai trò ổn định
- không có dấu thời gian được tạo
- không rò rỉ thứ tự khóa đối tượng
- không có dấu phân cách ngẫu nhiên
- không có id theo từng lượt chạy
6. Nối hậu lượt sau khi phản chiếu bản ghi hội thoại
CodexAppServerEventProjector của Codex xây dựng một messagesSnapshot cục bộ cho
lượt hiện tại. mirrorTranscriptBestEffort(...) ghi ảnh chụp đó vào bản sao bản ghi
OpenClaw.
Sau khi sao chép thành công hoặc thất bại, hãy gọi bộ hoàn tất của công cụ ngữ cảnh với
ảnh chụp thông điệp tốt nhất hiện có:
- Ưu tiên ngữ cảnh phiên đã sao chép đầy đủ sau khi ghi, vì
afterTurnmong đợi ảnh chụp phiên, không chỉ lượt hiện tại. - Dùng dự phòng
historyMessages + result.messagesSnapshotnếu không thể mở lại tệp phiên.
afterTurn với ảnh chụp dự phòng, nhưng ghi log
rằng công cụ ngữ cảnh đang nạp từ dữ liệu lượt dự phòng.
7. Chuẩn hóa ngữ cảnh thời gian chạy về mức sử dụng và bộ nhớ đệm prompt
Kết quả Codex bao gồm mức sử dụng đã chuẩn hóa từ thông báo token của app-server khi có sẵn. Truyền mức sử dụng đó vào ngữ cảnh thời gian chạy của công cụ ngữ cảnh. Nếu app-server Codex sau này cung cấp chi tiết đọc/ghi bộ nhớ đệm, hãy ánh xạ chúng vàoContextEnginePromptCacheInfo. Cho đến lúc đó, hãy bỏ qua promptCache thay vì
tự tạo các giá trị 0.
8. Chính sách Compaction
Có hai hệ thống Compaction:compact()của công cụ ngữ cảnh OpenClawthread/compact/startgốc của app-server Codex
/compact và OpenClaw Compaction tường minh
Khi công cụ ngữ cảnh được chọn có info.ownsCompaction === true, OpenClaw Compaction
tường minh nên ưu tiên kết quả compact() của công cụ ngữ cảnh cho bản sao bản ghi
OpenClaw và trạng thái Plugin.
Khi harness Codex được chọn có liên kết thread gốc, chúng ta có thể yêu cầu thêm
Codex Compaction gốc để giữ cho thread app-server khỏe mạnh, nhưng việc này phải
được báo cáo như một hành động backend riêng trong chi tiết.
Hành vi khuyến nghị:
- Nếu
contextEngine.info.ownsCompaction === true:- gọi
compact()của công cụ ngữ cảnh trước - sau đó gọi Codex Compaction gốc theo kiểu nỗ lực tối đa khi có liên kết thread
- trả về kết quả của công cụ ngữ cảnh làm kết quả chính
- bao gồm trạng thái Codex Compaction gốc trong
details.codexNativeCompaction
- gọi
- Nếu công cụ ngữ cảnh đang hoạt động không sở hữu Compaction:
- giữ nguyên hành vi Codex Compaction gốc hiện tại
extensions/codex/src/app-server/compact.ts hoặc
bọc nó từ đường dẫn Compaction chung, tùy vào nơi
maybeCompactAgentHarnessSession(...) được gọi.
Sự kiện contextCompaction gốc của Codex trong lượt
Codex có thể phát ra sự kiện mụccontextCompaction trong một lượt. Giữ nguyên
việc phát hook Compaction trước/sau hiện tại trong event-projector.ts, nhưng không
xem đó là một Compaction công cụ ngữ cảnh đã hoàn tất.
Đối với các công cụ sở hữu Compaction, hãy phát chẩn đoán tường minh khi Codex vẫn
thực hiện Compaction gốc:
- tên luồng/sự kiện: luồng
compactionhiện có là chấp nhận được - chi tiết:
{ backend: "codex-app-server", ownsCompaction: true }
9. Hành vi đặt lại phiên và liên kết
reset(...) hiện có của harness Codex xóa liên kết app-server Codex khỏi
tệp phiên OpenClaw. Giữ nguyên hành vi đó.
Đồng thời đảm bảo việc dọn dẹp trạng thái công cụ ngữ cảnh tiếp tục diễn ra thông qua
các đường dẫn vòng đời phiên OpenClaw hiện có. Không thêm dọn dẹp riêng cho Codex trừ khi
vòng đời công cụ ngữ cảnh hiện đang bỏ sót các sự kiện đặt lại/xóa cho mọi harness.
10. Xử lý lỗi
Tuân theo ngữ nghĩa tích hợp sẵn của OpenClaw:- lỗi bootstrap cảnh báo và tiếp tục
- lỗi assemble cảnh báo và quay về thông điệp/prompt pipeline chưa assemble
- lỗi afterTurn/ingest cảnh báo và đánh dấu hoàn tất sau lượt là không thành công
- bảo trì chỉ chạy sau các lượt thành công, không bị hủy và không yield
- lỗi Compaction không nên được thử lại như các prompt mới
- Nếu chiếu ngữ cảnh thất bại, cảnh báo và quay về prompt gốc.
- Nếu sao chép bản ghi thất bại, vẫn cố gắng hoàn tất công cụ ngữ cảnh với thông điệp dự phòng.
- Nếu Codex Compaction gốc thất bại sau khi Compaction công cụ ngữ cảnh thành công, không làm thất bại toàn bộ OpenClaw Compaction khi công cụ ngữ cảnh là chính.
Kế hoạch kiểm thử
Kiểm thử đơn vị
Thêm kiểm thử trongextensions/codex/src/app-server:
-
run-attempt.context-engine.test.ts- Codex gọi
bootstrapkhi có tệp phiên tồn tại. - Codex gọi
assemblevới các thông điệp được phản chiếu, ngân sách token, tên công cụ, chế độ trích dẫn, id mô hình và prompt. systemPromptAdditionđược đưa vào chỉ dẫn dành cho nhà phát triển.- Các thông điệp đã lắp ráp được chiếu vào prompt trước yêu cầu hiện tại.
- Codex gọi
afterTurnsau khi phản chiếu bản ghi hội thoại. - Khi không có
afterTurn, Codex gọiingestBatchhoặcingesttheo từng thông điệp. - Bảo trì lượt chạy sau các lượt thành công.
- Bảo trì lượt không chạy khi có lỗi prompt, hủy bỏ, hoặc yield abort.
- Codex gọi
-
context-engine-projection.test.ts- đầu ra ổn định cho các đầu vào giống hệt nhau
- không trùng lặp prompt hiện tại khi lịch sử đã lắp ráp đã bao gồm nó
- xử lý lịch sử trống
- giữ nguyên thứ tự vai trò
- chỉ đưa phần bổ sung prompt hệ thống vào chỉ dẫn dành cho nhà phát triển
-
compact.context-engine.test.ts- kết quả chính của bộ máy ngữ cảnh sở hữu được ưu tiên
- trạng thái Compaction gốc của Codex xuất hiện trong chi tiết khi cũng được thử
- lỗi gốc của Codex không làm thất bại Compaction do bộ máy ngữ cảnh sở hữu
- bộ máy ngữ cảnh không sở hữu giữ nguyên hành vi Compaction gốc hiện tại
Kiểm thử hiện có cần cập nhật
extensions/codex/src/app-server/run-attempt.test.tsnếu có, nếu không thì các kiểm thử chạy Codex app-server gần nhất.extensions/codex/src/app-server/event-projector.test.tschỉ khi chi tiết sự kiện Compaction thay đổi.src/agents/harness/selection.test.tskhông cần thay đổi trừ khi hành vi cấu hình thay đổi; nó nên tiếp tục ổn định.- Các kiểm thử bộ máy ngữ cảnh của harness tích hợp sẵn nên tiếp tục chạy qua mà không đổi.
Kiểm thử tích hợp / trực tiếp
Thêm hoặc mở rộng các kiểm thử smoke trực tiếp cho Codex harness:- cấu hình
plugins.slots.contextEnginethành một bộ máy kiểm thử - cấu hình
agents.defaults.modelthành một mô hìnhcodex/* - cấu hình provider/model
agentRuntime.id = "codex" - xác nhận bộ máy kiểm thử đã quan sát:
- bootstrap
- assemble
- afterTurn hoặc ingest
- maintenance
Khả năng quan sát
Thêm nhật ký gỡ lỗi quanh các lệnh gọi vòng đời bộ máy ngữ cảnh của Codex:codex context engine bootstrap started/completed/failedcodex context engine assemble appliedcodex context engine finalize completed/failedcodex context engine maintenance skippedkèm lý docodex native compaction completed alongside context-engine compaction
sessionIdsessionKeyđược che hoặc bỏ qua theo thực hành ghi nhật ký hiện cóengineIdthreadIdturnIdassembledMessageCountestimatedTokenshasSystemPromptAddition
Di trú / tương thích
Điều này nên tương thích ngược:- Nếu không cấu hình bộ máy ngữ cảnh, hành vi bộ máy ngữ cảnh legacy nên tương đương với hành vi Codex harness hiện nay.
- Nếu
assemblecủa bộ máy ngữ cảnh thất bại, Codex nên tiếp tục với đường dẫn prompt ban đầu. - Các liên kết luồng Codex hiện có nên vẫn hợp lệ.
- Dấu vân tay công cụ động không nên bao gồm đầu ra của bộ máy ngữ cảnh; nếu không, mọi thay đổi ngữ cảnh đều có thể buộc tạo một luồng Codex mới. Chỉ danh mục công cụ nên ảnh hưởng đến dấu vân tay công cụ động.
Câu hỏi mở
-
Ngữ cảnh đã lắp ráp nên được chèn hoàn toàn vào prompt người dùng, hoàn toàn
vào chỉ dẫn dành cho nhà phát triển, hay tách ra?
Khuyến nghị: tách ra. Đặt
systemPromptAdditiontrong chỉ dẫn dành cho nhà phát triển; đặt ngữ cảnh bản ghi hội thoại đã lắp ráp trong wrapper prompt người dùng. Cách này khớp nhất với giao thức Codex hiện tại mà không biến đổi lịch sử luồng gốc. - Có nên tắt Compaction gốc của Codex khi một bộ máy ngữ cảnh sở hữu Compaction không? Khuyến nghị: không, chưa nên ở giai đoạn đầu. Compaction gốc của Codex vẫn có thể cần thiết để giữ luồng app-server hoạt động. Nhưng nó phải được báo cáo là Compaction gốc của Codex, không phải là Compaction của bộ máy ngữ cảnh.
-
before_prompt_buildnên chạy trước hay sau khi bộ máy ngữ cảnh lắp ráp? Khuyến nghị: sau phép chiếu bộ máy ngữ cảnh cho Codex, để các hook harness chung thấy prompt/chỉ dẫn dành cho nhà phát triển thực tế mà Codex sẽ nhận. Nếu tính tương đương với harness tích hợp sẵn yêu cầu thứ tự ngược lại, hãy mã hóa thứ tự đã chọn trong kiểm thử và ghi lại tại đây. - Codex app-server có thể chấp nhận một ghi đè ngữ cảnh/lịch sử có cấu trúc trong tương lai không? Chưa rõ. Nếu có thể, hãy thay lớp chiếu văn bản bằng giao thức đó và giữ nguyên các lệnh gọi vòng đời.
Tiêu chí chấp nhận
- Một lượt harness nhúng
codex/*gọi vòng đời assemble của bộ máy ngữ cảnh đã chọn. systemPromptAdditioncủa bộ máy ngữ cảnh ảnh hưởng đến chỉ dẫn dành cho nhà phát triển của Codex.- Ngữ cảnh đã lắp ráp ảnh hưởng đến đầu vào lượt Codex theo cách tất định.
- Các lượt Codex thành công gọi
afterTurnhoặc phương án dự phòng ingest. - Các lượt Codex thành công chạy bảo trì lượt của bộ máy ngữ cảnh.
- Các lượt thất bại/bị hủy/yield-aborted không chạy bảo trì lượt.
- Compaction do bộ máy ngữ cảnh sở hữu vẫn là chính cho trạng thái OpenClaw/Plugin.
- Compaction gốc của Codex vẫn có thể kiểm tra được như hành vi gốc của Codex.
- Hành vi bộ máy ngữ cảnh của harness tích hợp sẵn hiện có không thay đổi.
- Hành vi Codex harness hiện có không thay đổi khi không có bộ máy ngữ cảnh không phải legacy nào được chọn hoặc khi lắp ráp thất bại.