@kuralle-syrinx/kuralle
v4.6.3
Published
kuralle-agents bridge for Syrinx — run a kuralle runtime as the voice pipeline's reasoner
Maintainers
Readme
@kuralle-syrinx/kuralle
The Kuralle adapter for the Syrinx Reasoner seam: fromKuralleRuntime(runtime, { sessionId }) → Reasoner. Drop it into ReasoningBridge to drive the voice pipeline with a Kuralle Runtime instead of a raw AI SDK backend — no pipeline change.
Usage
import { createRuntime, defineAgent } from "@kuralle-agents/core";
import { ReasoningBridge } from "@kuralle-syrinx/aisdk";
import { fromKuralleRuntime } from "@kuralle-syrinx/kuralle";
const runtime = createRuntime({ agents: [defineAgent({ id: "support", /* ... */ })], /* ... */ });
session.registerPlugin("bridge", new ReasoningBridge(fromKuralleRuntime(runtime, { sessionId })));How it maps
fromKuralleRuntime calls runtime.run({ input: turn.userText, sessionId, ... }) and iterates events (an AsyncIterable<KuralleStreamPart>), mapping each part → ReasoningPart. turn.messages is ignored — Kuralle owns conversation history via sessionId.
| Kuralle part | → |
|---|---|
| text-delta (delta) | text-delta |
| tool-call (toolCallId, toolName, args) | tool-call |
| tool-result (toolCallId, toolName, result) | tool-result |
| paused / interactive | terminal suspended |
| done | finish (reason: "stop", accumulated text) |
| error (error) | terminal error |
| anything else | dropped |
KuralleRuntimeLike is the minimal structural type the adapter needs (run → events) — the concrete @kuralle-agents/core Runtime satisfies it.
Gotchas
@kuralle-agents/coreis apeerDependency— the consumer instantiates and owns theRuntime. The adapter only touchesrun/events.- History stays Kuralle-owned via
sessionId: the bridge passes onlyturn.userTextper turn; do not expect Syrinx message history to reach Kuralle.
