Skip to content

feat: Add changelog-generator AgentKit #86

Open
RoBWarrior wants to merge 19 commits intoLamatic:mainfrom
RoBWarrior:main
Open

feat: Add changelog-generator AgentKit #86
RoBWarrior wants to merge 19 commits intoLamatic:mainfrom
RoBWarrior:main

Conversation

@RoBWarrior
Copy link
Copy Markdown

@RoBWarrior RoBWarrior commented Mar 22, 2026

What This Kit Does

An AI-powered changelog generator that takes a GitHub repository URL and a date range, then produces a professional, well-structured changelog in seconds.

Providers & Prerequisites

  • Lamatic.ai account (free)
  • Groq API key (free) — LLM provider via Lamatic Flows
  • Node.js 18+

How to Run Locally

  1. cd kits/automation/changelog-generator
  2. npm install
  3. cp .env.example .env.local and fill in values
  4. npm run dev

Live Preview

https://agent-kit-sable.vercel.app/

Lamatic Flow

Flow ID: 4c3801ea-0353-4678-afc1-db47efd231ea

Checklist

  • Kit runs locally with npm run dev
  • .env.example has no secrets, only placeholders
  • README.md documents setup and usage
  • Folder structure follows kits/automation/changelog-generator/
  • config.json is present and valid
  • Vercel deployment works
  • Live preview URL works end-to-end
  • Adds Changelog Generator AgentKit at kits/automation/changelog-generator (Next.js + TypeScript). Local run: cd kits/automation/changelog-generator; npm install; cp .env.example .env.local; npm run dev. Live preview: https://agent-kit-sable.vercel.app/. Lamatic Flow ID: 4c3801ea-0353-4678-afc1-db47efd231ea.

  • Files added (concise):

    • Root / metadata:
      • README.md — kit overview, prerequisites (Node 18+, Lamatic account, Groq API key), setup, Lamatic Flow creation/deploy notes, Vercel envs.
      • config.json — kit descriptor referencing LAMATIC_FLOW_ID.
      • package.json, tsconfig.json, next.config.ts, postcss.config.mjs, eslint.config.mjs, .gitignore, .env.example.
    • App / UI:
      • app/page.tsx — client page with repo URL + date range form, validation, loading/error states, calls server action, renders markdown (react-markdown), "Copy Markdown" button with temporary feedback.
      • app/layout.tsx — root Next.js layout, fonts, exported metadata (title/description).
      • app/globals.css — Tailwind + theme token mappings, light/dark theme tokens, base styles.
    • Server orchestration:
      • actions/orchestrate.ts — bootstraps Lamatic client (requires LAMATIC_PROJECT_ENDPOINT/ID/API_KEY & LAMATIC_FLOW_ID), exports generateChangelog({repoUrl,dateFrom,dateTo}), validates github.com repo URL and date range, executes Lamatic flow, supports async polling when response includes requestId, extracts changelog from multiple payload locations or throws.
    • Flow artifacts:
      • flows/changelog-flow/config.json — flow definition (see nodes below).
      • flows/changelog-flow/inputs.json — private input for selecting generative model (generativeModelName).
      • flows/changelog-flow/meta.json — flow metadata and test input.
      • flows/changelog-flow/README.md — flow README and contributor guidance.
    • UI primitives / components:
      • components.json — shadcn config.
      • components/ui/button.tsx, card.tsx, select.tsx, textarea.tsx — UI building blocks (variants, Radix wrappers, etc.).
    • Utilities:
      • lib/utils.ts — cn helper (clsx + twMerge).
  • Flow (kits/automation/changelog-generator/flows/changelog-flow/config.json) — node types and high-level behavior:

    • triggerNode_1 (triggerNode / API Request) — HTTP entrypoint accepting advance_schema inputs: repo_url, date_from, date_to (realtime trigger).
    • LLMNode_549 (dynamicNode / "Generate Text") — Groq LLaMA text-generation node:
      • Uses system + user prompts; user prompt injects trigger inputs (repo URL and date range) and instructs producing an emoji-headed markdown changelog with specific sections (Summary, New Features, Bug Fixes, Improvements, Breaking Changes, Dependencies) and to omit empty sections.
      • generativeModelName is provided as a private input (defaults/load via listModels); configured to use groq/llama-3.1-8b-instant in the flow definition.
    • responseNode_triggerNode_1 (responseNode / API Response) — maps LLM output to JSON: { "changeLog": "{{LLMNode_549.output.generatedResponse}}" } and returns content-type: application/json.
    • Edges:
      • triggerNode_1 -> LLMNode_549 (default edge)
      • LLMNode_549 -> responseNode_triggerNode_1 (default edge)
      • triggerNode_1 -> responseNode_triggerNode_1 (response edge to connect HTTP trigger to response node)
  • High-level flow behavior:

    • HTTP trigger receives repo_url + date range → forwards inputs to LLM node → LLM generates a strict markdown changelog per prompt template → the flow maps generated text to changeLog in JSON response and returns it to the caller.
    • Supports synchronous responses or asynchronous execution (flow may return a requestId; actions/orchestrate.ts polls checkStatus until completion).
  • Notable implementation details:

    • Orchestrate logic validates inputs, enforces github.com repo pattern and dateFrom ≤ dateTo, requires LAMATIC_FLOW_ID, and robustly extracts the changelog from multiple possible response paths.
    • Prompts enforce exact markdown structure and conditional omission of empty sections; flow inputs include a private generativeModelName to select the Groq model.

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Mar 22, 2026

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

Adds a new Next.js kit "changelog-generator": app UI, Tailwind theme, reusable UI primitives, Lamatic flow export and orchestration code to run a Groq LLaMA-based changelog generation flow, plus docs, configs, and environment examples.

Changes

Cohort / File(s) Summary
Project config & tooling
kits/automation/changelog-generator/.gitignore, kits/automation/changelog-generator/components.json, kits/automation/changelog-generator/config.json, kits/automation/changelog-generator/eslint.config.mjs, kits/automation/changelog-generator/next.config.ts, kits/automation/changelog-generator/package.json, kits/automation/changelog-generator/postcss.config.mjs, kits/automation/changelog-generator/tsconfig.json
New project-level metadata and tooling files: ignore rules, shadcn config, kit manifest, ESLint config, Next.js config, package scripts/deps, PostCSS/Tailwind plugin, and TypeScript settings.
Docs & env
kits/automation/changelog-generator/README.md, kits/automation/changelog-generator/.env.example
Added README explaining kit purpose, Lamatic Flow setup, Vercel deploy instructions, and an example .env with LAMATIC variables.
Lamatic flow export
kits/automation/changelog-generator/flows/changelog-flow/config.json, kits/automation/changelog-generator/flows/changelog-flow/inputs.json, kits/automation/changelog-generator/flows/changelog-flow/meta.json, kits/automation/changelog-generator/flows/changelog-flow/README.md
New Lamatic flow (API trigger → Groq LLaMA generate-text → API response) with private model input, metadata, and exported README.
Server orchestration
kits/automation/changelog-generator/actions/orchestrate.ts
New server-side orchestrator generateChangelog({repoUrl,dateFrom,dateTo}): validates inputs, builds Lamatic client from env, runs the flow, supports async polling or sync responses, and extracts changelog from multiple response shapes.
Next.js app shell & styles
kits/automation/changelog-generator/app/layout.tsx, kits/automation/changelog-generator/app/page.tsx, kits/automation/changelog-generator/app/globals.css
Added root layout with metadata and fonts, client page with form/markdown rendering and copy-to-clipboard, and Tailwind global stylesheet with theme tokens and dark-mode overrides.
UI components
kits/automation/changelog-generator/components/ui/button.tsx, kits/automation/changelog-generator/components/ui/card.tsx, kits/automation/changelog-generator/components/ui/select.tsx, kits/automation/changelog-generator/components/ui/textarea.tsx
New reusable UI primitives: Button (variants/sizes), Card family, Radix-wrapped Select suite, and Textarea wrapper.
Utilities
kits/automation/changelog-generator/lib/utils.ts
Adds cn(...) helper that composes class names via clsx and twMerge.

Suggested reviewers

  • amanintech
  • d-pamneja
🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title 'feat: Add changelog-generator AgentKit' clearly and concisely describes the primary change—adding a new changelog generator kit to the repository.
Description check ✅ Passed The description covers key requirements: contribution type (kit), general requirements (no secrets, kebab-case folder), file structure validation (config.json, flows, .env.example present), and completion of all checklist items including local testing, documentation, and deployment verification.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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 and usage tips.

Copy link
Copy Markdown
Contributor

@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: 11

🧹 Nitpick comments (1)
kits/automation/changelog-generator/components/ui/select.tsx (1)

78-86: Remove dead code in Viewport className.

Line 82 contains position === "popper" && "" which is a no-op—it adds an empty string when the condition is true, having no effect on the rendered output. This appears to be leftover placeholder code.

🧹 Proposed cleanup
         <SelectPrimitive.Viewport
           data-position={position}
-          className={cn(
-            "data-[position=popper]:h-(--radix-select-trigger-height) data-[position=popper]:w-full data-[position=popper]:min-w-(--radix-select-trigger-width)",
-            position === "popper" && ""
-          )}
+          className="data-[position=popper]:h-(--radix-select-trigger-height) data-[position=popper]:w-full data-[position=popper]:min-w-(--radix-select-trigger-width)"
         >

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 5f1065c4-d11a-4669-9ad4-83277942160b

📥 Commits

Reviewing files that changed from the base of the PR and between e1ceb47 and e4f9260.

⛔ Files ignored due to path filters (7)
  • kits/automation/changelog-generator/app/favicon.ico is excluded by !**/*.ico
  • kits/automation/changelog-generator/package-lock.json is excluded by !**/package-lock.json
  • kits/automation/changelog-generator/public/file.svg is excluded by !**/*.svg
  • kits/automation/changelog-generator/public/globe.svg is excluded by !**/*.svg
  • kits/automation/changelog-generator/public/next.svg is excluded by !**/*.svg
  • kits/automation/changelog-generator/public/vercel.svg is excluded by !**/*.svg
  • kits/automation/changelog-generator/public/window.svg is excluded by !**/*.svg
📒 Files selected for processing (18)
  • kits/automation/changelog-generator/.gitignore
  • kits/automation/changelog-generator/README.md
  • kits/automation/changelog-generator/actions/orchestrate.ts
  • kits/automation/changelog-generator/app/globals.css
  • kits/automation/changelog-generator/app/layout.tsx
  • kits/automation/changelog-generator/app/page.tsx
  • kits/automation/changelog-generator/components.json
  • kits/automation/changelog-generator/components/ui/button.tsx
  • kits/automation/changelog-generator/components/ui/card.tsx
  • kits/automation/changelog-generator/components/ui/select.tsx
  • kits/automation/changelog-generator/components/ui/textarea.tsx
  • kits/automation/changelog-generator/config.json
  • kits/automation/changelog-generator/eslint.config.mjs
  • kits/automation/changelog-generator/lib/utils.ts
  • kits/automation/changelog-generator/next.config.ts
  • kits/automation/changelog-generator/package.json
  • kits/automation/changelog-generator/postcss.config.mjs
  • kits/automation/changelog-generator/tsconfig.json

Comment on lines +83 to +94
```
changelog-generator/
├── app/
│ └── page.tsx # Main UI
├── actions/
│ └── orchestrate.ts # Lamatic Flow API call
├── flows/
│ └── changelog-flow/ # Exported Lamatic flow files
├── .env.example # Environment variables template
├── config.json # Kit metadata
└── README.md
```
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Add a language to the fenced structure block.

This block is currently tripping the markdownlint warning that was attached to the review. text is enough here.

📝 Suggested doc fix
-```
+```text
 changelog-generator/
 ├── app/
 │   └── page.tsx          # Main UI
@@
 ├── config.json           # Kit metadata
 └── README.md
</details>

<!-- suggestion_start -->

<details>
<summary>📝 Committable suggestion</summary>

> ‼️ **IMPORTANT**
> Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

```suggestion

🧰 Tools
🪛 markdownlint-cli2 (0.21.0)

[warning] 83-83: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

Copy link
Copy Markdown
Contributor

@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

🧹 Nitpick comments (4)
kits/automation/changelog-generator/.env.example (1)

1-4: Add a trailing newline for POSIX compliance.

Most text editors and POSIX tools expect files to end with a newline character.

📝 Suggested fix
 LAMATIC_PROJECT_ENDPOINT=YOUR_API_ENDPOINT
 LAMATIC_FLOW_ID=YOUR_FLOW_ID
 LAMATIC_PROJECT_ID=YOUR_PROJECT_ID
-LAMATIC_PROJECT_API_KEY=YOUR_API_KEY
+LAMATIC_PROJECT_API_KEY=YOUR_API_KEY
+
kits/automation/changelog-generator/app/page.tsx (2)

126-139: Consider using lucide-react icons instead of inline SVGs.

As per coding guidelines, kits should use lucide-react for icons. The inline SVGs for the spinner, lightning bolt, checkmark, clipboard, and document icons could be replaced with their lucide equivalents (e.g., Loader2, Zap, Check, Copy, FileText).

♻️ Example replacement for the submit button icons
+"use client";
+
+import { useState } from "react";
+import { generateChangelog } from "@/actions/orchestrate";
+import ReactMarkdown from "react-markdown";
+import { Loader2, Zap, Check, Copy, FileText } from "lucide-react";

...

 <button type="submit" disabled={isLoading} className="...">
   {isLoading ? (
     <>
-      <svg className="animate-spin w-4 h-4" viewBox="0 0 24 24" fill="none">
-        <circle className="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" strokeWidth="4" />
-        <path className="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8v8z" />
-      </svg>
+      <Loader2 className="animate-spin w-4 h-4" />
       Generating...
     </>
   ) : (
     <>
-      <svg className="w-4 h-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth={2}>
-        <path strokeLinecap="round" strokeLinejoin="round" d="M13 10V3L4 14h7v7l9-11h-7z" />
-      </svg>
+      <Zap className="w-4 h-4" />
       Generate Changelog
     </>
   )}
 </button>

As per coding guidelines: "Use lucide-react for icons throughout kits".


35-41: Consider handling clipboard API failures.

navigator.clipboard.writeText() can fail in non-secure contexts or when permissions are denied. Wrapping it in a try-catch would prevent silent failures.

🛡️ Suggested fix
 const handleCopy = () => {
   if (result) {
-    navigator.clipboard.writeText(result);
-    setCopied(true);
-    setTimeout(() => setCopied(false), 2000);
+    navigator.clipboard.writeText(result)
+      .then(() => {
+        setCopied(true);
+        setTimeout(() => setCopied(false), 2000);
+      })
+      .catch(() => {
+        setError("Failed to copy to clipboard");
+      });
   }
 };
kits/automation/changelog-generator/actions/orchestrate.ts (1)

5-16: Consider lazy initialization to improve error diagnostics.

The Lamatic client is created at module load time (line 16). If env vars are missing, the error is thrown during server startup rather than when the action is invoked, which can make debugging harder in serverless environments.

♻️ Lazy initialization pattern
-const lamaticClient = createLamaticClient();
+let lamaticClient: Lamatic | null = null;
+
+function getLamaticClient() {
+  if (!lamaticClient) {
+    lamaticClient = createLamaticClient();
+  }
+  return lamaticClient;
+}

 export async function generateChangelog({
   ...
 }: ChangelogInput): Promise<string> {
   ...
-  const response = await lamaticClient.executeFlow(flowId, {
+  const response = await getLamaticClient().executeFlow(flowId, {

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: d444bb34-e03b-4eff-bf85-1a4918bb5ace

📥 Commits

Reviewing files that changed from the base of the PR and between e4f9260 and c6d40f2.

📒 Files selected for processing (7)
  • kits/automation/changelog-generator/.env.example
  • kits/automation/changelog-generator/.gitignore
  • kits/automation/changelog-generator/README.md
  • kits/automation/changelog-generator/actions/orchestrate.ts
  • kits/automation/changelog-generator/app/globals.css
  • kits/automation/changelog-generator/app/layout.tsx
  • kits/automation/changelog-generator/app/page.tsx
✅ Files skipped from review due to trivial changes (1)
  • kits/automation/changelog-generator/.gitignore
🚧 Files skipped from review as they are similar to previous changes (1)
  • kits/automation/changelog-generator/app/layout.tsx

Copy link
Copy Markdown
Contributor

@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: 1

🧹 Nitpick comments (1)
kits/automation/changelog-generator/actions/orchestrate.ts (1)

52-57: Consider adding fallbacks for requestId extraction.

Other kits (e.g., embed/sheets) use a fallback chain like response?.result?.requestId || response?.requestId || response?.id to handle API response variations. If Lamatic's response structure can vary, a single-point extraction may miss valid async responses.

♻️ Optional improvement
   // Handle async flow (returns requestId)
-  if (response?.result?.requestId) {
+  const requestId = response?.result?.requestId || response?.requestId;
+  if (requestId) {
     const finalResult = await lamaticClient.checkStatus(
-      response.result.requestId,
+      requestId,
       5,
       120
     ) as any;

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: f24cf9f9-b8c8-4a4a-b0e6-c54d651ea1c5

📥 Commits

Reviewing files that changed from the base of the PR and between c6d40f2 and 4ebcc94.

📒 Files selected for processing (2)
  • kits/automation/changelog-generator/README.md
  • kits/automation/changelog-generator/actions/orchestrate.ts

Comment on lines +29 to +33
const parsedRepoUrl = new URL(repoUrl);
const [owner, repo] = parsedRepoUrl.pathname.split("/").filter(Boolean);
if (parsedRepoUrl.hostname !== "github.com" || !owner || !repo) {
throw new Error("repoUrl must be a valid GitHub repository URL");
}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Wrap URL parsing in try-catch to return a friendly error.

new URL(repoUrl) throws a TypeError if repoUrl is not a valid URL. This surfaces as an opaque server error instead of the descriptive message on line 32.

🛡️ Suggested fix
-  const parsedRepoUrl = new URL(repoUrl);
-  const [owner, repo] = parsedRepoUrl.pathname.split("/").filter(Boolean);
-  if (parsedRepoUrl.hostname !== "github.com" || !owner || !repo) {
+  let parsedRepoUrl: URL;
+  try {
+    parsedRepoUrl = new URL(repoUrl);
+  } catch {
+    throw new Error("repoUrl must be a valid GitHub repository URL");
+  }
+  const [owner, repo] = parsedRepoUrl.pathname.split("/").filter(Boolean);
+  if (parsedRepoUrl.hostname !== "github.com" || !owner || !repo) {
     throw new Error("repoUrl must be a valid GitHub repository URL");
   }

@RoBWarrior RoBWarrior changed the title feat: Add changelog-generator AgentKit [agentkit-challenge] feat: Add changelog-generator AgentKit Mar 26, 2026
@coderabbitai coderabbitai bot requested review from amanintech and d-pamneja March 29, 2026 13:34
Copy link
Copy Markdown
Contributor

@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: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@kits/automation/changelog-generator/flows/changelog-flow/config.json`:
- Around line 35-46: The prompt in config.json asks LLMNode_549 to generate a
changelog without any repo data, enabling hallucinations; add a GitHub data
retrieval node (e.g., a GitHub API node) placed before LLMNode_549 that fetches
structured activity (PRs with titles/authors/merge dates, commit messages, and
release notes) for the requested date range, then update the LLMNode_549 prompt
to consume those structured outputs (for example use placeholders like
{{GitHubNode.output.prs}}, {{GitHubNode.output.commits}},
{{GitHubNode.output.releases}}) and validate empty results by instructing the
model to return “No changes found” when no data is present.

In `@kits/automation/changelog-generator/flows/changelog-flow/meta.json`:
- Around line 3-8: Populate the empty flow metadata fields in meta.json by
filling "description" with a concise summary of the changelog-generator flow and
its purpose, add relevant comma-separated "tags" for discoverability, provide a
representative "testInput" JSON example that exercises the flow, and set
"githubUrl", "documentationUrl", and "deployUrl" to the correct repository,
user-facing docs page, and deployment/installation link respectively so
automated cataloging and tests can validate the flow.

In `@kits/automation/changelog-generator/flows/changelog-flow/README.md`:
- Line 57: Replace the plain text "Check the Lamatic documentation at
docs.lamatic.ai" in the README entry with a clickable Markdown link by changing
it to the full URL in Markdown form (e.g.,
[https://docs.lamatic.ai](https://docs.lamatic.ai)); update the sentence so the
documentation reference becomes an actionable hyperlink for readers.
🪄 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: 6d97ea5b-f7f4-4dbc-817e-75302a82dd87

📥 Commits

Reviewing files that changed from the base of the PR and between 4ebcc94 and 887e5a6.

📒 Files selected for processing (4)
  • kits/automation/changelog-generator/flows/changelog-flow/README.md
  • kits/automation/changelog-generator/flows/changelog-flow/config.json
  • kits/automation/changelog-generator/flows/changelog-flow/inputs.json
  • kits/automation/changelog-generator/flows/changelog-flow/meta.json

Comment on lines +35 to +46
"tools": [],
"prompts": [
{
"id": "187c2f4b-c23d-4545-abef-73dc897d6b7b",
"role": "system",
"content": "You are an expert developer assistant that generates professional, well-structured changelogs from GitHub repository information. You always format output in clean markdown with emoji section headers. You write clearly for both technical and non-technical audiences."
},
{
"id": "187c2f4b-c23d-4545-abef-73dc897d6b7d",
"role": "user",
"content": "Generate a professional changelog for the following GitHub repository:\nRepository: {{triggerNode_1.output.repo_url}}\nFrom Date: {{triggerNode_1.output.date_from}}\nTo Date: {{triggerNode_1.output.date_to}}\nCreate a well-structured changelog in this exact format:\n## 📋 Summary\n(2-sentence plain English summary for non-technical stakeholders)\n## 🚀 New Features\n(list new features, or omit section if none)\n## 🐛 Bug Fixes\n(list bug fixes, or omit section if none)\n## 🔧 Improvements\n(list improvements/enhancements, or omit section if none)\n## ⚠️ Breaking Changes\n(list breaking changes, or omit section if none)\n## 📦 Dependencies\n(list dependency updates, or omit section if none)"
}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

Mission-critical defect: changelog generation is ungrounded and can hallucinate.

Line [35] and Line [45] show the model is asked to generate a changelog without any fetched repo activity (commits/PRs/releases). This can produce fabricated release notes, which breaks the feature objective.

Add a GitHub data retrieval node before LLMNode_549 and pass structured results (PR titles, commit messages, release notes) into the prompt context.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@kits/automation/changelog-generator/flows/changelog-flow/config.json` around
lines 35 - 46, The prompt in config.json asks LLMNode_549 to generate a
changelog without any repo data, enabling hallucinations; add a GitHub data
retrieval node (e.g., a GitHub API node) placed before LLMNode_549 that fetches
structured activity (PRs with titles/authors/merge dates, commit messages, and
release notes) for the requested date range, then update the LLMNode_549 prompt
to consume those structured outputs (for example use placeholders like
{{GitHubNode.output.prs}}, {{GitHubNode.output.commits}},
{{GitHubNode.output.releases}}) and validate empty results by instructing the
model to return “No changes found” when no data is present.

@github-actions
Copy link
Copy Markdown

Hi @RoBWarrior! 👋

Before this PR can be reviewed by maintainers, please resolve all comments and requested changes from the CodeRabbit automated review.

Steps to follow:

  1. Read through all CodeRabbit comments carefully
  2. Address each issue raised (or reply explaining why you disagree)
  3. Push your fixes as new commits
  4. Once all issues are resolved, comment here so we can re-review

This helps keep the review process efficient for everyone. Thank you! 🙏

@RoBWarrior
Copy link
Copy Markdown
Author

Addressed all CodeRabbit review comments. Fixed meta.json metadata, updated README link, and clarified AI-generated nature of changelog in flow config.

Copy link
Copy Markdown
Contributor

@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.

♻️ Duplicate comments (1)
kits/automation/changelog-generator/flows/changelog-flow/config.json (1)

45-45: ⚠️ Potential issue | 🔴 Critical

Mission-critical defect: changelog generation is intentionally ungrounded.

Line 45 instructs the model to produce a plausible changelog while explicitly saying repo activity was not fetched. That creates fabricated release notes and breaks trust in output correctness.

Proposed hardening path
- "content": "Generate a professional changelog ... generate a plausible AI-assisted changelog ... actual commit data was not fetched."
+ "content": "Generate a professional changelog from fetched repository activity only.
+ Repository: {{triggerNode_1.output.repo_url}}
+ From Date: {{triggerNode_1.output.date_from}}
+ To Date: {{triggerNode_1.output.date_to}}
+ PRs: {{GitHubActivityNode.output.prs}}
+ Commits: {{GitHubActivityNode.output.commits}}
+ Releases: {{GitHubActivityNode.output.releases}}
+ If activity inputs are empty, return exactly: 'No changes found for the selected date range.'"
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@kits/automation/changelog-generator/flows/changelog-flow/config.json` at line
45, The prompt in the config.json "content" field currently asks the model to
generate a "plausible" changelog without fetching real commits, which allows
fabrication; update the prompt so the model only uses actual fetched data or
explicitly returns an error if no data is available. Concretely, edit the
"content" string used by the changelog flow to (a) remove the word "plausible"
and the note that commit data was not fetched, (b) require using commit/PR data
from the flow (e.g., use placeholders like {{triggerNode_1.output.commits}} or
{{triggerNode_1.output.prs}} and instruct the model to base the changelog only
on those items), and (c) add a fallback instruction to respond with a clear "No
changelog: no commit/PR data available for the given range" message if the
trigger outputs are empty; target the "content" field in config.json and the
templating around triggerNode_1.output.*.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Duplicate comments:
In `@kits/automation/changelog-generator/flows/changelog-flow/config.json`:
- Line 45: The prompt in the config.json "content" field currently asks the
model to generate a "plausible" changelog without fetching real commits, which
allows fabrication; update the prompt so the model only uses actual fetched data
or explicitly returns an error if no data is available. Concretely, edit the
"content" string used by the changelog flow to (a) remove the word "plausible"
and the note that commit data was not fetched, (b) require using commit/PR data
from the flow (e.g., use placeholders like {{triggerNode_1.output.commits}} or
{{triggerNode_1.output.prs}} and instruct the model to base the changelog only
on those items), and (c) add a fallback instruction to respond with a clear "No
changelog: no commit/PR data available for the given range" message if the
trigger outputs are empty; target the "content" field in config.json and the
templating around triggerNode_1.output.*.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI (base), Organization UI (inherited)

Review profile: ASSERTIVE

Plan: Pro

Run ID: 07e590a2-e373-41c2-a165-ae5694918a4a

📥 Commits

Reviewing files that changed from the base of the PR and between 887e5a6 and 92b0276.

📒 Files selected for processing (3)
  • kits/automation/changelog-generator/flows/changelog-flow/README.md
  • kits/automation/changelog-generator/flows/changelog-flow/config.json
  • kits/automation/changelog-generator/flows/changelog-flow/meta.json

@github-actions
Copy link
Copy Markdown

@coderabbitai review

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Mar 30, 2026

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@github-actions
Copy link
Copy Markdown

github-actions bot commented Apr 1, 2026

@coderabbitai review

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Apr 1, 2026

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@github-actions
Copy link
Copy Markdown

github-actions bot commented Apr 3, 2026

@coderabbitai review

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Apr 3, 2026

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@github-actions
Copy link
Copy Markdown

github-actions bot commented Apr 6, 2026

@coderabbitai review

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Apr 6, 2026

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@github-actions
Copy link
Copy Markdown

github-actions bot commented Apr 6, 2026

PR Validation Results

New Contributions Detected

  • Kit: kits/automation/changelog-generator

Check Results

Check Status
No edits to existing projects ✅ Pass
Required root files present ✅ Pass
Flow folder structure valid ✅ Pass
No changes outside contribution dirs ✅ Pass

🎉 All checks passed! This contribution follows the AgentKit structure.

Copy link
Copy Markdown
Contributor

@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.

♻️ Duplicate comments (1)
kits/automation/changelog-generator/flows/changelog-flow/config.json (1)

35-46: ⚠️ Potential issue | 🔴 Critical

Mission-critical gap: changelog generation is still ungrounded.

This flow still asks LLMNode_549 to generate release notes without any fetched repo activity (commits/PRs/releases). With only URL + dates, output remains speculative and can’t reliably satisfy changelog correctness. Route a GitHub retrieval node before LLMNode_549, pass structured activity into the prompt, and return “No changes found” when empty.

Based on learnings: Flows in flows/ directories must be valid Lamatic Studio exports; update logic in Lamatic Studio and re-export config.json to avoid schema drift.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@kits/automation/changelog-generator/flows/changelog-flow/config.json` around
lines 35 - 46, The flow currently sends only URL+dates to LLMNode_549 which
produces ungrounded changelogs; insert a GitHub retrieval node (e.g., a node
that fetches commits/PRs/releases) before LLMNode_549, map its structured output
(commits[], pull_requests[], releases[]) into the LLM prompt so LLMNode_549
consumes real activity data, and add logic to detect empty activity and return
the literal "No changes found" instead of generating speculative entries;
finally open the flow in Lamatic Studio, update the logic and node wiring
accordingly, then re-export the flow config.json to ensure it matches Lamatic
Studio's schema.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Duplicate comments:
In `@kits/automation/changelog-generator/flows/changelog-flow/config.json`:
- Around line 35-46: The flow currently sends only URL+dates to LLMNode_549
which produces ungrounded changelogs; insert a GitHub retrieval node (e.g., a
node that fetches commits/PRs/releases) before LLMNode_549, map its structured
output (commits[], pull_requests[], releases[]) into the LLM prompt so
LLMNode_549 consumes real activity data, and add logic to detect empty activity
and return the literal "No changes found" instead of generating speculative
entries; finally open the flow in Lamatic Studio, update the logic and node
wiring accordingly, then re-export the flow config.json to ensure it matches
Lamatic Studio's schema.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI (base), Organization UI (inherited)

Review profile: ASSERTIVE

Plan: Pro

Run ID: da240880-d393-420b-8fc5-81e196d7c74e

📥 Commits

Reviewing files that changed from the base of the PR and between 887e5a6 and 4917a18.

📒 Files selected for processing (3)
  • kits/automation/changelog-generator/flows/changelog-flow/README.md
  • kits/automation/changelog-generator/flows/changelog-flow/config.json
  • kits/automation/changelog-generator/flows/changelog-flow/meta.json

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants