paperclipai/paperclip · error
Daytona syncOut requires a provider lease ID.
Error message
Daytona syncOut requires a provider lease ID.
What it means
Precondition check in onEnvironmentSyncOut: params.lease carries no providerLeaseId, so there is no concrete Daytona sandbox to download from. The native outbound transfer needs a live lease to resolve a cached sandbox handle, so the hook rejects the call instead of attempting a leaseless transfer.
Solutions
- Provide a provider lease ID on the lease metadata before syncOut.
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at packages/plugins/sandbox-providers/daytona/src/plugin.ts:2645 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/33d1e97ea24e872e.
Report an issue: GitHub.
Appendix: source
Thrown at packages/plugins/sandbox-providers/daytona/src/plugin.ts:2762
// command) that runs before the run opens its trace root. Opening the
// session there would emit a `session.open` span with no run parent, and
// the span backend would drop it. With the bypass the session opens on the
// first in-run command, whose open span parents to the run trace.
let result: PluginEnvironmentExecuteResult;
if (!params.bypassSession) {
const sessionId = await getOrCreateSession(sandbox, scope);
result = await executeInSession(sandbox, sessionId, params, config);
} else {
result = await executeOneShot(sandbox, params, config);
}
if (!result.timedOut) {
sandboxHandleCache.markFresh(scope);
}
return {
...result,
metadata: { ...(result.metadata ?? {}), getDurationMs, cacheHit },
};
});
},
async onEnvironmentRunnerIngressEndpoint(
params: PluginEnvironmentRunnerIngressEndpointParams,
): Promise<PluginEnvironmentRunnerIngressEndpoint> {
if (params.port !== 43_127) {
throw new Error("Daytona runner ingress must use fixed port 43127.");
}
if (!/^\/api\/runner\/v1\/connect\/[^/?#]+$/.test(params.path)) {
throw new Error("Daytona runner ingress path is invalid.");
}
const providerLeaseId = params.lease.providerLeaseId;
if (!providerLeaseId) {
throw new Error("Daytona runner ingress requires a provider lease id.");
}
const config = parseDriverConfig(params.config);
return await withSandboxActivityGate(
{View on GitHub (pinned to 3f1d897a7c)