Skip to content

Feat : Samples#51

Merged
d-pamneja merged 3 commits intomainfrom
ops
Nov 10, 2025
Merged

Feat : Samples#51
d-pamneja merged 3 commits intomainfrom
ops

Conversation

@d-pamneja
Copy link
Copy Markdown
Contributor

@d-pamneja d-pamneja commented Nov 4, 2025

Summary by CodeRabbit

Release Notes

  • New Features

    • Added AI Assistant Chatbot flow for interactive on-site conversations powered by LLM.
    • Added Slack Bot flow for converting websites into Slack bots with real-time context.
    • Added Agentic Reasoning agent kit with multiple multi-agent processing flows.
  • Documentation

    • Added comprehensive README and setup guides for new flows and agent kits.
    • Added flow configuration examples and workflow documentation.
  • Chores

    • Updated environment and template configurations.

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Nov 4, 2025

Walkthrough

This PR introduces comprehensive sample flows and an agent kit template to the templates/sample directory. The changes add AI Assistant Chatbot and Slack Bot flows with configurations, TypeScript implementations, and YAML definitions, plus an Agentic Reasoning agent kit. Concurrently, template infrastructure files (package.json, root README) are removed or updated.

Changes

Cohort / File(s) Summary
Template Infrastructure Updates
templates/sample/.env.example, templates/sample/.gitignore, templates/sample/README.md, templates/sample/package.json
Removes LAMATIC_CONFIG_AGENT_KIT from .env.example; adds embedded_chatbot/ to .gitignore; clears root README content; deletes entire package.json manifest
AI Assistant Chatbot Flow
templates/sample/samples/flows/AI-Assistant-Chatbot/README.md, templates/sample/samples/flows/AI-Assistant-Chatbot/config/BrokenHoney-3019.json, templates/sample/samples/flows/AI-Assistant-Chatbot/flow/BrokenHoney-3019.ts, templates/sample/samples/flows/AI-Assistant-Chatbot/yaml/BrokenHoney-3019.yaml
Adds complete AI Assistant Chatbot sample with metadata, TypeScript flow configuration (exports getNodesAndEdges, getFlowConfig), and YAML workflow definition featuring chat trigger, LLM node, and response mapping
Slack Bot on Website Data Flow
templates/sample/samples/flows/Slack-Bot-on-Website-Data/README.md, templates/sample/samples/flows/Slack-Bot-on-Website-Data/config/\*.json, templates/sample/samples/flows/Slack-Bot-on-Website-Data/flow/\*.ts, templates/sample/samples/flows/Slack-Bot-on-Website-Data/yaml/\*.yaml, templates/sample/samples/flows/Slack-Bot-on-Website-Data/metadata.json
Introduces dual-flow Slack integration: CrookedZoo (Firecrawl-based website scraping, chunking, vectorization, and indexing) and ScarceLifeguard (RAG-based Slack command processing); includes metadata, configs, TypeScript implementations, and YAML definitions
Agentic Reasoning Agent Kit
templates/sample/samples/agentKit/Agentic-Reasoning/.gitignore, templates/sample/samples/agentKit/Agentic-Reasoning/README.md, templates/sample/samples/agentKit/Agentic-Reasoning/lamatic/README.md, templates/sample/samples/agentKit/Agentic-Reasoning/lamatic/config/kit_config.json, templates/sample/samples/agentKit/Agentic-Reasoning/lamatic/flow/\*.ts, templates/sample/samples/agentKit/Agentic-Reasoning/lamatic/yaml/\*.yaml
Adds multi-agent reasoning agent kit with setup documentation, kit configuration, and three flow implementations (BillowySalesman, EnoughHouse, FancyApplication) via TypeScript and YAML, each exporting getNodesAndEdges and getFlowConfig functions

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

  • Areas requiring extra attention:
    • templates/sample/samples/agentKit/Agentic-Reasoning/lamatic/config/kit_config.json: Potential JSON syntax issues flagged (missing comma between demoURL and metadata; misspelling "resoning-kit" as slug value)
    • YAML files (CrookedZoo.yaml, ScarceLifeguard.yaml, BillowySalesman.yaml, EnoughHouse.yaml, FancyApplication.yaml): Large configuration definitions with inter-node dependencies and schemas; validate data flow connections and prompt/configuration correctness
    • Consistency check across all three flow/TS implementations: verify getNodesAndEdges and getFlowConfig function signatures and return structures align across files

Possibly related PRs

  • Fix : Config Removal #42: Modifies LAMATIC_CONFIG_AGENT_KIT environment variable handling in .env.example; conflicts with this PR's deletion of the same variable.

Poem

🐰 Templates bloom and flows take flight,
Chatbots chat and agents think so bright,
From Slack to search, each piece in place,
Configuration wired with gentle grace—
New samples spring to ease the race! 🌱

Pre-merge checks and finishing touches

❌ Failed checks (1 inconclusive)
Check name Status Explanation Resolution
Title check ❓ Inconclusive The title 'Feat : Samples' is vague and generic, using non-descriptive terms that don't convey meaningful information about the changeset's primary focus or objective. Provide a more specific title describing the main changes, such as 'Add AI Assistant and Slack Bot flow templates with configuration and YAML definitions' or 'Add sample flows and agent kit configurations'.
✅ Passed checks (1 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch ops

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: 4

🧹 Nitpick comments (3)
templates/sample/samples/flows/AI-Assistant-Chatbot/flow/BrokenHoney-3019.ts (1)

290-302: Consider whether async is necessary for these functions.

Both exported functions are marked async but return synchronous data without any await operations. This pattern is duplicated across multiple flow files (CrookedZoo.ts, ScarceLifeguard.ts).

If this is intentional for API consistency or future-proofing, consider adding a comment explaining the rationale. Otherwise, these could be simplified to synchronous functions.

Example simplification (if async is not needed):

-export async function getNodesAndEdges(): Promise<{
+export function getNodesAndEdges(): {
     nodes: Record<string, any>[],
     edges: Record<string, any>[],
-}> {
+} {
     return {
         nodes: flowConfig.nodes,
         edges: flowConfig.edges,
     }
 }

-export async function getFlowConfig(): Promise<Record<string, any>> {
+export function getFlowConfig(): Record<string, any> {
     return flowConfig;
 }

Alternatively, if keeping async for consistency, apply the same pattern to all similar files and document the reasoning.

templates/sample/samples/flows/Slack-Bot-on-Website-Data/flow/CrookedZoo.ts (1)

579-591: Functions marked async without async operations.

The exported functions getNodesAndEdges() and getFlowConfig() are marked async but simply return static data without performing any asynchronous operations. While this is consistent across all flow templates in this PR, consider whether the async keyword is necessary or if it's intentionally included for future API compatibility.

If no async operations are planned, you can simplify to:

-export async function getNodesAndEdges(): Promise<{
+export function getNodesAndEdges(): {
     nodes: Record<string, any>[],
     edges: Record<string, any>[],
-}> {
+} {
     return {
         nodes: flowConfig.nodes,
         edges: flowConfig.edges,
     }
 }

-export async function getFlowConfig(): Promise<Record<string, any>> {
+export function getFlowConfig(): Record<string, any> {
     return flowConfig;
 }

However, if the async signature is required for interface compatibility or future extensibility, the current implementation is acceptable.

templates/sample/samples/flows/Slack-Bot-on-Website-Data/flow/ScarceLifeguard.ts (1)

312-324: Code duplication across flow template modules.

The exported functions getNodesAndEdges() and getFlowConfig() are identical across all flow template TypeScript files (CrookedZoo.ts, ScarceLifeguard.ts, BrokenHoney-3019.ts). While this duplication is acceptable for sample templates that are meant to be self-contained, consider whether these could be abstracted into a shared utility if these templates are meant to be extended or maintained together.

For self-contained sample templates, the current approach is reasonable. If these are meant to be a maintained template library, consider extracting to a shared helper:

// shared/flowHelpers.ts
export function createFlowHelpers(flowConfig: Record<string, any>) {
  return {
    getNodesAndEdges: async () => ({
      nodes: flowConfig.nodes,
      edges: flowConfig.edges,
    }),
    getFlowConfig: async () => flowConfig,
  };
}

Then in each file:

const { getNodesAndEdges, getFlowConfig } = createFlowHelpers(flowConfig);
export { getNodesAndEdges, getFlowConfig };
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

Disabled knowledge base sources:

  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 06d0dfb and 5c6260d.

📒 Files selected for processing (16)
  • templates/sample/.env.example (0 hunks)
  • templates/sample/.gitignore (1 hunks)
  • templates/sample/README.md (0 hunks)
  • templates/sample/package.json (0 hunks)
  • templates/sample/samples/flows/AI-Assistant-Chatbot/README.md (1 hunks)
  • templates/sample/samples/flows/AI-Assistant-Chatbot/config/BrokenHoney-3019.json (1 hunks)
  • templates/sample/samples/flows/AI-Assistant-Chatbot/flow/BrokenHoney-3019.ts (1 hunks)
  • templates/sample/samples/flows/AI-Assistant-Chatbot/yaml/BrokenHoney-3019.yaml (1 hunks)
  • templates/sample/samples/flows/Slack-Bot-on-Website-Data/README.md (1 hunks)
  • templates/sample/samples/flows/Slack-Bot-on-Website-Data/config/CrookedZoo.json (1 hunks)
  • templates/sample/samples/flows/Slack-Bot-on-Website-Data/config/ScarceLifeguard.json (1 hunks)
  • templates/sample/samples/flows/Slack-Bot-on-Website-Data/flow/CrookedZoo.ts (1 hunks)
  • templates/sample/samples/flows/Slack-Bot-on-Website-Data/flow/ScarceLifeguard.ts (1 hunks)
  • templates/sample/samples/flows/Slack-Bot-on-Website-Data/metadata.json (1 hunks)
  • templates/sample/samples/flows/Slack-Bot-on-Website-Data/yaml/CrookedZoo.yaml (1 hunks)
  • templates/sample/samples/flows/Slack-Bot-on-Website-Data/yaml/ScarceLifeguard.yaml (1 hunks)
💤 Files with no reviewable changes (3)
  • templates/sample/README.md
  • templates/sample/package.json
  • templates/sample/.env.example
🧰 Additional context used
🧬 Code graph analysis (3)
templates/sample/samples/flows/AI-Assistant-Chatbot/flow/BrokenHoney-3019.ts (2)
templates/sample/samples/flows/Slack-Bot-on-Website-Data/flow/CrookedZoo.ts (2)
  • getNodesAndEdges (579-587)
  • getFlowConfig (589-591)
templates/sample/samples/flows/Slack-Bot-on-Website-Data/flow/ScarceLifeguard.ts (2)
  • getNodesAndEdges (312-320)
  • getFlowConfig (322-324)
templates/sample/samples/flows/Slack-Bot-on-Website-Data/flow/ScarceLifeguard.ts (2)
templates/sample/samples/flows/AI-Assistant-Chatbot/flow/BrokenHoney-3019.ts (2)
  • getNodesAndEdges (290-298)
  • getFlowConfig (300-302)
templates/sample/samples/flows/Slack-Bot-on-Website-Data/flow/CrookedZoo.ts (2)
  • getNodesAndEdges (579-587)
  • getFlowConfig (589-591)
templates/sample/samples/flows/Slack-Bot-on-Website-Data/flow/CrookedZoo.ts (2)
templates/sample/samples/flows/AI-Assistant-Chatbot/flow/BrokenHoney-3019.ts (2)
  • getNodesAndEdges (290-298)
  • getFlowConfig (300-302)
templates/sample/samples/flows/Slack-Bot-on-Website-Data/flow/ScarceLifeguard.ts (2)
  • getNodesAndEdges (312-320)
  • getFlowConfig (322-324)
🔇 Additional comments (10)
templates/sample/samples/flows/Slack-Bot-on-Website-Data/README.md (1)

1-2: LGTM!

Clear and concise description of the Slack bot flow functionality.

templates/sample/.gitignore (1)

1-2: LGTM!

The ignore patterns correctly exclude the specified directories from version control, aligning with the template restructuring.

templates/sample/samples/flows/AI-Assistant-Chatbot/config/BrokenHoney-3019.json (1)

1-6: LGTM!

The configuration metadata is well-structured and complete.

templates/sample/samples/flows/AI-Assistant-Chatbot/README.md (1)

1-2: LGTM!

Clear description of the interactive chat widget flow and its functionality.

templates/sample/samples/flows/Slack-Bot-on-Website-Data/config/ScarceLifeguard.json (1)

1-6: LGTM!

The Slack Bot configuration is properly structured with appropriate metadata.

templates/sample/samples/flows/AI-Assistant-Chatbot/flow/BrokenHoney-3019.ts (1)

1-288: LGTM!

The flow configuration is comprehensive and well-structured, defining a complete AI Assistant Chatbot template with all necessary nodes and edges.

templates/sample/samples/flows/Slack-Bot-on-Website-Data/yaml/ScarceLifeguard.yaml (1)

7-8: Hardcoded Slack channel IDs and credential references in sample template.

The YAML contains hardcoded values that users will need to replace:

  • Slack channel ID C08E8M9KWDV (lines 7, 17, 247, 431)
  • Credential ID 0fc2f9ae-4a22-41e3-b63a-3e7db8902a9e (lines 391, 399)
  • Credential reference Slack OAuth (lines 8, 18, 248, 432)

Since this is a sample template, ensure that documentation clearly indicates these are placeholder values that must be replaced with the user's actual Slack workspace configuration.

Consider adding a comment block at the top of the YAML file or in the accompanying README to document required replacements:

# Sample Slack RAG Bot Flow Configuration
# 
# REQUIRED CONFIGURATION:
# - Replace channelName 'C08E8M9KWDV' with your Slack channel ID
# - Configure 'Slack OAuth' credentials in your workspace
# - Replace credentialId with your OpenAI API key credential ID
# - Update TestDB with your actual vector database name

Also applies to: 17-18, 247-248, 391-393, 431-432

templates/sample/samples/flows/AI-Assistant-Chatbot/yaml/BrokenHoney-3019.yaml (2)

11-12: Verify image licensing for sample template.

The chatbot configuration uses an image from Freepik (https://img.freepik.com/premium-vector/robot-android-super-hero_111928-7.jpg). Ensure this image can be used in sample templates or consider using a royalty-free alternative, as Freepik premium content may require attribution or licensing.

Consider either:

  1. Verifying the license allows use in open-source samples
  2. Replacing with a Creative Commons or public domain image
  3. Using a placeholder URL with documentation for users to replace it

You might also add a comment in the YAML:

imageUrl: >-
  # Replace with your own bot image URL
  https://img.freepik.com/premium-vector/robot-android-super-hero_111928-7.jpg?w=826

323-325: Hardcoded credential ID in sample template.

The LLM node contains a hardcoded credentialId: 0fc2f9ae-4a22-41e3-b63a-3e7db8902a9e which users will need to replace with their own OpenAI credentials. Ensure documentation clearly indicates this is a placeholder.

Consider adding documentation or a comment indicating required configuration changes for users deploying this template.

templates/sample/samples/flows/Slack-Bot-on-Website-Data/yaml/CrookedZoo.yaml (1)

348-348: Hardcoded credential and database references in sample template.

This flow template contains several hardcoded references that users need to replace:

  • FIRECRAWL_API_KEY credential reference (line 348, 390)
  • OpenAI credential ID 0fc2f9ae-4a22-41e3-b63a-3e7db8902a9e (line 555)
  • Vector database name TestDB (line 619, 635)

Ensure accompanying documentation clearly explains these are placeholder values requiring user configuration.

Consider adding a header comment in the YAML documenting required setup:

# Web Scraping and Vectorization Flow
#
# SETUP REQUIRED:
# 1. Configure FIRECRAWL_API_KEY in credentials
# 2. Configure OPENAI_KEY credential for embeddings
# 3. Create or configure TestDB vector database
# 4. Update credentialId values with your actual credential IDs

Also applies to: 555-557, 619-619

@@ -0,0 +1,6 @@
{
"name" : "Scrapping Websites Indexation",
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

Fix typo: "Scrapping" should be "Scraping".

The word "Scrapping" (discarding) should be "Scraping" (extracting data from websites). This matches the same issue in metadata.json.

Apply this diff:

-    "name" : "Scrapping Websites Indexation",
+    "name" : "Scraping Websites Indexation",
📝 Committable suggestion

‼️ 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.

Suggested change
"name" : "Scrapping Websites Indexation",
"name" : "Scraping Websites Indexation",
🤖 Prompt for AI Agents
In
templates/sample/samples/flows/Slack-Bot-on-Website-Data/config/CrookedZoo.json
around line 2, the "name" value contains a typo: change "Scrapping Websites
Indexation" to "Scraping Websites Indexation". Make the exact string replacement
on that line (and if present, apply the same correction in metadata.json to keep
names consistent).

@@ -0,0 +1,591 @@
const flowConfig = {
"id": "f5dfbdf8-0e08-40f9-9ff2-1091399afc51",
"name": "Scrapping Websites Indexation",
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

Fix typo in flow name.

Line 3 contains "Scrapping" which should be "Scraping". This typo appears in the flow configuration name.

Apply this diff to fix the typo:

-  "name": "Scrapping Websites Indexation",
+  "name": "Scraping Websites Indexation",
📝 Committable suggestion

‼️ 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.

Suggested change
"name": "Scrapping Websites Indexation",
"name": "Scraping Websites Indexation",
🤖 Prompt for AI Agents
In templates/sample/samples/flows/Slack-Bot-on-Website-Data/flow/CrookedZoo.ts
around line 3, the flow "name" contains a typo "Scrapping Websites Indexation";
update the value to "Scraping Websites Indexation" by replacing "Scrapping" with
"Scraping" in the JSON/object literal so the flow name is corrected.

nodeType: graphqlNode
nodeName: API Request
values:
responeType: realtime
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

Fix typo in configuration property name.

The property name responeType is misspelled and should be responseType. This typo appears in both the main values section (line 6) and the Config A section (line 16).

Apply this diff:

   values:
-    responeType: realtime
+    responseType: realtime
     advance_schema: |-
       {
         "urls": "[string]"
       }
   modes: {}
   allConfigs:
     Config A:
       nodeName: API Request
-      responeType: realtime
+      responseType: realtime

Also applies to: 16-16

🤖 Prompt for AI Agents
In templates/sample/samples/flows/Slack-Bot-on-Website-Data/yaml/CrookedZoo.yaml
around lines 6 and 16, the configuration property name "responeType" is
misspelled; update both occurrences to "responseType" so the config key is
correct in the main values section (line 6) and the Config A section (line 16).

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: 30

🧹 Nitpick comments (23)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/avatar.tsx (3)

8-22: Add ref forwarding for proper component composition.

The Avatar component should use React.forwardRef to allow refs to be attached to the underlying Radix primitive. This is a standard pattern for reusable UI components and may be needed for accessibility features, animations, or DOM measurements.

Apply this diff to add ref forwarding:

-function Avatar({
+const Avatar = React.forwardRef<
+  React.ElementRef<typeof AvatarPrimitive.Root>,
+  React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>
+>(({
   className,
   ...props
-}: React.ComponentProps<typeof AvatarPrimitive.Root>) {
+}, ref) => {
   return (
     <AvatarPrimitive.Root
+      ref={ref}
       data-slot="avatar"
       className={cn(
         "relative flex size-8 shrink-0 overflow-hidden rounded-full",
         className
       )}
       {...props}
     />
   )
-}
+})
+Avatar.displayName = "Avatar"

24-35: Add ref forwarding for proper component composition.

The AvatarImage component should use React.forwardRef to allow refs to be attached to the underlying Radix primitive.

Apply this diff to add ref forwarding:

-function AvatarImage({
+const AvatarImage = React.forwardRef<
+  React.ElementRef<typeof AvatarPrimitive.Image>,
+  React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Image>
+>(({
   className,
   ...props
-}: React.ComponentProps<typeof AvatarPrimitive.Image>) {
+}, ref) => {
   return (
     <AvatarPrimitive.Image
+      ref={ref}
       data-slot="avatar-image"
       className={cn("aspect-square size-full", className)}
       {...props}
     />
   )
-}
+})
+AvatarImage.displayName = "AvatarImage"

37-51: Add ref forwarding for proper component composition.

The AvatarFallback component should use React.forwardRef to allow refs to be attached to the underlying Radix primitive.

Apply this diff to add ref forwarding:

-function AvatarFallback({
+const AvatarFallback = React.forwardRef<
+  React.ElementRef<typeof AvatarPrimitive.Fallback>,
+  React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Fallback>
+>(({
   className,
   ...props
-}: React.ComponentProps<typeof AvatarPrimitive.Fallback>) {
+}, ref) => {
   return (
     <AvatarPrimitive.Fallback
+      ref={ref}
       data-slot="avatar-fallback"
       className={cn(
         "bg-muted flex size-full items-center justify-center rounded-full",
         className
       )}
       {...props}
     />
   )
-}
+})
+AvatarFallback.displayName = "AvatarFallback"
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/carousel.tsx (1)

113-114: Simplify redundant orientation logic.

The fallback check for opts?.axis is unnecessary since the axis option is already set based on the orientation parameter at lines 56-57. The orientation will always have a value from the parameter.

Apply this diff to simplify:

         orientation:
-          orientation || (opts?.axis === "y" ? "vertical" : "horizontal"),
+          orientation,
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/collapsible.tsx (1)

5-31: Consider simplifying the parameter destructuring pattern.

All three wrapper functions use { ...props } as the parameter destructuring, which immediately spreads all parameters into the props object. This pattern is functionally equivalent to just using props directly without destructuring. Consider simplifying for clarity:

Example for one function (apply similarly to all three):

-function Collapsible({
-  ...props
-}: React.ComponentProps<typeof CollapsiblePrimitive.Root>) {
+function Collapsible(
+  props: React.ComponentProps<typeof CollapsiblePrimitive.Root>
+) {
   return <CollapsiblePrimitive.Root data-slot="collapsible" {...props} />
 }
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/chart.tsx (1)

235-239: Consider locale-aware formatting options.

The toLocaleString() call without parameters uses the browser's default locale, which may not match the application's configured locale. Consider accepting a locale parameter or using a formatter function from the config.

-{item.value && (
-  <span className="text-foreground font-mono font-medium tabular-nums">
-    {item.value.toLocaleString()}
-  </span>
-)}
+{item.value && (
+  <span className="text-foreground font-mono font-medium tabular-nums">
+    {typeof item.value === 'number' ? item.value.toLocaleString() : item.value}
+  </span>
+)}
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/aspect-ratio.tsx (1)

5-7: Consider simplifying the parameter destructuring.

The { ...props } destructuring pattern is valid but unnecessarily verbose. Since you're accepting all props without extracting specific ones, the conventional approach is to use the parameter directly.

Apply this diff for cleaner code:

-function AspectRatio({
-  ...props
-}: React.ComponentProps<typeof AspectRatioPrimitive.Root>) {
+function AspectRatio(props: React.ComponentProps<typeof AspectRatioPrimitive.Root>) {
   return <AspectRatioPrimitive.Root data-slot="aspect-ratio" {...props} />
 }
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/use-mobile.tsx (1)

5-19: Potential hydration mismatch with mobile detection.

The hook initializes isMobile as undefined and returns !!isMobile (which coerces undefined to false). During SSR, this will always return false, but on the client's first render before the effect runs, it may not match the actual viewport state, potentially causing a hydration mismatch warning.

Consider initializing with a safe default or using a more explicit SSR-safe pattern:

 export function useIsMobile() {
-  const [isMobile, setIsMobile] = React.useState<boolean | undefined>(undefined)
+  const [isMobile, setIsMobile] = React.useState<boolean>(false)

   React.useEffect(() => {
     const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`)
     const onChange = () => {
       setIsMobile(window.innerWidth < MOBILE_BREAKPOINT)
     }
     mql.addEventListener("change", onChange)
     setIsMobile(window.innerWidth < MOBILE_BREAKPOINT)
     return () => mql.removeEventListener("change", onChange)
   }, [])

-  return !!isMobile
+  return isMobile
 }
templates/sample/samples/agentKit/Agentic-Reasoning/scripts/deploy.sh (1)

1-6: Consider adding basic error handling.

The script lacks error handling, which could lead to confusing failures if npm install fails but npm run dev is attempted anyway.

Consider adding basic error checks:

 #!/bin/bash
+set -e  # Exit on any error

 npm install

 # Run the dev server
 npm run dev

Alternatively, for more verbose feedback:

#!/bin/bash

echo "Installing dependencies..."
if ! npm install; then
  echo "Error: npm install failed"
  exit 1
fi

echo "Starting development server..."
npm run dev
templates/sample/samples/agentKit/Agentic-Reasoning/.env.example (1)

1-1: Remove unnecessary quotes and add trailing newline.

The placeholder value doesn't need quotes in a .env.example file, and the file should end with a newline per POSIX standards.

Apply this diff:

-LAMATIC_CONFIG_REASONING="your_lamatic_config_reasoning_key"
+LAMATIC_CONFIG_REASONING=your_lamatic_config_reasoning_key
+
templates/sample/samples/agentKit/Agentic-Reasoning/hooks/use-mobile.ts (1)

6-18: Consider SSR/hydration implications.

The initial state is undefined, and the actual value is set synchronously in useEffect. During SSR, the hook returns false (via !!undefined), but on the client it may immediately become true, potentially causing a hydration mismatch warning in Next.js.

Consider initializing with a safer default or documenting this behavior.

templates/sample/samples/agentKit/Agentic-Reasoning/package.json (1)

46-46: Pin versions for deterministic builds.

Using "latest" for @vercel/analytics, geist, and react-markdown will cause non-deterministic builds, as different installations may pull different versions. This can lead to unexpected breakages and makes debugging harder.

Consider pinning to specific versions or using caret ranges (e.g., ^1.2.3) for predictable dependency resolution.

Also applies to: 53-53, 63-63

templates/sample/samples/agentKit/Agentic-Reasoning/lib/lamatic-client.ts (2)

2-2: Remove unused import.

The fs import is not used anywhere in this file.

Apply this diff:

 import { Lamatic } from "lamatic";
-import fs from "fs";

10-10: Consider error handling for malformed config.

If the base64-encoded config is malformed or the JSON is invalid, JSON.parse will throw an uncaught exception. Consider wrapping this in a try-catch with a more informative error message.

Example:

let config;
try {
  config = JSON.parse(Buffer.from(process.env.LAMATIC_CONFIG_REASONING, "base64").toString("utf8"));
} catch (error) {
  throw new Error(
    "Failed to parse LAMATIC_CONFIG_REASONING. Ensure it contains valid base64-encoded JSON."
  );
}
templates/sample/samples/agentKit/Agentic-Reasoning/lamatic/flow/BillowySalesman.ts (1)

256-268: Consider removing unnecessary async declarations.

Both getNodesAndEdges() and getFlowConfig() are marked as async but only return synchronous in-memory data without performing any async operations. While this pattern is consistent with other flow files in the codebase (EnoughHouse.ts, FancyApplication.ts), the async markers are technically unnecessary.

If this pattern is intentional for API consistency or future-proofing, consider adding a comment explaining the rationale. Otherwise, the functions could be simplified to:

-export async function getNodesAndEdges(): Promise<{
+export function getNodesAndEdges(): {
     nodes: Record<string, any>[],
     edges: Record<string, any>[],
-}> {
+} {
     return {
         nodes: flowConfig.nodes,
         edges: flowConfig.edges,
     }
 }

-export async function getFlowConfig(): Promise<Record<string, any>> {
+export function getFlowConfig(): Record<string, any> {
     return flowConfig;
 }
templates/sample/samples/agentKit/Agentic-Reasoning/app/layout.tsx (1)

9-13: Consider removing or updating the generator metadata field.

The generator: "v0.app" field appears to be boilerplate from a code generation tool. Consider whether this metadata is necessary for your production application or if it should be updated to reflect your actual generator/framework.

 export const metadata: Metadata = {
   title: "Agent Kit Reasoning",
   description: "AI-powered search and chat interface by Lamatic.ai",
-  generator: "v0.app",
 }
templates/sample/samples/agentKit/Agentic-Reasoning/lamatic/flow/FancyApplication.ts (1)

423-435: Consider making functions synchronous and improving type safety.

Both exported functions are declared async but immediately return static data without any asynchronous operations. Additionally, using Record<string, any> loses type safety.

-export async function getNodesAndEdges(): Promise<{
+export function getNodesAndEdges(): {
     nodes: Record<string, any>[],
     edges: Record<string, any>[],
-}> {
+} {
     return {
         nodes: flowConfig.nodes,
         edges: flowConfig.edges,
     }
 }

-export async function getFlowConfig(): Promise<Record<string, any>> {
+export function getFlowConfig(): Record<string, any> {
     return flowConfig;
 }

Additionally, consider defining proper TypeScript interfaces for your flow configuration to improve type safety:

interface FlowNode {
    id: string;
    data: Record<string, any>;
    type: string;
    position: { x: number; y: number };
    // ... other fields
}

interface FlowEdge {
    id: string;
    source: string;
    target: string;
    // ... other fields
}

interface FlowConfig {
    id: string;
    name: string;
    nodes: FlowNode[];
    edges: FlowEdge[];
    status: string;
    created_at: string;
}
templates/sample/samples/agentKit/Agentic-Reasoning/lamatic/flow/EnoughHouse.ts (1)

256-268: Consider making functions synchronous and improving type safety.

Same as in FancyApplication.ts, both functions are unnecessarily async and use loose typing. Note that this pattern is duplicated across multiple flow files (FancyApplication.ts, BillowySalesman.ts, and this file).

Consider:

  1. Removing async/Promise since no async operations occur
  2. Defining proper TypeScript interfaces for flow configuration
  3. Extracting this pattern to a shared utility to reduce duplication
-export async function getNodesAndEdges(): Promise<{
+export function getNodesAndEdges(): {
     nodes: Record<string, any>[],
     edges: Record<string, any>[],
-}> {
+} {
     return {
         nodes: flowConfig.nodes,
         edges: flowConfig.edges,
     }
 }

-export async function getFlowConfig(): Promise<Record<string, any>> {
+export function getFlowConfig(): Record<string, any> {
     return flowConfig;
 }
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/pagination.tsx (1)

102-117: Specify explicit value for aria-hidden attribute.

At line 108, the aria-hidden attribute is used as a boolean without an explicit value. While React will convert this to aria-hidden="true", it's better practice to be explicit for clarity and consistency.

Apply this diff:

 function PaginationEllipsis({
   className,
   ...props
 }: React.ComponentProps<"span">) {
   return (
     <span
-      aria-hidden
+      aria-hidden="true"
       data-slot="pagination-ellipsis"
       className={cn("flex size-9 items-center justify-center", className)}
       {...props}
     >
       <MoreHorizontalIcon className="size-4" />
       <span className="sr-only">More pages</span>
     </span>
   )
 }
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/dialog.tsx (1)

9-143: Forward refs to preserve Radix compatibility.

These wrapper components are plain functions, so any ref passed in by consumers is lost. Radix primitives rely on refs for focus management and TypeScript expects the ref to stay available; today, downstream code can no longer do something as simple as const triggerRef = React.useRef(null); <DialogTrigger ref={triggerRef} … />. Please wrap each Radix-facing component in React.forwardRef (and set displayName) so the underlying primitive keeps its ref surface, e.g.:

- function DialogTrigger({
-   ...props
- }: React.ComponentProps<typeof DialogPrimitive.Trigger>) {
-   return <DialogPrimitive.Trigger data-slot="dialog-trigger" {...props} />
- }
+ const DialogTrigger = React.forwardRef<
+   React.ElementRef<typeof DialogPrimitive.Trigger>,
+   React.ComponentPropsWithoutRef<typeof DialogPrimitive.Trigger>
+ >((props, ref) => (
+   <DialogPrimitive.Trigger
+     ref={ref}
+     data-slot="dialog-trigger"
+     {...props}
+   />
+ ))
+ DialogTrigger.displayName = DialogPrimitive.Trigger.displayName

Apply the same pattern to the other wrappers here.

templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/select.tsx (1)

9-185: Forward refs so Select consumers keep control surfaces.

Every wrapper (SelectTrigger, SelectContent, SelectItem, etc.) currently swallows refs because they’re plain functions. Consumers can no longer grab DOM nodes (e.g., focusing a trigger programmatically or integrating with form libraries that rely on refs), and TypeScript will complain when a ref is passed. Please wrap each Radix wrapper in React.forwardRef (plus displayName) so refs propagate through, following the same pattern Radix/shadcn components use.

templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/menubar.tsx (1)

9-276: Restore ref forwarding on Menubar primitives.

Wrapping the Radix menubar primitives in plain functions removes their ref surface, which breaks patterns like focusing triggers/items or integrating with libraries that rely on refs. Please convert these wrappers to React.forwardRef components (and set displayName) so they behave like the original Radix exports.

templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/context-menu.tsx (1)

9-252: Forward refs through the Context Menu wrappers.

Similar to the other UI modules, these wrappers drop the ref support that Radix provides. Downstream code can no longer attach refs to items/triggers (useful for focus management or imperative positioning). Please switch the wrappers to React.forwardRef with matching displayName values so the public API remains fully compatible with the Radix primitives.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

Disabled knowledge base sources:

  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 5c6260d and a673e55.

⛔ Files ignored due to path filters (3)
  • templates/sample/samples/agentKit/Agentic-Reasoning/app/icon.png is excluded by !**/*.png
  • templates/sample/samples/agentKit/Agentic-Reasoning/public/lamatic-logo.png is excluded by !**/*.png
  • templates/sample/samples/agentKit/Agentic-Reasoning/public/placeholder.svg is excluded by !**/*.svg
📒 Files selected for processing (80)
  • templates/sample/.gitignore (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/.env.example (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/.gitignore (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/.npmrc (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/LICENSE (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/README.md (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/actions/orchestrate.ts (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/app/globals.css (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/app/layout.tsx (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/app/page.tsx (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/components.json (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/components/theme-provider.tsx (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/accordion.tsx (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/alert-dialog.tsx (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/alert.tsx (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/aspect-ratio.tsx (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/avatar.tsx (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/badge.tsx (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/breadcrumb.tsx (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/button.tsx (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/calendar.tsx (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/card.tsx (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/carousel.tsx (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/chart.tsx (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/checkbox.tsx (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/collapsible.tsx (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/command.tsx (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/context-menu.tsx (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/dialog.tsx (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/drawer.tsx (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/dropdown-menu.tsx (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/form.tsx (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/hover-card.tsx (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/input-otp.tsx (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/input.tsx (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/label.tsx (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/menubar.tsx (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/navigation-menu.tsx (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/pagination.tsx (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/popover.tsx (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/progress.tsx (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/radio-group.tsx (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/resizable.tsx (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/scroll-area.tsx (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/select.tsx (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/separator.tsx (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/sheet.tsx (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/sidebar.tsx (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/skeleton.tsx (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/slider.tsx (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/sonner.tsx (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/switch.tsx (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/table.tsx (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/tabs.tsx (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/textarea.tsx (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/toast.tsx (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/toaster.tsx (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/toggle-group.tsx (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/toggle.tsx (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/tooltip.tsx (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/use-mobile.tsx (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/use-toast.ts (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/hooks/use-mobile.ts (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/hooks/use-toast.ts (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/lamatic/README.md (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/lamatic/config/kit_config.json (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/lamatic/flow/BillowySalesman.ts (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/lamatic/flow/EnoughHouse.ts (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/lamatic/flow/FancyApplication.ts (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/lamatic/yaml/BillowySalesman.yaml (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/lamatic/yaml/EnoughHouse.yaml (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/lamatic/yaml/FancyApplication.yaml (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/lib/lamatic-client.ts (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/lib/utils.ts (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/next.config.mjs (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/package.json (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/postcss.config.mjs (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/scripts/deploy.sh (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/styles/globals.css (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/tsconfig.json (1 hunks)
✅ Files skipped from review due to trivial changes (5)
  • templates/sample/samples/agentKit/Agentic-Reasoning/tsconfig.json
  • templates/sample/samples/agentKit/Agentic-Reasoning/.npmrc
  • templates/sample/samples/agentKit/Agentic-Reasoning/lamatic/README.md
  • templates/sample/samples/agentKit/Agentic-Reasoning/LICENSE
  • templates/sample/samples/agentKit/Agentic-Reasoning/.gitignore
🚧 Files skipped from review as they are similar to previous changes (1)
  • templates/sample/.gitignore
🧰 Additional context used
🧬 Code graph analysis (55)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/label.tsx (1)
templates/sample/samples/agentKit/Agentic-Reasoning/lib/utils.ts (1)
  • cn (4-6)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/progress.tsx (1)
templates/sample/samples/agentKit/Agentic-Reasoning/lib/utils.ts (1)
  • cn (4-6)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/card.tsx (1)
templates/sample/samples/agentKit/Agentic-Reasoning/lib/utils.ts (1)
  • cn (4-6)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/switch.tsx (1)
templates/sample/samples/agentKit/Agentic-Reasoning/lib/utils.ts (1)
  • cn (4-6)
templates/sample/samples/agentKit/Agentic-Reasoning/hooks/use-mobile.ts (1)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/use-mobile.tsx (1)
  • useIsMobile (5-19)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/scroll-area.tsx (1)
templates/sample/samples/agentKit/Agentic-Reasoning/lib/utils.ts (1)
  • cn (4-6)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/slider.tsx (1)
templates/sample/samples/agentKit/Agentic-Reasoning/lib/utils.ts (1)
  • cn (4-6)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/checkbox.tsx (1)
templates/sample/samples/agentKit/Agentic-Reasoning/lib/utils.ts (1)
  • cn (4-6)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/calendar.tsx (1)
templates/sample/samples/agentKit/Agentic-Reasoning/lib/utils.ts (1)
  • cn (4-6)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/toggle-group.tsx (1)
templates/sample/samples/agentKit/Agentic-Reasoning/lib/utils.ts (1)
  • cn (4-6)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/radio-group.tsx (1)
templates/sample/samples/agentKit/Agentic-Reasoning/lib/utils.ts (1)
  • cn (4-6)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/separator.tsx (1)
templates/sample/samples/agentKit/Agentic-Reasoning/lib/utils.ts (1)
  • cn (4-6)
templates/sample/samples/agentKit/Agentic-Reasoning/lamatic/flow/EnoughHouse.ts (2)
templates/sample/samples/agentKit/Agentic-Reasoning/lamatic/flow/BillowySalesman.ts (2)
  • getNodesAndEdges (256-264)
  • getFlowConfig (266-268)
templates/sample/samples/agentKit/Agentic-Reasoning/lamatic/flow/FancyApplication.ts (2)
  • getNodesAndEdges (423-431)
  • getFlowConfig (433-435)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/button.tsx (1)
templates/sample/samples/agentKit/Agentic-Reasoning/lib/utils.ts (1)
  • cn (4-6)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/badge.tsx (1)
templates/sample/samples/agentKit/Agentic-Reasoning/lib/utils.ts (1)
  • cn (4-6)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/navigation-menu.tsx (1)
templates/sample/samples/agentKit/Agentic-Reasoning/lib/utils.ts (1)
  • cn (4-6)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/tooltip.tsx (1)
templates/sample/samples/agentKit/Agentic-Reasoning/lib/utils.ts (1)
  • cn (4-6)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/textarea.tsx (1)
templates/sample/samples/agentKit/Agentic-Reasoning/lib/utils.ts (1)
  • cn (4-6)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/accordion.tsx (1)
templates/sample/samples/agentKit/Agentic-Reasoning/lib/utils.ts (1)
  • cn (4-6)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/toggle.tsx (1)
templates/sample/samples/agentKit/Agentic-Reasoning/lib/utils.ts (1)
  • cn (4-6)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/table.tsx (1)
templates/sample/samples/agentKit/Agentic-Reasoning/lib/utils.ts (1)
  • cn (4-6)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/toast.tsx (1)
templates/sample/samples/agentKit/Agentic-Reasoning/lib/utils.ts (1)
  • cn (4-6)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/command.tsx (2)
templates/sample/samples/agentKit/Agentic-Reasoning/lib/utils.ts (1)
  • cn (4-6)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/dialog.tsx (5)
  • Dialog (133-133)
  • DialogHeader (138-138)
  • DialogTitle (141-141)
  • DialogDescription (136-136)
  • DialogContent (135-135)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/popover.tsx (1)
templates/sample/samples/agentKit/Agentic-Reasoning/lib/utils.ts (1)
  • cn (4-6)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/tabs.tsx (1)
templates/sample/samples/agentKit/Agentic-Reasoning/lib/utils.ts (1)
  • cn (4-6)
templates/sample/samples/agentKit/Agentic-Reasoning/hooks/use-toast.ts (1)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/toast.tsx (3)
  • ToastProps (120-120)
  • ToastActionElement (121-121)
  • Toast (124-124)
templates/sample/samples/agentKit/Agentic-Reasoning/lamatic/flow/FancyApplication.ts (2)
templates/sample/samples/agentKit/Agentic-Reasoning/lamatic/flow/BillowySalesman.ts (2)
  • getNodesAndEdges (256-264)
  • getFlowConfig (266-268)
templates/sample/samples/agentKit/Agentic-Reasoning/lamatic/flow/EnoughHouse.ts (2)
  • getNodesAndEdges (256-264)
  • getFlowConfig (266-268)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/sonner.tsx (1)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/toaster.tsx (1)
  • Toaster (13-35)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/breadcrumb.tsx (1)
templates/sample/samples/agentKit/Agentic-Reasoning/lib/utils.ts (1)
  • cn (4-6)
templates/sample/samples/agentKit/Agentic-Reasoning/actions/orchestrate.ts (2)
templates/assistant/grammar-extension/sidepanel.js (1)
  • query (107-122)
templates/sample/samples/agentKit/Agentic-Reasoning/lib/lamatic-client.ts (1)
  • lamaticClient (12-16)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/input.tsx (1)
templates/sample/samples/agentKit/Agentic-Reasoning/lib/utils.ts (1)
  • cn (4-6)
templates/sample/samples/agentKit/Agentic-Reasoning/app/page.tsx (1)
templates/sample/samples/agentKit/Agentic-Reasoning/actions/orchestrate.ts (1)
  • orchestratePipelineStep (33-131)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/toaster.tsx (3)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/use-toast.ts (1)
  • useToast (194-194)
templates/sample/samples/agentKit/Agentic-Reasoning/hooks/use-toast.ts (1)
  • useToast (194-194)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/toast.tsx (6)
  • ToastProvider (122-122)
  • Toast (124-124)
  • ToastTitle (125-125)
  • ToastDescription (126-126)
  • ToastClose (127-127)
  • ToastViewport (123-123)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/alert.tsx (1)
templates/sample/samples/agentKit/Agentic-Reasoning/lib/utils.ts (1)
  • cn (4-6)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/carousel.tsx (1)
templates/sample/samples/agentKit/Agentic-Reasoning/lib/utils.ts (1)
  • cn (4-6)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/skeleton.tsx (1)
templates/sample/samples/agentKit/Agentic-Reasoning/lib/utils.ts (1)
  • cn (4-6)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/sheet.tsx (1)
templates/sample/samples/agentKit/Agentic-Reasoning/lib/utils.ts (1)
  • cn (4-6)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/drawer.tsx (1)
templates/sample/samples/agentKit/Agentic-Reasoning/lib/utils.ts (1)
  • cn (4-6)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/select.tsx (1)
templates/sample/samples/agentKit/Agentic-Reasoning/lib/utils.ts (1)
  • cn (4-6)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/dialog.tsx (1)
templates/sample/samples/agentKit/Agentic-Reasoning/lib/utils.ts (1)
  • cn (4-6)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/input-otp.tsx (1)
templates/sample/samples/agentKit/Agentic-Reasoning/lib/utils.ts (1)
  • cn (4-6)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/use-mobile.tsx (1)
templates/sample/samples/agentKit/Agentic-Reasoning/hooks/use-mobile.ts (1)
  • useIsMobile (5-19)
templates/sample/samples/agentKit/Agentic-Reasoning/lamatic/flow/BillowySalesman.ts (2)
templates/sample/samples/agentKit/Agentic-Reasoning/lamatic/flow/EnoughHouse.ts (2)
  • getNodesAndEdges (256-264)
  • getFlowConfig (266-268)
templates/sample/samples/agentKit/Agentic-Reasoning/lamatic/flow/FancyApplication.ts (2)
  • getNodesAndEdges (423-431)
  • getFlowConfig (433-435)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/hover-card.tsx (1)
templates/sample/samples/agentKit/Agentic-Reasoning/lib/utils.ts (1)
  • cn (4-6)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/avatar.tsx (1)
templates/sample/samples/agentKit/Agentic-Reasoning/lib/utils.ts (1)
  • cn (4-6)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/menubar.tsx (1)
templates/sample/samples/agentKit/Agentic-Reasoning/lib/utils.ts (1)
  • cn (4-6)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/use-toast.ts (1)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/toast.tsx (3)
  • ToastProps (120-120)
  • ToastActionElement (121-121)
  • Toast (124-124)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/alert-dialog.tsx (2)
templates/sample/samples/agentKit/Agentic-Reasoning/lib/utils.ts (1)
  • cn (4-6)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/button.tsx (1)
  • buttonVariants (59-59)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/context-menu.tsx (1)
templates/sample/samples/agentKit/Agentic-Reasoning/lib/utils.ts (1)
  • cn (4-6)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/dropdown-menu.tsx (1)
templates/sample/samples/agentKit/Agentic-Reasoning/lib/utils.ts (1)
  • cn (4-6)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/chart.tsx (1)
templates/sample/samples/agentKit/Agentic-Reasoning/lib/utils.ts (1)
  • cn (4-6)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/sidebar.tsx (8)
templates/sample/samples/agentKit/Agentic-Reasoning/hooks/use-mobile.ts (1)
  • useIsMobile (5-19)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/tooltip.tsx (4)
  • TooltipProvider (61-61)
  • TooltipContent (61-61)
  • Tooltip (61-61)
  • TooltipTrigger (61-61)
templates/sample/samples/agentKit/Agentic-Reasoning/lib/utils.ts (1)
  • cn (4-6)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/sheet.tsx (5)
  • Sheet (131-131)
  • SheetContent (134-134)
  • SheetHeader (135-135)
  • SheetTitle (137-137)
  • SheetDescription (138-138)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/button.tsx (1)
  • Button (59-59)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/input.tsx (1)
  • Input (21-21)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/separator.tsx (1)
  • Separator (28-28)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/skeleton.tsx (1)
  • Skeleton (13-13)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/form.tsx (2)
templates/sample/samples/agentKit/Agentic-Reasoning/lib/utils.ts (1)
  • cn (4-6)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/label.tsx (1)
  • Label (24-24)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/resizable.tsx (1)
templates/sample/samples/agentKit/Agentic-Reasoning/lib/utils.ts (1)
  • cn (4-6)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/pagination.tsx (1)
templates/sample/samples/agentKit/Agentic-Reasoning/lib/utils.ts (1)
  • cn (4-6)
🪛 ast-grep (0.39.7)
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/chart.tsx

[warning] 82-82: Usage of dangerouslySetInnerHTML detected. This bypasses React's built-in XSS protection. Always sanitize HTML content using libraries like DOMPurify before injecting it into the DOM to prevent XSS attacks.
Context: dangerouslySetInnerHTML
Note: [CWE-79] Improper Neutralization of Input During Web Page Generation [REFERENCES]
- https://reactjs.org/docs/dom-elements.html#dangerouslysetinnerhtml
- https://cwe.mitre.org/data/definitions/79.html

(react-unsafe-html-injection)

🪛 Biome (2.1.2)
templates/sample/samples/agentKit/Agentic-Reasoning/lamatic/config/kit_config.json

[error] 7-7: expected , but instead found "metadata"

Remove "metadata"

(parse)

templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/chart.tsx

[error] 83-83: Avoid passing content using the dangerouslySetInnerHTML prop.

Setting content using code can expose users to cross-site scripting (XSS) attacks

(lint/security/noDangerouslySetInnerHtml)

🪛 dotenv-linter (4.0.0)
templates/sample/samples/agentKit/Agentic-Reasoning/.env.example

[warning] 1-1: [EndingBlankLine] No blank line at the end of the file

(EndingBlankLine)


[warning] 1-1: [QuoteCharacter] The value has quote characters (', ")

(QuoteCharacter)

🪛 markdownlint-cli2 (0.18.1)
templates/sample/samples/agentKit/Agentic-Reasoning/README.md

24-24: Bare URL used

(MD034, no-bare-urls)


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

(MD040, fenced-code-language)

Comment on lines +79 to +108
const resData = await lamaticClient.executeFlow(flow.workflowId, inputs);
console.log(`[v0] ${step} raw response:`, resData);

const output: Record<string, any> = {};

// Always capture steps if present
if (resData?.result?.steps) {
output.steps = resData.result.steps;
}

if (step === "step2" && resData?.result?.research) {
output.research = resData.result.research;
}

// Store declared outputs
for (const key of Object.keys(flow.outputSchema)) {
if (resData?.result && resData.result[key] !== undefined) {
output[key] = resData.result[key];
}
}

console.log(`[v0] ${step} completed:`, output);

return {
success: true,
stepId: step,
stepName: flow.name,
data: output,
};
} catch (error) {
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

Handle failed Lamatic executions before marking the step successful.

Right now any resolved executeFlow call is treated as a success, even when Lamatic replies with a failure status or no result. That produces “successful” pipeline steps with empty outputs, and the rest of the orchestration runs on garbage data. Please gate success on Lamatic reporting a successful status and a populated result, and surface a proper error otherwise. Apply the same guard to the other call sites (orchestratePipelineStepByStep and orchestratePipeline) so the whole pipeline halts when Lamatic fails.

-    const resData = await lamaticClient.executeFlow(flow.workflowId, inputs);
-    console.log(`[v0] ${step} raw response:`, resData);
-
-    const output: Record<string, any> = {};
+    const resData = await lamaticClient.executeFlow(flow.workflowId, inputs);
+    console.log(`[v0] ${step} raw response:`, resData);
+
+    if (
+      !resData ||
+      typeof resData.status !== "string" ||
+      resData.status.toUpperCase() !== "SUCCESS" ||
+      !resData.result
+    ) {
+      throw new Error(
+        resData?.error ??
+          `Flow ${flow.name} returned status ${resData?.status ?? "UNKNOWN"}`
+      );
+    }
+
+    const output: Record<string, any> = {};
📝 Committable suggestion

‼️ 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.

Suggested change
const resData = await lamaticClient.executeFlow(flow.workflowId, inputs);
console.log(`[v0] ${step} raw response:`, resData);
const output: Record<string, any> = {};
// Always capture steps if present
if (resData?.result?.steps) {
output.steps = resData.result.steps;
}
if (step === "step2" && resData?.result?.research) {
output.research = resData.result.research;
}
// Store declared outputs
for (const key of Object.keys(flow.outputSchema)) {
if (resData?.result && resData.result[key] !== undefined) {
output[key] = resData.result[key];
}
}
console.log(`[v0] ${step} completed:`, output);
return {
success: true,
stepId: step,
stepName: flow.name,
data: output,
};
} catch (error) {
const resData = await lamaticClient.executeFlow(flow.workflowId, inputs);
console.log(`[v0] ${step} raw response:`, resData);
if (
!resData ||
typeof resData.status !== "string" ||
resData.status.toUpperCase() !== "SUCCESS" ||
!resData.result
) {
throw new Error(
resData?.error ??
`Flow ${flow.name} returned status ${resData?.status ?? "UNKNOWN"}`
);
}
const output: Record<string, any> = {};
// Always capture steps if present
if (resData?.result?.steps) {
output.steps = resData.result.steps;
}
if (step === "step2" && resData?.result?.research) {
output.research = resData.result.research;
}
// Store declared outputs
for (const key of Object.keys(flow.outputSchema)) {
if (resData?.result && resData.result[key] !== undefined) {
output[key] = resData.result[key];
}
}
console.log(`[v0] ${step} completed:`, output);
return {
success: true,
stepId: step,
stepName: flow.name,
data: output,
};
} catch (error) {

@@ -0,0 +1,125 @@
@import 'tailwindcss';
@import 'tw-animate-css';
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

🧩 Analysis chain

Verify the animation package name.

The import @import 'tw-animate-css' on line 2 uses a non-standard package name. Confirm this is the correct package—common alternatives are tailwindcss-animate (for Tailwind v3) or animations built into Tailwind v4+.


🌐 Web query:

What is the correct package name for Tailwind CSS animations?

💡 Result:

The package name is tailwindcss-animate — install with: npm install -D tailwindcss-animate. [1][2]

Sources:
[1] jsDelivr package info for tailwindcss-animate.
[2] Reddit thread showing installation/use of tailwindcss-animate.


Update animation package import to use correct package name.

The correct package name for Tailwind CSS animations is tailwindcss-animate. Change the import from @import 'tw-animate-css' to use the correct package:

@import 'tailwindcss-animate';
🤖 Prompt for AI Agents
In templates/sample/samples/agentKit/Agentic-Reasoning/app/globals.css around
line 2, the stylesheet imports the wrong animation package ('tw-animate-css');
replace that import with the correct Tailwind animations package by updating the
import statement to reference 'tailwindcss-animate' so the proper package is
loaded.

Comment on lines +21 to +22
--destructive: oklch(0.577 0.245 27.325);
--destructive-foreground: oklch(0.577 0.245 27.325);
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

Critical: Identical destructive foreground and background colors will cause contrast failure.

In the light theme, both --destructive and --destructive-foreground are set to oklch(0.577 0.245 27.325), making destructive UI elements unreadable. The dark theme correctly uses different values (oklch(0.396 0.141 25.723) and oklch(0.637 0.237 25.331)).

Apply this diff to fix the contrast issue in the light theme:

-  --destructive: oklch(0.577 0.245 27.325);
-  --destructive-foreground: oklch(0.577 0.245 27.325);
+  --destructive: oklch(0.577 0.245 27.325);
+  --destructive-foreground: oklch(0.985 0 0);

Alternatively, ensure the foreground is a contrasting color (e.g., white or light gray like oklch(0.985 0 0) to match the pattern used for other semantic colors).

📝 Committable suggestion

‼️ 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.

Suggested change
--destructive: oklch(0.577 0.245 27.325);
--destructive-foreground: oklch(0.577 0.245 27.325);
--destructive: oklch(0.577 0.245 27.325);
--destructive-foreground: oklch(0.985 0 0);
🤖 Prompt for AI Agents
In templates/sample/samples/agentKit/Agentic-Reasoning/app/globals.css around
lines 21-22, the light-theme CSS sets both --destructive and
--destructive-foreground to the identical value causing contrast failure; change
--destructive-foreground to a contrasting value (for example use a light
foreground like oklch(0.985 0 0) or another higher-lightness oklch value
consistent with other semantic foregrounds) so destructive text/icons meet
contrast requirements while leaving --destructive as the current background
color.

Comment on lines +456 to +458
<Button variant="ghost" size="sm" className="text-xs text-muted-foreground">
Show all
</Button>
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

Non-functional "Show all" button.

The "Show all" button at line 456 has no onClick handler and appears to be a placeholder. Users clicking this button will see no response, which could be confusing.

Consider either removing this button or implementing the expand/collapse functionality for references. Would you like me to suggest an implementation for toggling the visibility of all references?

Comment on lines +9 to +62
function Accordion({
...props
}: React.ComponentProps<typeof AccordionPrimitive.Root>) {
return <AccordionPrimitive.Root data-slot="accordion" {...props} />
}

function AccordionItem({
className,
...props
}: React.ComponentProps<typeof AccordionPrimitive.Item>) {
return (
<AccordionPrimitive.Item
data-slot="accordion-item"
className={cn("border-b last:border-b-0", className)}
{...props}
/>
)
}

function AccordionTrigger({
className,
children,
...props
}: React.ComponentProps<typeof AccordionPrimitive.Trigger>) {
return (
<AccordionPrimitive.Header className="flex">
<AccordionPrimitive.Trigger
data-slot="accordion-trigger"
className={cn(
"focus-visible:border-ring focus-visible:ring-ring/50 flex flex-1 items-start justify-between gap-4 rounded-md py-4 text-left text-sm font-medium transition-all outline-none hover:underline focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&[data-state=open]>svg]:rotate-180",
className
)}
{...props}
>
{children}
<ChevronDownIcon className="text-muted-foreground pointer-events-none size-4 shrink-0 translate-y-0.5 transition-transform duration-200" />
</AccordionPrimitive.Trigger>
</AccordionPrimitive.Header>
)
}

function AccordionContent({
className,
children,
...props
}: React.ComponentProps<typeof AccordionPrimitive.Content>) {
return (
<AccordionPrimitive.Content
data-slot="accordion-content"
className="data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down overflow-hidden text-sm"
{...props}
>
<div className={cn("pt-0 pb-4", className)}>{children}</div>
</AccordionPrimitive.Content>
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 | 🟠 Major

Forward refs and className must flow to Radix primitives

Refs are currently swallowed for every wrapper here, which breaks focus management and other Radix behaviors, and AccordionContent strips consumers’ className from the content element. Please forward the refs and merge the className on the content node.

-function Accordion({
-  ...props
-}: React.ComponentProps<typeof AccordionPrimitive.Root>) {
-  return <AccordionPrimitive.Root data-slot="accordion" {...props} />
-}
-
-function AccordionItem({
-  className,
-  ...props
-}: React.ComponentProps<typeof AccordionPrimitive.Item>) {
-  return (
-    <AccordionPrimitive.Item
-      data-slot="accordion-item"
-      className={cn("border-b last:border-b-0", className)}
-      {...props}
-    />
-  )
-}
-
-function AccordionTrigger({
-  className,
-  children,
-  ...props
-}: React.ComponentProps<typeof AccordionPrimitive.Trigger>) {
-  return (
-    <AccordionPrimitive.Header className="flex">
-      <AccordionPrimitive.Trigger
-        data-slot="accordion-trigger"
-        className={cn(
-          "focus-visible:border-ring focus-visible:ring-ring/50 flex flex-1 items-start justify-between gap-4 rounded-md py-4 text-left text-sm font-medium transition-all outline-none hover:underline focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&[data-state=open]>svg]:rotate-180",
-          className
-        )}
-        {...props}
-      >
-        {children}
-        <ChevronDownIcon className="text-muted-foreground pointer-events-none size-4 shrink-0 translate-y-0.5 transition-transform duration-200" />
-      </AccordionPrimitive.Trigger>
-    </AccordionPrimitive.Header>
-  )
-}
-
-function AccordionContent({
-  className,
-  children,
-  ...props
-}: React.ComponentProps<typeof AccordionPrimitive.Content>) {
-  return (
-    <AccordionPrimitive.Content
-      data-slot="accordion-content"
-      className="data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down overflow-hidden text-sm"
-      {...props}
-    >
-      <div className={cn("pt-0 pb-4", className)}>{children}</div>
-    </AccordionPrimitive.Content>
-  )
-}
+const Accordion = React.forwardRef<
+  React.ElementRef<typeof AccordionPrimitive.Root>,
+  React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Root>
+>(({ ...props }, ref) => (
+  <AccordionPrimitive.Root ref={ref} data-slot="accordion" {...props} />
+))
+Accordion.displayName = AccordionPrimitive.Root.displayName
+
+const AccordionItem = React.forwardRef<
+  React.ElementRef<typeof AccordionPrimitive.Item>,
+  React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>
+>(({ className, ...props }, ref) => (
+  <AccordionPrimitive.Item
+    ref={ref}
+    data-slot="accordion-item"
+    className={cn("border-b last:border-b-0", className)}
+    {...props}
+  />
+))
+AccordionItem.displayName = AccordionPrimitive.Item.displayName
+
+const AccordionTrigger = React.forwardRef<
+  React.ElementRef<typeof AccordionPrimitive.Trigger>,
+  React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger>
+>(({ className, children, ...props }, ref) => (
+  <AccordionPrimitive.Header className="flex">
+    <AccordionPrimitive.Trigger
+      ref={ref}
+      data-slot="accordion-trigger"
+      className={cn(
+        "focus-visible:border-ring focus-visible:ring-ring/50 flex flex-1 items-start justify-between gap-4 rounded-md py-4 text-left text-sm font-medium transition-all outline-none hover:underline focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&[data-state=open]>svg]:rotate-180",
+        className
+      )}
+      {...props}
+    >
+      {children}
+      <ChevronDownIcon className="text-muted-foreground pointer-events-none size-4 shrink-0 translate-y-0.5 transition-transform duration-200" />
+    </AccordionPrimitive.Trigger>
+  </AccordionPrimitive.Header>
+))
+AccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName
+
+const AccordionContent = React.forwardRef<
+  React.ElementRef<typeof AccordionPrimitive.Content>,
+  React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content>
+>(({ className, children, ...props }, ref) => (
+  <AccordionPrimitive.Content
+    ref={ref}
+    data-slot="accordion-content"
+    className={cn(
+      "data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down overflow-hidden text-sm",
+      className
+    )}
+    {...props}
+  >
+    <div className="pt-0 pb-4">{children}</div>
+  </AccordionPrimitive.Content>
+))
+AccordionContent.displayName = AccordionPrimitive.Content.displayName
📝 Committable suggestion

‼️ 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.

Suggested change
function Accordion({
...props
}: React.ComponentProps<typeof AccordionPrimitive.Root>) {
return <AccordionPrimitive.Root data-slot="accordion" {...props} />
}
function AccordionItem({
className,
...props
}: React.ComponentProps<typeof AccordionPrimitive.Item>) {
return (
<AccordionPrimitive.Item
data-slot="accordion-item"
className={cn("border-b last:border-b-0", className)}
{...props}
/>
)
}
function AccordionTrigger({
className,
children,
...props
}: React.ComponentProps<typeof AccordionPrimitive.Trigger>) {
return (
<AccordionPrimitive.Header className="flex">
<AccordionPrimitive.Trigger
data-slot="accordion-trigger"
className={cn(
"focus-visible:border-ring focus-visible:ring-ring/50 flex flex-1 items-start justify-between gap-4 rounded-md py-4 text-left text-sm font-medium transition-all outline-none hover:underline focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&[data-state=open]>svg]:rotate-180",
className
)}
{...props}
>
{children}
<ChevronDownIcon className="text-muted-foreground pointer-events-none size-4 shrink-0 translate-y-0.5 transition-transform duration-200" />
</AccordionPrimitive.Trigger>
</AccordionPrimitive.Header>
)
}
function AccordionContent({
className,
children,
...props
}: React.ComponentProps<typeof AccordionPrimitive.Content>) {
return (
<AccordionPrimitive.Content
data-slot="accordion-content"
className="data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down overflow-hidden text-sm"
{...props}
>
<div className={cn("pt-0 pb-4", className)}>{children}</div>
</AccordionPrimitive.Content>
const Accordion = React.forwardRef<
React.ElementRef<typeof AccordionPrimitive.Root>,
React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Root>
>(({ ...props }, ref) => (
<AccordionPrimitive.Root ref={ref} data-slot="accordion" {...props} />
))
Accordion.displayName = AccordionPrimitive.Root.displayName
const AccordionItem = React.forwardRef<
React.ElementRef<typeof AccordionPrimitive.Item>,
React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>
>(({ className, ...props }, ref) => (
<AccordionPrimitive.Item
ref={ref}
data-slot="accordion-item"
className={cn("border-b last:border-b-0", className)}
{...props}
/>
))
AccordionItem.displayName = AccordionPrimitive.Item.displayName
const AccordionTrigger = React.forwardRef<
React.ElementRef<typeof AccordionPrimitive.Trigger>,
React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger>
>(({ className, children, ...props }, ref) => (
<AccordionPrimitive.Header className="flex">
<AccordionPrimitive.Trigger
ref={ref}
data-slot="accordion-trigger"
className={cn(
"focus-visible:border-ring focus-visible:ring-ring/50 flex flex-1 items-start justify-between gap-4 rounded-md py-4 text-left text-sm font-medium transition-all outline-none hover:underline focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&[data-state=open]>svg]:rotate-180",
className
)}
{...props}
>
{children}
<ChevronDownIcon className="text-muted-foreground pointer-events-none size-4 shrink-0 translate-y-0.5 transition-transform duration-200" />
</AccordionPrimitive.Trigger>
</AccordionPrimitive.Header>
))
AccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName
const AccordionContent = React.forwardRef<
React.ElementRef<typeof AccordionPrimitive.Content>,
React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content>
>(({ className, children, ...props }, ref) => (
<AccordionPrimitive.Content
ref={ref}
data-slot="accordion-content"
className={cn(
"data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down overflow-hidden text-sm",
className
)}
{...props}
>
<div className="pt-0 pb-4">{children}</div>
</AccordionPrimitive.Content>
))
AccordionContent.displayName = AccordionPrimitive.Content.displayName
🤖 Prompt for AI Agents
In
templates/sample/samples/agentKit/Agentic-Reasoning/components/ui/accordion.tsx
around lines 9 to 62, the wrapper components swallow refs and AccordionContent
doesn't merge consumer className into the inner content node; convert each
wrapper to use React.forwardRef with the proper typing (e.g.,
React.forwardRef<HTMLDivElement, React.ComponentPropsWithoutRef<typeof
AccordionPrimitive.Root>> or ComponentPropsWithRef for the corresponding Radix
primitive), accept ref as the second parameter and pass it through to the
underlying AccordionPrimitive element via the ref prop, and for AccordionContent
merge the consumer className with the existing classes using cn before applying
to the primitive (so consumers’ className flows to the content div).

Comment on lines +586 to +598
code: |-
const researchArray = {{forLoopEndNode_366.output.loopOutput}};

const research = researchArray.flatMap((searchEntry) => {
return searchEntry.webSearchNode_441.output.output.organic;
});

const links = research.map((item) => item.link);

output = {
research: research,
links: links
};
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 | 🟠 Major

Guard against missing organic search results.

When Serper returns no organic array (or a request fails), researchArray.flatMap(...) yields [undefined], and research.map((item) => item.link) throws Cannot read properties of undefined. The entire flow crashes instead of returning an empty payload. Please defensively default to empty arrays and only collect valid links before mapping.

Apply this diff to harden the node:

-const researchArray = {{forLoopEndNode_366.output.loopOutput}};
-
-const research = researchArray.flatMap((searchEntry) => {
-  return searchEntry.webSearchNode_441.output.output.organic;
-});
-
-const links = research.map((item) => item.link);
-
-output = {
-  research: research,
-  links: links
-};
+const loopOutput = {{forLoopEndNode_366.output.loopOutput}} ?? [];
+const researchArray = Array.isArray(loopOutput) ? loopOutput : [];
+
+const research = researchArray.flatMap((searchEntry) => {
+  return searchEntry?.webSearchNode_441?.output?.output?.organic ?? [];
+});
+
+const links = research
+  .map((item) => item?.link)
+  .filter(Boolean);
+
+output = {
+  research,
+  links
+};
📝 Committable suggestion

‼️ 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.

Suggested change
code: |-
const researchArray = {{forLoopEndNode_366.output.loopOutput}};
const research = researchArray.flatMap((searchEntry) => {
return searchEntry.webSearchNode_441.output.output.organic;
});
const links = research.map((item) => item.link);
output = {
research: research,
links: links
};
code: |-
const loopOutput = {{forLoopEndNode_366.output.loopOutput}} ?? [];
const researchArray = Array.isArray(loopOutput) ? loopOutput : [];
const research = researchArray.flatMap((searchEntry) => {
return searchEntry?.webSearchNode_441?.output?.output?.organic ?? [];
});
const links = research
.map((item) => item?.link)
.filter(Boolean);
output = {
research,
links
};
🤖 Prompt for AI Agents
In
templates/sample/samples/agentKit/Agentic-Reasoning/lamatic/yaml/FancyApplication.yaml
around lines 586 to 598, the code assumes every searchEntry has a
webSearchNode_441.output.output.organic array which can be missing and causes
researchArray.flatMap(...) to produce undefined and later research.map(...) to
throw; update the logic to default missing values to empty arrays (e.g., coerce
researchArray to an array, for each entry guard into
webSearchNode_441?.output?.output?.organic || []), use flatMap (or map+flat)
over those safe arrays, then filter out any falsy entries before mapping links
so you only collect valid items and return empty research/links arrays when
results are absent or failed.

Comment on lines +2 to +12
const nextConfig = {
eslint: {
ignoreDuringBuilds: true,
},
typescript: {
ignoreBuildErrors: true,
},
images: {
unoptimized: true,
},
}
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

🧩 Analysis chain

Verify the intent to ignore TypeScript and ESLint errors.

This configuration disables:

  1. ESLint checks during builds
  2. TypeScript error checking during builds
  3. Next.js image optimization

While these settings can ease initial development in a sample/template, they also:

  • Hide potential bugs and type safety issues
  • Bypass important guardrails
  • May teach developers to ignore warnings
  • Disable performance optimizations

Please confirm these settings are intentional for this sample template. If they're temporary workarounds, consider:

  1. Fixing the underlying TypeScript/ESLint errors instead
  2. Adding a comment explaining why these are disabled
  3. Documenting that these should be re-enabled for production use

🏁 Script executed:

#!/bin/bash
# Check for TypeScript errors in the project
npx tsc --noEmit

# Check for ESLint errors
npx eslint . --ext .ts,.tsx

Length of output: 1215


I need to investigate the project structure and documentation for this sample to understand the intent behind these settings.


---

🏁 Script executed:

```shell
#!/bin/bash
# Check the full next.config.mjs file with context
cat templates/sample/samples/agentKit/Agentic-Reasoning/next.config.mjs

# Look for README or documentation in this sample directory
find templates/sample/samples/agentKit/Agentic-Reasoning -type f -name "README*" -o -name "readme*" -o -name "*.md"

# Check package.json in the sample directory
cat templates/sample/samples/agentKit/Agentic-Reasoning/package.json 2>/dev/null || echo "No package.json found"

# Check for any tsconfig or eslint config files in this directory
find templates/sample/samples/agentKit/Agentic-Reasoning -type f \( -name "tsconfig*" -o -name ".eslintrc*" -o -name "eslint.config*" \)

Length of output: 3031



---

🏁 Script executed:

```shell
#!/bin/bash
# Read the main README to understand project purpose
cat templates/sample/samples/agentKit/Agentic-Reasoning/README.md

# Also check tsconfig.json to see if there are config issues
cat templates/sample/samples/agentKit/Agentic-Reasoning/tsconfig.json

# Check if eslint.config.js or similar exists in parent directories
find templates/sample/samples/agentKit -maxdepth 3 -type f \( -name "eslint.config*" -o -name ".eslintrc*" \) 2>/dev/null | head -20

Length of output: 3914


Configure ESLint properly and address underlying TypeScript/linting errors instead of masking them.

This is a production-deployed project (Vercel, live demo), not a minimal template. The configuration contradicts the codebase:

  • tsconfig.json enables strict: true — showing intent for type safety
  • No ESLint config file exists (missing eslint.config.js)
  • The package.json defines a lint script that cannot run without ESLint config
  • README provides no justification for disabling checks

The current configuration masks real issues. Recommended actions:

  1. Create eslint.config.js to enable linting (or remove the lint script if not needed)
  2. Run tsc --noEmit and npm run lint to identify and fix actual errors
  3. If errors must remain temporarily, add inline comments explaining why in next.config.mjs
🤖 Prompt for AI Agents
In templates/sample/samples/agentKit/Agentic-Reasoning/next.config.mjs (lines
2-12) the Next config is silencing ESLint and TypeScript build errors which
contradicts the repo's intent to use strict typing and has no ESLint config;
create a proper eslint.config.js at the repo root (or remove/adjust the lint
script in package.json), re-enable TypeScript/ESLint checks by removing
ignoreBuildErrors/ignoreDuringBuilds, run tsc --noEmit and npm run lint to fix
the reported issues, and if you must temporarily suppress specific problems add
targeted inline comments in next.config.mjs explaining why each suppression
exists and include links/tickets for follow-up.

Comment on lines +4 to +7
"repository": {
"type": "git",
"url": "https://github.com/Lamatic/agent-kit-reasoning"
},
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 | 🟠 Major

Update repository URL to match the actual repository.

The repository URL points to https://github.com/Lamatic/agent-kit-reasoning, but this code is part of the AgentKit repository. This mismatch could confuse contributors and package consumers.

Apply this diff:

   "repository": {
     "type": "git",
-    "url": "https://github.com/Lamatic/agent-kit-reasoning"
+    "url": "https://github.com/Lamatic/AgentKit"
   },
📝 Committable suggestion

‼️ 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.

Suggested change
"repository": {
"type": "git",
"url": "https://github.com/Lamatic/agent-kit-reasoning"
},
"repository": {
"type": "git",
"url": "https://github.com/Lamatic/AgentKit"
},
🤖 Prompt for AI Agents
In templates/sample/samples/agentKit/Agentic-Reasoning/package.json around lines
4 to 7, the repository.url currently points to
"https://github.com/Lamatic/agent-kit-reasoning" which is incorrect for this
AgentKit project; update the URL to the correct AgentKit repository URL (replace
with the official AgentKit repo, e.g., https://github.com/AgentKit/AgentKit or
the specific Agentic-Reasoning repo under the AgentKit organization) so the
package metadata accurately reflects the project's repository.

Comment on lines +77 to +86
```
/actions
└── orchestrate.ts # Handles orchestration logic
/app
└── page.tsx # Main chat UI
/lib
└── lamatic-client.ts # Lamatic API client
/package.json # Dependencies & scripts
```

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 language identifier to code fence.

The static analysis tool correctly flags that the code fence is missing a language identifier.

Apply this diff:

-```
+```text
 /actions
  └── orchestrate.ts        # Handles orchestration logic
 /app
  └── page.tsx              # Main chat UI
 /lib
  └── lamatic-client.ts     # Lamatic API client
 /package.json              # Dependencies & scripts

<details>
<summary>🧰 Tools</summary>

<details>
<summary>🪛 markdownlint-cli2 (0.18.1)</summary>

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

(MD040, fenced-code-language)

</details>

</details>

<details>
<summary>🤖 Prompt for AI Agents</summary>

In templates/sample/samples/agentKit/Agentic-Reasoning/README.md around lines 77
to 86, the markdown code fence lacks a language identifier; update the fenced
block to use text as the opening fence (and keep as the closing fence) so
the example is explicitly marked as plain text; simply replace the current opener withtext and leave the content and closing fence unchanged.


</details>

<!-- This is an auto-generated comment by CodeRabbit -->

Comment on lines +21 to +22
--destructive: oklch(0.577 0.245 27.325);
--destructive-foreground: oklch(0.577 0.245 27.325);
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

🧩 Analysis chain

Verify destructive foreground color.

The --destructive-foreground uses the same oklch value as --destructive (oklch(0.577 0.245 27.325)), which would result in poor contrast. Typically, a foreground color should provide sufficient contrast against its background for readability and accessibility.

Consider using a light color for the foreground. For example:

   --destructive: oklch(0.577 0.245 27.325);
-  --destructive-foreground: oklch(0.577 0.245 27.325);
+  --destructive-foreground: oklch(0.985 0 0);

I'll help verify this review comment by examining the file and understanding the color contrast implications.






🏁 Script executed:

#!/bin/bash
# Locate the globals.css file and examine lines 21-22
fd -t f "globals.css" | head -20

Length of output: 686


🏁 Script executed:

#!/bin/bash
# Search for the specific file path mentioned in the review
cat "templates/sample/samples/agentKit/Agentic-Reasoning/styles/globals.css" 2>/dev/null | head -30

Length of output: 963


🏁 Script executed:

#!/bin/bash
# More flexible search in case the path differs
find . -name "globals.css" -type f 2>/dev/null | grep -i agentic

Length of output: 237


🏁 Script executed:

#!/bin/bash
# Search for oklch color definitions in CSS files
rg -n "destructive" --type css 2>/dev/null | head -20

Length of output: 2051


🏁 Script executed:

#!/bin/bash
# Get context around destructive color definitions
rg -C5 "destructive-foreground" --type css 2>/dev/null

Length of output: 42763


🌐 Web query:

oklch color contrast accessibility WCAG same color foreground background

💡 Result:

Short answer: WCAG contrast is defined using relative luminance in the sRGB colorspace, so contrast must be calculated from sRGB values (not directly from OKLCH). If foreground and background are the exact same color the contrast ratio is 1:1 and will fail WCAG for any readable text. Use OKLCH for designing (it’s perceptually uniform) but convert the OKLCH colors to sRGB (and ensure they are in‑gamut) before computing WCAG contrast or using a WCAG checker. [1][2][3]

Sources:

  • WCAG 2.2 / relative luminance and contrast calculation (sRGB). [1]
  • MDN guidance: CSS includes oklch, but WCAG contrast is based on sRGB relative luminance. [2]
  • Modern contrast tools that accept OKLCH convert to sRGB / warn about gamut when checking WCAG ratios. [3]

Fix destructive color contrast in light mode across multiple files.

The review comment is valid. Using identical oklch values for --destructive and --destructive-foreground results in a 1:1 contrast ratio, which fails WCAG accessibility standards. The dark mode variants correctly use different values, establishing the intended pattern. This affects the following files, where the light mode :root theme has identical destructive colors:

  • templates/sample/samples/agentKit/Agentic-Reasoning/styles/globals.css (lines 21–22)
  • templates/sample/samples/agentKit/Agentic-Reasoning/app/globals.css (lines 21–22)
  • templates/embed/sheets/styles/globals.css (lines 21–22)
  • templates/embed/sheets/app/globals.css (lines 21–22)
  • templates/embed/chat/styles/globals.css (lines 21–22)
  • templates/embed/chat/app/globals.css (lines 21–22)
  • templates/embed/search/styles/globals.css (lines 21–22)
  • templates/embed/search/app/global.css (lines 21–22)
  • templates/automation/hiring/styles/globals.css (lines 21–22)
  • templates/automation/hiring/app/globals.css (lines 21–22)
  • templates/agentic/reasoning/styles/globals.css (lines 21–22)
  • templates/agentic/reasoning/app/globals.css (lines 21–22)
  • templates/special/halloween-costume-generator/styles/globals.css (lines 21–22)
  • templates/special/halloween-costume-generator/app/globals.css (lines 22–23)

Apply the suggested fix: change --destructive-foreground to a light color like oklch(0.985 0 0) in the light mode section of each file.

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

♻️ Duplicate comments (6)
templates/sample/samples/agentKit/Agentic-Reasoning/lamatic/yaml/BillowySalesman.yaml (1)

9-10: Fix trigger configuration key typos.

Keys responeType and retry_deplay are misspelled, so the trigger will ignore the intended settings. Please rename them to responseType and retry_delay.

Apply this diff:

-    responeType: realtime
-    retry_deplay: '0'
+    responseType: realtime
+    retry_delay: '0'
templates/sample/samples/agentKit/Agentic-Reasoning/lamatic/config/kit_config.json (2)

6-7: Restore valid JSON by adding the missing comma.

Without the comma after the demoURL entry the JSON fails to parse, breaking kit loading.

Apply this diff:

-    "demoURL" : "https://agent-kit-reasoning.vercel.app"
+    "demoURL" : "https://agent-kit-reasoning.vercel.app",

11-11: Correct the slug typo.

resoning-kit should be reasoning-kit to keep URLs and identifiers consistent.

Apply this diff:

-        "slug" : "resoning-kit",
+        "slug" : "reasoning-kit",
templates/sample/samples/agentKit/Agentic-Reasoning/lamatic/yaml/EnoughHouse.yaml (1)

6-6: Fix typo in configuration key (duplicate of prior feedback).

Both line 6 and line 27 contain the misspelled configuration key responeType, which should be responseType.

Apply this diff to fix both occurrences:

- responeType: realtime
+ responseType: realtime

Also applies to: 27-27

templates/sample/samples/agentKit/Agentic-Reasoning/lamatic/yaml/FancyApplication.yaml (2)

6-6: Fix typo in configuration key (duplicate of prior feedback).

Both line 6 and line 16 contain the misspelled configuration key responeType, which should be responseType.

Apply this diff to fix both occurrences:

- responeType: realtime
+ responseType: realtime

Also applies to: 16-16


586-598: Guard against missing organic search results (duplicate—still blocking).

This code assumes webSearchNode_441.output.output.organic always exists. When Serper returns missing or failed results, flatMap() yields undefined, and the subsequent .map((item) => item.link) crashes with Cannot read properties of undefined. The flow crashes instead of gracefully returning empty research/links.

This issue was flagged in the prior review and remains unfixed. It is critical for production reliability.

Apply this defensive diff:

-const researchArray = {{forLoopEndNode_366.output.loopOutput}};
-
-const research = researchArray.flatMap((searchEntry) => {
-  return searchEntry.webSearchNode_441.output.output.organic;
-});
-
-const links = research.map((item) => item.link);
-
-output = {
-  research: research,
-  links: links
-};
+const loopOutput = {{forLoopEndNode_366.output.loopOutput}} ?? [];
+const researchArray = Array.isArray(loopOutput) ? loopOutput : [];
+
+const research = researchArray.flatMap((searchEntry) => {
+  return searchEntry?.webSearchNode_441?.output?.output?.organic ?? [];
+});
+
+const links = research
+  .map((item) => item?.link)
+  .filter(Boolean);
+
+output = {
+  research,
+  links
+};
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

Disabled knowledge base sources:

  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 5c6260d and 1949f23.

📒 Files selected for processing (10)
  • templates/sample/.gitignore (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/.gitignore (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/lamatic/README.md (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/lamatic/config/kit_config.json (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/lamatic/flow/BillowySalesman.ts (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/lamatic/flow/EnoughHouse.ts (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/lamatic/flow/FancyApplication.ts (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/lamatic/yaml/BillowySalesman.yaml (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/lamatic/yaml/EnoughHouse.yaml (1 hunks)
  • templates/sample/samples/agentKit/Agentic-Reasoning/lamatic/yaml/FancyApplication.yaml (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (3)
  • templates/sample/samples/agentKit/Agentic-Reasoning/.gitignore
  • templates/sample/samples/agentKit/Agentic-Reasoning/lamatic/flow/EnoughHouse.ts
  • templates/sample/.gitignore
🧰 Additional context used
🧬 Code graph analysis (2)
templates/sample/samples/agentKit/Agentic-Reasoning/lamatic/flow/BillowySalesman.ts (2)
templates/sample/samples/agentKit/Agentic-Reasoning/lamatic/flow/EnoughHouse.ts (2)
  • getNodesAndEdges (256-264)
  • getFlowConfig (266-268)
templates/sample/samples/agentKit/Agentic-Reasoning/lamatic/flow/FancyApplication.ts (2)
  • getNodesAndEdges (423-431)
  • getFlowConfig (433-435)
templates/sample/samples/agentKit/Agentic-Reasoning/lamatic/flow/FancyApplication.ts (2)
templates/sample/samples/agentKit/Agentic-Reasoning/lamatic/flow/BillowySalesman.ts (2)
  • getNodesAndEdges (256-264)
  • getFlowConfig (266-268)
templates/sample/samples/agentKit/Agentic-Reasoning/lamatic/flow/EnoughHouse.ts (2)
  • getNodesAndEdges (256-264)
  • getFlowConfig (266-268)
🪛 Biome (2.1.2)
templates/sample/samples/agentKit/Agentic-Reasoning/lamatic/config/kit_config.json

[error] 7-7: expected , but instead found "metadata"

Remove "metadata"

(parse)

Comment on lines +135 to +137
"responeType": "realtime",
"retry_deplay": "0",
"advance_schema": "{\n \"query\": \"string\",\n \"history\": [\n {\n \"role\": \"string\",\n \"message\": \"string\"\n }\n ]\n}"
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 | 🟠 Major

Correct trigger value key names.

responeType and retry_deplay are misspelled, so the flow won’t honor the intended response settings. Rename them to responseType and retry_delay.

Apply this diff:

-            "responeType": "realtime",
-            "retry_deplay": "0",
+            "responseType": "realtime",
+            "retry_delay": "0",
📝 Committable suggestion

‼️ 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.

Suggested change
"responeType": "realtime",
"retry_deplay": "0",
"advance_schema": "{\n \"query\": \"string\",\n \"history\": [\n {\n \"role\": \"string\",\n \"message\": \"string\"\n }\n ]\n}"
"responseType": "realtime",
"retry_delay": "0",
"advance_schema": "{\n \"query\": \"string\",\n \"history\": [\n {\n \"role\": \"string\",\n \"message\": \"string\"\n }\n ]\n}"
🤖 Prompt for AI Agents
templates/sample/samples/agentKit/Agentic-Reasoning/lamatic/flow/BillowySalesman.ts
lines 135-137: the trigger configuration has misspelled keys "responeType" and
"retry_deplay"; rename them to "responseType" and "retry_delay" respectively so
the flow honors response settings, keeping the values unchanged and preserving
surrounding JSON/string formatting.

Comment on lines +130 to +133
"id": "triggerNode_1",
"nodeName": "API Request",
"responeType": "realtime",
"advance_schema": "{\n \"steps\": \"string\"\n}"
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 | 🟠 Major

Fix typo in responseType.

responeType is misspelled, so the trigger response mode won’t be set. Please rename it to responseType.

Apply this diff:

-            "responeType": "realtime",
+            "responseType": "realtime",
📝 Committable suggestion

‼️ 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.

Suggested change
"id": "triggerNode_1",
"nodeName": "API Request",
"responeType": "realtime",
"advance_schema": "{\n \"steps\": \"string\"\n}"
"id": "triggerNode_1",
"nodeName": "API Request",
"responseType": "realtime",
"advance_schema": "{\n \"steps\": \"string\"\n}"
🤖 Prompt for AI Agents
In
templates/sample/samples/agentKit/Agentic-Reasoning/lamatic/flow/FancyApplication.ts
around lines 130 to 133, the JSON for the trigger node has a misspelled key
"responeType" which prevents the trigger response mode from being set; rename
the key to "responseType" (keeping the value "realtime") so the trigger uses the
correct property name.

@d-pamneja d-pamneja merged commit 1949f23 into main Nov 10, 2025
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant