Skip to content

Conversation

@jhou1
Copy link

@jhou1 jhou1 commented Oct 31, 2025

Add a meet plugin to find free overlapping times to meet with one or more people.

What this PR does / why we need it

Adds a meet plugin and two slash commands

  • meet:find-time to look up free overlapping time to meet with people.
  • meet:create-event to create a Google Calendar event based on natural language.

It's hard to visualize everyone's availability at a glance on Google Calendar, AI came to help.

@openshift-ci openshift-ci bot requested review from bentito and dgoodwin October 31, 2025 09:57
@openshift-ci
Copy link

openshift-ci bot commented Oct 31, 2025

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by: jhou1
Once this PR has been reviewed and has the lgtm label, please assign brandisher for approval. For more information see the Code Review Process.

The full list of commands accepted by this bot can be found here.

Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@openshift-ci openshift-ci bot added the needs-ok-to-test Indicates a PR that requires an org member to verify it is safe to test. label Oct 31, 2025
@openshift-ci
Copy link

openshift-ci bot commented Oct 31, 2025

Hi @jhou1. Thanks for your PR.

I'm waiting for a github.com member to verify that this patch is reasonable to test. If it is, they should reply with /ok-to-test on its own line. Until that is done, I will not automatically test new commits in this PR, but the usual testing commands by org members will still work. Regular contributors should join the org to skip this step.

Once the patch is verified, the new status will be reflected by the ok-to-test label.

I understand the commands that are listed here.

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository.

@stbenjam
Copy link
Member

/ok-to-test

Please join the openshift-eng org so things get tested automatically

@openshift-ci openshift-ci bot added ok-to-test Indicates a non-member PR verified by an org member that is safe to test. and removed needs-ok-to-test Indicates a PR that requires an org member to verify it is safe to test. labels Oct 31, 2025
@openshift-merge-robot openshift-merge-robot added the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Oct 31, 2025
Copy link
Member

@stbenjam stbenjam left a comment

Choose a reason for hiding this comment

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

Really neat!

@openshift-merge-robot openshift-merge-robot removed the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Nov 3, 2025
Copy link
Author

@jhou1 jhou1 left a comment

Choose a reason for hiding this comment

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

Thank you! I've renamed the plugin and replaced the bundled mcp server with manual configuration instruction.

@jhou1 jhou1 changed the title Add a meet plugin to find free overlapping times to meet with one or more people Add a calendar plugin to find free overlapping times to meet with one or more people Nov 3, 2025
@jhou1
Copy link
Author

jhou1 commented Nov 5, 2025

I've joint our org and addressed the review. Lint did not run.

/test ?

@openshift-ci
Copy link

openshift-ci bot commented Nov 5, 2025

@jhou1: The following commands are available to trigger optional jobs:

/test images

Use /test all to run all jobs.

In response to this:

I've joint our org and addressed the review. Link did not run.

/test ?

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository.

@coderabbitai
Copy link

coderabbitai bot commented Nov 5, 2025

Walkthrough

Adds a Calendar plugin: registration entries, plugin manifest, and comprehensive documentation (README and two command specs) implementing two commands — calendar:create-event and calendar:find-time — with metadata and examples.

Changes

Cohort / File(s) Change Summary
Marketplace / Registry
\.claude-plugin/marketplace.json, docs/data.json
Registered new calendar plugin entry with metadata (name, source, description, version) and command definitions for create-event and find-time.
Plugin Manifest
plugins/calendar/.claude-plugin/plugin.json
Added plugin manifest describing name, description, version 0.0.1, and author.
Top-level docs index
PLUGINS.md
Added Calendar Plugin section and link(s) to the calendar command docs.
Plugin README
plugins/calendar/README.md
Added comprehensive setup, installation, usage, workflow, troubleshooting, and security guidance for the Calendar plugin.
Command specifications
plugins/calendar/commands/find-time.md, plugins/calendar/commands/create-event.md
Added detailed command docs: synopses, argument semantics, phased implementations, examples, return formats, timezone and error-handling guidance.

Sequence Diagram(s)

sequenceDiagram
  participant User
  participant Assistant
  participant CalendarPlugin as Plugin
  participant GoogleMCP as Google Calendar MCP

  Note over User,Assistant: User invokes calendar command (natural language)
  User->>Assistant: "Find a time for Alice and Bob next week"
  Assistant->>Plugin: call `calendar:find-time` (args: emails, duration, days_ahead)
  Plugin->>GoogleMCP: request free/busy for participants
  GoogleMCP-->>Plugin: free/busy data
  Plugin->>Plugin: compute overlapping slots (apply business-hours, weekend rules)
  Plugin-->>Assistant: return candidate slots (sorted)
  Assistant-->>User: present suggested times and ask for confirmation
Loading
sequenceDiagram
  participant User
  participant Assistant
  participant CalendarPlugin as Plugin
  participant GoogleMCP as Google Calendar MCP

  Note over User,Assistant: Create event flow (confirm details then create)
  User->>Assistant: "Create meeting with Carol tomorrow 3pm"
  Assistant->>Plugin: call `calendar:create-event` (parsed event data)
  Plugin->>User: request clarification/confirm missing details (if any)
  User-->>Plugin: confirmation/extra info
  Plugin->>GoogleMCP: create event (with attendees, Meet link)
  GoogleMCP-->>Plugin: event created (event id, join link)
  Plugin-->>Assistant: success payload (event details)
  Assistant-->>User: confirm event created with link/time
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20–30 minutes

  • Attention areas:
    • Validate JSON structures in \.claude-plugin/marketplace.json, docs/data.json, and plugins/calendar/.claude-plugin/plugin.json for schema compliance and escaping.
    • Confirm command argument names and examples in find-time.md and create-event.md are consistent with marketplace docs/data.json.
    • Verify README setup steps and security notes do not expose sensitive placeholders and correctly reference MCP/Google setup steps.
✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

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

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

♻️ Duplicate comments (1)
PLUGINS.md (1)

33-33: Capitalize opening word for consistency.

Line 33 should start with an uppercase "F" to align with the command descriptions (line 37) and the past review feedback.

-find overlapping free time to meet with people
+Find overlapping free time to meet with people
🧹 Nitpick comments (2)
plugins/calendar/commands/create-event.md (1)

10-10: Add language identifiers to fenced code blocks.

Fenced code blocks should specify a language for syntax highlighting. These blocks should use a language tag like bash or text.

-```
+```text
 /calendar:create-event <natural_language_prompt_for_the_event>
-```
+```

Apply the same pattern to lines 82, 87, 92, 97, and 102.

Also applies to: 82-82, 87-87, 92-92, 97-97, 102-102

plugins/calendar/commands/find-time.md (1)

10-10: Add language identifiers to fenced code blocks.

Fenced code blocks should specify a language for syntax highlighting. These blocks should use a language tag like text.

-```
+```text
 /calendar:find-time <email_addresses> [duration_in_minutes] [days_ahead]
-```
+```

Apply the same pattern to lines 63, 68, and 73.

Also applies to: 63-63, 68-68, 73-73

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

Cache: Disabled due to data retention organization setting

Knowledge base: Disabled due to Reviews -> Disable Knowledge Base setting

📥 Commits

Reviewing files that changed from the base of the PR and between f71e9be and 7362993.

📒 Files selected for processing (7)
  • .claude-plugin/marketplace.json (1 hunks)
  • PLUGINS.md (2 hunks)
  • docs/data.json (1 hunks)
  • plugins/calendar/.claude-plugin/plugin.json (1 hunks)
  • plugins/calendar/README.md (1 hunks)
  • plugins/calendar/commands/create-event.md (1 hunks)
  • plugins/calendar/commands/find-time.md (1 hunks)
🧰 Additional context used
🪛 LanguageTool
plugins/calendar/commands/create-event.md

[grammar] ~49-~49: Ensure spelling is correct
Context: ...input until user confirms you correctly intepreted the intent. ### Phase 5: Create Calend...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)

PLUGINS.md

[style] ~33-~33: The word “free” tends to be overused. Consider using an alternative wording to strengthen your writing.
Context: ... ### Calendar Plugin find overlapping free time to meet with people Commands: - **...

(FREE_TIME)


[style] ~37-~37: The word “free” tends to be overused. Consider using an alternative wording to strengthen your writing.
Context: ...tes] [days_ahead]`** - Find overlapping free time to meet with one or more people. See [...

(FREE_TIME)

plugins/calendar/README.md

[style] ~7-~7: The word “free” tends to be overused. Consider using an alternative wording to strengthen your writing.
Context: ...Smart Time Finding** - Find overlapping free time across multiple participants' calendars...

(FREE_TIME)


[style] ~69-~69: The word “free” tends to be overused. Consider using an alternative wording to strengthen your writing.
Context: .../calendar:find-time` - Find Overlapping Free Time Find overlapping available time with m...

(FREE_TIME)


[style] ~170-~170: The word “free” tends to be overused. Consider using an alternative wording to strengthen your writing.
Context: ...e necessary scopes ### "No overlapping free time found" - Try a shorter meeting duration...

(FREE_TIME)

plugins/calendar/commands/find-time.md

[style] ~33-~33: The word “free” tends to be overused. Consider using an alternative wording to strengthen your writing.
Context: ...for each participant - Find overlapping free time across all participants - Filter out bl...

(FREE_TIME)


[style] ~47-~47: The word “free” tends to be overused. Consider using an alternative wording to strengthen your writing.
Context: ...Handling - Handle cases where no common free time exists - Provide helpful suggestions (s...

(FREE_TIME)

🪛 markdownlint-cli2 (0.18.1)
plugins/calendar/commands/create-event.md

10-10: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


82-82: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


87-87: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


92-92: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


97-97: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


102-102: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

plugins/calendar/commands/find-time.md

10-10: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


63-63: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


68-68: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


73-73: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

🔇 Additional comments (4)
plugins/calendar/README.md (1)

1-189: Documentation is comprehensive and well-structured.

The setup guide, usage examples, and troubleshooting sections are clear and actionable. All prerequisites and installation steps are properly documented.

plugins/calendar/.claude-plugin/plugin.json (1)

1-8: Plugin manifest is valid and complete.

JSON structure is well-formed with all required metadata.

docs/data.json (1)

554-573: Calendar plugin entry is complete and properly structured.

All required metadata is present: plugin name, description, version, commands with full specifications, and readme flag.

.claude-plugin/marketplace.json (1)

82-86: Marketplace entry is properly structured and positioned.

Calendar plugin registration is complete with correct source path and description.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🧹 Nitpick comments (4)
plugins/calendar/commands/create-event.md (2)

10-12: Specify language for code block to comply with linting rules.

Specifying a language improves content rendering by using the correct syntax highlighting for code. The Synopsis code block should specify bash as the language.

 ## Synopsis
-```
+```bash
 /calendar:create-event <natural_language_prompt_for_the_event>

---

`82-104`: **Add language specifier to all example code blocks.**

The example code blocks (lines 82–84, 87–89, 92–94, 97–99, and 102–104) are missing language specifications for markdownlint compliance. Each example shows a command invocation and should be marked as `bash`.

```diff
 1. **Simple meeting**:
-   ```
+   ```bash
    /calendar:create-event Team standup tomorrow at 9am for 30 minutes
    ```
 
 2. **Meeting with specific attendees**:
-   ```
+   ```bash
    /calendar:create-event Project review Friday 2pm with [email protected] and [email protected]
    ```
 
 3. **Detailed planning session**:
-   ```
+   ```bash
    /calendar:create-event Quarterly planning session next Monday 10am-12pm with the whole engineering team
    ```
 
 4. **Quick 1:1 meeting**:
-   ```
+   ```bash
    /calendar:create-event Coffee chat with Sarah tomorrow 3pm for 45 minutes
    ```
 
 5. **All-hands meeting**:
-   ```
+   ```bash
    /calendar:create-event Monthly all-hands meeting first Friday of next month 2-3pm with leadership team
    ```
plugins/calendar/commands/find-time.md (2)

10-12: Specify language for Synopsis code block.

Specifying a language improves content rendering by using the correct syntax highlighting for code. Add bash as the language identifier.

 ## Synopsis
-```
+```bash
 /calendar:find-time <email_addresses> [duration_in_minutes] [days_ahead]

---

`63-75`: **Add language specifier to all example code blocks.**

The example code blocks (lines 63–65, 69–71, and 74–76) lack language specifications for markdownlint compliance. Mark them as `bash` since they show command invocations.

```diff
 1. **Basic usage with two people**:
-   ```
+   ```bash
    /calendar:find-time [email protected],[email protected] 60
    ```
 
 2. **Including date range**:
-   ```
+   ```bash
    /calendar:find-time [email protected],[email protected] 30 7
    ```
 
 3. **Multiple participants with specific date**:
-   ```
+   ```bash
    /calendar:find-time [email protected],[email protected],[email protected] 45 15
    ```
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

Cache: Disabled due to data retention organization setting

Knowledge base: Disabled due to Reviews -> Disable Knowledge Base setting

📥 Commits

Reviewing files that changed from the base of the PR and between 7362993 and 4ff1b7e.

📒 Files selected for processing (3)
  • plugins/calendar/README.md (1 hunks)
  • plugins/calendar/commands/create-event.md (1 hunks)
  • plugins/calendar/commands/find-time.md (1 hunks)
🧰 Additional context used
🪛 LanguageTool
plugins/calendar/README.md

[style] ~7-~7: The word “free” tends to be overused. Consider using an alternative wording to strengthen your writing.
Context: ...Smart Time Finding** - Find overlapping free time across multiple participants' calendars...

(FREE_TIME)


[style] ~69-~69: The word “free” tends to be overused. Consider using an alternative wording to strengthen your writing.
Context: .../calendar:find-time` - Find Overlapping Free Time Find overlapping available time with m...

(FREE_TIME)


[style] ~170-~170: The word “free” tends to be overused. Consider using an alternative wording to strengthen your writing.
Context: ...e necessary scopes ### "No overlapping free time found" - Try a shorter meeting duration...

(FREE_TIME)

plugins/calendar/commands/find-time.md

[style] ~33-~33: The word “free” tends to be overused. Consider using an alternative wording to strengthen your writing.
Context: ...for each participant - Find overlapping free time across all participants - Filter out bl...

(FREE_TIME)


[style] ~47-~47: The word “free” tends to be overused. Consider using an alternative wording to strengthen your writing.
Context: ...Handling - Handle cases where no common free time exists - Provide helpful suggestions (s...

(FREE_TIME)

🪛 markdownlint-cli2 (0.18.1)
plugins/calendar/commands/create-event.md

10-10: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


82-82: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


87-87: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


92-92: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


97-97: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


102-102: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

🔇 Additional comments (1)
plugins/calendar/README.md (1)

1-196: Excellent documentation structure and content.

The README provides comprehensive setup instructions, clear examples, and helpful troubleshooting guidance. The documentation is well-organized and accessible.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ok-to-test Indicates a non-member PR verified by an org member that is safe to test.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants