paperclipai/paperclip · error · ToolGatewayHttpError

approval_path_missing

approval_path_missing

Error message

Tool action requires approval, but this gateway session is not attached to an issue

What it means

An approval-required tool call arrived over a gateway session with no issueId attached, so there is no task thread to post the approval card on. The invocation is marked denied (approval_path_missing), a call_denied event is written, and the agent is told to re-run the action from a run that has the task checked out.

Source

Thrown at server/src/services/tool-gateway.ts:1567

      reasonCode: input.reasonCode ?? null,
      matchedPolicyIds: [],
      requestHash: input.argumentsSummary?.sha256 ?? null,
      requestSummary: input.argumentsSummary ?? null,
      resultHash: input.resultSummary?.sha256 ?? null,
      resultSummary: input.resultSummary ?? null,
      resultSizeBytes: input.resultSummary?.sizeBytes ?? null,
      metadata: Object.keys(metadata).length > 0 || input.metadata || input.session.projectId || input.session.identityContextId
        ? {
            ...metadata,
            identityContextId: input.session.identityContextId ?? null,
            gatewayId: input.session.gatewayId ?? null,
            gatewayName: input.session.gatewayName ?? null,
            projectId: input.session.projectId ?? null,
            ...(input.metadata ?? {}),
          }
        : null,
    });
  }

  async function reflectToolActionInteractionLifecycle(input: {
    actionRequestId: string;
    status: "approved" | "executing" | "executed" | "failed" | "expired" | "cancelled";
    errorCode?: string | null;
    errorMessage?: string | null;
    resultSummary?: string | null;
  }): Promise<void> {
    const [linked] = await db
      .select({
        companyId: toolActionRequests.companyId,
        interactionId: toolActionRequests.interactionId,
        issueId: toolActionRequests.issueId,
      })
      .from(toolActionRequests)
      .where(eq(toolActionRequests.id, input.actionRequestId))
      .limit(1);
    if (!linked?.interactionId) return;

View on GitHub (pinned to 01ad858492)

Solutions

  1. Attach the gateway session to an issue (issue-scoped session) so approval requests can be routed, or use a tool that does not require approval.
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at server/src/services/tool-gateway.ts:1533 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of paperclipai/paperclip@01ad858492 (2026-08-18). Data as JSON: /api/errors/5973d0ddc954e9c2. Report an issue: GitHub.