Skip to content

perf: batch entry decryption into a single agent round trip - #359

Open
Chr1s70ph wants to merge 1 commit into
doy:mainfrom
Chr1s70ph:perf/batch-decrypt
Open

perf: batch entry decryption into a single agent round trip#359
Chr1s70ph wants to merge 1 commit into
doy:mainfrom
Chr1s70ph:perf/batch-decrypt

Conversation

@Chr1s70ph

Copy link
Copy Markdown

Finding an entry by name decrypts every entry in the vault (name, username, folder, notes, uris, custom fields), and each decryption was a separate request to the agent over a fresh socket connection. With a few hundred sequential round trips this took over a second on macos, where per-connection overhead is much higher than on linux.

Add a DecryptMany action to the agent protocol that decrypts a batch of cipherstrings in one round trip, and drive the existing per-entry decryption functions through a record/replay decryptor: a recording pass collects every cipherstring they want (their control flow only depends on the entry structure, never on decrypted values), and after one batched request a replay pass hands the results back out in the same order. rbw get, search, and list all use the batch path now; master password reprompt semantics are unchanged since the agent runs the same per-item handler inside the batch.

Commit was made in assistance with AI

Improves the performance Issues mentioned in #11

before:

/opt/homebrew/bin/rbw get "<secret>" --full  0,12s user 1,69s system 97% cpu 1,848 total

after:

rbw get "<secret>" --full  0,01s user 0,01s system 59% cpu 0,038 total

Finding an entry by name decrypts every entry in the vault (name,
username, folder, notes, uris, custom fields), and each decryption was
a separate request to the agent over a fresh socket connection. With a
few hundred sequential round trips this took over a second on macos,
where per-connection overhead is much higher than on linux.

Add a DecryptMany action to the agent protocol that decrypts a batch
of cipherstrings in one round trip, and drive the existing per-entry
decryption functions through a record/replay decryptor: a recording
pass collects every cipherstring they want (their control flow only
depends on the entry structure, never on decrypted values), and after
one batched request a replay pass hands the results back out in the
same order. rbw get, search, and list all use the batch path now;
master password reprompt semantics are unchanged since the agent runs
the same per-item handler inside the batch.

Commit was made in assistance with AI
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