Skip to content

feat(search): a search all meeting hit names its cue and speaker - #2329

Merged
leemour merged 1 commit into
mainfrom
feat/search-hit-place
Nov 1, 2026
Merged

leemour merged 1 commit into
mainfrom
feat/search-hit-place

Conversation

@leemour

@leemour leemour commented Nov 1, 2026

Copy link
Copy Markdown
Collaborator

Task

WireCat Desktop's Search page cannot open a meeting hit from search all: the hit is meeting:<account>/<meeting> with offset_ms, meetings passage refuses that ref, and the hit has no speaker (plan item 4, "Gaps in the CLIs").

What

  • A transcript hit in search all gains cue_ref (meeting:<account>/<meeting>/<transcript>/<cue>) and sender_name. meetings passage <cue_ref> --before-n 3 --after-n 3 --json opens it. Additive: ref stays the meeting; chat and summary hits are unchanged.
  • sender_name joins the meeting hit's untrusted list (speaker names come from the provider).
  • Store: the legacy meetings.search (sqlite and memory) returns the cue as SearchHit.ref plus speakerName; the store contract asserts both. MeetingSearchItem gets cueRef and speakerName.
  • hit entity schema, REFERENCE.md, changelog.

Testing

  • New: search all over a real temp store → cueRef → readMeetingPassage returns the cue with one line each side.
  • Untrusted-hit test covers cue_ref and an escaped sender_name.
  • Full suite locally: 2 unrelated tests (notes meaning filters, search history) timed out under load and pass alone. typecheck, lint, docs:check pass.

🤖 Generated with Claude Code

`search all` named a meeting hit only by `meeting:<account>/<meeting>` with
`offset_ms`, which `meetings passage` refuses, and gave no speaker. A
transcript hit now also carries `cue_ref` (the matched cue, which `meetings
passage` opens) and `sender_name` (marked untrusted). `ref` stays the
meeting, so evidence that cites it is unchanged.

The legacy meetings store search (sqlite and the memory reference store)
returns the cue as `SearchHit.ref` and `speakerName`; the store contract
checks both.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@leemour
leemour force-pushed the feat/search-hit-place branch from 692c1d8 to dcc3b8d Compare November 1, 2026 20:14
@leemour
leemour merged commit 00bb624 into main Nov 1, 2026
32 checks passed
leemour added a commit to WireCatLabs/zoom-cli that referenced this pull request Nov 1, 2026
## Task
WireCat Desktop's Search page cannot open a meeting hit: `search all`
hits are `meeting:<account>/<meeting>` with `offset_ms`, `meetings
passage` refuses that ref, and there is no speaker.

## What
- cli-core 0.533.0 (WireCatLabs/cli-core#2329) adds to each transcript
hit of `search all`:
- `cue_ref`: `meeting:<account>/<meeting>/<transcript>/<cue>`, which
`meetings passage` accepts;
  - `sender_name`: the cue's speaker (listed in `untrusted`).
  `ref` stays the meeting; chat and summary hits get neither. Additive.
- Open the place: `zm personal meetings passage <cue_ref> --before-n 3
--after-n 3 --json`.
- Bumps `@wirecat/cli-core` 0.507.0 → 0.533.0 and `@wirecat/cli-base`
0.68.1 → 0.71.0 (cli-core 0.529.0+ needs 0.71). No zm code change was
needed.
- `docs/usage.md`, regenerated `docs/commands.md`, changelog.

## Testing
- New test in `src/meeting-passage.test.ts`: `search all agreed --json`
→ hit has `cue_ref` and `sender_name` → `meetings passage <cue_ref>
--before-n 3 --after-n 3 --json` returns the cue, offline, no network.
- `pnpm test` (686 passed), `ci:quick`, `lint`, `docs:check`,
`test:matrix:check` pass locally.

Not released — the owner decides.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant