paperclipai/paperclip · error
Steering is unavailable.
Error message
Steering is unavailable.
What it means
TaskChatThread's queued-message list renders an onSteer callback that forwards a steer request for a queued comment to the parent. When the parent did not supply the onSteerQueuedComment prop, the component throws "Steering is unavailable." instead of silently doing nothing. This is a guard ensuring steer actions are only offered/executed when the parent wiring supports them.
Source
Thrown at ui/src/components/TaskChatThread.tsx:2713
<TaskChatTurnStatusIsland model={tailTurnStatus} />
) : null}
<RunnerGoalWidget control={runnerGoal} />
<div
className="relative isolate flex flex-col"
data-testid="task-chat-composer-stack"
>
{queuedMessageQueue ? (
<TaskChatQueuedMessages
queue={queuedMessageQueue}
onEdit={beginQueuedEdit}
onReorder={async (orderedCommentIds, revision) => {
if (!onReorderQueuedComments)
throw new Error("Queue reordering is unavailable.");
await onReorderQueuedComments(orderedCommentIds, revision);
}}
onSteer={async (commentId, revision) => {
if (!onSteerQueuedComment)
throw new Error("Steering is unavailable.");
await onSteerQueuedComment(commentId, revision);
}}
onInterrupt={
onInterruptQueued && queuedMessageQueue.targetRunId
? async () => {
await onInterruptQueued(
queuedMessageQueue.targetRunId!,
);
}
: undefined
}
onDiscard={async (commentId, revision) => {
if (commentId.startsWith("optimistic-")) {
if (!onCancelQueued)
throw new Error("Discard is unavailable.");
onCancelQueued(commentId);
return;
}View on GitHub (pinned to 01ad858492)
Solutions
- Pass the onSteerQueuedComment prop to TaskChatThread at the call site.
- Check the embedding page: use the standard task page (which wires steering) or add the wiring yourself.
- If steering is intentionally unsupported, hide/disable the steer action instead of rendering it.
- Update the custom embed to the current TaskChatThread API, which expects queue mutation handlers.
Example fix
// before
<TaskChatThread issueId={id} onReorderQueuedComments={reorder} />
// after
<TaskChatThread
issueId={id}
onReorderQueuedComments={reorder}
onSteerQueuedComment={async (commentId, revision) => {
await api.steerQueuedComment(issueId, commentId, revision);
}}
/> Defensive patterns
Strategy: validation
Validate before calling
const canSteer = typeof onSteerQueuedComment === "function"; if (!canSteer) hideSteerActions(); // render the queue without steer affordances
Type guard
const hasSteer = (p: unknown): p is (id: string, rev: number) => Promise<void> => typeof p === "function";
Try / catch
try {
await onSteer(commentId, revision);
} catch (e) {
if (e instanceof Error && e.message === "Steering is unavailable.") {
toast("Steering is not supported in this view.");
} else throw e;
} Prevention
- Always pass queue mutation handlers when rendering TaskChatThread in editable contexts.
- Render steer actions conditionally on the presence of the handler.
- Keep custom embeds in sync with the current TaskChatThread prop contract.
When it happens
Trigger: User clicks the steer action on a queued comment in TaskChatThread while the onSteerQueuedComment prop is undefined (not passed by the page embedding TaskChatThread).
Common situations: Embedding TaskChatThread in a custom page or older call site that predates the steer feature; a feature flag or conditional render path where the parent omits queue-mutation handlers; UI rendered in a context (e.g. read-only or completed task) where steering handlers are intentionally not wired.
Understand the failure class
Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.
Related errors
- Discard is unavailable.
- Select an organization to test adapter environment
- [adapter-ui-loader] Failed to load UI parser for "${adapterT
- Failed to seed CEO instructions:
- [paperclip] UI dist not found; running in API-only mode
AI-assisted analysis of paperclipai/paperclip@01ad858492 (2026-09-10).
Data as JSON: /api/errors/6e4040ff6616abe9.
Report an issue: GitHub.