earendil-works/pi · error · PiServerError
session_locked
session_locked
Error message
Session already exists
What it means
Error "Session already exists" thrown in earendil-works/pi.
Source
Thrown at packages/server/src/testing/service.ts:227
delay.entered.resolve(undefined);
await delay.release.promise;
}
return [...this.sessions.values()].map(({ snapshot }) => ({
id: snapshot.id,
createdAt: snapshot.createdAt,
updatedAt: snapshot.updatedAt,
sessionName: snapshot.name,
cwd: snapshot.cwd,
}));
}
async listModels(): Promise<ModelMetadata[]> {
return [TEST_MODEL];
}
async createSession(options: CreateSessionOptions): Promise<PiSessionRuntime> {
this.lastCreatedId = options.id;
if (this.sessions.has(options.id)) throw new PiServerError("session_locked", "Session already exists");
this.seed(options.id, options.name, options.cwd, options.model, options.thinkingLevel);
return this.acquire(options.id);
}
async openSession(sessionId: string): Promise<PiSessionRuntime> {
if (!this.sessions.has(sessionId)) throw new PiServerError("not_found", `Unknown session: ${sessionId}`);
if (this.locked.has(sessionId)) throw new PiServerError("session_locked", `Session is locked: ${sessionId}`);
return this.acquire(sessionId);
}
seed(
id = "session-1",
name = `Session ${id}`,
cwd = "/tmp/pi-server-conformance",
model: ModelRef = { provider: TEST_MODEL.provider, id: TEST_MODEL.id },
thinkingLevel: ThinkingLevel = "off",
): void {
this.sessions.set(id, {View on GitHub (pinned to 4af9d21d3b)
Solutions
- Use a new session id; the given session already exists.
When it happens
Trigger: Thrown at packages/server/src/testing/service.ts:227 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of earendil-works/pi@4af9d21d3b (2026-08-24).
Data as JSON: /api/errors/079bc8a89968648a.
Report an issue: GitHub.