From 7de75b5df7a8ea699ebe08783d9b4ab62e26328d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E6=A9=98?= Date: Wed, 29 Apr 2026 08:34:00 +0000 Subject: [PATCH] rfc-003: remove timeout from RoleSpec, it's an adapter concern MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit RoleSpec now has exactly 3 fields: adapter, prompt, meta. Timeout belongs to adapter config — different timeouts = different adapter instances. Refs #245 小橘 🍊(NEKO Team) --- docs/rfc-003-agent-config-layer.md | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/docs/rfc-003-agent-config-layer.md b/docs/rfc-003-agent-config-layer.md index fdfe029..a15d36a 100644 --- a/docs/rfc-003-agent-config-layer.md +++ b/docs/rfc-003-agent-config-layer.md @@ -82,7 +82,7 @@ const workflow: WorkflowSpec = { roles: { architect: { adapter: cursorAdapter, prompt: architectPrompt, meta: architectSchema }, coder: { adapter: createCursorAdapter({ model: "claude-sonnet-4", timeout: 600 }), prompt: coderPrompt, meta: coderSchema }, - reviewer: { adapter: hermesAdapter, prompt: reviewPrompt, meta: reviewSchema, timeout: "60s" }, + reviewer: { adapter: hermesAdapter, prompt: reviewPrompt, meta: reviewSchema }, deployer: { adapter: hermesAdapter, prompt: deployPrompt, meta: deploySchema }, }, moderator, @@ -162,7 +162,6 @@ type RoleSpec = { adapter: AgentFn; prompt: PromptInput; meta: Schema; - timeout: string | null; }; ``` @@ -170,22 +169,20 @@ Static prompts cover simple cases. Dynamic prompts (functions) are needed when t ### Timeout Resolution -Two-layer: adapter default + role override. +Timeout is an **adapter concern**, not a role concern. Roles define *what to do* (prompt + schema); adapters define *how to do it* (tool, model, timeout). -1. Adapter instance carries its default timeout (set at creation or from default export) -2. Role definition can override for specific scenarios +When different roles need different timeouts, create separate adapter instances: ```ts import { cursorAdapter, createCursorAdapter } from "@uncaged/nerve-adapter-cursor"; -// cursorAdapter has built-in default (300s) -// Or create with custom timeout: -const longRunAdapter = createCursorAdapter({ model: "auto", timeout: 600 }); +const fastCursor = createCursorAdapter({ model: "auto", timeout: 60 }); +const slowCursor = createCursorAdapter({ model: "auto", timeout: 600 }); -// Role override — review is faster -reviewer: { adapter: cursorAdapter, ..., timeout: "60s" } -// coder uses adapter default (300s) -coder: { adapter: cursorAdapter, ... } +roles: { + reviewer: { adapter: fastCursor, prompt: reviewPrompt, meta: reviewSchema }, + coder: { adapter: slowCursor, prompt: coderPrompt, meta: coderSchema }, +} ``` ### No Runtime Fallback