paperclipai/paperclip · error
Daytona SSH access did not return a token or SSH command.
Error message
Daytona SSH access did not return a token or SSH command.
What it means
Response-shape guard in createSshConnection: createSshAccess succeeded but returned neither a non-empty token nor a usable SSH command (checked via access.command / access.sshCommand). Without both, the connection payload handed to the user for interactive setup would be unusable, so the session is refused rather than returned half-formed.
Solutions
- Retry createSshAccess; verify the Daytona account/sandbox supports SSH access.
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at packages/plugins/sandbox-providers/daytona/src/plugin.ts:720 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/45d709c7e10ef0f3.
Report an issue: GitHub.
Appendix: source
Thrown at packages/plugins/sandbox-providers/daytona/src/plugin.ts:767
};
}
async function createSshConnection(
sandbox: Sandbox,
expiresInMinutes: number,
): Promise<Pick<PluginEnvironmentInteractiveSetupSession, "connectionSummary" | "connectionPayload">> {
const createSshAccess = (sandbox as DaytonaInteractiveSandbox).createSshAccess;
if (typeof createSshAccess !== "function") {
throw new Error(
"Daytona interactive setup requires @daytonaio/sdk Sandbox.createSshAccess support.",
);
}
const fallbackExpiresAt = expiresAtForMinutes(expiresInMinutes);
const access = await createSshAccess.call(sandbox, expiresInMinutes);
const token = typeof access.token === "string" && access.token.trim().length > 0
? access.token.trim()
: null;
const commandFromAccess =
typeof access.command === "string" && access.command.trim().length > 0
? access.command.trim()
: typeof access.sshCommand === "string" && access.sshCommand.trim().length > 0
? access.sshCommand.trim()
: null;
const command = commandFromAccess ?? (token ? `ssh ${token}@${DAYTONA_SSH_GATEWAY_HOST}` : null);
if (!command) {
throw new Error("Daytona SSH access did not return a token or SSH command.");
}
const expiresAt = typeof access.expiresAt === "string" && access.expiresAt.trim().length > 0
? access.expiresAt.trim()
: fallbackExpiresAt;
return {
connectionSummary: {
type: "ssh",
username: "token",View on GitHub (pinned to 3f1d897a7c)