Repository navigation
feat(control-ui): browse meeting notes and manage capture sources - #140084
Conversation
Add a paginated Meetings library with stored notes, full-transcript search, complete Markdown/JSONL downloads, and accessible mobile navigation. Keep capture configuration in native Communications controls using the shared provider metadata and Gateway configuration flow. Separate route state, rendering, and capture editing from request ownership. Fence asynchronous reads and exports to the active connection and selection, clear denied content, preserve drafts, and keep feature copy lazy-loaded. Retain existing capture IDs and reopening behavior. Validation: focused UI/catalog tests, changed-code checks, UI build and unchanged performance budgets, independent review, and isolated real Gateway/SQLite/Chromium proof with complete native downloads. Refs: #130860
|
🦞👀 Pull request received. I will update this pull request when review starts. ClawSweeper review in progressClawSweeper is reviewing this revision. This supersedes any previous blocked status. |
|
Codex review: blocked before merge. Reviewed September 6, 2026, 8:39 AM ET / 12:39 UTC. ClawSweeper reviewWhat this changesAdds searchable meeting archives, paginated transcript reading, downloads, and capture-source controls through the existing Communications settings flow. Merge readiness⛔ Blocked before merge - 2 items remain The previous summary-compatibility blocker is resolved, and no new blocking defect was found. This distinct UI work remains absent from current main and carries protected maintainer ownership. Priority: P2 Review scores
Verification
How this fits togetherMeeting plugins save transcripts in the Gateway’s shared SQLite archive. The Control UI reads that archive through existing Gateway APIs and sends capture-setting edits through the shared Settings coordinator. flowchart LR
A[Meeting plugins] --> B[SQLite transcript archive]
B --> C[Authorized Gateway reads]
C --> D[Meetings library and reader]
D --> E[Markdown and JSONL downloads]
F[Capture source editor] --> G[Settings validation and saving]
G --> A
Before merge
Agent review detailsSecurityNone. PR surfaceSource +1756, Tests +2629, Docs +120, Generated 0, Other +3. Total +4508 across 39 files. View PR surface stats
Review metrics
Merge-risk optionsMaintainer options:
Technical reviewBest possible solution: Keep the unified archive reader and existing Settings write path, preserving saved-note access, source identities, and current authorization boundaries. Do we have a high-confidence way to reproduce the issue? Not applicable to the feature request. The prior large-summary defect has a source-backed regression fixture, but this read-only review did not execute tests. Is this the best way to solve the issue? Yes: the UI reuses the merged archive APIs and shared Settings coordinator, and the revised summary request preserves the established read contract. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning medium; reviewed against 0a753eb92f6f. LabelsLabel justifications:
EvidenceWhat I checked:
Likely related people:
Rating scale
Overall follows the weaker of proof and patch quality. Workflow
HistoryReview history (1 earlier review cycle)
|
Load saved summaries through their existing selector-only read contract, independently of bounded speech pages. Keep valid notes and exports available when a paged read exceeds its limit, with shared access revocation and stale response fencing across both requests. Cover the oversized-summary regression, both read lifecycles, and browser reload request contracts. Align the Communications E2E subtitle with the existing meeting-capture settings copy. Validation: 32 reader cases, 11 browser E2E cases, 3 Chromium layout cases, UI types, changed-code checks, and independent P0-P2 review. Refs: #130860, #140084
|
Merged via squash.
|
…enclaw#140084) * feat(control-ui): browse meeting notes and manage capture sources Add a paginated Meetings library with stored notes, full-transcript search, complete Markdown/JSONL downloads, and accessible mobile navigation. Keep capture configuration in native Communications controls using the shared provider metadata and Gateway configuration flow. Separate route state, rendering, and capture editing from request ownership. Fence asynchronous reads and exports to the active connection and selection, clear denied content, preserve drafts, and keep feature copy lazy-loaded. Retain existing capture IDs and reopening behavior. Validation: focused UI/catalog tests, changed-code checks, UI build and unchanged performance budgets, independent review, and isolated real Gateway/SQLite/Chromium proof with complete native downloads. Refs: openclaw#130860 * fix(control-ui): keep large saved meeting notes readable Load saved summaries through their existing selector-only read contract, independently of bounded speech pages. Keep valid notes and exports available when a paged read exceeds its limit, with shared access revocation and stale response fencing across both requests. Cover the oversized-summary regression, both read lifecycles, and browser reload request contracts. Align the Communications E2E subtitle with the existing meeting-capture settings copy. Validation: 32 reader cases, 11 browser E2E cases, 3 Chromium layout cases, UI types, changed-code checks, and independent P0-P2 review. Refs: openclaw#130860, openclaw#140084
Related: #130860
Builds on the merged archive APIs in #139875; the capture and Discord ownership repairs are already merged in #139484, #139572, and #139658.
What Problem This Solves
Meeting transcripts need a reader that can find saved meetings and search speech beyond the currently loaded page, with capture settings available from the same workflow.
Why This Change Was Made
The existing Meetings route becomes a paginated archive and summary-first reader. It uses the shared transcript APIs for filtering, full-text search, and complete downloads. Meeting capture has native source controls under Communications settings, with observed Gateway state shown separately from unsaved configuration.
Saved summaries load through their existing read contract independently of paged speech. A transcript page that exceeds its transfer limit does not hide readable notes or available downloads.
Capture controls edit existing settings without introducing configuration keys or changing defaults. The UI retains the existing ID and reopening behavior. Title-only source edits apply to future captures through the normal configuration flow; the current capture and saved notes retain their identity. Feature copy and reader code remain lazy-loaded.
User Impact
Operators can find meetings by title, source, account, agent, and date; read stored notes or speech; and download complete Markdown or JSONL even while a search is active. Capture sources can be added, edited, and removed through native controls. Existing links redirect into the same workflow, and mobile navigation returns to the library.
Evidence
The browser proof ran in the isolated Gateway workflow. The archive parent separately received real Gateway compatibility, date, and configuration proof and relocated capture E2E execution. The original browser run is bound to its recorded revision. Capture-editor sources are unchanged; the final reader repair receives separate large-summary Gateway proof and fresh branch CI. No external Discord room or operator Gateway was used for these browser checks.
The dedicated large-summary Gateway proof passed with all 58 frozen UI/runtime source hashes verified against the c8f candidate. The 2,623,030-byte summary response remained readable while paged speech correctly rejected its 1 MiB limit; the 1,311,399-byte native Markdown download matched its RPC payload and preserved all 1,311,214 bytes of canonical notes. Ordinary 50+10-row paging passed. The existing bounded Markdown preview is unchanged. Build and default-enforced budgets passed (343,761 B startup JS; 43,989 B CSS), and the lease is independently completed.
Current head:
c8f0ee40a540d6af7eef508590735ecbede0f647. Exact-head CI passed on this revision. The attached before/after views and capture-settings view contain synthetic data only.