Conversation
- Capture microphone and system audio as separate tracks, transcribe both, and merge them into a chronological speaker-labeled transcript. - Add call controls to the menu bar, persist mixed recordings, link recordings from transcription history, and coordinate call transcription with existing dictation and ASR resources.
|
This PR has been closed because it still does not follow the required PR template after the 48-hour correction window. Please open a new PR with the required description, related issue or accepted Discussion, testing notes, and screenshot/video evidence when applicable. |
Greptile SummaryAdds an MVP for recording and transcribing calls while preserving the existing dictation and file-transcription workflows.
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: f9420b29f6
ℹ️ 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".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 4541a7955d
ℹ️ 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".
| while self.isTranscribing, self.captureSession == nil { | ||
| await self.waitForPipelineActivity() |
There was a problem hiding this comment.
Cancel post-call transcription during termination
When the user quits while post-call ASR is running, this loop waits for the entire transcription pipeline, but AppDelegate.shutdownASRRuntimeForTermination() stops waiting after eight seconds. Long calls routinely exceed that deadline, so the process exits before the pipeline's deferred cleanup and history write run, potentially leaving raw temporary tracks and a saved M4A with no history entry. Cancel the active pipeline and await bounded artifact cleanup rather than waiting for transcription to finish.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Not sure how to fix this better ,@altic-dev what u say?
63e8919 to
4541a79
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 63e89197f9
ℹ️ 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".
a2d8770 to
5525a73
Compare
|
Want your agent to iterate on Greptile's feedback? Start a greploop in Codex and it will work through the open comments and keep going until this PR reviews clean. |
5525a73 to
33c8d82
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 33c8d82c5d
ℹ️ 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".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: f3f5399733
ℹ️ 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".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: b9571baf5f
ℹ️ 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".
| guard missingSeconds <= Self.maximumInsertedSilenceSeconds else { | ||
| throw CallTranscriptionError.audioWriterFailed( | ||
| "Captured audio was interrupted during the call." | ||
| ) |
There was a problem hiding this comment.
Preserve the healthy track after a source interruption
When either capture source has a callback gap longer than one second—for example, during a transient Bluetooth or system-audio stall—this throw is stored by the writer, so CallCaptureSession.stop() later aborts while finishing the tracks and deletes the entire recording directory, including the unaffected track. Fresh evidence after the earlier discontinuity report is that the final version now converts the gap into a fatal whole-session error rather than merely compressing the timeline. Treat the interrupted source as unavailable while retaining the healthy source, which the downstream partial-track transcription path already supports.
Useful? React with 👍 / 👎.
Description
Adds call recording and transcription to FluidVoice.
Captures system audio and microphone audio separately, transcribes both, identifies microphone speech as
You, diarizes other participants, and combines everything into a chronological speaker-labeled transcript.Dictation stays available while a call is being recorded, but:
Limitations:
Extras:
Type of Change
Related Issue or Discussion
@altic-dev I intentionally didn't change too much, to avoid bloated PR.
I saw more general #796, but this one is simple version and can be delivered early :)
Testing
swiftlint --strict --config .swiftlint.yml Sources Tests Package.swiftswiftformat --config .swiftformat SourcesAudioCaptureCoordinatorTests,CallTranscriptAssemblerTestsif neededScreenshots / Video
Call controls and recording state in the menu bar
Call transcript history and access to the saved recording
Errors handled
Notes