paperclipai/paperclip · error

native_runtime_request_resolution_unavailable

native_runtime_request_resolution_unavailable

Error message

native_runtime_request_resolution_unavailable

What it means

resolveRuntimeRequest forwards a resolution (e.g., answering a permission or input request) to the HarnessSession's optional resolveRuntimeRequest capability. When the driver does not implement it, the backend throws native_runtime_request_resolution_unavailable because pending runtime requests cannot be resolved programmatically for that session.

Source

Thrown at packages/paperclip-runner/src/backends/harness-driver-backend.ts:725

          : Promise.resolve().then(() =>
              interrupt.call(this.#session, {
                reason: input.reason,
                signal: input.signal,
              }),
            ),
    };
  }

  resolveRuntimeRequest(input: {
    requestId: string;
    turnId: string;
    resolution: Parameters<
      NonNullable<HarnessSession["resolveRuntimeRequest"]>
    >[0]["resolution"];
  }) {
    this.#assertProtocolIntegrity();
    if (this.#session.resolveRuntimeRequest === undefined) {
      throw new Error("native_runtime_request_resolution_unavailable");
    }
    return this.#withProtocolIntegrity(() => this.#session.resolveRuntimeRequest!(input));
  }

  handoffRuntimeRequest(input: {
    requestId: string;
    turnId: string;
    reason: "durable_handoff";
    signal: AbortSignal;
  }) {
    this.#assertProtocolIntegrity();
    if (this.#session.handoffRuntimeRequest === undefined) {
      throw new Error("native_runtime_request_handoff_unavailable");
    }
    return this.#session.handoffRuntimeRequest(input);
  }

  goal(input: Parameters<NonNullable<HarnessSession["goal"]>>[0]) {

View on GitHub (pinned to 01ad858492)

Solutions

  1. Upgrade the driver/adapter to a version implementing resolveRuntimeRequest
  2. Handle the request out-of-band (e.g., configure the agent to auto-approve so no request is raised)
  3. Check capability before issuing resolutions and surface an explicit 'not supported' state in the UI
  4. Route approvals to a human via the board instead of programmatic resolution

Example fix

// before
await backend.resolveRuntimeRequest({ requestId, resolution });
// after
if (!backend.canResolveRuntimeRequests()) {
  throw new UnsupportedFeatureError('runtime request resolution');
}
await backend.resolveRuntimeRequest({ requestId, resolution });
Defensive patterns

Strategy: try-catch

Validate before calling

if (typeof session.resolveRuntimeRequest !== 'function') throw new Error('runtime request resolution unsupported');

Type guard

const canResolve = (s: HarnessSession): s is HarnessSession & { resolveRuntimeRequest: NonNullable<HarnessSession['resolveRuntimeRequest']> } => typeof s.resolveRuntimeRequest === 'function';

Try / catch

try { await backend.resolveRuntimeRequest({ requestId, resolution }); } catch (e) { if (e.message === 'native_runtime_request_resolution_unavailable') { escalateToHumanApproval(requestId); } else throw e; }

Prevention

When it happens

Trigger: Calling resolveRuntimeRequest() on a session whose driver has no resolveRuntimeRequest method; resolving a runtime request (permission prompt, input request) on a driver lacking the runtime-request protocol extension.

Common situations: Automating approval of permission prompts on an adapter that does not expose request resolution; older driver versions without runtime-request support; driver created from a session factory that omits the resolver hook.

Understand the failure class

Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.

Related errors


AI-assisted analysis of paperclipai/paperclip@01ad858492 (2026-09-10). Data as JSON: /api/errors/0202da1594332314. Report an issue: GitHub.