can1357/oh-my-pi · error
Agent ${ref.id} has no transcript: session is gone and no se
Error message
Agent ${ref.id} has no transcript: session is gone and no session file was retained What it means
An agent id is known (it appears in the agent registry) but has no retrievable transcript: the live session is gone and no session file path was retained, and the disk scan found nothing. resolve throws rather than returning an empty history.
Source
Thrown at packages/coding-agent/src/internal-urls/history-protocol.ts:120
const known = visible.map(candidate => candidate.id);
const knownStr = known.length > 0 ? known.join(", ") : "none";
throw new Error(`Unknown agent: ${agentId}\nKnown agents: ${knownStr}\nList all with history://`);
}
const notes: string[] = [];
let messages: unknown[];
if (ref.session) {
messages = ref.session.messages;
notes.push("Source: live session");
} else if (ref.sessionFile) {
messages = await loadSessionMessagesReadOnly(ref.sessionFile);
notes.push(`Source: session file (read-only, ${ref.status})`);
} else {
// No live session and no retained sessionFile — try the disk scan before
// giving up, in case the transcript lingers under an artifacts dir.
const disk = await this.#resolveFromDisk(ref.id, preferredArtifactDir);
if (disk) return { ...disk, url: url.href };
throw new Error(`Agent ${ref.id} has no transcript: session is gone and no session file was retained`);
}
const content = formatSessionHistoryMarkdown(messages, { title: `${ref.id} (${ref.status})` });
return {
url: url.href,
content,
contentType: "text/markdown",
size: Buffer.byteLength(content, "utf-8"),
sourcePath: ref.sessionFile ?? undefined,
notes,
};
}
/**
* Load a transcript for `agentId` from an on-disk `.jsonl` session file,
* matched case-insensitively. Returns `undefined` when no file is found.
* `preferredArtifactDir` — the caller root's artifact directory, when
* known — is scanned before every registry-derived dir, so a same-idView on GitHub (pinned to 9690622007)
Solutions
- Accept the transcript is unrecoverable and query a different agent/session
- Check the artifacts directory manually for orphaned session files
- Enable/disable retention settings so future sessions persist their session file
Defensive patterns
Strategy: try-catch
Try / catch
try {
return await resolve(`history://${agentId}`)
} catch (err) {
if (String(err).includes('has no transcript')) {
logger.warn('transcript unrecoverable', { agentId })
return null
}
throw err
} Prevention
- Read transcripts while the session is still live or shortly after completion
- Enable session-file retention for agents you may inspect later
- Back up the artifacts directory before cleanup runs
When it happens
Trigger: history://<agentId> for an agent whose session ended without sessionFile retention (e.g. aborted before first persist, or session file deleted) and #resolveFromDisk found no retained file under any artifacts dir.
Common situations: Requesting history for an agent that crashed very early; sessions cleaned by retention policy; running across machines where the artifacts dir differs.
Related errors
- Failed to load tree-sitter language: {err}
- Cleanse session could not be persisted
- Session file not found: ${resolved}
- Session "${sessionArg}" not found.
- No sessions found for ${cwd}. Pass a session file or id.
AI-assisted analysis of can1357/oh-my-pi@9690622007 (2026-08-31).
Data as JSON: /api/errors/65f76354429dd07f.
Report an issue: GitHub.