feat(conversations): incremental transcript fetching via --since#12
Merged
etown merged 1 commit intoJun 27, 2026
Merged
Conversation
Enable incremental transcript polling: `bee conversations transcript <id> --since <epochMs>` returns only utterances spoken at or after the given epoch-millisecond bound, so a live-transcript watcher can fetch just the new utterances each poll instead of refetching the full transcript and diffing client-side. Filtering uses the same `spoken_at ?? start` ordering key as the conversation detail document. Utterances with no timestamp are excluded when --since is set (they cannot be ordered against the bound). Omitting --since is unchanged. The matching optional `since` integer is added to the bee_get_conversation_transcript MCP tool so the CLI and MCP surfaces stay at parity.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Adds a
--since <epochMs>filter tobee conversations transcript <id>(and the matchingsinceinput to thebee_get_conversation_transcriptMCP tool). When set, only utterances whose timestamp is>= sinceare returned.Why
A live-transcript watcher currently has to refetch the entire flattened utterance stream on every poll and diff it locally to find what's new.
--sincepushes that boundary to the request, so a watcher can poll for only new utterances without maintaining client-side "seen" state. Thetranscriptsubcommand is the right home for this since it is purpose-built to return the flattened utterance stream (unlikeget, which returns the whole conversation document).Details
--sinceof kindint(epoch milliseconds), consistent withbee search --since. USAGE updated tobee conversations transcript <id> [--since <epochMs>] [--json].spoken_at ?? start.--sinceis set — with no timestamp they cannot be ordered against the bound (a watcher would otherwise re-emit them every poll). With--sinceomitted, behavior is unchanged.{ conversationId, transcript, note }); the appliedsinceis echoed back only when supplied.sinceis added to the tool inputSchema and the tool snapshot.Tests
transcript --sincefilters out older utterances, keeps the boundary and newer ones, honors thestartfallback, and excludes null-timestamp utterances.--sinceleaves the transcript unfiltered and omitssincefrom the response.bun run typecheck,bun run build, andbun testall pass locally (300 tests, 0 fail).