{"record":{"id":"96b36797964cd8cc","repo":"paperclipai/paperclip","slug":"remote-session-deletion-requires-a-connected-remot","errorCode":null,"errorMessage":"remote session deletion requires a connected remote provider session","messagePattern":"remote session deletion requires a connected remote provider session","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/paperclip-runner/src/live/live-session.ts","lineNumber":2100,"sourceCode":"      this.#config.agentCoreProfile.maxEstimatedSessionCostUsd =\n        maxSessionListCostUsd;\n    }\n    this.#status = this.#activeTurnId === null ? \"warm_idle\" : \"running\";\n    this.#appendEvidence(\"session\", this.#activeTurnId, {\n      action: \"budget_increased\",\n      maxSessionListCostUsd,\n    });\n    await this.#persist();\n    return this.snapshot();\n  }\n\n  async deleteManagedRemoteSession(): Promise<CapabilityLiveSessionSnapshot> {\n    if (\n      (this.#config.provider !== \"claude_managed\" &&\n        this.#config.provider !== \"aws_agentcore\") ||\n      this.#transport === null\n    ) {\n      throw new Error(\n        \"remote session deletion requires a connected remote provider session\",\n      );\n    }\n    if (\n      this.#activeTurnId !== null ||\n      this.#turnWaiter !== null ||\n      this.#pendingTurnAdmission !== null\n    ) {\n      throw new Error(\n        \"interrupt the active turn before deleting the remote session\",\n      );\n    }\n    await this.#transport.request(\"session/destroy\", {});\n    this.#providerSessionId = null;\n    this.#authority.active = false;\n    this.#status = \"closed\";\n    this.#appendEvidence(\"cleanup\", null, {\n      reason: \"remote session explicitly deleted\",","sourceCodeStart":2082,"sourceCodeEnd":2118,"githubUrl":"https://github.com/paperclipai/paperclip/blob/01ad8584922b5d85292b1723cae71fa0d9b07a19/packages/paperclip-runner/src/live/live-session.ts#L2082-L2118","documentation":"deleteManagedRemoteSession requires a connected remote managed provider session; the guard rejects the call when the provider is not claude_managed/aws_agentcore or the transport is null. There is no remote session to destroy otherwise, so the call fails explicitly.","triggerScenarios":"Calling deleteManagedRemoteSession on a local/mock provider session, or on a managed session whose transport was never connected or has since been disconnected/nullified.","commonSituations":"Cleanup/shutdown code that unconditionally deletes remote sessions; calling delete after the remote connection already dropped; provider switched away from managed without updating cleanup logic.","solutions":["Only call deleteManagedRemoteSession for claude_managed/aws_agentcore sessions with an active connection","Check provider and connection state (snapshot/flags) before calling","Wrap in try/catch in cleanup paths where the session may already be gone","Reconnect the transport first if deletion must proceed after a disconnect"],"exampleFix":"// before\nawait session.deleteManagedRemoteSession(); // cleanup, may throw\n// after\nconst snap = session.snapshot();\nif ((snap.provider === 'claude_managed' || snap.provider === 'aws_agentcore') && snap.connected) {\n  await session.deleteManagedRemoteSession().catch(() => {});\n}","handlingStrategy":"try-catch","validationCode":"const isManaged = cfg.provider === 'claude_managed' || cfg.provider === 'aws_agentcore';\nif (!isManaged || !session.isConnected?.()) return; // nothing to delete remotely","typeGuard":null,"tryCatchPattern":"try {\n  await session.deleteManagedRemoteSession();\n} catch (err) {\n  if (err instanceof Error && err.message.includes('remote session deletion requires')) {\n    // session already local/disconnected; treat as already deleted\n  } else throw err;\n}","preventionTips":["Make remote cleanup idempotent and state-checked","Skip deletion for non-managed providers","Handle disconnects before issuing remote operations"],"tags":["live-session","deletion","connection-state"],"backgroundTag":"remote-session-not-connected","analyzedSha":"01ad8584922b5d85292b1723cae71fa0d9b07a19","analyzedAt":"2026-09-02T18:44:00.616Z","contentChangedAt":"2026-09-02T18:44:00.616Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}