Skip to content

feat(meetings): add context export, source actions, and activity metrics - #841

Merged
wesm merged 4 commits into
kenn-io:mainfrom
salmonumbrella:feat/meeting-intelligence
Sep 24, 2026
Merged

wesm merged 4 commits into
kenn-io:mainfrom
salmonumbrella:feat/meeting-intelligence

Conversation

@salmonumbrella

@salmonumbrella salmonumbrella commented Sep 12, 2026 •

Copy link
Copy Markdown
Contributor

What changed

  • Export selected meetings as bounded JSON or Markdown context, with archive citations, coverage, and optional transcripts.
  • Query source-reported action items and meeting activity across Granola, Circleback, Notion, and generic imports. Keep original action status and distinguish unknown durations from zero.
  • Add context export to Web selection and meeting activity to person, domain, Directory, and Relationships views, with links back to archived evidence.
  • Expose the same operations through HTTP, the daemon-backed CLI, and read-only MCP tools. Backfill existing SQLite and PostgreSQL archives without a provider resync.

Why

Meeting notes are already searchable, but using them as agent context still requires parsing provider-specific bodies. Follow-ups and time spent with a person are harder to query across sources. These operations make the archived evidence reusable while keeping source status and missing information visible.

Usage

In the Web UI, select meetings and choose Export meeting context. Meeting panels show activity and recorded follow-ups for the current scope.

msgvault meetings context --id 12 --id 34 --format markdown --output context.md
msgvault meetings actions --person-id 5 --status pending --json
msgvault meetings metrics --domain example.com --after 2026-01-01 --json

Add --include-transcript when exporting full transcript evidence. Action status describes the latest archived source snapshot.

Web UI (synthetic meeting data)

Meeting activity with known and unknown duration coverage:

Meeting activity and duration coverage

Archived action evidence, transcript, and JSON/Markdown context export:

Archived meeting reader with action evidence and context export

Closes #840

@salmonumbrella
salmonumbrella marked this pull request as ready for review September 12, 2026 20:08
@roborev-ci

roborev-ci Bot commented Sep 12, 2026

Copy link
Copy Markdown

roborev: Combined Review (5b5ae66)

Verdict: No findings at or above medium severity.


Reviewers: 2 done | Synthesis: codex, 7s | Total: 37m9s

@salmonumbrella
salmonumbrella force-pushed the feat/meeting-intelligence branch 2 times, most recently from 3e1e6ad to 3a462ab Compare September 12, 2026 21:17
@roborev-ci

roborev-ci Bot commented Sep 12, 2026

Copy link
Copy Markdown

roborev: Combined Review (3a462ab)

Verdict: Changes require fixes for 1 finding.

Medium

  • internal/meetingimport/models.go:212-215: Because encoding/json decodes explicit null into the same nil pointer as omission, normalizeActions accepts action_items: null. BuildSnapshot then omits the field, silently treating invalid input as unsupported instead of rejecting it. Preserve field presence during decoding and return a validation error whenever action_items is present with a JSON null value.

    Reported by: codex


Reviewers: 2 done | Synthesis: codex, 10s | Total: 40m19s

@salmonumbrella

Copy link
Copy Markdown
Contributor Author

@wesm ready

@salmonumbrella
salmonumbrella force-pushed the feat/meeting-intelligence branch 2 times, most recently from 0347ac0 to 5844edb Compare September 17, 2026 09:48
@roborev-ci

roborev-ci Bot commented Sep 17, 2026

Copy link
Copy Markdown

roborev: Combined Review (5844edb)

Verdict: Changes require fixes for 1 finding.

Medium

  • cmd/msgvault/cmd/meetings.go:22; cmd/msgvault/cmd/mcp.go:121: Meeting commands and MCP tools are enabled for daemon schema 2.25.0, but the meeting routes were introduced in schema 2.27.0. Against a 2.25/2.26 daemon, the client advertises or attempts unsupported endpoints and reports a misleading upgrade requirement. Set meetingsMinAPISchemaVersion to 2.27.0 and update gating tests to ensure schemas below 2.27.0 disable meeting capabilities.

    Reported by: codex


Reviewers: 2 done | Synthesis: codex, 6s | Total: 20m54s

@salmonumbrella
salmonumbrella force-pushed the feat/meeting-intelligence branch from 5844edb to 4fb9fc2 Compare September 17, 2026 10:05
@roborev-ci

roborev-ci Bot commented Sep 17, 2026

Copy link
Copy Markdown

roborev: Combined Review (4fb9fc2)

Verdict: Changes require fixes for 1 finding.

Medium

  • cmd/msgvault/cmd/meetings.go:23: The CLI and MCP use a minimum meeting API schema of 2.25.0, although meeting endpoints were introduced in API schema 2.27.0. Daemons on 2.25 or 2.26 pass capability checks while lacking the routes, causing MCP to advertise unavailable tools. Set the minimum schema gate to 2.27.0 and update related tests and error messages so CLI and MCP fail closed.

    Reported by: codex


Reviewers: 2 done | Synthesis: codex, 6s | Total: 29m47s

@salmonumbrella
salmonumbrella force-pushed the feat/meeting-intelligence branch from 4fb9fc2 to b75bef4 Compare September 17, 2026 10:23
@roborev-ci

roborev-ci Bot commented Sep 17, 2026

Copy link
Copy Markdown

roborev: Combined Review (b75bef4)

Verdict: Changes require fixes for 1 finding.

Medium

  • cmd/msgvault/cmd/meetings.go:23: The new meeting routes require API schema 2.27.0, but the CLI and MCP capability gate still requires only 2.25.0. With a 2.25 or 2.26 daemon, meeting commands and MCP tools are exposed even though their routes are unavailable, causing failures and an incorrect upgrade message. Raise meetingsMinAPISchemaVersion to 2.27.0 and update the related CLI and MCP tests and messages.

    Reported by: codex


Reviewers: 2 done | Synthesis: codex, 5s | Total: 23m47s

@salmonumbrella
salmonumbrella force-pushed the feat/meeting-intelligence branch from b75bef4 to 18f6155 Compare September 17, 2026 10:47
@roborev-ci

roborev-ci Bot commented Sep 17, 2026

Copy link
Copy Markdown

roborev: Combined Review (18f6155)

Verdict: Changes require fixes for 1 finding.

Medium

  • cmd/msgvault/cmd/meetings.go:23; cmd/msgvault/cmd/mcp.go:121: The CLI and daemon-backed MCP meeting capability gate is set to API schema 2.25.0, but meeting endpoints were introduced in schema 2.27.0. Daemons reporting 2.25.x or 2.26.x can pass the gate despite lacking the routes, causing misleading failures and unusable MCP tools. Set meetingsMinAPISchemaVersion to 2.27.0 and update related compatibility tests and error-text expectations.

    Reported by: codex


Reviewers: 2 done | Synthesis: codex, 5s | Total: 15m53s

@salmonumbrella
salmonumbrella force-pushed the feat/meeting-intelligence branch from 18f6155 to 02672c1 Compare September 17, 2026 11:03
@roborev-ci

roborev-ci Bot commented Sep 17, 2026

Copy link
Copy Markdown

roborev: Combined Review (02672c1)

Verdict: No findings at or above medium severity.


Reviewers: 2 done | Synthesis: codex | Total: 37m13s

wesm pushed a commit that referenced this pull request Sep 21, 2026
Install `libsqlite3-dev` in the `frontend` and `web-e2e` Playwright containers so their daemon builds can compile the default `sqlite_vec` dependency. Both jobs currently fail with `sqlite3.h: No such file or directory` before the browser tests run.

The PR dispatcher loads this reusable workflow from `main`, so the dependency must land separately before it can unblock the browser checks on #841. The change adds the package to the two existing apt install lists.

Refs #841


Co-authored-by: Rusty Shackleford <salmonumbrella@users.noreply.github.com>
@salmonumbrella

Copy link
Copy Markdown
Contributor Author

@wesm ready

@wesm

wesm commented Sep 23, 2026

Copy link
Copy Markdown
Member

cool looking

@wesm wesm self-assigned this Sep 23, 2026
@wesm
wesm force-pushed the feat/meeting-intelligence branch 2 times, most recently from f5b6835 to 42fe074 Compare September 23, 2026 12:40
@roborev-ci

roborev-ci Bot commented Sep 23, 2026

Copy link
Copy Markdown

roborev: Combined Review (42fe074)

Verdict: Changes require fixes for 1 finding.

Medium

  • internal/api/meetings.go:179-195: The Explore context handler resolves a scope containing the deletion filter, then discards that scope and passes only message IDs to the context store. The store path does not recheck deleted_from_source_at, so exports may include meetings whose current source-deletion state no longer matches the request. Carry the resolved deletion scope into the context read and revalidate it against the current snapshot, returning a scope-changed error when selected meetings no longer satisfy the requested state.

    Reported by: codex


Reviewers: 2 done | Synthesis: codex, 6s | Total: 26m6s

@roborev-ci

roborev-ci Bot commented Sep 23, 2026

Copy link
Copy Markdown

roborev: Combined Review (8a21c60)

Verdict: No findings at or above medium severity.


Reviewers: 2 done | Synthesis: codex, 6s | Total: 24m55s

salmonumbrella and others added 2 commits September 23, 2026 12:09
Explore selections use a committed cache that can lag behind source sync.
Passing only the selected IDs dropped the deletion filter and let exports
include meetings that no longer matched an active-only or deleted-only view.

Keep the resolved scope through the API and validate source deletion in the
same Store snapshot that loads the context. Return meeting_scope_changed
when a selected meeting has left the requested state. Direct-ID and
unfiltered exports continue to include retained source-deleted evidence.

Generated with Codex
Co-authored-by: Codex <noreply@openai.com>
@wesm
wesm force-pushed the feat/meeting-intelligence branch from 8a21c60 to 6cd1def Compare September 23, 2026 17:10
wesm and others added 2 commits September 23, 2026 12:17
Reuse the meeting API fixtures when checking person selection and browser
Back navigation. The relationship workspace now loads meeting activity,
and the generic Explore fallback has the wrong response shape.

Generated with Codex
Co-authored-by: Codex <noreply@openai.com>
Opening an action link in the existing reader reloads meeting authority
before committing navigation. Wait for the new browser history entry;
the already-visible dialog does not prove that the reload has finished.

Generated with Codex
Co-authored-by: Codex <noreply@openai.com>
@roborev-ci

roborev-ci Bot commented Sep 23, 2026

Copy link
Copy Markdown

roborev: Combined Review (8d283b4)

Verdict: No findings at or above medium severity.


Reviewers: 2 done | Synthesis: codex, 5s | Total: 29m52s

@wesm
wesm merged commit 61b7fa5 into kenn-io:main Sep 24, 2026
25 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

Make archived meeting context, follow-ups, and activity queryable across sources

2 participants