v0.28.0 — Slack audio transcription → summary → planning
Slack audio transcription → summary → planning
Why
Let meeting recordings and live audio clips flow through the gateway: upload or record audio in Slack → transcribe → auto-summary with a proactive next-step → continue planning / requirement-clarification in-thread with the uploader.
Added
- Audio pipeline (
packages/cli/src/gateway/audio/) — a detached coordinator (mirrors the:cr:ReviewCoordinator pattern):categoryForroutes audio →claimAudio→🎧 轉錄中…ack → stream-to-temp → ffmpeg probe → too-long gate → quota gate (actual minutes, before any API cost) → OpenAI transcription (ffmpeg re-encode to 16 kHz mono + byte-budget chunking for the 25MB limit) → raw transcript stored as thread context → signal-proportionate summary (short clip vs full PM-structuredlongmode) → posted in-thread. - Config (
audioblock) — dark-launchable (enabled:falsedefault) + first-use consent; OpenAI key via{env}/{cmd}SecretSource (never stored in config);maxDurationSec(2 hr cap); per-user / global daily quota. - Resilience — abort + drain on shutdown (in-flight jobs post a
retrynotice), claim self-heal, secret redaction, prompt-injection framing,retryre-run from the thread.
Fixed
- Audio classification by filename extension (#66) — a voice-memo
.m4aarrived with sparse Slack metadata andcategoryFor(mimetype/filetype only) returned "unsupported", so it never reached transcription. Added anAUDIO_EXTENSIONSfallback on the file name.
Verified
- Live end-to-end: an 8-second clip → transcript → short summary (
audio.transcribed+audio.summarizedevents).
Tests
@pmk/cli: 840 tests, 100% pass.
PRs: #64 (feature), #65 (follow-ups), #66 (extension classification).