rfc-003: remove timeout from RoleSpec, it's an adapter concern

RoleSpec now has exactly 3 fields: adapter, prompt, meta.
Timeout belongs to adapter config — different timeouts = different adapter instances.

Refs #245
小橘 🍊(NEKO Team)
This commit is contained in:
2026-04-29 08:34:00 +00:00
parent 4be465918c
commit 7de75b5df7
+9 -12
View File
@@ -82,7 +82,7 @@ const workflow: WorkflowSpec<MyMeta> = {
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<M> = {
adapter: AgentFn;
prompt: PromptInput;
meta: Schema<M>;
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