memos/docs/issues/2026-03-31-quick-voice-input/execution.md

2.2 KiB

Execution Log

T1: Add recorder state and browser capture hook

Status: Completed Files Changed:

  • web/src/components/MemoEditor/hooks/useVoiceRecorder.ts
  • web/src/components/MemoEditor/hooks/index.ts
  • web/src/components/MemoEditor/state/types.ts
  • web/src/components/MemoEditor/state/actions.ts
  • web/src/components/MemoEditor/state/reducer.ts
  • web/src/components/MemoEditor/services/memoService.ts Validation: cd web && pnpm lint — PASS Path Corrections: Added web/src/components/MemoEditor/services/memoService.ts after plan update because memoService.fromMemo() also constructs EditorState. Deviations: None after the approved plan correction.

Implemented a dedicated voiceRecorder editor state slice, reducer/actions for recorder lifecycle updates, a browser MediaRecorder hook that produces a LocalFile preview, and the matching fromMemo() defaults needed to keep the editor state shape valid for existing memo edit flows.

T2: Add composer recorder UI and draft audio handling

Status: Completed Files Changed:

  • web/src/components/MemoEditor/components/VoiceRecorderPanel.tsx
  • web/src/components/MemoEditor/components/EditorToolbar.tsx
  • web/src/components/MemoEditor/components/index.ts
  • web/src/components/MemoEditor/index.tsx
  • web/src/components/MemoEditor/types/components.ts
  • web/src/components/MemoEditor/types/attachment.ts
  • web/src/components/MemoMetadata/Attachment/AttachmentListEditor.tsx
  • web/src/components/MemoEditor/services/validationService.ts
  • web/src/locales/en.json Validation: cd web && pnpm lint — PASS Path Corrections: None Deviations: None

Added a Voice note action to the editor tool dropdown, wired the memo editor to start recording and render an inline recorder/review panel, let users keep a completed clip as a normal draft LocalFile, rendered local audio drafts with playable controls in the attachment editor, and blocked save only while permission is pending or recording is live.

Completion Declaration

Execution completed successfully — the frontend memo composer now has a tool-dropdown voice recorder entrypoint that creates draft audio files through the existing attachment flow, with no backend or transcription changes.