Skip to content

feat: list and read Devin and Mistral Vibe sessions - #23

Merged
AstroQore merged 2 commits into
mainfrom
feat/devin-mistral-vibe-harnesses
Sep 17, 2026
Merged

AstroQore merged 2 commits into
mainfrom
feat/devin-mistral-vibe-harnesses

Conversation

@AstroQore

Copy link
Copy Markdown
Owner

Summary

Two read-only session harnesses:

  • Devin (Cognition) covers the devin CLI and the Devin desktop app, which share one database.
  • Mistral Vibe (Mistral AI) covers the vibe CLI.

Both are mirrored in the Rust lane.

  • Devin: every session lives in ~/.local/share/devin/cli/sessions.db.
    • A session is addressed as <…>/sessions.db/<session id>, a row locator rather than a file.
    • The transcript follows the main chain, walking main_chain_id up through parent_node_id. It drops system nodes, injected input and thinking.
    • hidden = 1 sessions are Devin's internal helpers. They are not listed, matching Devin's own lists.
    • Resume is devin --resume <id>.
  • Mistral Vibe: ~/.vibe/logs/session/session_<utc>_<id8>/, with meta.json for metadata and model and messages.jsonl for the transcript. Injected lines are skipped.
    • Sub-agent sessions nest under the parent's agents/ directory and are not listed.
    • Resume is vibe --resume <id>.
  • SessionProviderAdapter.changeFingerprint(fileURL:): new, defaulting to the file's mtime and size with its -wal folded in. SessionIndexService now asks the adapter instead of stat-ing the path; a stat of a row locator always failed, so Devin sessions were silently never indexed.
    • Devin answers per session from its own row and node counters.
    • Vibe folds meta.json in.
  • LiveSQLiteReader: can skip the snapshot copy. It also reads a WAL database whose writer closed cleanly in place with immutable=1, instead of failing into a copy; this benefits Cursor and AntiGravity too.
  • Both harnesses are 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), and cargo clippy … -D warnings are all clean.
  • A local smoke run on copies of real data printed counts only: Devin 2 sessions, Vibe 4 sessions; metadata, transcripts, fingerprints and resume commands all worked.

A preview tag 0.10.0-providers.1 was 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

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>
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 17, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-09-17T10:29:14.510645Z 8c15a5a New commits
ℹ️ 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" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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".

Comment thread implementations/swift/Sources/AgentSessionKit/Sessions/DevinSessionAdapter.swift Outdated
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>
@AstroQore
AstroQore merged commit b419318 into main Sep 17, 2026
4 checks passed

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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".

@AstroQore AstroQore mentioned this pull request Sep 17, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant