paperclipai/paperclip · error

Daytona template deletion requires @daytonaio/sdk…

Error message

Daytona template deletion requires @daytonaio/sdk snapshot.get/delete support.

What it means

SDK capability probe in onEnvironmentDeleteTemplate: the loaded @daytonaio/sdk client does not expose the snapshot.get/snapshot.delete methods required to remove a snapshot template. Fires on SDK versions without snapshot management support — upgrade @daytonaio/sdk to delete templates.

Solutions

  1. Upgrade @daytonaio/sdk to a version with snapshot.get/delete support.
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at packages/plugins/sandbox-providers/daytona/src/plugin.ts:2501 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of paperclipai/paperclip@3f1d897a7c (2026-08-18). Data as JSON: /api/errors/bca4599edffe3591. Report an issue: GitHub.

Appendix: source

Thrown at packages/plugins/sandbox-providers/daytona/src/plugin.ts:2618

        metadata: {
          provider: "daytona",
          missing: true,
          reason: params.reason ?? null,
        },
      };
    }
    const scope: SandboxScope = {
      driverKey: params.driverKey,
      companyId: params.companyId,
      environmentId: params.environmentId,
      providerLeaseId: params.providerLeaseId,
      config,
    };
    // C4: cancelling an interactive-setup lease deletes the sandbox, so the
    // teardown gate blocks fresh cache reads while delete is in flight.
    const teardownGate = sandboxHandleTeardownGates.begin(scope);
    sandboxHandleLeaseAdmissionStates.close(scope);
    try {
      const sandbox = await getSandboxOrNull(scope, { bypassTeardownGate: true });
      if (!sandbox) {
        return {
          status: "missing",
          metadata: {
            provider: "daytona",
            missing: true,
            reason: params.reason ?? null,
          },
        };
      }
      evictSandboxHandle(scope);
      await sandboxHandleActivityGates.waitForIdle(scope);
      await teardownSession(sandbox, scope);
      await sandbox.delete(toTimeoutSeconds(config.timeoutMs));
      return {
        status: params.reason === "timed_out" ? "timed_out" : "cancelled",
        metadata: {

View on GitHub (pinned to 3f1d897a7c)