行器、驅(qū)動(dòng)注冊(cè)表與 loop-host 工廠)
人工智能AI 應(yīng)用交互助手AI Agent【免費(fèi)下載鏈接】ironclawIronClaw is an Agent OS focused on privacy, security and extensibility項(xiàng)目地址https://gitcode.com/gh_mirrors/iro/ironclaw點(diǎn)擊查看免費(fèi)下載ironclaw_turn_runner是 IronClaw 這個(gè) Agent OS 中承擔(dān)認(rèn)領(lǐng)運(yùn)行claimed run執(zhí)行職責(zé)的核心 crate它既是內(nèi)核進(jìn)程監(jiān)督器ProcessKind::AgentTurn注冊(cè)的執(zhí)行器也是驅(qū)動(dòng)注冊(cè)表與 loop-host 工廠所在的位置充當(dāng)內(nèi)核認(rèn)領(lǐng)的運(yùn)行與 loop 用戶態(tài)之間的可信適配器。讀完本文你將掌握該 crate 的公共表面、執(zhí)行主流程、驅(qū)動(dòng)注冊(cè)與就緒校驗(yàn)、退出應(yīng)用與證據(jù)驗(yàn)證、await-edge 子代理機(jī)制、失敗消毒策略以及它與ironclaw_composition之間的唯一消費(fèi)關(guān)系并能在改動(dòng)驅(qū)動(dòng)、裝飾器順序、失敗/重試處置或退出應(yīng)用時(shí)快速定位正確的代碼位置。一句話定位依賴倒置下的可信適配器按照 crate 自帶 README 的官方表述本 crate 是內(nèi)核認(rèn)領(lǐng)運(yùn)行與 loop 用戶態(tài)之間的可信適配器。它把ProcessKind::AgentTurn執(zhí)行器注冊(cè)進(jìn)內(nèi)核的進(jìn)程監(jiān)督器——注意這里的依賴倒置方向內(nèi)核ironclaw_processes定義端口本 crate 向端口注冊(cè)實(shí)現(xiàn)而不是反向依賴它只把每次認(rèn)領(lǐng)到的運(yùn)行claimed run所需的那組端口交給它并把 loop 聲明的退出exit交給 turn 內(nèi)核的退出應(yīng)用器exit applier由后者在任何持久化提交之前完成驗(yàn)證。用一句話概括它永遠(yuǎn)不自行決定持久化never decides durability itself。從分層看它在 PROPOSAL §6.7.3 中屬于loop/loops層layer loops包名為ironclaw_turn_runner清單位于 Cargo.toml。需要說明的是ironclaw_turn_runner是一個(gè)內(nèi)部裝配構(gòu)件lib.rs 明確指出它唯一的合法下游消費(fèi)者是ironclaw_composition架構(gòu)測(cè)試ironclaw_architecture_tests會(huì)強(qiáng)制這一依賴邊界。什么時(shí)候用這個(gè) crate按 README 的邊界劃分用在這里改驅(qū)動(dòng)drivers、驅(qū)動(dòng)就緒driver readiness、能力端口裝飾器的順序capability-port decorator ordering、失敗車道/重試處置failure-lane / retry disposition、退出應(yīng)用exit application、子代理 await-edge 解析器。不在這里改loop 策略本身 → ironclaw_agent_loop端口適配器實(shí)現(xiàn) → ironclaw_loop_host調(diào)度機(jī)制認(rèn)領(lǐng)/租約/心跳/恢復(fù)→ ironclaw_processes。公共表面Public surfacelib.rs 刻意采用模塊目錄而非類型貨架的形態(tài)每個(gè)模塊按路徑可達(dá)如ironclaw_turn_runner::driver_registry::DriverRegistry、ironclaw_turn_runner::planned_driver_factory::register_default_planned_driver但不做一墻pub use扁平化重導(dǎo)出——那是邊界測(cè)試要防止的投機(jī)性公共 API模式。RebornTurnRunExecutor注冊(cè)進(jìn)內(nèi)核監(jiān)督器的執(zhí)行器RebornTurnRunExecutorturn_run_executor.rs是注冊(cè)到進(jìn)程監(jiān)督器的具體TurnRunExecutor。它把三樣?xùn)|西適配到TurnRunScheduler消費(fèi)的TurnRunExecutortraitArcLoopExitApplier——可信的退出應(yīng)用器ArcDriverRegistry——驅(qū)動(dòng)注冊(cè)表Arcdyn HostFactory——每個(gè)認(rèn)領(lǐng)運(yùn)行構(gòu)造一個(gè)AgentLoopDriverHost的工廠OptionArcdyn GateRecordStorePort——auth gate 的持久化憑證需求回源§5.2.9 render-from-recordArcdyn AwaitEdgeSettler——運(yùn)行啟動(dòng)前的后臺(tái) await-edge 清掃器。turn_scheduler.rs中的 TurnRunScheduler 本身只是一個(gè)agent-turn 投影自 #6696 起基于ironclaw_processes::ProcessSupervisor構(gòu)建并不是獨(dú)立的調(diào)度器——認(rèn)領(lǐng)/心跳/租約/恢復(fù)機(jī)制都在內(nèi)核該文件只負(fù)責(zé)把它們翻譯成 turn 詞匯。DriverRegistry與兩個(gè)生產(chǎn)驅(qū)動(dòng)驅(qū)動(dòng)注冊(cè)表driver_registry.rs持有具體驅(qū)動(dòng)實(shí)例在啟動(dòng)時(shí)凍結(jié)描述符元數(shù)據(jù)并在接流量之前校驗(yàn)配置的和持久化的運(yùn)行身份都能被服務(wù)。兩個(gè)生產(chǎn)驅(qū)動(dòng)PlannedDriverplanned_driver.rs——把 runner 側(cè)的AgentLoopDrivertrait 橋接到密封的ironclaw_agent_loop框架內(nèi)部持有一個(gè)不透明的LoopFamily和規(guī)范執(zhí)行器CanonicalAgentLoopExecutor默認(rèn)描述符 ID 為reborn:planned-default、版本 1且必須攜帶 checkpoint schema否則InvalidRequesttext_loop_driver.rs——支持的最小行為只構(gòu)建純文本 prompt 包、流式拿一次 host 管理的模型響應(yīng)、只接受最終 assistant 回復(fù)并終結(jié)到 transcript 端口工具/能力調(diào)用一律拒絕。其驅(qū)動(dòng) ID 為reborn:text-only-model-reply、版本 1默認(rèn)context_limit為 16text_loop_driver.rs。兩者之間的回退必須是顯式的 profile/就緒決策絕不靜默發(fā)生AGENTS.md 的Do Not Move In Here也把hidden fallback from planned to text-only列為紅線。loop_driver_host.rs/runtime.rsloop-host 工廠與裝飾器鏈loop_driver_host.rs負(fù)責(zé)為一個(gè)認(rèn)領(lǐng)運(yùn)行裝配端口集合runtime.rs負(fù)責(zé) planned-runtime 組合與能力端口裝飾器鏈——裝飾器的順序ordering按章程就是本 crate 的屬地。源碼里可以看到大量裝飾器與安全適配器能力表面過濾工廠SurfaceFilteringCapabilityPortFactory、表面狀態(tài)追蹤SurfaceTrackingLoopCapabilityPort在builtin.extension_install等可能改變可見表面的能力調(diào)用后清空緩存、hook 能力輸入解析適配器默認(rèn)輸入字節(jié)預(yù)算DEFAULT_HOOK_CAPABILITY_INPUT_MAX_BYTES 64 KiB超限按未解析失敗關(guān)閉、事件觸發(fā) hook 訂閱含租戶/線程隔離的有效讀作用域派生防止跨線程/跨項(xiàng)目事件泄漏等。loop_exit_applier.rs對(duì)宿主鑄造證據(jù)的退出驗(yàn)證loop_exit_applier.rs提供兩個(gè)證據(jù)端口適配器InMemoryLoopExitEvidencePort——嚴(yán)格測(cè)試/本地證據(jù)端口默認(rèn)不信任一切寬松證據(jù) mutator 全部#[cfg(test)]門控生產(chǎn)構(gòu)建無法通過該適配器鑄造完全可信的退出證據(jù)ThreadCheckpointLoopExitEvidencePort——生產(chǎn)可用的文本/checkpoint 背書證據(jù)適配器完成證據(jù)要求每個(gè)回復(fù)引用與結(jié)果引用都有同 run 終結(jié)化的線程證據(jù)背書blocked 證據(jù)要求 checkpoint 的gate_ref與 blocked 退出報(bào)告的 gate 完全一致防止用同 run 其它 gate 的BeforeBlockcheckpoint 冒充 Auth 證據(jù)失敗證據(jù)要求recent_failure_kinds命中且解釋消息引用都已終結(jié)化。subagent/await_edge/await-edge 機(jī)制await-edge 的store是對(duì)ironclaw_processes::ProcessDependencyPort的純投影不是第二份日志resolver留在本 crate 作為真正的 loop 層職責(zé)PROPOSAL §12.13 D-S涵蓋 owner 恢復(fù)、未信任文本柵欄后的子轉(zhuǎn)錄物物化、批量門排空與父級(jí)恰好一次恢復(fù)、BlockedDependentRunGate恢復(fù)策略。await_edge/mod.rs 定義了 CAS 狀態(tài)機(jī)AwaitEdgeStateOpen → Settled → Drained后臺(tái)子結(jié)果還會(huì)走ResultAppended → AttentionScheduled投遞鏈AttentionDeferredStreakCap是達(dá)到連續(xù)打斷上限后的繞行停車態(tài)絕非終點(diǎn)。trace_capture.rsWS6 trace-capture 拆分的 runner 半trace_capture.rs 是 WS6 trace-capture 拆分的觀察者半邊持有TurnEventSink實(shí)現(xiàn)、歷史讀取端口與 record→message 適配捕獲流水線本體在ironclaw_trace_commons::capture。讀取走模型上下文replay視圖而非list_thread_history否則歷史投影會(huì)清空tool_result_provider_call導(dǎo)致 trace 退化為純文本且捕獲絕不允許阻塞或失敗 turn 生命周期路徑錯(cuò)誤只debug!級(jí)記錄。執(zhí)行主流程源碼級(jí)走讀以execute_claimed_runturn_run_executor.rs為入口一次認(rèn)領(lǐng)運(yùn)行的執(zhí)行分為三個(gè)階段Run-start 清掃驅(qū)動(dòng)運(yùn)行前先調(diào)用await_edge_settler.sweep_thread_on_run_start治愈該線程上遺留的后臺(tái) await-edge。human_initiated鏡像 streak-cap 準(zhǔn)入規(guī)則——Human或缺失 provenance 允許啟動(dòng)System/ParentAgent不允許。清掃失敗只記日志、不阻斷運(yùn)行啟動(dòng)。invoke_driverL373-L525從claimed.resolved_run_profile.loop_driver解析出LoopDriverRegistryKey查注冊(cè)表拿驅(qū)動(dòng)用HostFactory::create_host構(gòu)造一次性 host然后按checkpoint_id.is_some()決定走driver.resume還是driver.run重排隊(duì) blocked 運(yùn)行保留 checkpointcheckpoint 身份就是恢復(fù)信號(hào)。驅(qū)動(dòng)返回LoopExit后先host.finalize_terminal_output終結(jié)化再在 host 存活期間快照supplemental_model_usage并合并進(jìn)退出或類型化失敗元數(shù)據(jù)。apply_exitL537-L660把LoopExit交給可信應(yīng)用器loop_exit_applier.apply_with_supplemental_model_usage。若為Completed隨后觸發(fā)兩個(gè)后終結(jié)、盡力而為、帶超時(shí)的副作用after-turn 記憶錄制mem0addseam超時(shí)AFTER_TURN_MEMORY_RECORD_TIMEOUT 30s則跳過與after_turn生命周期 hook 分發(fā)每次運(yùn)行現(xiàn)造一個(gè) dispatcher 以保證 hook 毒化只作用于當(dāng)前 run外層超時(shí)AFTER_TURN_HOOK_DISPATCH_TIMEOUT 30s必須嚴(yán)格大于dispatcher 單 hook 5s 上限否則外層取消會(huì)與內(nèi)層同時(shí)落地、把慢 hook 從分類中偷走。值得注意的兩處安全細(xì)節(jié)Auth gate 憑證需求回源§5.2.9 flip 之后auth block 的credential_requirements從 loop 通道移到了 host 持久化的GateRecord::Auth上LoopBlocked.credential_requirements到達(dá)時(shí)為空。執(zhí)行器通過前綴gate:auth-剝離出gate_id用確定性GateRef::for_auth_gate(gate_id)重建鍵并從gate_record_store回源若 store 已裝配卻查不到缺記錄、類型錯(cuò)誤、讀失敗返回Err(tag)讓退出失敗并記錄終結(jié)失敗——寧可失敗也不讓用戶停在一個(gè)無法提交的 auth 門上。雙重失敗才上拋只有當(dāng)退出應(yīng)用失敗 回退record_runner_failure也失敗時(shí)apply_exit才返回Err(metadata)由調(diào)度器記錄終結(jié)失敗且不會(huì)丟棄 exit 已認(rèn)領(lǐng)的用量快照TurnRunFailureMetadata攜帶累積LoopModelUsage。驅(qū)動(dòng)注冊(cè)與就緒驗(yàn)證DriverRegistry::register_driverdriver_registry.rs在注冊(cè)時(shí)校驗(yàn)描述符版本必須大于 0checkpoint schema id 與 version 必須同時(shí)存在或同時(shí)缺失。重復(fù)注冊(cè)同一 key 報(bào)DuplicateRegistration。每個(gè)驅(qū)動(dòng)還帶一份DriverRequirementsmodel / prompt / transcript / checkpoint / input_polling / capabilities / progress_events 七項(xiàng)每項(xiàng)Required | Optional | Unsupported和DriverKindProduction/Referencefake 驅(qū)動(dòng)只允許顯式 standalone/test 就緒。validate_readiness綜合三類輸入生成報(bào)告host 圖可用性HostGraphReadiness、啟用的運(yùn)行 profileConfiguredRunProfile、非終結(jié)的持久化運(yùn)行PersistedRunDriverIdentity。產(chǎn)出ProductionReady | NonProductionDegradedReference | NotReady三態(tài)并給出阻塞/非阻塞診斷如MissingConfiguredDriver、MissingNonTerminalRunDriver、ReferenceDriverNotProductionReady。production_readiness.rs則是一個(gè)沒有生產(chǎn)調(diào)用方的報(bào)告切片validate_reborn_loop_production_readiness等待被接入啟動(dòng)門或刪除CHECKLIST WS4/WS8README 明確告誡不要在其上構(gòu)建。組合層 ironclaw_composition/src/lib.rs 展示了真實(shí)的裝配樣例依次注冊(cè) text-only 驅(qū)動(dòng)、默認(rèn) planned 驅(qū)動(dòng)、subagent planned 驅(qū)動(dòng)、unbound planned 驅(qū)動(dòng)與 unbound 結(jié)構(gòu)化 planned 驅(qū)動(dòng)并構(gòu)建默認(rèn) planned run profile 解析器runtime.rs則裝配 trace-capture sink、after-turn hook、CancelReconcilingTurnCoordinator等。調(diào)度配置與心跳預(yù)算TurnRunSchedulerConfigturn_scheduler.rs把通用ProcessSupervisorConfig包了一層關(guān)鍵約束是心跳失敗預(yù)算絕不能超出進(jìn)程租約 TTLTURN_RUN_MAX_CONSECUTIVE_HEARTBEAT_FAILURES 8turn-run 上限通用默認(rèn)仍為 3因?yàn)槟芰β窂?30s 心跳一次8 次會(huì)遠(yuǎn)超租約一次失敗心跳的成本是2 * interval等一個(gè) interval 一次心跳超時(shí)所以MAX_HEARTBEAT_INTERVAL_WITHIN_LEASE DEFAULT_PROCESS_LEASE_DURATION / 2是能支付第一次失敗的最寬 interval超過它的配置值會(huì)被鉗制而非靜默接受一個(gè)兌現(xiàn)不了的 budget1默認(rèn) shipped 的 15s interval 對(duì)應(yīng) budget 3with_runner_heartbeat_interval會(huì)聯(lián)動(dòng)重算 budgetwith_max_consecutive_heartbeat_failures也以租約推導(dǎo)值為上限封頂。測(cè)試hosted_heartbeat_interval_absorbs_one_postgres_checkout_timeout驗(yàn)證了 5s 心跳budget 8容忍窗口 80s能扛住一次 30s 的 Postgres checkout 卡頓——這正是托管環(huán)境池饑餓事故的回歸防線。失敗處理與錯(cuò)誤消毒turn_runner.rs提供兩個(gè)共享失敗助手sanitized_failure與sanitized_driver_failure。后者對(duì)一組合法的模型側(cè)類別model_credits_exhausted、model_credentials_unavailable、model_spend_budget_exhausted、budget_accounting_failed、transcript_write_failed、checkpoint_rejected、model_context_overflow、model_output_truncated、interrupted_unexpectedly原樣保留類別并附帶受限 detail其余一律折疊為driver_failed任何類別校驗(yàn)失敗最終回退到unknown_failure。interrupted_unexpectedly的保留是刻意的§5a.5 loop 失敗矩陣planned driver 把執(zhí)行中Cancelled映射到它折疊成driver_failed會(huì)從持久化失敗記錄里抹掉原始類別。失敗分類的標(biāo)識(shí)符與類別→摘要表在 WS1.7 已遷移到ironclaw_host_api::failurePROPOSAL §6.1.1本 crate 的failure_categories/failure_summary已降為 runner 私有。依賴邊界與不變量README 與 AGENTS.md 共同劃定的紅線17 個(gè)普通工作區(qū)依賴ironclaw_agent_loop、ironclaw_loop_host、ironclaw_hooks聲明的裝飾器鏈、內(nèi)核ironclaw_turns、ironclaw_processes、ironclaw_host_runtime、ironclaw_approvals、契約ironclaw_host_api、ironclaw_loop_contracts以及ironclaw_event_log、ironclaw_filesystem、ironclaw_memory、ironclaw_observability、ironclaw_outbound、ironclaw_safety、ironclaw_threads、ironclaw_trace_commons。明確不含ironclaw_llm——provider 錐體在 WS3 已隨 model gateway 遷出重新引入它意味著 provider 行為回歸reborn_runner_llm_wiring_is_isolated是仲裁者。被 1 個(gè) crate 消費(fèi)ironclaw_composition絕不反向。shed 項(xiàng)留在ironclaw_loop_hostmodel gateway、model routes、driver-host 適配器、tool disclosure由reborn_runner_sheds測(cè)試釘住以及 runner 的 LLM 隔離reborn_dependency_boundaries下的reborn_runner_llm_wiring_is_isolated。await-edge store 是投影而非第二份日志由集成測(cè)試 tests/integration/subagent_await_edge.rs 的runner_await_edge_is_a_projection_over_process_dependencies釘在集成層。不通過公共 API 暴露任何 planner 策略槽不從ironclaw_turns/ironclaw_loop_contracts復(fù)制中性詞匯DTO 單一歸屬。測(cè)試與驗(yàn)證cargo test -p ironclaw_turn_runner cargo test -p ironclaw_architecture_tests # 依賴/API 變更后必跑crate 內(nèi)測(cè)試目錄 tests/ 覆蓋driver_registry、planned_driver_e2e、production_readiness、turn_run_executor其中用NoOpAwaitEdgeSettler假件隔離不需要真實(shí)進(jìn)程日志的用例另有after_turn_hook_context.rs驗(yàn)證 after-turn hook 上下文派生。turn_run_executor.rs內(nèi)的單測(cè)則驗(yàn)證失敗路徑下累積用量的保真合并如apply_exit_failure_preserves_cumulative_usage_already_on_exit。延伸閱讀家族規(guī)則crates/loop/AGENTS.md工作規(guī)則crates/loop/ironclaw_turn_runner/AGENTS.md設(shè)計(jì)記錄docs/internal/reborn/target-architecture/families/loop.md§6.7.3 PROPOSAL §12.13 D-S調(diào)度機(jī)制歸屬crates/kernel/ironclaw_processes/README.md端口適配器歸屬crates/loop/ironclaw_loop_host/README.mdloop 策略歸屬crates/loop/ironclaw_agent_loop/README.md。綜上ironclaw_turn_runner的價(jià)值不在于發(fā)明新機(jī)制而在于精確地守住那條可信邊界執(zhí)行器只負(fù)責(zé)把內(nèi)核認(rèn)領(lǐng)的運(yùn)行用正確的驅(qū)動(dòng)跑起來退出是否合法由證據(jù)端口與內(nèi)核退出應(yīng)用器裁決持久化永遠(yuǎn)不在這里發(fā)生對(duì)任何想要理解或修改 IronClaw turn 執(zhí)行語義的開發(fā)者它都是繞不開的入口。贊分享人工智能AI 應(yīng)用交互助手AI Agent【免費(fèi)下載鏈接】ironclawIronClaw is an Agent OS focused on privacy, security and extensibility項(xiàng)目地址https://gitcode.com/gh_mirrors/iro/ironclaw點(diǎn)擊查看免費(fèi)下載相關(guān)推薦IronClaw 的 claimed-work 控制平面深入解讀 ironclaw_turn_runner 的執(zhí)行器、驅(qū)動(dòng)注冊(cè)表與 loop-host 工廠IronClaw 的 claimed work 控制平面深入解讀 ironclaw_turn_runner 的執(zhí)行器、驅(qū)動(dòng)注冊(cè)表與 loop host 工廠人工智能AI 應(yīng)用交互助手AI AgentIronClaw turn_runner 控制平面解析回合執(zhí)行器、驅(qū)動(dòng)注冊(cè)表與循環(huán)主機(jī)工廠的職責(zé)邊界IronClaw turn_runner 控制平面解析回合執(zhí)行器、驅(qū)動(dòng)注冊(cè)表與循環(huán)主機(jī)工廠的職責(zé)邊界 ironclaw_turn_runner 是 IronC人工智能AI 應(yīng)用交互助手AI AgentIronClaw loop 層契約解析ironclaw_loop_contracts 如何讓 agent loop 與 turn 內(nèi)核解耦I(lǐng)ronClaw loop 層契約解析ironclaw_loop_contracts 如何讓 agent loop 與 turn 內(nèi)核解耦 本文是 IronC人工智能AI 應(yīng)用交互助手AI Agent上一篇PostgreSQL pgvector擴(kuò)展5步快速構(gòu)建高效的向量搜索數(shù)據(jù)庫下一篇OpenJarvis 本地優(yōu)先個(gè)人 AI 框架實(shí)戰(zhàn)指南安裝、預(yù)設(shè)配置、技能系統(tǒng)與內(nèi)置 Agent 全解析創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考