Skip to content

feat(vc): refine meeting-events output and reaction forwarding#1674

Merged
Ren1104 merged 22 commits into
mainfrom
features/F-vc-bot-meeting-activity-contract
Jul 8, 2026
Merged

feat(vc): refine meeting-events output and reaction forwarding#1674
Ren1104 merged 22 commits into
mainfrom
features/F-vc-bot-meeting-activity-contract

Conversation

@Ren1104

@Ren1104 Ren1104 commented Jun 30, 2026

Copy link
Copy Markdown
Collaborator

Summary

This PR refines the vc +meeting-events output contract and updates the VC agent guidance for forwarding meeting chat/reactions to IM.

Changes include:

  • shape vc +meeting-events output around stable top-level meeting, identity, events, warnings, has_more, and page_token fields
  • expose each meeting event with event_id, event_type, event_time, normalized actors, and event-specific payload for participant, chat/reaction, transcript, and magic-share events
  • keep pretty output optimized for human-readable timelines while keeping JSON/NDJSON suitable for structured agent consumption
  • infer ended meeting status from participant-left events when leave_reason indicates the meeting ended
  • update lark-vc-agent guidance so agents use JSON events for IM forwarding and only emit Feishu post emotion nodes for reaction keys supported by the IM reaction whitelist, falling back unknown reaction keys to text

Validation

  • go test ./cmd ./shortcuts/vc
  • git diff --check
  • gofmt -l cmd/root_integration_test.go shortcuts/vc/vc_meeting_events.go shortcuts/vc/vc_meeting_events_test.go

@coderabbitai

coderabbitai Bot commented Jun 30, 2026

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adds bot VC event handling and registration, refactors +meeting-events to emit typed meeting/identity/roster/event output, and updates VC skill documentation and command examples for bot and user identity flows.

Changes

Bot-observed VC EventKeys

Layer / File(s) Summary
Bot event output and processing logic
events/vc/bot_events.go
Adds VCBotEventOutput, envelope and payload decoding, and handlers for invited, activity, and ended bot events with passthrough on malformed payloads.
Bot EventKey registration
events/vc/register.go
Adds internal bot meeting event type constants and three Keys() entries using the bot schema, bot auth type, and required console events.
Bot event tests
events/vc/bot_events_test.go
Adds tests verifying registration properties, stable field extraction, and malformed-payload passthrough behavior.

meeting-events shortcut identity/roster rework

Layer / File(s) Summary
Output contract and Execute flow
shortcuts/vc/vc_meeting_events.go
Updates imports, the shortcut description, and Execute to build the typed output contract and render it in json, ndjson, and pretty formats.
Timeline and event shaping
shortcuts/vc/vc_meeting_events.go
Removes group-based ordering from timeline entries, updates per-event builders to the new sequence-only flow, and simplifies event type detection to the top-level event_type field.
meeting-events tests
shortcuts/vc/vc_meeting_events_test.go
Adds bot identity and roster stubs and updates CLI/output assertions for JSON, NDJSON, pretty rendering, pruning, and participant identity mapping.
VC event and agent skill documentation
skills/lark-event/SKILL.md, skills/lark-event/references/lark-event-vc.md, skills/lark-vc-agent/SKILL.md, skills/lark-vc-agent/references/*
Updates skill docs for bot-observed VC events, the +meeting-events output contract, identity rules, forwarding guidance, and example flows.

Estimated code review effort: 4 (Complex) | ~60 minutes

Sequence Diagram(s)

sequenceDiagram
  participant EventBus
  participant processVCBotEvent
  participant fillBotEventOutput
  EventBus->>processVCBotEvent: raw.Payload
  processVCBotEvent->>processVCBotEvent: decode envelope
  alt decode fails
    processVCBotEvent-->>EventBus: return raw.Payload unchanged
  else decode succeeds
    processVCBotEvent->>fillBotEventOutput: envelope, event type
    fillBotEventOutput->>fillBotEventOutput: decode payload and trim fields
    fillBotEventOutput-->>processVCBotEvent: populated VCBotEventOutput
    processVCBotEvent-->>EventBus: marshaled JSON output
  end
Loading
sequenceDiagram
  participant CLI
  participant Execute
  participant Core
  participant RosterAPI
  participant TimelineBuilder
  CLI->>Execute: run +meeting-events
  Execute->>Core: resolve identity
  Execute->>RosterAPI: fetch current roster
  RosterAPI-->>Execute: roster or warning
  Execute->>TimelineBuilder: build typed output
  TimelineBuilder-->>Execute: events and metadata rows
  Execute-->>CLI: json, ndjson, or pretty output
Loading

Possibly related PRs

  • larksuite/cli#1113: Also extends events/vc/register.go with additional VC EventKey registrations.

Suggested labels: feature

Suggested reviewers: zhangjun-bytedance, zhaoleibd

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 2.47% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed The title is concise and accurately reflects the main VC meeting-events output and reaction-forwarding changes.
Description check ✅ Passed The description covers the summary and validation, but it omits the template’s explicit Changes and Related Issues sections.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch features/F-vc-bot-meeting-activity-contract

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions github-actions Bot added domain/vc PR touches the vc domain size/L Large or sensitive change across domains or core paths labels Jun 30, 2026
@codecov

codecov Bot commented Jun 30, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 76.50794% with 74 lines in your changes missing coverage. Please review.
✅ Project coverage is 74.42%. Comparing base (1a9f637) to head (b584df9).
⚠️ Report is 1 commits behind head on main.

Files with missing lines Patch % Lines
shortcuts/vc/vc_meeting_events.go 76.50% 59 Missing and 15 partials ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #1674      +/-   ##
==========================================
+ Coverage   74.39%   74.42%   +0.02%     
==========================================
  Files         860      860              
  Lines       89481    89754     +273     
==========================================
+ Hits        66571    66797     +226     
- Misses      17750    17779      +29     
- Partials     5160     5178      +18     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@Ren1104
Ren1104 force-pushed the features/F-vc-bot-meeting-activity-contract branch 10 times, most recently from 3d25d78 to e72bb64 Compare July 1, 2026 07:22
@Ren1104
Ren1104 marked this pull request as ready for review July 1, 2026 07:22
@github-actions

github-actions Bot commented Jul 1, 2026

Copy link
Copy Markdown

🚀 PR Preview Install Guide

🧰 CLI update

npm i -g https://pkg.pr.new/larksuite/cli/@larksuite/cli@b584df97bd5fd7ecf5a8fc533922a872cbc3e0df

🧩 Skill update

npx skills add larksuite/cli#features/F-vc-bot-meeting-activity-contract -y -g

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (6)
events/vc/bot_events.go (3)

116-138: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Duplicate unmarshal wrappers — candidate for a generic helper.

decodeBotMeetingInvitedEvent, decodeBotMeetingActivityEvent, and decodeBotMeetingEndedEvent differ only by the target type. A small generic helper would remove the repetition.

♻️ Suggested generic helper
-func decodeBotMeetingInvitedEvent(data json.RawMessage) (vcBotMeetingInvitedEvent, error) {
-	var payload vcBotMeetingInvitedEvent
-	if err := json.Unmarshal(data, &payload); err != nil {
-		return vcBotMeetingInvitedEvent{}, err
-	}
-	return payload, nil
-}
-
-func decodeBotMeetingActivityEvent(data json.RawMessage) (vcBotMeetingActivityEvent, error) {
-	var payload vcBotMeetingActivityEvent
-	if err := json.Unmarshal(data, &payload); err != nil {
-		return vcBotMeetingActivityEvent{}, err
-	}
-	return payload, nil
-}
-
-func decodeBotMeetingEndedEvent(data json.RawMessage) (vcBotMeetingEndedEvent, error) {
-	var payload vcBotMeetingEndedEvent
-	if err := json.Unmarshal(data, &payload); err != nil {
-		return vcBotMeetingEndedEvent{}, err
-	}
-	return payload, nil
-}
+func decodeBotEventPayload[T any](data json.RawMessage) (T, error) {
+	var payload T
+	err := json.Unmarshal(data, &payload)
+	return payload, err
+}

Call sites become decodeBotEventPayload[vcBotMeetingInvitedEvent](data), etc.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@events/vc/bot_events.go` around lines 116 - 138, The three
decodeBotMeeting*Event functions are duplicated json.Unmarshal wrappers that
only differ by target type. Replace them with a shared generic helper such as
decodeBotEventPayload[T] and update the existing decodeBotMeetingInvitedEvent,
decodeBotMeetingActivityEvent, and decodeBotMeetingEndedEvent call sites to use
it so the payload decoding logic lives in one place.

26-36: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Three wrapper functions are functionally identical.

processVCBotMeetingInvited, processVCBotMeetingEvent, and processVCBotMeetingEnded all just forward to processVCBotEvent(raw), which determines the effective event type from the payload itself (not from which wrapper was called). Consider collapsing these into a single shared adapter referenced three times in register.go, or add a short comment explaining why three distinct identifiers are kept (e.g., for registry introspection/testing).

♻️ Optional consolidation
-func processVCBotMeetingInvited(_ context.Context, _ event.APIClient, raw *event.RawEvent, _ map[string]string) (json.RawMessage, error) {
-	return processVCBotEvent(raw)
-}
-
-func processVCBotMeetingEvent(_ context.Context, _ event.APIClient, raw *event.RawEvent, _ map[string]string) (json.RawMessage, error) {
-	return processVCBotEvent(raw)
-}
-
-func processVCBotMeetingEnded(_ context.Context, _ event.APIClient, raw *event.RawEvent, _ map[string]string) (json.RawMessage, error) {
-	return processVCBotEvent(raw)
-}
+func processVCBotEventEnvelope(_ context.Context, _ event.APIClient, raw *event.RawEvent, _ map[string]string) (json.RawMessage, error) {
+	return processVCBotEvent(raw)
+}

Then reference processVCBotEventEnvelope for all three Process fields in register.go.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@events/vc/bot_events.go` around lines 26 - 36, The three wrapper functions in
bot_events.go are identical pass-throughs to processVCBotEvent, so consolidate
the duplication or document why separate identifiers are required. Update the
shared adapter approach by introducing a single wrapper like
processVCBotEventEnvelope and reference that same function from the three
Process registrations in register.go, or keep the three names only if there is a
clear registry/testing reason explained in a comment.

71-73: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Remove the no-op decoder.UseNumber() call.

It only changes decoding for interface{} targets; vcBotEventEnvelope uses typed fields and json.RawMessage, so this line has no effect.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@events/vc/bot_events.go` around lines 71 - 73, Remove the no-op
json.Decoder.UseNumber call in vcBotEventEnvelope decoding. The decoder in
bot_events.go is only used by the event parsing path around
decoder.Decode(&envelope), and since vcBotEventEnvelope contains typed fields
plus json.RawMessage, UseNumber has no effect here. Delete that call and keep
the decode flow otherwise unchanged.
events/vc/register.go (1)

21-23: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Constant name doesn't match its event/DisplayName ("activity").

eventTypeBotMeetingEvent backs "vc.bot.meeting_activity_v1" / DisplayName "Bot meeting activity", but the identifier reads as a generic "meeting event" rather than "meeting activity". eventTypeBotMeetingActivity would be clearer and match the pattern of the other two constants (...Invited, ...Ended).

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@events/vc/register.go` around lines 21 - 23, The constant name in the vc
register event types is inconsistent with its actual event and display name,
since eventTypeBotMeetingEvent represents the meeting activity event. Rename
eventTypeBotMeetingEvent to eventTypeBotMeetingActivity and update any
references in register.go or related registration logic so the identifier
matches the "vc.bot.meeting_activity_v1" / "Bot meeting activity" naming
pattern.
events/vc/bot_events_test.go (1)

235-277: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Minor test-coverage gap: only meeting_activity is tested for nested malformed payload.

TestProcessVCBotMeetingEvent_MalformedActivityPayloadKeepsRawEvent only covers the activity branch of fillBotEventOutput. Since decodeBotMeetingInvitedEvent/decodeBotMeetingEndedEvent share the same early-return-on-error pattern, an analogous case for invited/ended would round out coverage, though the shared code path already gives reasonable confidence.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@events/vc/bot_events_test.go` around lines 235 - 277, Add a companion test
for the same malformed nested-payload behavior in the other `fillBotEventOutput`
branches, not just
`TestProcessVCBotMeetingEvent_MalformedActivityPayloadKeepsRawEvent`. Create a
case that exercises `decodeBotMeetingInvitedEvent` or
`decodeBotMeetingEndedEvent` with invalid
`meeting_invited_items`/`meeting_ended_items`, and assert the stable fields stay
empty while `RawEvent` is preserved, mirroring `runBotEventProcess` and the
existing malformed activity test.
shortcuts/vc/vc_meeting_events.go (1)

158-165: 🗄️ Data Integrity & Integration | 🔵 Trivial | 🏗️ Heavy lift

role field is overloaded with two different meanings across identity vs current_roster/actors.

For the top-level identity object, Role is a static auth-mode tag ("user"/"bot"), but for current_roster[]/event actors[] (built via meetingEventsIdentityFromParticipant), the same JSON field role carries meeting-role semantics ("host"/"co_host"/"participant"/"bot"). A consuming agent inspecting role generically (e.g., to find the meeting host) could be confused when the same person's self-entry shows role:"user" at the top level but role:"host" inside current_roster. Consider distinguishing these (e.g., auth_role for the top-level identity, or deriving the real meeting role for identity too by cross-referencing the fetched roster) before this contract is more widely consumed by agents.

Also applies to: 337-361

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@shortcuts/vc/vc_meeting_events.go` around lines 158 - 165, The meeting
identity payload is using the same role field for two different meanings, which
can confuse consumers across meetingEventsIdentity and
meetingEventsIdentityFromParticipant. Update the top-level identity contract to
use a distinct auth-specific field (for example via meetingEventsIdentity) or
otherwise derive the actual meeting role consistently from the roster so
identity, current_roster, and actors do not conflict. Make sure the JSON shape
and any builder logic in meetingEventsIdentityFromParticipant align with the
chosen naming/semantics.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@shortcuts/vc/vc_meeting_events.go`:
- Around line 188-199: The meeting snapshot in `meetingEventsCurrentRoster`
handling is being taken from the first event only, which can leave
`output.Meeting` with stale `status` and `end_time`. Update the loop in
`vc_meeting_events.go` so the meeting snapshot is derived from the latest
available event payload rather than only when `output.Meeting.ID` is empty, and
make sure `meetingEventsMeetingFromPayload` still runs when needed so the
empty-events case produces the expected default meeting state. Keep
`output.Events` behavior unchanged while ensuring `output.Meeting` reflects the
newest snapshot.

In `@skills/lark-vc-agent/references/lark-vc-agent-meeting-events.md`:
- Around line 287-289: The `20001 meeting_status_MEETING_END` guidance uses the
wrong shortcut name for fetching meeting artifacts; it should match the rest of
this skill and `lark-vc-agent/SKILL.md`. Update the `lark-cli vc +notes
--meeting-ids <meeting.id>` reference in this row to the same shortcut used
elsewhere (`+detail`), and keep the rest of the branching logic on
`note_display_type`, `note_id`, and `minute_token` unchanged.

---

Nitpick comments:
In `@events/vc/bot_events_test.go`:
- Around line 235-277: Add a companion test for the same malformed
nested-payload behavior in the other `fillBotEventOutput` branches, not just
`TestProcessVCBotMeetingEvent_MalformedActivityPayloadKeepsRawEvent`. Create a
case that exercises `decodeBotMeetingInvitedEvent` or
`decodeBotMeetingEndedEvent` with invalid
`meeting_invited_items`/`meeting_ended_items`, and assert the stable fields stay
empty while `RawEvent` is preserved, mirroring `runBotEventProcess` and the
existing malformed activity test.

In `@events/vc/bot_events.go`:
- Around line 116-138: The three decodeBotMeeting*Event functions are duplicated
json.Unmarshal wrappers that only differ by target type. Replace them with a
shared generic helper such as decodeBotEventPayload[T] and update the existing
decodeBotMeetingInvitedEvent, decodeBotMeetingActivityEvent, and
decodeBotMeetingEndedEvent call sites to use it so the payload decoding logic
lives in one place.
- Around line 26-36: The three wrapper functions in bot_events.go are identical
pass-throughs to processVCBotEvent, so consolidate the duplication or document
why separate identifiers are required. Update the shared adapter approach by
introducing a single wrapper like processVCBotEventEnvelope and reference that
same function from the three Process registrations in register.go, or keep the
three names only if there is a clear registry/testing reason explained in a
comment.
- Around line 71-73: Remove the no-op json.Decoder.UseNumber call in
vcBotEventEnvelope decoding. The decoder in bot_events.go is only used by the
event parsing path around decoder.Decode(&envelope), and since
vcBotEventEnvelope contains typed fields plus json.RawMessage, UseNumber has no
effect here. Delete that call and keep the decode flow otherwise unchanged.

In `@events/vc/register.go`:
- Around line 21-23: The constant name in the vc register event types is
inconsistent with its actual event and display name, since
eventTypeBotMeetingEvent represents the meeting activity event. Rename
eventTypeBotMeetingEvent to eventTypeBotMeetingActivity and update any
references in register.go or related registration logic so the identifier
matches the "vc.bot.meeting_activity_v1" / "Bot meeting activity" naming
pattern.

In `@shortcuts/vc/vc_meeting_events.go`:
- Around line 158-165: The meeting identity payload is using the same role field
for two different meanings, which can confuse consumers across
meetingEventsIdentity and meetingEventsIdentityFromParticipant. Update the
top-level identity contract to use a distinct auth-specific field (for example
via meetingEventsIdentity) or otherwise derive the actual meeting role
consistently from the roster so identity, current_roster, and actors do not
conflict. Make sure the JSON shape and any builder logic in
meetingEventsIdentityFromParticipant align with the chosen naming/semantics.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: de1ead99-be64-4d3c-b72d-1270e7592e16

📥 Commits

Reviewing files that changed from the base of the PR and between bdffffb and e72bb64.

📒 Files selected for processing (10)
  • events/vc/bot_events.go
  • events/vc/bot_events_test.go
  • events/vc/register.go
  • shortcuts/vc/vc_meeting_events.go
  • shortcuts/vc/vc_meeting_events_test.go
  • skills/lark-event/SKILL.md
  • skills/lark-event/references/lark-event-vc.md
  • skills/lark-vc-agent/SKILL.md
  • skills/lark-vc-agent/references/lark-vc-agent-meeting-events.md
  • skills/lark-vc-agent/references/lark-vc-agent-meeting-list-active.md

Comment thread shortcuts/vc/vc_meeting_events.go Outdated
Comment thread skills/lark-vc-agent/references/lark-vc-agent-meeting-events.md Outdated
@Ren1104
Ren1104 requested a review from zhaoleibd July 1, 2026 08:26

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
shortcuts/vc/vc_meeting_events_test.go (1)

553-1005: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Repeated stub-registration boilerplate across tests.

Nearly every test in this range repeats the same three-stub setup (meetingEventsStub + botInfoStub() + meetingDetailParticipantsStub(...)) with --as bot. A small helper (e.g. registerBotModeStubs(reg, events, hasMore, pageToken, participants)) would reduce duplication without hurting test readability.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@shortcuts/vc/vc_meeting_events_test.go` around lines 553 - 1005, The test
setup is duplicated across many VCMeetingEvents cases, especially the repeated
`meetingEventsStub`, `botInfoStub`, and `meetingDetailParticipantsStub`
registration for `--as bot`. Add a small helper in `vc_meeting_events_test.go`
(for example, a registration helper used by `TestMeetingEvents_ExecuteJSON`,
`TestMeetingEvents_ExecutePretty`, and related tests) that takes the event list,
pagination flags, and participants and registers the stubs in one place. Update
the affected tests to call that helper so the repeated boilerplate is removed
while keeping each test’s assertions focused.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@shortcuts/vc/vc_meeting_events_test.go`:
- Around line 553-1005: The test setup is duplicated across many VCMeetingEvents
cases, especially the repeated `meetingEventsStub`, `botInfoStub`, and
`meetingDetailParticipantsStub` registration for `--as bot`. Add a small helper
in `vc_meeting_events_test.go` (for example, a registration helper used by
`TestMeetingEvents_ExecuteJSON`, `TestMeetingEvents_ExecutePretty`, and related
tests) that takes the event list, pagination flags, and participants and
registers the stubs in one place. Update the affected tests to call that helper
so the repeated boilerplate is removed while keeping each test’s assertions
focused.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 1ebb67d0-fa45-4b45-861c-7b6d9dafe4b3

📥 Commits

Reviewing files that changed from the base of the PR and between a5259e2 and 7c4f500.

📒 Files selected for processing (4)
  • shortcuts/vc/vc_meeting_events.go
  • shortcuts/vc/vc_meeting_events_test.go
  • skills/lark-vc-agent/SKILL.md
  • skills/lark-vc-agent/references/lark-vc-agent-meeting-events.md
🚧 Files skipped from review as they are similar to previous changes (1)
  • shortcuts/vc/vc_meeting_events.go

@Ren1104
Ren1104 force-pushed the features/F-vc-bot-meeting-activity-contract branch from ee0ed99 to 74090fe Compare July 6, 2026 08:44
@Ren1104 Ren1104 changed the title [F-vc-meeting-contract] larksuite-cli feat(vc): add bot meeting activity events and normalize outputs Jul 6, 2026
@Ren1104 Ren1104 changed the title feat(vc): add bot meeting activity events and normalize outputs feat(vc): support realtime meeting activity event consumption Jul 6, 2026
@Ren1104 Ren1104 changed the title feat(vc): support realtime meeting activity event consumption feat(vc): refine meeting-events output and support realtime bot event consumption Jul 6, 2026
@Ren1104 Ren1104 changed the title feat(vc): refine meeting-events output and support realtime bot event consumption feat(vc): refine meeting-events output Jul 7, 2026
@Ren1104
Ren1104 force-pushed the features/F-vc-bot-meeting-activity-contract branch from 69ce678 to a36f63e Compare July 7, 2026 12:36
@Ren1104 Ren1104 changed the title feat(vc): refine meeting-events output feat(vc): refine meeting-events output and reaction forwarding Jul 7, 2026
@Ren1104
Ren1104 force-pushed the features/F-vc-bot-meeting-activity-contract branch from 576d4bd to b5f3e21 Compare July 8, 2026 03:10
@Ren1104
Ren1104 force-pushed the features/F-vc-bot-meeting-activity-contract branch from b5f3e21 to b584df9 Compare July 8, 2026 07:08
@Ren1104
Ren1104 merged commit 9413e7c into main Jul 8, 2026
24 checks passed
@Ren1104
Ren1104 deleted the features/F-vc-bot-meeting-activity-contract branch July 8, 2026 07:35
This was referenced Jul 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

domain/vc PR touches the vc domain size/L Large or sensitive change across domains or core paths

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants