Skip to content

Conversation

@dhilanfye34
Copy link
Contributor

@dhilanfye34 dhilanfye34 commented Jun 16, 2025

Summary by CodeRabbit

  • New Features

    • Introduced a Startup News Scraper agent that fetches and summarizes recent startup articles from multiple tech news sources.
    • Users can request a customizable number of articles per feed and receive structured summaries, including key details like name, industry, founders, and funding source.
    • Added an automated daily workflow to deliver startup news digests via Email, Slack, and Discord.
  • Documentation

    • Added comprehensive setup, usage, and configuration guides, including a README and detailed markdown files outlining agent development best practices and SDK usage.
  • Chores

    • Added configuration files for project tooling, formatting, environment handling, and version control.
    • Included project metadata, build scripts, and environment validation for streamlined development and deployment.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jun 16, 2025

Walkthrough

This change introduces a new AI agent project, "Startup_News_Scraper," including its configuration, documentation, and source code. The project fetches startup-related news from multiple RSS feeds, summarizes articles using OpenAI's API, and provides structured summaries. The update includes TypeScript types, agent logic, configuration files, and development tooling setup.

Changes

File(s) Change Summary
.editorconfig, .gitignore, biome.json, tsconfig.json, package.json, README.md, agentuity.yaml Added project-level configuration and documentation files for editor settings, Git ignore rules, Biome and TypeScript configuration, package dependencies, scripts, and project metadata. Includes a README with setup and usage instructions, and an Agentuity YAML configuration for agent deployment and development.
.cursor/rules/agent.mdc, .cursor/rules/agentuity.mdc, .cursor/rules/sdk.mdc Added markdown documentation and rule files providing guidelines for agent development, configuration, and SDK usage within the Agentuity platform. These files describe best practices, configuration rules, and API interfaces for developers.
src/agents/startup_scraper/types.ts Introduced TypeScript interfaces StartupLink and StartupSummary to define structured types for startup news links and their summarized details.
src/agents/startup_scraper/fetchFeeds.ts Added a module to fetch and filter startup-related news links from multiple RSS feeds, exporting an async function getStartupLinks that returns filtered article links.
src/agents/startup_scraper/summarize.ts Implemented summarization logic using OpenAI's GPT-4o-mini model. Exports summarizeStartups, which processes news links, generates structured summaries, normalizes fields, and manages concurrency and error handling.
src/agents/startup_scraper/index.ts Main agent entry point. Exports a welcome function and the default async Agent handler, which processes incoming requests, fetches news links, summarizes them, and returns a structured JSON response. Handles errors gracefully.
index.ts Entry script for initializing and running the agent. Performs environment validation, logs configuration warnings, and invokes the agent runner with error handling.
n8n_workflow/workflow.json Added an n8n workflow to schedule daily startup news scraping, process the data into an HTML digest, and distribute it via Email, Slack, and Discord.

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant Agent (Startup_News_Scraper)
    participant fetchFeeds.ts
    participant summarize.ts
    participant OpenAI API

    User->>Agent (Startup_News_Scraper): POST request (optional perFeed)
    Agent (Startup_News_Scraper)->>fetchFeeds.ts: getStartupLinks(perFeed)
    fetchFeeds.ts->>RSS Feeds: Fetch and parse feeds
    fetchFeeds.ts-->>Agent (Startup_News_Scraper): Filtered startup links
    Agent (Startup_News_Scraper)->>summarize.ts: summarizeStartups(links)
    summarize.ts->>OpenAI API: Summarize each article (batch)
    OpenAI API-->>summarize.ts: JSON summaries
    summarize.ts-->>Agent (Startup_News_Scraper): Array of StartupSummary
    Agent (Startup_News_Scraper)-->>User: JSON response with summaries
Loading

Suggested reviewers

  • rblalock
  • nnance

Poem

In fields of code where startups bloom,
A rabbit hops from feed to room—
It gathers news with nimble care,
Summarizes stories rare.
With OpenAI and Bun in tow,
The agent helps new ventures grow!
📰🐇✨


📜 Recent review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between f7445ae and a18a133.

📒 Files selected for processing (1)
  • agents/Startup_News_Scraper/src/agents/startup_scraper/fetchFeeds.ts (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • agents/Startup_News_Scraper/src/agents/startup_scraper/fetchFeeds.ts
✨ Finishing Touches
  • 📝 Generate Docstrings
🧪 Generate Unit Tests
  • Create PR with Unit Tests
  • Post Copyable Unit Tests in Comment

🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai auto-generate unit tests to generate unit tests for this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@coderabbitai coderabbitai bot requested review from nnance and rblalock June 16, 2025 17:21
Copy link
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: 9

🧹 Nitpick comments (15)
agents/Startup_News_Scraper/biome.json (1)

17-23: Add TypeScript formatting rules.
You currently only configure JavaScript formatting. Consider adding a typescript section to enforce consistent quotes, trailing commas, and semicolons in .ts files as well.

agents/Startup_News_Scraper/.cursor/rules/agentuity.mdc (1)

3-4: Broaden glob pattern for matching.
The globs: "agentuity.yaml" entry may not match files in nested directories. Use a glob like **/agentuity.yaml to ensure it applies project-wide.

agents/Startup_News_Scraper/.cursor/rules/agent.mdc (2)

9-10: Clarify terminology for importing types.
Instead of "loading types from the node modules package", use "importing types from @agentuity/sdk" for clearer intent.


28-29: Fix grammatical error.
Change "helper methods and public variables which can be used for working with data has been passed"
→ "helper methods and public variables for working with data that has been passed".

agents/Startup_News_Scraper/tsconfig.json (2)

6-7: jsx: "react-jsx" is superfluous for a non-React agent

Nothing in the project tree indicates JSX/React usage.
Keeping the option increases the compiled lib size and allows JSX accidentally slipping in.
Remove the setting unless you really plan to embed React components.


15-16: Disabling noUnused* hides dead-code & typo mistakes

"noUnusedLocals": false and "noUnusedParameters": false silence the compiler on two of the most common bugs (unused vars / wrong param names).
Enable them and fix the inevitable low-hanging warnings – you’ll catch mistakes earlier with zero runtime cost.

-    "noUnusedLocals": false,
-    "noUnusedParameters": false,
+    "noUnusedLocals": true,
+    "noUnusedParameters": true,
agents/Startup_News_Scraper/package.json (1)

21-25: Declare the Bun runtime in engines for clearer install constraints

   "private": true,
+  "engines": {
+    "bun": ">=1.2.4"
+  },

Helps CI and external consumers fail fast on wrong runtimes.

agents/Startup_News_Scraper/README.md (2)

2-7: Image missing alt-text (MD045)

Accessibility & markdown-linter complain.

-<img src="https://raw.githubusercontent.com/agentuity/cli/refs/heads/main/.github/Agentuity.png" alt="Agentuity" width="100"/> <br/>
+<img src="https://raw.githubusercontent.com/agentuity/cli/refs/heads/main/.github/Agentuity.png" alt="Agentuity logo" width="100"/> <br/>

65-70: Code block lacks language hint (MD040)

-```
+```text
├── agents/
...
agents/Startup_News_Scraper/src/agents/startup_scraper/fetchFeeds.ts (1)

21-45: Consider deduplicating & sorting across feeds

Current implementation:

  • Returns items in feed-order; not necessarily “newest”.
  • Same article appearing in multiple feeds will be duplicated.

Not blocking, but worth a TODO for better UX.

agents/Startup_News_Scraper/src/agents/startup_scraper/types.ts (1)

8-16: Prefer camelCase & align optional/nullable semantics

The interface mixes camelCase (funding_source) and snake_case (why_it_matters) with camel (industry). Type-Script conventions generally lean on camelCase.
In addition, summary is required but can be null, while the other nullable properties are marked optional. Consider making all optional+nullable for consistency, or all required with | null.

-  why_it_matters?: string | null;
-  funding_source?: string | null;
+  whyItMatters?: string | null;
+  fundingSource?: string | null;

Down-stream code must be updated accordingly.

agents/Startup_News_Scraper/index.ts (1)

3-9: Extending process pollutes global types

Augmenting the built-in Process interface directly can leak into other dependencies and cause type clashes. Prefer declaring a local helper:

const isBun = (process as any).isBun === true;

and use isBun instead of attaching to the global namespace.

agents/Startup_News_Scraper/src/agents/startup_scraper/index.ts (1)

34-36: Surface error details for easier debugging

Returning a generic "Agent failed" string gives no hints when running outside Agentuity. Attach the error message in non-production environments, or at least log err.stack.

agents/Startup_News_Scraper/src/agents/startup_scraper/summarize.ts (2)

20-24: Silent loss of rejected summaries

Rejected promises are discarded, so callers never know some articles failed to summarise. At minimum, log res.reason; ideally, return a failed list or retry.

-    for (const res of settled) {
-      if (res.status === 'fulfilled') summaries.push(res.value);
-    }
+    for (const res of settled) {
+      if (res.status === 'fulfilled') {
+        summaries.push(res.value);
+      } else {
+        console.warn('OpenAI summarisation failed:', res.reason);
+      }
+    }

44-52: Hard-coded model & prompt size – make configurable

gpt-4o-mini, max_tokens: 400, and temperature: 0.4 are project choices but should live in env vars / constants to avoid code edits for tuning or quota issues.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 57ac5bc and db3be8f.

⛔ Files ignored due to path filters (1)
  • agents/Startup_News_Scraper/bun.lock is excluded by !**/*.lock
📒 Files selected for processing (15)
  • agents/Startup_News_Scraper/.cursor/rules/agent.mdc (1 hunks)
  • agents/Startup_News_Scraper/.cursor/rules/agentuity.mdc (1 hunks)
  • agents/Startup_News_Scraper/.cursor/rules/sdk.mdc (1 hunks)
  • agents/Startup_News_Scraper/.editorconfig (1 hunks)
  • agents/Startup_News_Scraper/.gitignore (1 hunks)
  • agents/Startup_News_Scraper/README.md (1 hunks)
  • agents/Startup_News_Scraper/agentuity.yaml (1 hunks)
  • agents/Startup_News_Scraper/biome.json (1 hunks)
  • agents/Startup_News_Scraper/index.ts (1 hunks)
  • agents/Startup_News_Scraper/package.json (1 hunks)
  • agents/Startup_News_Scraper/src/agents/startup_scraper/fetchFeeds.ts (1 hunks)
  • agents/Startup_News_Scraper/src/agents/startup_scraper/index.ts (1 hunks)
  • agents/Startup_News_Scraper/src/agents/startup_scraper/summarize.ts (1 hunks)
  • agents/Startup_News_Scraper/src/agents/startup_scraper/types.ts (1 hunks)
  • agents/Startup_News_Scraper/tsconfig.json (1 hunks)
🧰 Additional context used
🧬 Code Graph Analysis (2)
agents/Startup_News_Scraper/src/agents/startup_scraper/fetchFeeds.ts (1)
agents/Startup_News_Scraper/src/agents/startup_scraper/types.ts (1)
  • StartupLink (3-6)
agents/Startup_News_Scraper/src/agents/startup_scraper/summarize.ts (1)
agents/Startup_News_Scraper/src/agents/startup_scraper/types.ts (2)
  • StartupLink (3-6)
  • StartupSummary (8-16)
🪛 markdownlint-cli2 (0.17.2)
agents/Startup_News_Scraper/README.md

6-6: Images should have alternate text (alt text)
null

(MD045, no-alt-text)


65-65: Fenced code blocks should have a language specified
null

(MD040, fenced-code-language)

🔇 Additional comments (2)
agents/Startup_News_Scraper/package.json (1)

4-5: ```shell
#!/bin/bash

Verify presence of "module" entry and existence of index.js/index.ts in the package folder

echo "Searching for a 'module' field in package.json:"
grep -R '"module"' -n agents/Startup_News_Scraper/package.json || echo "→ No 'module' field found"

echo
echo "Locating index.js in agents/Startup_News_Scraper:"
find agents/Startup_News_Scraper -type f -name index.js || echo "→ index.js not found"

echo
echo "Locating index.ts in agents/Startup_News_Scraper:"
find agents/Startup_News_Scraper -type f -name index.ts || echo "→ index.ts not found"


</details>
<details>
<summary>agents/Startup_News_Scraper/.cursor/rules/sdk.mdc (1)</summary>

`1-98`: **Docs look good – no blocking issues**  
No actionable code concerns here.

</details>

</blockquote></details>

</details>

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

Comment on lines +7 to +8
indent_style = tab
indent_size = 2
Copy link
Contributor

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Resolve indent style mismatch.
.editorconfig enforces tab indentation but biome.json uses space indentation of 2 spaces. This conflict can lead to inconsistent formatting across editors and CI tooling. Please align the indent style across both configurations.

🤖 Prompt for AI Agents
In agents/Startup_News_Scraper/.editorconfig at lines 7 to 8, the indent_style
is set to tab while biome.json uses 2 spaces for indentation, causing
inconsistency. Update the .editorconfig to set indent_style to space and
indent_size to 2 to match biome.json, ensuring consistent indentation across all
tools and editors.

Comment on lines +13 to +16
# logs
logs
_.log
report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Fix glob pattern for log files.
The entry _.log only matches files starting with an underscore. It should be *.log to ignore all log files.
Additionally, review the report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json pattern for correctness or simplification.

🤖 Prompt for AI Agents
In agents/Startup_News_Scraper/.gitignore around lines 13 to 16, the pattern
`_.log` only matches files starting with an underscore and ending with .log, but
it should be changed to `*.log` to ignore all log files. Also, review the
`report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json` pattern for correctness or
simplification, possibly replacing it with a simpler or more accurate glob
pattern that matches the intended report files.

Comment on lines +13 to +16
"enabled": true,
"indentStyle": "space",
"indentWidth": 2
},
Copy link
Contributor

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Align indentation settings with .editorconfig.
biome.json specifies space-based indentation (indentStyle: "space") whereas .editorconfig enforces tabs. Please unify the indent style to avoid editor and formatter discrepancies.

🤖 Prompt for AI Agents
In agents/Startup_News_Scraper/biome.json around lines 13 to 16, the indentation
settings specify spaces ("indentStyle": "space") which conflicts with the
tab-based indentation defined in the .editorconfig file. Update the
"indentStyle" value from "space" to "tab" to align with the .editorconfig and
ensure consistent formatting across editors and tools.

Comment on lines +60 to +69
enabled: true
identifier: bunjs
language: javascript
runtime: bunjs
agents:
dir: src/agents
ignore:
- node_modules/**
- dist/**
- src/**
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Bundler ignores the entire src/** tree – agent will bundle nothing

bundler.ignore lists src/**, which also matches src/agents/** – the only place your code lives.
When agentuity bundle runs, the resulting artifact will be empty and startup will fail.

Remove the pattern or narrow it:

-  ignore:
-    - node_modules/**
-    - dist/**
-    - src/**
+  ignore:
+    - node_modules/**
+    - dist/**

Verify a fresh agentuity bundle afterwards – the generated .agentuity/index.js should now include your code.

🤖 Prompt for AI Agents
In agents/Startup_News_Scraper/agentuity.yaml around lines 60 to 69, the bundler
ignore list includes "src/**", which excludes the entire source directory
including "src/agents" where your code resides, resulting in an empty bundle. To
fix this, remove the "src/**" pattern from the ignore list or narrow it to
exclude only irrelevant subdirectories, then run "agentuity bundle" again to
verify that the generated .agentuity/index.js includes your code.

Comment on lines +43 to +44
runner(true, import.meta.dirname).catch((err) => {
if (err instanceof Error) {
Copy link
Contributor

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

import.meta.dirname is not standard in Node ≤ 22

import.meta.dirname exists in Bun but not in current Node LTS. When the user follows the earlier suggestion to run node --env-file …, the code will crash with
Property 'dirname' does not exist on type 'ImportMeta'.

A portable alternative:

-runner(true, import.meta.dirname).catch((err) => {
+import { fileURLToPath } from 'node:url';
+import { dirname } from 'node:path';
+
+const __dirname = dirname(fileURLToPath(import.meta.url));
+
+runner(true, __dirname).catch((err) => {
📝 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
runner(true, import.meta.dirname).catch((err) => {
if (err instanceof Error) {
import { fileURLToPath } from 'node:url';
import { dirname } from 'node:path';
const __dirname = dirname(fileURLToPath(import.meta.url));
runner(true, __dirname).catch((err) => {
if (err instanceof Error) {
🤖 Prompt for AI Agents
In agents/Startup_News_Scraper/index.ts around lines 43 to 44, the use of
import.meta.dirname is not supported in Node.js versions up to 22, causing a
runtime error. Replace import.meta.dirname with a portable alternative by using
standard Node.js methods such as path.dirname and url.fileURLToPath with
import.meta.url to obtain the directory name in a way compatible with current
Node LTS versions.

Comment on lines +17 to +24
export default async function Agent(req: AgentRequest, resp: AgentResponse) {
try {
const raw = (await req.data.text()) || '{}';
const body = JSON.parse(raw) as { perFeed?: number };

const perFeed = body.perFeed ?? 3; // ← new default

const links = await getStartupLinks(perFeed);
Copy link
Contributor

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Validate perFeed to avoid abuse / errors

perFeed is blindly accepted. A client can send a negative or extremely large value leading to an empty slice or dozens of OpenAI calls.

-const perFeed = body.perFeed ?? 3;
+const perFeed = Math.min(Math.max(body.perFeed ?? 3, 1), 10); // 1-10 hard-limit

Return 400 when out of bounds to make the contract explicit.

🤖 Prompt for AI Agents
In agents/Startup_News_Scraper/src/agents/startup_scraper/index.ts around lines
17 to 24, the perFeed parameter is accepted without validation, which can lead
to negative or excessively large values causing errors or resource abuse. Add
validation to check if perFeed is within a reasonable range (e.g., a positive
integer and below a maximum threshold). If perFeed is out of bounds, respond
with a 400 status code and an appropriate error message to explicitly enforce
the contract.

Comment on lines +75 to +83
/* small helper to bucket common industry values */
function normaliseIndustry(raw?: string): 'AI' | 'VC' | 'Tech' | 'Startups' | undefined {
if (!raw) return undefined;
const t = raw.toLowerCase();
if (/(^| )(ai|artificial intelligence|machine learning|ml)( |$)/.test(t)) { return 'AI';}
if (/(vc|venture|fund|capital|investor)/.test(t)) { return 'VC';}
if (/(startup|accelerator|incubator|founder program)/.test(t)) { return 'Startups';}
if (/(tech|technology|robot|drone|fintech|crypto|software|hardware|cloud|SaaS)/.test(t)) { return 'Tech';}
return undefined;
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Regex for “saas” never matches after .toLowerCase()

The text is lower-cased (t) but the pattern contains uppercase SaaS, and the regex is case-sensitive.

-if (/(tech|technology|robot|drone|fintech|crypto|software|hardware|cloud|SaaS)/.test(t)) { return 'Tech';}
+if (/(tech|technology|robot|drone|fintech|crypto|software|hardware|cloud|saas)/.test(t)) { return 'Tech';}

Add the i flag or keep everything lower-case.

📝 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
/* small helper to bucket common industry values */
function normaliseIndustry(raw?: string): 'AI' | 'VC' | 'Tech' | 'Startups' | undefined {
if (!raw) return undefined;
const t = raw.toLowerCase();
if (/(^| )(ai|artificial intelligence|machine learning|ml)( |$)/.test(t)) { return 'AI';}
if (/(vc|venture|fund|capital|investor)/.test(t)) { return 'VC';}
if (/(startup|accelerator|incubator|founder program)/.test(t)) { return 'Startups';}
if (/(tech|technology|robot|drone|fintech|crypto|software|hardware|cloud|SaaS)/.test(t)) { return 'Tech';}
return undefined;
/* small helper to bucket common industry values */
function normaliseIndustry(raw?: string): 'AI' | 'VC' | 'Tech' | 'Startups' | undefined {
if (!raw) return undefined;
const t = raw.toLowerCase();
if (/(^| )(ai|artificial intelligence|machine learning|ml)( |$)/.test(t)) { return 'AI';}
if (/(vc|venture|fund|capital|investor)/.test(t)) { return 'VC';}
if (/(startup|accelerator|incubator|founder program)/.test(t)) { return 'Startups';}
- if (/(tech|technology|robot|drone|fintech|crypto|software|hardware|cloud|SaaS)/.test(t)) { return 'Tech';}
+ if (/(tech|technology|robot|drone|fintech|crypto|software|hardware|cloud|saas)/.test(t)) { return 'Tech';}
return undefined;
}
🤖 Prompt for AI Agents
In agents/Startup_News_Scraper/src/agents/startup_scraper/summarize.ts around
lines 75 to 83, the regex pattern for matching "SaaS" is case-sensitive and does
not match after the input string is converted to lowercase. Fix this by either
adding the case-insensitive flag `i` to the regex or changing "SaaS" to
lowercase "saas" to ensure the pattern matches correctly.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 Nitpick comments (4)
agents/Startup_News_Scraper/README.md (4)

3-11: Add alt text to the deploy image
The second <img> tag (line 8) lacks an alt attribute, which affects accessibility.

-        <img src="https://app.agentuity.com/img/deploy.svg" /> 
+        <img src="https://app.agentuity.com/img/deploy.svg" alt="Deploy with Agentuity" /> 

69-72: Add missing comma for clarity
Insert a comma after "dashboard" and before "and choose" for proper pauses.

-1. In your **Agentuity** dashboard open the deployed agent, click the **➕** icon under *IO Visualization* and choose **API**.  
+1. In your **Agentuity** dashboard, open the deployed agent, click the **➕** icon under *IO Visualization*, and choose **API**.  

87-90: Remove redundant mention of "Code Node"
The heading "Do not adjust Code Node" and the subsequent list item both mention the Code node. Consider merging or rephrasing to avoid repetition.


117-121: Fix list indentation
The nested list under "You can also implement other n8n nodes:" uses 4-space indentation; markdownlint expects 2 spaces.

-    - Notion – create or append to a database
-    - Google Sheets – log each day’s stories
-    - Telegram / Teams – forward to other chat apps
-    - Webhooks – POST the digest JSON to any backend
+  - Notion – create or append to a database
+  - Google Sheets – log each day’s stories
+  - Telegram / Teams – forward to other chat apps
+  - Webhooks – POST the digest JSON to any backend
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between db3be8f and f7445ae.

📒 Files selected for processing (2)
  • agents/Startup_News_Scraper/README.md (1 hunks)
  • agents/Startup_News_Scraper/n8n_workflow/workflow.json (1 hunks)
🧰 Additional context used
🪛 LanguageTool
agents/Startup_News_Scraper/README.md

[uncategorized] ~70-~70: A comma might be missing here.
Context: ...y API endpoint 1. In your Agentuity dashboard open the deployed agent, click the *...

(AI_EN_LECTOR_MISSING_PUNCTUATION_COMMA)


[duplication] ~83-~83: Possible typo: you repeated a word.
Context: ...on** - Body Content Type – select JSON - JSON Body – {} (a single empty JSON objec...

(ENGLISH_WORD_REPEAT_RULE)


[grammar] ~87-~87: This phrase is duplicated. You should probably use “Code Node” only once.
Context: ...– leave blank ### 6. Do not adjust Code Node 1. Code node is preconfigured with the logic to tran...

(PHRASE_REPETITION)


[uncategorized] ~91-~91: If this is a compound adjective that modifies the following noun, use a hyphen.
Context: ...eadable HTML. 2. Do not change. ### 7. Third Party Configuration (Email, Slack, Discord, e...

(EN_COMPOUND_ADJECTIVE_INTERNAL)

🪛 markdownlint-cli2 (0.17.2)
agents/Startup_News_Scraper/README.md

8-8: Images should have alternate text (alt text)
null

(MD045, no-alt-text)


36-36: Trailing punctuation in heading
Punctuation: ':'

(MD026, no-trailing-punctuation)


118-118: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


119-119: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


120-120: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


121-121: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)

Comment on lines +23 to +35
{
"parameters": {
"method": "POST",
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
-440,
180
],
"id": "a1f3a427-c810-49d6-b3c6-dd1ce4fdda16",
"name": "HTTP Request"
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

HTTP Request URL placeholder must be configured
The HTTP Request node only specifies the method; the url field is blank and needs to be set to your Agentuity API endpoint as described in the README.

🤖 Prompt for AI Agents
In agents/Startup_News_Scraper/n8n_workflow/workflow.json around lines 23 to 35,
the HTTP Request node is missing the required 'url' parameter. Add the 'url'
field inside the "parameters" object and set it to the Agentuity API endpoint
URL as specified in the README to ensure the request is properly directed.

@dhilanfye34 dhilanfye34 merged commit d538baf into agentuity:main Jun 23, 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.

2 participants