97840e25ab
7 curated knowledge cards extracted from RFCs and docs: - architecture: core pipeline, extension points, process isolation - sense: compute behavior, Sense→Workflow, config - workflow: engine, threads, WorkflowSpec - adapter: AgentFn protocol, available adapters, extract layer - coding-conventions: functional-first, Result type, naming - monorepo: package structure, dependency rules - knowledge-layer: sync/query CLI, embedding service knowledge.yaml indexes .knowledge/**/*.md only.
1.3 KiB
1.3 KiB
Agent Adapters (RFC-003)
Adapter = capability. Role = scenario. Workflows declare adapters directly via import.
AgentFn Protocol
type AgentFn = (prompt: string, context: WorkflowContext) => Promise<string>
- Input: prompt + context (start frame, messages, workdir, AbortSignal)
- Output: raw string — structured extraction is separate
- Adapter handles tool-specific details internally
Available Adapters
| Package | Adapter | Tool |
|---|---|---|
@uncaged/nerve-adapter-cursor |
cursorAdapter / createCursorAdapter() |
cursor-agent CLI |
@uncaged/nerve-adapter-hermes |
hermesAdapter / createHermesAdapter() |
hermes chat CLI |
Each exports a default instance (sensible defaults) and a factory for custom config.
Usage in Workflows
import { cursorAdapter } from "@uncaged/nerve-adapter-cursor";
// RoleSpec
{ adapter: cursorAdapter, prompt: "...", meta: schema }
No registry, no nerve.yaml agent config. TypeScript catches missing adapters at compile time.
Extract Layer
Parses agent raw string → typed meta. Configured in nerve.yaml:
extract:
provider: dashscope
model: qwen-plus
Two-level merge: global → role override. Retry once on parse failure (feeds error back to LLM), then throw ExtractError.