feat(calendar): add room find workflow#403
Conversation
|
|
|
Caution Review failedPull request was closed or merged during review 📝 WalkthroughWalkthroughAdded a new exported calendar shortcut Changes
Sequence Diagram(s)sequenceDiagram
actor User
participant CLI as "CLI"
participant Validator as "Input Validator"
participant Parser as "Slot Parser"
participant Pool as "Worker Pool"
participant API as "Calendar API"
participant Aggregator as "Result Aggregator"
participant Formatter as "Output Formatter"
User->>CLI: run `calendar +room-find` with slots & constraints
CLI->>Validator: validate flags (slots, attendees, capacities, strings)
Validator-->>CLI: ok / error
alt validation failed
CLI-->>User: error
else
CLI->>Parser: parse slots to RFC3339 start/end
Parser-->>CLI: parsed slots
CLI->>Pool: submit slots (worker limit)
loop per slot (concurrent, limited)
Pool->>API: POST /freebusy/room_find (slot + constraints)
API-->>Pool: meeting_rooms for slot
end
Pool->>Aggregator: collect slot responses
Aggregator->>Aggregator: sort time_slots by start
Aggregator-->>Formatter: structured output
Formatter-->>User: display time_slots → meeting_rooms or "No suggestions"
end
Estimated code review effort🎯 4 (Complex) | ⏱️ ~60 minutes Possibly related issues
Possibly related PRs
Suggested reviewers
Poem
🚥 Pre-merge checks | ✅ 2 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
a7a822b to
c806630
Compare
🚀 PR Preview Install Guide🧰 CLI updatenpm i -g https://pkg.pr.new/larksuite/cli/@larksuite/cli@2091327d76f04c8fd33073c22f8baf70cdd38697🧩 Skill updatenpx skills add larksuite/cli#feat/room_find -y -g |
c806630 to
699a9b2
Compare
Greptile SummaryThis PR introduces
Confidence Score: 4/5Safe to merge for most single-slot use cases; multi-slot partial-failure behavior (all results discarded when any one slot errors) remains unaddressed from prior review and is worth resolving before wider rollout. The implementation is well-structured and goroutine-safe (DoAPI confirmed thread-safe via sync.OnceValues). The room_id field is correctly present in the text-output row map, resolving the prior concern. The one unresolved prior P1 — collectRoomFindResults returning nil and discarding all successful slot results when any single slot fetch fails — is still present in the code (lines 113-117) and can silently lose valid suggestions for the user. No new P1+ issues were found; the timezone display inconsistency is P2. shortcuts/calendar/calendar_room_find.go — specifically collectRoomFindResults error-handling (lines 100-117) and unixStringToRFC3339 timezone formatting (lines 169-175) Important Files Changed
Sequence DiagramsequenceDiagram
participant User
participant CLI as lark-cli calendar
participant Collector as collectRoomFindResults
participant API as Lark Room-Find API
User->>CLI: "+room-find --slot A~B --slot C~D [filters]"
CLI->>Collector: "slots=[A~B, C~D], workers=10"
par Concurrent slot fetches
Collector->>API: "POST /freebusy/room_find (slot A~B)"
API-->>Collector: available_rooms[]
and
Collector->>API: "POST /freebusy/room_find (slot C~D)"
API-->>Collector: available_rooms[]
end
Collector->>Collector: sort TimeSlots by Start
Collector-->>CLI: "roomFindOutput{TimeSlots}"
CLI-->>User: "Text table (slot -> rooms) or JSON"
User->>CLI: "calendar +create --attendee-ids room_id"
CLI-->>User: Event created with room booked
Reviews (3): Last reviewed commit: "feat(calendar): add room find workflow" | Re-trigger Greptile |
There was a problem hiding this comment.
Actionable comments posted: 2
🧹 Nitpick comments (3)
shortcuts/calendar/calendar_suggestion.go (1)
295-295: Preserve auth passthrough, but normalize non-exit API errors.
return errcorrectly keeps auth classification, but it also bypasses consistent hinting for generic transport failures. Consider wrapping only non-*output.ExitErrorerrors.Proposed patch
diff --git a/shortcuts/calendar/calendar_suggestion.go b/shortcuts/calendar/calendar_suggestion.go @@ import ( "context" "encoding/json" + "errors" "fmt" "io" @@ if err != nil { - return err + var exitErr *output.ExitError + if errors.As(err, &exitErr) { + return err + } + return output.ErrWithHint(output.ExitInternal, "request_fail", "api request fail", err.Error()) }🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@shortcuts/calendar/calendar_suggestion.go` at line 295, At the site in shortcuts/calendar/calendar_suggestion.go that currently does "return err", change the behavior to preserve existing auth-classification by returning errors of type *output.ExitError unchanged, but wrap all other errors with a normalized transport hint (e.g. using fmt.Errorf("transport error: %w", err)) so generic failures get consistent hinting; implement this by type-asserting err to *output.ExitError and returning it directly if that succeeds, otherwise return the wrapped error.skills/lark-calendar/references/lark-calendar-schedule-meeting.md (1)
10-11: Consider adding runtime guardrails for the documented blocking rule.This document makes “must confirm before
+create” a hard requirement, but current command validation (e.g.,shortcuts/calendar/calendar_create.go:68-95) and room-find invocation path do not enforce that sequencing. A lightweight workflow state check in agent mode would make this rule enforceable instead of policy-only.Also applies to: 44-47
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@skills/lark-calendar/references/lark-calendar-schedule-meeting.md` around lines 10 - 11, Add a runtime workflow guard to enforce the doc rule that +create can only run after explicit user confirmation: introduce a simple agent-mode state flag (e.g., awaiting_user_confirmation) set when presenting ambiguous time/room options in the code path that emits +suggestion (reference ProcessSuggestionSelection/EmitSuggestions) and cleared only when the user explicitly confirms; then modify the create validation/handler (reference ValidateCreateCommand or HandleCreateCommand in the calendar_create handler) and the room-find invocation path (reference InvokeRoomFind) to reject or no-op +create unless that flag is set, and ensure when a user picks a +suggestion you skip calling +freebusy and transition directly to clearing the flag and permitting +create.shortcuts/calendar/calendar_test.go (1)
1071-1110: Assert both requested slots, not just thetime_slotsfield.This still passes if aggregation drops one slot but leaves the envelope shape intact. Verifying the slot count or both slot ranges would lock down the multi-slot behavior this PR is adding.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@shortcuts/calendar/calendar_test.go` around lines 1071 - 1110, The test TestRoomFind_MultiSlot_NewEventContext currently only checks for the presence of the "time_slots" field; update the test to also assert that both requested slots are present (either by checking the count of slots in stdout JSON or by verifying both slot range strings are contained), e.g. after calling mountAndRun and before finishing, parse or inspect stdout.String() and assert that both "2026-03-27T14:00:00+08:00~2026-03-27T15:00:00+08:00" and "2026-03-27T16:00:00+08:00~2026-03-27T17:00:00+08:00" (or that the time_slots array length == 2) appear in the output produced by CalendarRoomFind so the multi-slot behavior is enforced.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@shortcuts/calendar/calendar_room_find.go`:
- Around line 355-363: The human-readable output loop over out.TimeSlots only
prints room_name, capacity and reserve_until_time which hides the non-unique
room identifier; update the for _, slot := range out.TimeSlots loop to include
room.RoomID in both the fmt.Fprintf line and the rows map (e.g., add "room_id":
room.RoomID) so the printed table and the rows slice expose the unique room_id
needed by the subsequent +create flow; adjust the fmt.Fprintf format string to
display the room_id alongside room_name/capacity/reserve_until_time and ensure
any downstream code that consumes rows expects the new "room_id" key.
- Around line 85-113: The loop currently continues dispatching all slot
goroutines even after firstErr is set; change control flow to stop fan-out and
cancel in-flight work by creating a context.WithCancel (e.g., ctx, cancel :=
context.WithCancel(parentCtx)), pass that context into fetch (or wrap fetch to
return early on ctx.Done), and call cancel immediately when you record firstErr
inside the goroutine; additionally, before starting each goroutine in the for _,
slot loop, check under mu (or atomically) whether firstErr is already set and
skip launching further goroutines if so, and ensure defer cancel() is called on
function exit so any in-flight fetch calls can terminate.
---
Nitpick comments:
In `@shortcuts/calendar/calendar_suggestion.go`:
- Line 295: At the site in shortcuts/calendar/calendar_suggestion.go that
currently does "return err", change the behavior to preserve existing
auth-classification by returning errors of type *output.ExitError unchanged, but
wrap all other errors with a normalized transport hint (e.g. using
fmt.Errorf("transport error: %w", err)) so generic failures get consistent
hinting; implement this by type-asserting err to *output.ExitError and returning
it directly if that succeeds, otherwise return the wrapped error.
In `@shortcuts/calendar/calendar_test.go`:
- Around line 1071-1110: The test TestRoomFind_MultiSlot_NewEventContext
currently only checks for the presence of the "time_slots" field; update the
test to also assert that both requested slots are present (either by checking
the count of slots in stdout JSON or by verifying both slot range strings are
contained), e.g. after calling mountAndRun and before finishing, parse or
inspect stdout.String() and assert that both
"2026-03-27T14:00:00+08:00~2026-03-27T15:00:00+08:00" and
"2026-03-27T16:00:00+08:00~2026-03-27T17:00:00+08:00" (or that the time_slots
array length == 2) appear in the output produced by CalendarRoomFind so the
multi-slot behavior is enforced.
In `@skills/lark-calendar/references/lark-calendar-schedule-meeting.md`:
- Around line 10-11: Add a runtime workflow guard to enforce the doc rule that
+create can only run after explicit user confirmation: introduce a simple
agent-mode state flag (e.g., awaiting_user_confirmation) set when presenting
ambiguous time/room options in the code path that emits +suggestion (reference
ProcessSuggestionSelection/EmitSuggestions) and cleared only when the user
explicitly confirms; then modify the create validation/handler (reference
ValidateCreateCommand or HandleCreateCommand in the calendar_create handler) and
the room-find invocation path (reference InvokeRoomFind) to reject or no-op
+create unless that flag is set, and ensure when a user picks a +suggestion you
skip calling +freebusy and transition directly to clearing the flag and
permitting +create.
🪄 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: f9c56f53-1c8c-43df-a1f2-96afd3574ab4
📒 Files selected for processing (12)
internal/output/format.goshortcuts/calendar/calendar_room_find.goshortcuts/calendar/calendar_room_find_test.goshortcuts/calendar/calendar_suggestion.goshortcuts/calendar/calendar_test.goshortcuts/calendar/shortcuts.goskills/lark-calendar/SKILL.mdskills/lark-calendar/references/lark-calendar-create.mdskills/lark-calendar/references/lark-calendar-freebusy.mdskills/lark-calendar/references/lark-calendar-room-find.mdskills/lark-calendar/references/lark-calendar-schedule-meeting.mdskills/lark-calendar/references/lark-calendar-suggestion.md
699a9b2 to
2d1cb15
Compare
There was a problem hiding this comment.
Actionable comments posted: 2
♻️ Duplicate comments (2)
shortcuts/calendar/calendar_room_find.go (2)
355-363:⚠️ Potential issue | 🟠 MajorExpose
room_idin the human-readable rows.The follow-up
+createflow needs the selectedroom_id, androom_nameis not guaranteed unique. Right now the pretty/table path only rendersroom_name,capacity, andreserve_until_time, so a human selection cannot be mapped back unambiguously.🛠️ Minimal fix
for _, room := range slot.MeetingRooms { rows = append(rows, map[string]interface{}{ + "room_id": room.RoomID, "room_name": room.RoomName, "capacity": room.Capacity, "reserve_until_time": room.ReserveUntilTime, }) }🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@shortcuts/calendar/calendar_room_find.go` around lines 355 - 363, The human-readable rows built in the loop over out.TimeSlots omit the room identifier, so add the room_id to each row map so later +create flow can unambiguously map selections; in the loop that appends to rows (where room.RoomName, room.Capacity, room.ReserveUntilTime are used) add "room_id": room.RoomID (or the actual room ID field name on the room struct) to the map.
76-113:⚠️ Potential issue | 🟠 MajorCancel remaining slot lookups after the first failure.
firstErronly changes the final return value. The loop still launches the remaining goroutines, and in-flight requests keep hitting the room-find API even after a fatal slot error. Multi-slot failures should stop fan-out promptly instead of waiting for all slots to finish.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@shortcuts/calendar/calendar_room_find.go` around lines 76 - 113, collectRoomFindResults currently continues launching and running slot goroutines after the first error; to fix this, create a cancellable context (context.WithCancel) in collectRoomFindResults, pass that context into the fetch call (or otherwise make fetch respect ctx), and call cancel() as soon as you set firstErr so in-flight fetches can abort and new launches can be prevented by checking ctx.Err() before or when acquiring sem; update the goroutine launch path in collectRoomFindResults to skip starting work if ctx is cancelled and ensure fetch uses the provided ctx to stop in-progress requests promptly.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@shortcuts/calendar/calendar_room_find.go`:
- Around line 319-326: The capacity validator currently only rejects negative
values by calling runtime.Int(flagMinCapacity)/runtime.Int(flagMaxCapacity) and
returning errors like "--min-capacity must be >= 0", but the spec requires
positive integers; update the checks to enforce >=1 when the flag is explicitly
provided: use runtime.IsSet(flagMinCapacity) and runtime.IsSet(flagMaxCapacity)
(or equivalent presence check) and return errors like "--min-capacity must be >=
1" / "--max-capacity must be >= 1" when set and <1, and adjust the range check
that uses runtime.Int(flagMinCapacity), runtime.Int(flagMaxCapacity) so it
validates min <= max only after confirming both are set and >=1.
In `@skills/lark-calendar/references/lark-calendar-schedule-meeting.md`:
- Around line 103-120: The docs for the +suggestion → +room-find → +create flow
omit how suggestion candidates are converted into exact ISO 8601 slot strings
(required by +room-find's --slot and +create's --start/--end); update
lark-calendar-suggestion.md and this file to state that the suggestion output
must include and preserve raw candidate timestamps and timezone (e.g., include
an unambiguous ISO 8601 start/end per candidate) and show the exact
transformation/field names agents should use to pass those timestamps into
+room-find's --slot and into +create's --start/--end so agents do not need to
parse human-readable text like "10:00 - 10:30".
---
Duplicate comments:
In `@shortcuts/calendar/calendar_room_find.go`:
- Around line 355-363: The human-readable rows built in the loop over
out.TimeSlots omit the room identifier, so add the room_id to each row map so
later +create flow can unambiguously map selections; in the loop that appends to
rows (where room.RoomName, room.Capacity, room.ReserveUntilTime are used) add
"room_id": room.RoomID (or the actual room ID field name on the room struct) to
the map.
- Around line 76-113: collectRoomFindResults currently continues launching and
running slot goroutines after the first error; to fix this, create a cancellable
context (context.WithCancel) in collectRoomFindResults, pass that context into
the fetch call (or otherwise make fetch respect ctx), and call cancel() as soon
as you set firstErr so in-flight fetches can abort and new launches can be
prevented by checking ctx.Err() before or when acquiring sem; update the
goroutine launch path in collectRoomFindResults to skip starting work if ctx is
cancelled and ensure fetch uses the provided ctx to stop in-progress requests
promptly.
🪄 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: 1467594b-78d3-4481-a960-dbedc5c99d0d
📒 Files selected for processing (11)
shortcuts/calendar/calendar_room_find.goshortcuts/calendar/calendar_room_find_test.goshortcuts/calendar/calendar_suggestion.goshortcuts/calendar/calendar_test.goshortcuts/calendar/shortcuts.goskills/lark-calendar/SKILL.mdskills/lark-calendar/references/lark-calendar-create.mdskills/lark-calendar/references/lark-calendar-freebusy.mdskills/lark-calendar/references/lark-calendar-room-find.mdskills/lark-calendar/references/lark-calendar-schedule-meeting.mdskills/lark-calendar/references/lark-calendar-suggestion.md
✅ Files skipped from review due to trivial changes (2)
- shortcuts/calendar/shortcuts.go
- skills/lark-calendar/references/lark-calendar-freebusy.md
🚧 Files skipped from review as they are similar to previous changes (5)
- shortcuts/calendar/calendar_suggestion.go
- skills/lark-calendar/references/lark-calendar-create.md
- shortcuts/calendar/calendar_room_find_test.go
- shortcuts/calendar/calendar_test.go
- skills/lark-calendar/references/lark-calendar-suggestion.md
There was a problem hiding this comment.
Actionable comments posted: 1
♻️ Duplicate comments (3)
shortcuts/calendar/calendar_room_find.go (2)
90-113:⚠️ Potential issue | 🟠 MajorStop dispatching room lookups after the first slot failure.
firstErris recorded, but the loop still launches remaining slot fetches and waits for all of them. A single auth/network failure therefore continues hitting/freebusy/room_findand delays the error path instead of failing fast.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@shortcuts/calendar/calendar_room_find.go` around lines 90 - 113, The loop currently continues launching goroutines even after a slot fetch sets firstErr; change the loop to stop dispatching further fetches once firstErr is set by checking firstErr under the same mutex before adding a worker: before wg.Add(1)/sem <- struct{}{} check (under mu.Lock()/mu.Unlock() or an err-specific mutex) if firstErr != nil and break the loop; ensure the existing goroutine code still sets firstErr when fetch returns an error (the variables to touch: slots, fetch, firstErr, mu, sem, wg, out.TimeSlots, roomFindSlot) so no new goroutines are started after the first failure and wait for only the already-dispatched workers.
319-326:⚠️ Potential issue | 🟡 MinorReject explicit zero capacities to match the documented contract.
The docs describe both capacity filters as positive integers, but this validator still accepts
--min-capacity 0/--max-capacity 0. Because these fields areomitempty, an explicit0is then silently dropped from the request instead of being rejected.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@shortcuts/calendar/calendar_room_find.go` around lines 319 - 326, The validator currently allows explicit zero capacities; change the checks on flagMinCapacity and flagMaxCapacity to reject zero by using <= 0 and update the validation messages to state "--min-capacity must be > 0" and "--max-capacity must be > 0"; keep the existing comparison (minCapacity, maxCapacity := runtime.Int(flagMinCapacity), runtime.Int(flagMaxCapacity); minCapacity > 0 && maxCapacity > 0 && minCapacity > maxCapacity) or adjust it to use >= 1 if you prefer, and return output.ErrValidation with the updated messages so explicit 0 is rejected rather than dropped.skills/lark-calendar/references/lark-calendar-schedule-meeting.md (1)
117-120:⚠️ Potential issue | 🟠 MajorDocument the exact timestamp handoff from
+suggestionto+room-find/+create.This flow still says to batch suggestion candidates into
+room-find, but it never states that agents must preserve the raw candidate start/end timestamps and timezone from+suggestionand pass them through unchanged as--slot "<start>~<end>", then reuse the same values for+create --start/--end. Without that, the workflow still invites reconstructing slots from human-readable text.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@skills/lark-calendar/references/lark-calendar-schedule-meeting.md` around lines 117 - 120, The doc must explicitly require preserving and passing the raw ISO timestamps and timezone produced by +suggestion unchanged into +room-find and +create (use the exact start/end strings as --slot "<start>~<end>" for room-find and the identical values for +create --start/--end), and forbid reconstructing slots from localized/human-readable text or re-calling +freebusy after the user selects a +suggestion slot; ensure the guidance applies even when the user supplied no time (i.e., after default suggestion generation) and call out the exact symbols +suggestion, +room-find, +create, +freebusy so implementers know where to preserve and reuse the timestamps.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@skills/lark-calendar/references/lark-calendar-room-find.md`:
- Around line 35-38: Update the --event-rrule parameter description to prohibit
COUNT entirely (not just when UNTIL is present) so it matches the behavior
described in lark-calendar-create.md: change the sentence that currently says
"COUNT and UNTIL not supported simultaneously" to explicitly state "COUNT is not
supported; use UNTIL or other RFC5545 fields (e.g., FREQ=DAILY;INTERVAL=1) but
do not include COUNT." Ensure the --event-rrule line (the parameter name
`--event-rrule <rrule>`) and its example reflect this restriction.
---
Duplicate comments:
In `@shortcuts/calendar/calendar_room_find.go`:
- Around line 90-113: The loop currently continues launching goroutines even
after a slot fetch sets firstErr; change the loop to stop dispatching further
fetches once firstErr is set by checking firstErr under the same mutex before
adding a worker: before wg.Add(1)/sem <- struct{}{} check (under
mu.Lock()/mu.Unlock() or an err-specific mutex) if firstErr != nil and break the
loop; ensure the existing goroutine code still sets firstErr when fetch returns
an error (the variables to touch: slots, fetch, firstErr, mu, sem, wg,
out.TimeSlots, roomFindSlot) so no new goroutines are started after the first
failure and wait for only the already-dispatched workers.
- Around line 319-326: The validator currently allows explicit zero capacities;
change the checks on flagMinCapacity and flagMaxCapacity to reject zero by using
<= 0 and update the validation messages to state "--min-capacity must be > 0"
and "--max-capacity must be > 0"; keep the existing comparison (minCapacity,
maxCapacity := runtime.Int(flagMinCapacity), runtime.Int(flagMaxCapacity);
minCapacity > 0 && maxCapacity > 0 && minCapacity > maxCapacity) or adjust it to
use >= 1 if you prefer, and return output.ErrValidation with the updated
messages so explicit 0 is rejected rather than dropped.
In `@skills/lark-calendar/references/lark-calendar-schedule-meeting.md`:
- Around line 117-120: The doc must explicitly require preserving and passing
the raw ISO timestamps and timezone produced by +suggestion unchanged into
+room-find and +create (use the exact start/end strings as --slot
"<start>~<end>" for room-find and the identical values for +create
--start/--end), and forbid reconstructing slots from localized/human-readable
text or re-calling +freebusy after the user selects a +suggestion slot; ensure
the guidance applies even when the user supplied no time (i.e., after default
suggestion generation) and call out the exact symbols +suggestion, +room-find,
+create, +freebusy so implementers know where to preserve and reuse the
timestamps.
🪄 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: 201ad100-377b-4b81-a726-fa50fcb68f00
📒 Files selected for processing (11)
shortcuts/calendar/calendar_room_find.goshortcuts/calendar/calendar_room_find_test.goshortcuts/calendar/calendar_suggestion.goshortcuts/calendar/calendar_test.goshortcuts/calendar/shortcuts.goskills/lark-calendar/SKILL.mdskills/lark-calendar/references/lark-calendar-create.mdskills/lark-calendar/references/lark-calendar-freebusy.mdskills/lark-calendar/references/lark-calendar-room-find.mdskills/lark-calendar/references/lark-calendar-schedule-meeting.mdskills/lark-calendar/references/lark-calendar-suggestion.md
✅ Files skipped from review due to trivial changes (2)
- shortcuts/calendar/shortcuts.go
- skills/lark-calendar/references/lark-calendar-freebusy.md
🚧 Files skipped from review as they are similar to previous changes (3)
- shortcuts/calendar/calendar_suggestion.go
- shortcuts/calendar/calendar_room_find_test.go
- skills/lark-calendar/references/lark-calendar-suggestion.md
|
Tip: Greploop — Automatically fix all review issues by running Use the Greptile plugin for Claude Code to query reviews, search comments, and manage custom context directly from your terminal. |
Fix room-find multi-slot verification. Change-Id: I3ba4c8dbe30bbb1eb12c0996bb8bc5d54e6339ca
2d1cb15 to
2091327
Compare
Summary
This PR adds a complete meeting-room workflow to calendar shortcuts: users can search available meeting rooms for one or more candidate time slots, get recommended room options grouped by time slot, and complete room booking through calendar event creation.
It also updates the calendar skill guidance so AI agents follow the right room-search and meeting-scheduling flow.
Changes
calendar +room-find, including filtering by city, building, floor, room name, capacity, attendees, and repeated candidate slotscalendar +create, where the selectedroom_idis attached as an attendee resourcelark-calendarskill docs and references for room search, room recommendation, and meeting scheduling/bookingTest Plan
make unit-testlark xxxcommand works as expectedgo run github.com/golangci/golangci-lint/v2/cmd/golangci-lint@v2.1.6 run --new-from-rev=origin/maincurrently fails on existingshortcuts/whiteboard/whiteboard_update.goforbidigo violations unrelated to this branchRelated Issues
Summary by CodeRabbit
New Features
Updates
Documentation
Tests