feat: Add github-commit-agent kit(agentkit-challenge)#202
Conversation
|
Warning Review limit reached
Next review available in: 34 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Repository UI (base), Organization UI (inherited) Review profile: ASSERTIVE Plan: Pro Run ID: 📒 Files selected for processing (2)
Mission accepted, agent. This tape will self-destruct in five seconds — but not before I brief you. WalkthroughThis PR introduces a new "github-commit-agent" AgentKit: a flow definition, prompts, model-configs, constitution, and docs that convert git commit history into classified markdown release notes. It also adds a companion Next.js app with a server action, page UI, full shadcn/ui component library, hooks, and build tooling. ChangesGitHub Commit Agent Kit + App
Suggested reviewers: 🚥 Pre-merge checks | ✅ 3 | ❌ 2❌ Failed checks (2 warnings)
✅ Passed checks (3 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
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. Comment |
:robot_face: AgentKit Structural ValidationNew Contributions Detected
Check Results
🎉 All checks passed! This contribution follows the AgentKit structure. |
|
Failure recorded at 2026-07-09T18:31:17Z UTC. If this PR is not fixed within 4 weeks it will be automatically closed. |
There was a problem hiding this comment.
Actionable comments posted: 27
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
kits/github-commit-agent/apps/README.md (1)
1-156: 📐 Maintainability & Code Quality | 🟠 Major | 🏗️ Heavy liftRewrite this README for the GitHub Commit Agent kit.
It still documents “Reddit Scout”, links to the wrong repo/demo, and shows the wrong env vars and root directory (
REDDIT_SCOUT_FLOW_ID,kits/agentic/reddit-scout). Following it will wire the wrong project and break setup. Please update the title, deploy links, env example, and repo structure to match this kit.🤖 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 `@kits/github-commit-agent/apps/README.md` around lines 1 - 156, The README still describes the Reddit Scout app and points to the wrong demo, repo, environment variables, and root directory, so rewrite it for the GitHub Commit Agent kit. Update the title, overview, deploy badge/link targets, and setup steps to match this kit, and replace the Reddit-specific symbols like REDDIT_SCOUT_FLOW_ID and kits/agentic/reddit-scout with the correct GitHub Commit Agent flow/env names. Also refresh the repo structure and feature sections so they reference the actual app files and workflow names in this kit.
🤖 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 `@kits/github-commit-agent/.env.example`:
- Around line 11-15: The token guidance in the .env.example comment is mixing
classic PAT scopes with fine-grained token permissions, which can mislead users
setting up private-repo access. Update the note near the PAT example so it
clearly separates classic Personal Access Token scopes from fine-grained
repository permissions, and make the required access for private repositories
unambiguous by referencing the existing token comment block without changing the
surrounding setup instructions.
In `@kits/github-commit-agent/apps/.env.example`:
- Around line 1-4: The env example is using the wrong flow variable name, so
update the example in the .env template to match what lamatic-client.ts and
orchestrate.js actually read, namely GITHUB_COMMIT_AGENT_FLOW_ID instead of
REDDIT_SCOUT_FLOW_ID. Also normalize the sample dotenv entries by removing the
spaces around the equals signs so the placeholders match standard .env syntax
and the app can be started from the example without configuration mismatches.
In `@kits/github-commit-agent/apps/.gitignore`:
- Around line 19-21: The .gitignore entry for environment files only excludes
.env, so .env.local can still be committed and leak credentials. Update the
existing env-files ignore section to also cover .env.local (and keep the current
.env rule), so the app’s runtime config file is ignored by default.
In `@kits/github-commit-agent/apps/actions/orchestrate.ts`:
- Around line 48-62: The error handling in orchestrate.ts is still exposing raw
provider details through the returned error message. Update the error
normalization in the orchestration flow so that the response from the function
using errorMessage always returns a generic user-facing failure string, while
keeping the specific error.message only for server-side logging or telemetry.
Use the existing orchestrate response object and the error handling branch that
checks error instanceof Error to map all failures to a safe message instead of
echoing internal fetch/API details.
- Around line 22-29: The current logging in orchestrate.ts is exposing sensitive
user input and raw Lamatic payloads through the console. Update the logging
around the message handling and lamaticClient.executeFlow path so that Commit
Agent input, inputs, and resData are only logged behind a debug-only guard or
removed entirely in production. Keep any remaining logs generic and use the
existing orchestration flow symbols like lamaticClient.executeFlow, FLOW_ID, and
the message/inputs handling to make the change in the right place.
In `@kits/github-commit-agent/apps/app/page.tsx`:
- Around line 172-179: The search field in the app page’s Input component is
missing an accessible name, so update the existing Input with an appropriate
aria-label while preserving the current minimalist UI. Use the Input element
tied to query state (the one with id="query" and onChange={setQuery}) and ensure
screen readers can announce it without relying on the placeholder text.
In `@kits/github-commit-agent/apps/components/theme-provider.tsx`:
- Around line 9-11: The app shell is rendering without the theme context, so
`components/ui/sonner.tsx` can’t follow user theme changes. Wrap the root
content in `ThemeProvider` (or a shared `providers.tsx`) from
`ThemeProvider`/`NextThemesProvider` before `Analytics`, and ensure
`app/layout.tsx` no longer renders `children` directly outside that provider.
In `@kits/github-commit-agent/apps/components/ui/button-group.tsx`:
- Around line 1-5: The button-group component is using React.ComponentProps
without importing React, so add the missing React import at the top of the
button-group component alongside Slot, cva, cn, and Separator. Update the
component to follow the same pattern as the other UI files by explicitly
importing React so the React.ComponentProps references in the component
definitions resolve consistently.
In `@kits/github-commit-agent/apps/components/ui/carousel.tsx`:
- Around line 102-111: The effect in carousel.tsx registers both
api.on('reInit', onSelect) and api.on('select', onSelect), but the cleanup in
the React.useEffect block only removes the select listener. Update the cleanup
to also unsubscribe the reInit listener using the same api and onSelect
callback, keeping the listener lifecycle symmetric in this effect.
In `@kits/github-commit-agent/apps/components/ui/collapsible.tsx`:
- Around line 1-33: Add the missing React import at the top of Collapsible so
the React.ComponentProps type references are explicit and consistent with the
other UI components; update the Collapsible, CollapsibleTrigger, and
CollapsibleContent definitions in this file to rely on an imported React
namespace rather than an implicit global type.
In `@kits/github-commit-agent/apps/components/ui/empty.tsx`:
- Around line 71-82: EmptyDescription has a props/type mismatch because it is
declared with React.ComponentProps<'p'> but actually renders a div. Update the
component to keep the type and rendered element consistent in EmptyDescription:
either switch the JSX root to a p element or, if div is intended, change the
props typing to React.ComponentProps<'div'> so consumers get the correct
attributes and semantics.
- Around line 1-104: The Empty component file uses React.ComponentProps in
Empty, EmptyHeader, EmptyMedia, EmptyTitle, EmptyDescription, and EmptyContent
without importing React. Add the missing React import at the top of the module
so those type references resolve consistently, following the same pattern used
in related components like collapsible.tsx.
In `@kits/github-commit-agent/apps/components/ui/input-group.tsx`:
- Around line 70-75: The addon click handler in the input group only focuses an
input, so it misses the textarea control used by InputGroupTextarea. Update the
onClick logic in the relevant addon handler to target both control types with a
compound selector, and keep the existing button guard so clicks on nested
buttons still do nothing. Use the same parentElement/querySelector flow in the
input-group component so both input and textarea receive focus when an addon is
clicked.
- Around line 70-76: The div-level click handler in InputGroup is being
overridden by consumer props because `{...props}` is spread after `onClick`, so
the built-in focus behavior can disappear. Update the `InputGroup` component to
destructure `onClick` from props and merge it with the internal click handler so
both run, while preserving the existing button-click guard and input-focus
logic. Keep the behavior in the same wrapper element that currently calls
`e.currentTarget.parentElement?.querySelector('input')?.focus()`.
In `@kits/github-commit-agent/apps/components/ui/kbd.tsx`:
- Around line 18-26: KbdGroup is using React.ComponentProps<'div'> but renders a
kbd element, so align the component with the intended container semantics.
Update KbdGroup to render a div instead of kbd, keeping the existing className
merge and props spread, so the component type and markup match.
In `@kits/github-commit-agent/apps/components/ui/sidebar.tsx`:
- Around line 21-26: The sidebar component has a case-sensitive import path
mismatch that will break builds on Linux/Vercel. Update the Tooltip-related
import in sidebar.tsx to match the actual lowercase tooltip module name used
under `@/components/ui`, keeping the same named imports (Tooltip, TooltipContent,
TooltipProvider, TooltipTrigger). Verify any other imports in the sidebar
component follow the exact filesystem casing to avoid module-not-found errors
with forceConsistentCasingInFileNames.
In `@kits/github-commit-agent/apps/components/ui/toast.tsx`:
- Around line 12-113: The forwardRef typings in ToastViewport, Toast,
ToastAction, ToastClose, ToastTitle, and ToastDescription still use the
deprecated React.ElementRef API. Update each of these declarations in toast.tsx
to use React.ComponentRef for the underlying ToastPrimitives components instead,
keeping the existing generic structure and ref wiring unchanged.
In `@kits/github-commit-agent/apps/components/ui/toggle-group.tsx`:
- Line 8: The import for toggleVariants uses the wrong path casing, so update
the import in toggle-group.tsx to reference the lowercase toggle module instead
of the capitalized Toggle path. Use the existing toggleVariants import statement
in the toggle-group component as the locator, and make sure the module specifier
matches the actual file name exactly so it works consistently across
filesystems.
In `@kits/github-commit-agent/apps/components/ui/toggle.tsx`:
- Around line 1-47: The import in toggle-group.tsx uses the wrong casing for the
toggle module path, which will fail on case-sensitive filesystems. Update the
import to point to the actual toggle.tsx module using the same lowercase path as
the file, and keep the reference to toggleVariants intact so ToggleGroup
continues to use the shared variants correctly.
In `@kits/github-commit-agent/apps/components/ui/use-mobile.tsx`:
- Around line 1-19: The hook implementation is duplicated in useIsMobile,
creating two identical sources of truth; remove the extra copy in the
components/ui version and keep the existing apps/hooks/use-mobile.ts export as
the single implementation. Update any nearby imports or references so components
like sidebar.tsx continue to use `@/hooks/use-mobile`, and ensure only one
useIsMobile definition remains in the codebase.
In `@kits/github-commit-agent/apps/hooks/use-toast.ts`:
- Around line 174-182: The `useEffect` in `useToast` is resubscribing on every
`state` change because the dependency array is `[state]`, which creates a gap
where `setState` is temporarily removed and `dispatch()` updates can be missed.
Update the subscription effect to run only once on mount by using an empty
dependency array, keeping the `listeners.push(setState)` registration and
cleanup logic intact so the toast store stays continuously subscribed.
In `@kits/github-commit-agent/apps/lib/lamatic-client.ts`:
- Around line 16-20: The Lamatic client initialization still hides missing
config by falling back to empty or null values even though the env validation
already guarantees these settings should exist. In lamaticClient, remove the
fallback defaults for endpoint, projectId, and apiKey, or switch the validation
to check config.api directly so the Lamatic constructor only receives verified
values and fails fast if any are absent.
In `@kits/github-commit-agent/apps/next.config.mjs`:
- Around line 3-8: The Next.js config is currently suppressing TypeScript
failures via the typescript ignoreBuildErrors setting, which can hide real
contract breaks during build. Remove that override from next.config.mjs and let
next build fail on type errors, then fix the underlying TypeScript issues in the
affected kit code rather than masking them. Use the typescript and images config
blocks in next.config.mjs to locate the change.
In `@kits/github-commit-agent/apps/package.json`:
- Line 54: The package dependency for lamatic is still using a moving latest
tag, which should be pinned to the published version for reproducible installs.
Update the dependency entry in package.json so lamatic is locked to the
requested version and verify react-markdown is also pinned to its published
version in the same dependencies block, keeping the package manifest auditable
and stable.
In `@kits/github-commit-agent/flows/github-commit-agent.ts`:
- Line 99: The trigger configuration in github-commit-agent.ts has a typo in the
realtime node options: `responeType` should be `responseType`. Update the object
used in the GitHub commit agent flow so the Lamatic runtime receives the
expected key, and verify the change in the trigger setup around the flow
configuration where this property is defined.
- Around line 78-84: Add the missing script entry or correct the alias used by
github_commit_agent_code_node in github_commit-agent.ts so it points to an
existing loadable script. Verify the referenced script file is present under the
expected scripts area for the Fetch Commits from GitHub node, and update the
script mapping and any related references so the node can resolve its
implementation at runtime.
In `@kits/github-commit-agent/prompts/github-commit-agent_llm-node_user.md`:
- Around line 3-7: The prompt currently injects the raw commit list directly
into the instruction text, so treat `{{codeNode_100.output.commits}}` as
untrusted input. Update the `github-commit-agent_llm-node_user.md` prompt to
fence that variable inside a code block and add an explicit instruction to
ignore any directives contained within it. Keep the summarization request
outside the fenced block so the model only classifies and summarizes the commit
messages.
---
Outside diff comments:
In `@kits/github-commit-agent/apps/README.md`:
- Around line 1-156: The README still describes the Reddit Scout app and points
to the wrong demo, repo, environment variables, and root directory, so rewrite
it for the GitHub Commit Agent kit. Update the title, overview, deploy
badge/link targets, and setup steps to match this kit, and replace the
Reddit-specific symbols like REDDIT_SCOUT_FLOW_ID and kits/agentic/reddit-scout
with the correct GitHub Commit Agent flow/env names. Also refresh the repo
structure and feature sections so they reference the actual app files and
workflow names in this kit.
🪄 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: Repository UI (base), Organization UI (inherited)
Review profile: ASSERTIVE
Plan: Pro
Run ID: 2e88c994-6aa8-4cdf-90dd-0db20a594f31
⛔ Files ignored due to path filters (9)
kits/github-commit-agent/apps/package-lock.jsonis excluded by!**/package-lock.jsonkits/github-commit-agent/apps/public/apple-icon.pngis excluded by!**/*.pngkits/github-commit-agent/apps/public/icon-dark-32x32.pngis excluded by!**/*.pngkits/github-commit-agent/apps/public/icon-light-32x32.pngis excluded by!**/*.pngkits/github-commit-agent/apps/public/icon.svgis excluded by!**/*.svgkits/github-commit-agent/apps/public/lamatic-logo.pngis excluded by!**/*.pngkits/github-commit-agent/apps/public/placeholder-logo.pngis excluded by!**/*.pngkits/github-commit-agent/apps/public/placeholder-logo.svgis excluded by!**/*.svgkits/github-commit-agent/apps/public/placeholder.svgis excluded by!**/*.svg
📒 Files selected for processing (89)
kits/github-commit-agent/.env.examplekits/github-commit-agent/.gitignorekits/github-commit-agent/README.mdkits/github-commit-agent/agent.mdkits/github-commit-agent/apps/.env.examplekits/github-commit-agent/apps/.gitignorekits/github-commit-agent/apps/.npmrckits/github-commit-agent/apps/README.mdkits/github-commit-agent/apps/actions/orchestrate.tskits/github-commit-agent/apps/app/globals.csskits/github-commit-agent/apps/app/layout.tsxkits/github-commit-agent/apps/app/page.tsxkits/github-commit-agent/apps/components.jsonkits/github-commit-agent/apps/components/header.tsxkits/github-commit-agent/apps/components/theme-provider.tsxkits/github-commit-agent/apps/components/ui/accordion.tsxkits/github-commit-agent/apps/components/ui/alert-dialog.tsxkits/github-commit-agent/apps/components/ui/alert.tsxkits/github-commit-agent/apps/components/ui/aspect-ratio.tsxkits/github-commit-agent/apps/components/ui/avatar.tsxkits/github-commit-agent/apps/components/ui/badge.tsxkits/github-commit-agent/apps/components/ui/breadcrumb.tsxkits/github-commit-agent/apps/components/ui/button-group.tsxkits/github-commit-agent/apps/components/ui/button.tsxkits/github-commit-agent/apps/components/ui/calendar.tsxkits/github-commit-agent/apps/components/ui/card.tsxkits/github-commit-agent/apps/components/ui/carousel.tsxkits/github-commit-agent/apps/components/ui/chart.tsxkits/github-commit-agent/apps/components/ui/checkbox.tsxkits/github-commit-agent/apps/components/ui/collapsible.tsxkits/github-commit-agent/apps/components/ui/command.tsxkits/github-commit-agent/apps/components/ui/context-menu.tsxkits/github-commit-agent/apps/components/ui/dialog.tsxkits/github-commit-agent/apps/components/ui/drawer.tsxkits/github-commit-agent/apps/components/ui/dropdown-menu.tsxkits/github-commit-agent/apps/components/ui/empty.tsxkits/github-commit-agent/apps/components/ui/field.tsxkits/github-commit-agent/apps/components/ui/form.tsxkits/github-commit-agent/apps/components/ui/hover-card.tsxkits/github-commit-agent/apps/components/ui/input-group.tsxkits/github-commit-agent/apps/components/ui/input-otp.tsxkits/github-commit-agent/apps/components/ui/input.tsxkits/github-commit-agent/apps/components/ui/item.tsxkits/github-commit-agent/apps/components/ui/kbd.tsxkits/github-commit-agent/apps/components/ui/label.tsxkits/github-commit-agent/apps/components/ui/menubar.tsxkits/github-commit-agent/apps/components/ui/navigation-menu.tsxkits/github-commit-agent/apps/components/ui/pagination.tsxkits/github-commit-agent/apps/components/ui/popover.tsxkits/github-commit-agent/apps/components/ui/progress.tsxkits/github-commit-agent/apps/components/ui/radio-group.tsxkits/github-commit-agent/apps/components/ui/resizable.tsxkits/github-commit-agent/apps/components/ui/scroll-area.tsxkits/github-commit-agent/apps/components/ui/select.tsxkits/github-commit-agent/apps/components/ui/separator.tsxkits/github-commit-agent/apps/components/ui/sheet.tsxkits/github-commit-agent/apps/components/ui/sidebar.tsxkits/github-commit-agent/apps/components/ui/skeleton.tsxkits/github-commit-agent/apps/components/ui/slider.tsxkits/github-commit-agent/apps/components/ui/sonner.tsxkits/github-commit-agent/apps/components/ui/spinner.tsxkits/github-commit-agent/apps/components/ui/switch.tsxkits/github-commit-agent/apps/components/ui/table.tsxkits/github-commit-agent/apps/components/ui/tabs.tsxkits/github-commit-agent/apps/components/ui/textarea.tsxkits/github-commit-agent/apps/components/ui/toast.tsxkits/github-commit-agent/apps/components/ui/toaster.tsxkits/github-commit-agent/apps/components/ui/toggle-group.tsxkits/github-commit-agent/apps/components/ui/toggle.tsxkits/github-commit-agent/apps/components/ui/tooltip.tsxkits/github-commit-agent/apps/components/ui/use-mobile.tsxkits/github-commit-agent/apps/hooks/use-mobile.tskits/github-commit-agent/apps/hooks/use-toast.tskits/github-commit-agent/apps/lib/lamatic-client.tskits/github-commit-agent/apps/lib/utils.tskits/github-commit-agent/apps/next.config.mjskits/github-commit-agent/apps/orchestrate.jskits/github-commit-agent/apps/package.jsonkits/github-commit-agent/apps/postcss.config.mjskits/github-commit-agent/apps/tsconfig.jsonkits/github-commit-agent/constitutions/default.mdkits/github-commit-agent/flows/github-commit-agent.tskits/github-commit-agent/lamatic.config.tskits/github-commit-agent/model-configs/github-commit-agent_llm-node.tskits/github-commit-agent/model-configs/github-commit-agent_parse-intent.tskits/github-commit-agent/prompts/github-commit-agent_llm-node_system.mdkits/github-commit-agent/prompts/github-commit-agent_llm-node_user.mdkits/github-commit-agent/prompts/github-commit-agent_parse-intent_system.mdkits/github-commit-agent/prompts/github-commit-agent_parse-intent_user.md
|
Hi @Kritiman2005! 👋 Before this PR can be reviewed by maintainers, please resolve all comments and requested changes from the CodeRabbit automated review. Steps to follow:
This helps keep the review process efficient for everyone. Thank you! 🙏 |
|
|
Hi @github-actions, All CodeRabbit comments and requested changes have been fully resolved.
Ready for maintainer review! 🙏 |
GitHub Commit Agent by Lamatic.ai
GitHub Commit Agent is an AI-powered release notes and commit history summarization tool built with Lamatic.ai. It turns raw git commit history into clean, structured, human-readable developer updates. Users can simply paste a GitHub repository URL (e.g.
https://github.com/facebook/react) or ask a natural language question (e.g. "What changed in Lamatic/AgentKit since v1.0.0?") into a single search input to automatically locate tags, branch ranges, and diff limits.The Problem
Every software team ships code constantly. But writing meaningful release notes, changelog entries, sprint updates, or change audits is tedious, always skipped, or reduced to lazy, uninformative commit copy-pastes like "bug fixes and improvements".
When an incident occurs or stakeholders ask what shipped, team members waste 15-20 minutes digging through pull requests, diff ranges, and commit logs to figure out what changed and why.
There is a clear need for a tool that sits directly between raw git history and human stakeholder communications, translating technical logs into plain English.
Who is it for?
CHANGELOG.mdupdates before tagging new releases.The Approach
GitHub Commit Agent is a single-purpose tool: input a natural language request, get a structured commit review, instantly.
How it works:
repo,base_ref, andhead_refas structured JSON.Tech stack:
The Result
A clean, single-page app where users query repositories and get structured changelogs in seconds:
Setup & Run
1. Import the flow into Lamatic Studio
flows/github-commit-agent.tsmodel-configs/github-commit-agent_parse-intent.tsmodel-configs/github-commit-agent_llm-node.ts2. Configure environment variables
Create a
.env.localfile inside theappsdirectory:LAMATIC_API_KEYLAMATIC_PROJECT_IDLAMATIC_API_URLGITHUB_COMMIT_AGENT_FLOW_IDGITHUB_TOKEN3. Run the App Locally
cd apps npm install npm run devOpen http://localhost:3000 to use the UI.
Extending & Connecting to Other Apps (Slack, Notion, Google Drive, etc.)
Because this agent is built on Lamatic Studio, you can easily connect the generated changelogs to your other work applications without writing any integration code:
+button directly after the Classify & Summarise Commits node.#announcementsor engineering channel.Smart Auto-Detection & Fallbacks
To ensure a frictionless user experience, the custom Code Node dynamically resolves references if they are omitted in the natural language message:
/tagsAPI.main) and compares the latest 10 commits.v1.2.0.main).Tip
No Bottleneck: When the user explicitly states both refs (e.g. "Compare v1.0.0 and v1.1.0"), the auto-detection is completely bypassed and calls the Compare API directly, ensuring maximum speed.
Tradeoffs & Assumptions
GITHUB_TOKENis highly recommended for production endpoints.Tags
github, devtools, generative, automation, release
Contributed by Kritiman Talukdar — AgentKit Challenge Submission
flows/github-commit-agent.tsworkflow that:repo,base_ref, andhead_ref,summarypluscomparedmetadata.