Repository navigation
feat: list and read Devin and Mistral Vibe sessions - #23
Conversation
Devin (Cognition) keeps every session the `devin` CLI and the desktop app's "Devin Local" agent run as rows in one WAL-mode database, ~/.local/share/devin/cli/sessions.db. DevinSessionAdapter hands out one locator per visible session, `<sessions.db>/<session id>`, so the per-file adapter protocol and the index key each session separately. The transcript follows the main chain from sessions.main_chain_id up parent_node_id to its root, skipping compaction's abandoned prefixes, retried siblings and sub-agent trees, and drops system blocks, injected user turns and reasoning. Sessions Devin marks hidden (its helper agents' runs) are not listed. Mistral Vibe (Mistral AI) writes session_<UTC stamp>_<id8>/ directories under ~/.vibe/logs/session. MistralVibeSessionAdapter reads the id, title, working directory, times and resolved model from meta.json, and the transcript from messages.jsonl without injected lines. Sub-agent sessions nested under a parent's agents/ directory are not listed. SessionProviderAdapter gains changeFingerprint(fileURL:), defaulting to the file's mtime and size with its -wal folded in, and SessionIndexService asks the adapter instead of stat-ing the path. Vibe folds meta.json in; Devin answers per session from its own row and node counters. LiveSQLiteReader can skip the snapshot copy, and reads a WAL database whose writer closed cleanly in place with immutable=1 instead of failing into a copy. Harness.devin / SessionProvider.devin and Harness.mistralVibe / SessionProvider.mistralVibe are read-only and resume with `devin --resume <id>` and `vibe --resume <id>`; the Rust lane mirrors both. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: cb2ccdef92
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
A newest assistant node without a generation_model no longer borrows an older node's model, which may predate a model switch; the session row answers instead. JSONLHeadTail.headLines takes an optional byte budget, and Mistral Vibe's title scan reads at most 1 MiB, so one oversized or newline-free first record cannot pull a whole log into memory. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 8c15a5a375
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Summary
Two read-only session harnesses:
devinCLI and the Devin desktop app, which share one database.vibeCLI.Both are mirrored in the Rust lane.
~/.local/share/devin/cli/sessions.db.<…>/sessions.db/<session id>, a row locator rather than a file.main_chain_idup throughparent_node_id. It dropssystemnodes, injected input and thinking.hidden = 1sessions are Devin's internal helpers. They are not listed, matching Devin's own lists.devin --resume <id>.~/.vibe/logs/session/session_<utc>_<id8>/, withmeta.jsonfor metadata and model andmessages.jsonlfor the transcript. Injected lines are skipped.agents/directory and are not listed.vibe --resume <id>.SessionProviderAdapter.changeFingerprint(fileURL:): new, defaulting to the file's mtime and size with its-walfolded in.SessionIndexServicenow asks the adapter instead of stat-ing the path; a stat of a row locator always failed, so Devin sessions were silently never indexed.meta.jsonin.LiveSQLiteReader: can skip the snapshot copy. It also reads a WAL database whose writer closed cleanly in place withimmutable=1, instead of failing into a copy; this benefits Cursor and AntiGravity too.supportsDeletion == false.Verification
swift test: XCTest 368 passed, Swift Testing 618 in 84 suites passed (re-run independently of the implementing agent).cargo fmt --check,cargo test --workspace --locked --offline(95 passed), andcargo clippy … -D warningsare all clean.A preview tag
0.10.0-providers.1was cut from this branch for Vibe Bar's stacked PR, the same practice as the vibe-bar-i18n preview tags. The release tag follows the merge.🤖 Generated with Claude Code