Skip to content

Conversation

@NobbyBop
Copy link
Contributor

@NobbyBop NobbyBop commented Jun 24, 2025

Summary by CodeRabbit

  • New Features

    • Introduced a Sales Engineer conversational assistant that helps users complete RFP documents through interactive CLI sessions.
    • Added agents for extracting RFP schemas from templates and generating professional RFP documents in Markdown format.
    • Provided a sample CLI application for seamless user interaction with the assistant and agents.
  • Documentation

    • Added comprehensive README with setup instructions, agent descriptions, and API usage details.
    • Included example session transcript to demonstrate assistant capabilities.
  • Chores

    • Added configuration files for project setup, environment variables, formatting, linting, and version control.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jun 24, 2025

Walkthrough

This change introduces a comprehensive Sales Engineer Agent system, including agent modules, configuration files, documentation, and an interactive CLI application. The update adds agents for conversational RFP completion, schema extraction, and RFP generation, along with supporting configuration, templates, and example usage files. No existing code or entities are modified.

Changes

File(s) Change Summary
.gitignore, .editorconfig, biome.json, tsconfig.json, package.json (agent/app) Added configuration files for editor, version control, linting, formatting, TypeScript, and package management for agent and app components.
agentuity.yaml, .cursor/rules/*.mdc Introduced Agentuity project configuration and markdown rules for agent development and SDK usage.
src/agents/rfpGenerator/index.ts, src/agents/rfpSchema/index.ts, src/agents/salesEngineer/index.ts, src/agents/temp/index.ts Added agent modules for RFP generation, schema extraction, conversational sales engineer logic, and a temp agent for testing.
src/agents/rfpSimple.js Added an RFP template string for use by agents.
src/agents/rfpSchema/pdf-parse.d.ts Added TypeScript declaration for the pdf-parse module.
index.ts (agent) Added entry point script for agent startup and environment validation.
README.md Added documentation describing the Sales Engineer Agent system, agent roles, and usage instructions.
app/app.js Added a CLI application for interactive user sessions with the Sales Engineer Agent.
app/.env.example Added example environment variable file for CLI configuration.
app/example.txt Added example transcript demonstrating the assistant's conversational flow and output.

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant CLI App
    participant SalesEngineerAgent
    participant RfpSchemaAgent
    participant RfpGeneratorAgent

    User->>CLI App: Start session, select template, send first message
    CLI App->>SalesEngineerAgent: POST message + template (base64)
    SalesEngineerAgent->>RfpSchemaAgent: Extract JSON schema from template
    RfpSchemaAgent-->>SalesEngineerAgent: Return initial JSON object
    SalesEngineerAgent->>SalesEngineerAgent: Update JSON with user input via LLM
    SalesEngineerAgent-->>CLI App: Respond with assistant message, updated JSON, done flag
    CLI App->>User: Display assistant message, prompt for next input
    User->>CLI App: Provide more info
    CLI App->>SalesEngineerAgent: POST next message (no template)
    SalesEngineerAgent->>SalesEngineerAgent: Update JSON, analyze completeness
    alt If JSON complete
        SalesEngineerAgent->>RfpGeneratorAgent: Generate Markdown RFP from JSON
        RfpGeneratorAgent-->>SalesEngineerAgent: Return Markdown document
        SalesEngineerAgent-->>CLI App: Send filled template
        CLI App->>User: Display final RFP
    else Not complete
        SalesEngineerAgent-->>CLI App: Respond with follow-up questions
    end
Loading

Possibly related PRs

Suggested reviewers

  • rblalock
  • nnance

Poem

In a warren of code, a new agent appears,
Helping with RFPs, allaying your fears.
With schema and markdown, it hops right along,
Conversing with users, both clever and strong.
So raise up your carrots, let’s give a cheer—
The Sales Engineer Agent is finally here!
🥕✨


📜 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 a98c8d1 and fb11cfe.

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

🪧 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 24, 2025 15:30
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: 10

🧹 Nitpick comments (34)
agents/agent-zep/.env.example (1)

1-1: Add clarifying comment for placeholder and guard against accidental commits

A short inline comment helps future contributors understand what value to supply and reminds them not to commit real secrets.

-ZEP_API_KEY=
+# Zep API key (do **NOT** commit the real key)
+ZEP_API_KEY=
agents/agent-zep/main.py (1)

1-6: Prefer logging & a minimal doc-string over bare print

Using the logging module gives you adjustable verbosity and integrates with most hosting environments.
Also add a quick module-level doc-string for clarity.

+"""Simple smoke-test entry point for the agent-zep package."""
+
+import logging
+
 def main():
-    print("Hello from agent-zep!")
+    logging.basicConfig(level=logging.INFO)
+    logging.info("Hello from agent-zep!")
 
 
 if __name__ == "__main__":
     main()
agents/agent-zep/.editorconfig (1)

6-12: indent_size = 2 conflicts with PEP-8 (4-space) ‑ reconsider

Most Python tooling (Black, Ruff, etc.) assumes 4-space indentation. Deviating will cause perpetual formatting churn unless the whole repo is configured accordingly. If 2 spaces are truly desired, ensure all formatters and CI checks are aligned.

-indent_size = 2
+indent_size = 4
agents/agent-zep/.cursor/rules/agent.mdc (1)

20-22: Optional: add a return-type hint in the example for completeness.

Including the return type emphasises best-practice typing:

-async def run(request: AgentRequest, response: AgentResponse, context: AgentContext):
-    return response.json({"hello": "world"})
+async def run(
+    request: AgentRequest,
+    response: AgentResponse,
+    context: AgentContext,
+) -> AgentResponse:
+    return response.json({"hello": "world"})
agents/agent-zep/README.md (3)

83-83: Add missing comma for clarity.

The sentence structure would benefit from a comma for better readability.

-2. Send messages to the agent from the user you just created, and Zep will use the information you provided to respond. (You can use one or multiple session IDs which you generate yourself.)
+2. Send messages to the agent from the user you just created, and Zep will use the information you provided to respond. (You can use one or multiple session IDs, which you generate yourself.)

111-111: Remove trailing punctuation from heading.

Following markdown best practices, headings should not end with punctuation.

-### Note:
+### Note

113-113: Format bare URL as a proper markdown link.

Bare URLs should be formatted as proper markdown links for better presentation and accessibility.

-When you add information, you can check it out in the Zep Webapp: https://app.getzep.com/
+When you add information, you can check it out in the [Zep Webapp](https://app.getzep.com/).
agents/agent-zep/agentuity-agents/agentZep/zepSetup.py (1)

12-13: Fix PEP 8 compliance: Add required blank lines before function definition.

According to PEP 8, top-level function definitions should be surrounded by two blank lines.

 """
+
 
 async def setup(zep):
agents/agent-zep/agentuity-agents/agentZep/agent.py (2)

1-13: LGTM with minor suggestion for import organization.

The imports and setup are correctly implemented. The sys.path manipulation is necessary for importing the local zepSetup module, though it triggers a static analysis warning.

Consider restructuring the project to avoid sys.path manipulation:

-# This is a helper function (from Zep docs) to seed the Zep database with information about a user.
-sys.path.append(os.path.dirname(__file__))
-from zepSetup import setup
+# This is a helper function (from Zep docs) to seed the Zep database with information about a user.
+from .zepSetup import setup

Alternatively, you could move the import inside the function where it's used if the module structure doesn't support relative imports.


25-61: Fix formatting issues for better code quality.

The welcome function provides excellent user guidance with example prompts. However, there are several formatting issues that should be addressed for consistency.

Apply this diff to fix formatting issues:

                 "data": {
                     "action": "seed",
-                    "content":{ "text": "Run this to set up Zep with information about a test user, Jane Smith." }
+                    "content": {"text": "Run this to set up Zep with information about a test user, Jane Smith."}
                 },
                 "contentType": "application/json"
             },
             {
                 "data": {
                     "action": "message",
-                    "content":{
+                    "content": {
                         "user_id": "Jane536a",
                         "session_id": str(uuid.uuid4()),
                         "user_message": "Here you can send a message from Jane Smith, and Zep respond using what it knows about her!"
                     }
                 },
                 "contentType": "application/json"
             },
-            { 
+            {
                 "data": {
                     "action": "addUser",
                     "content": {
-                        "user_id": "",
-                        "user_first_name":"optional",
-                        "user_last_name":"optional",
-                        "user_email":"optional"
+                        "user_id": "",
+                        "user_first_name": "optional",
+                        "user_last_name": "optional",
+                        "user_email": "optional"
                     }
                 },
                 "contentType": "application/json"
             }
agents/agent-salesEngineer/agent/src/agents/rfpSchema/pdf-parse.d.ts (1)

1-4: Provide stronger typings for pdf-parse instead of falling back to any.

Declaring the default export as any defeats most of the benefit of TypeScript. Even a very small signature skeleton drastically improves DX and catches common mistakes.

-declare module "pdf-parse" {
-  const pdfParse: any;
-  export default pdfParse;
-}
+declare module 'pdf-parse' {
+  interface PdfParseOptions {
+    // add recognised options here or leave it open-ended
+    [key: string]: unknown;
+  }
+
+  interface PdfParseResult {
+    numpages: number;
+    numrender: number;
+    info: Record<string, unknown>;
+    metadata: Record<string, unknown>;
+    text: string;
+    version: string;
+  }
+
+  function pdfParse(
+    data: Buffer | Uint8Array | ArrayBuffer,
+    options?: PdfParseOptions
+  ): Promise<PdfParseResult>;
+
+  export default pdfParse;
+}

If a community @types/pdf-parse package appears later, you can drop this file and add the dependency instead.

agents/agent-salesEngineer/agent/.editorconfig (1)

11-12: Consider enabling trailing-whitespace trimming / final newline.

trim_trailing_whitespace = false and insert_final_newline = false make it easy for noise to creep into diffs and can break some POSIX tooling. If there’s no project-wide reason to disable them, switching to true is the safer default.

agents/agent-salesEngineer/app/.env.example (1)

1-1: Add a terminating newline and a short comment for clarity.

Most tooling expects .env files to end with a newline. A brief comment also helps new contributors.

-SALES_ENGINEER_URL=get_this_from_running_agentuity_dev
+# URL of the running Sales-Engineer agent (set by `agentuity dev`)
+SALES_ENGINEER_URL=get_this_from_running_agentuity_dev
+
agents/agent-salesEngineer/agent/src/agents/temp/index.ts (1)

2-2: Remove unused OpenAI import.

The OpenAI import is not used in this implementation.

-import OpenAI from "openai";
agents/agent-salesEngineer/agent/tsconfig.json (1)

13-14: Consider enabling unused variable checking.

Having noUnusedLocals and noUnusedParameters set to false might allow unused code to accumulate. Consider enabling these for better code hygiene.

-    "noUnusedLocals": false,
-    "noUnusedParameters": false,
+    "noUnusedLocals": true,
+    "noUnusedParameters": true,
agents/agent-salesEngineer/app/package.json (2)

2-2: Consider a more descriptive package name.

The generic name "app" could be more descriptive like "sales-engineer-cli" or "rfp-assistant-cli".

-  "name": "app",
+  "name": "sales-engineer-cli",

5-6: Add a start script and implement proper testing.

Consider adding a start script for the main entry point and implementing actual tests instead of the error placeholder.

  "scripts": {
+    "start": "node app.js",
-    "test": "echo \"Error: no test specified\" && exit 1"
+    "test": "echo \"No tests implemented yet\""
  },
agents/agent-salesEngineer/.gitignore (1)

14-14: Fix potential typo in log pattern.

The pattern _.log should likely be *.log to match all log files.

-_.log
+*.log
agents/agent-salesEngineer/agent/package.json (2)

3-3: Add package description.

Consider adding a meaningful description for the package.

-  "description": "",
+  "description": "Sales Engineer AI agent for conversational RFP assistance",

22-22: Add author information.

Consider adding author information to match the CLI app package.

-  "author": "",
+  "author": "Nicholas Mirigliani",
agents/agent-salesEngineer/README.md (4)

14-14: Simplify redundant terminology.

The phrase "CLI interface" is redundant since CLI already stands for "Command Line Interface."

-Also included in this project is a simple CLI interface that allows you to interact with the Sales Engineer Agent.
+Also included in this project is a simple CLI that allows you to interact with the Sales Engineer Agent.

19-19: Simplify redundant terminology.

Same redundancy issue with "CLI interface."

-2. Run `bun install` in the `app` directory to install the dependencies for the CLI interface
+2. Run `bun install` in the `app` directory to install the dependencies for the CLI

24-24: Simplify redundant terminology.

Another instance of the redundant "CLI interface."

-7. Run `bun run app` in the `app` directory to start the CLI interface.
+7. Run `bun run app` in the `app` directory to start the CLI.

63-63: Capitalize Markdown as proper noun.

When referring to the Markdown formatting language, it should be capitalized as a proper noun.

-The RFP Generator Agent is responsible for generating an RFP document based on the requirements of the user and the information gathered from the conversation. It accepts a JSON object with the schema of the document and returns a markdown document.
+The RFP Generator Agent is responsible for generating an RFP document based on the requirements of the user and the information gathered from the conversation. It accepts a JSON object with the schema of the document and returns a Markdown document.
agents/agent-salesEngineer/agent/src/agents/rfpSimple.js (1)

1-86: Consider converting to TypeScript for consistency.

The RFP template is well-structured and comprehensive. However, the file uses a .js extension while the project primarily uses TypeScript. Based on the retrieved learnings, Agentuity projects should prefer TypeScript for type safety and consistency.

Consider renaming to rfpSimple.ts:

- export const rfpSimple = `# Request for Proposal (RFP)
+ export const rfpSimple = `# Request for Proposal (RFP)
agents/agent-salesEngineer/app/app.js (2)

70-70: Consider making the default template path configurable.

The hard-coded path "RFP.jpg" may not exist in all environments.

Consider using a more robust approach:

-      const fileBuffer = await fs.readFile("RFP.jpg");
+      const defaultTemplate = process.env.DEFAULT_TEMPLATE_PATH || "RFP.jpg";
+      const fileBuffer = await fs.readFile(defaultTemplate);

119-123: Improve error handling for network requests.

The fetch request could benefit from more specific error handling to help users troubleshoot connection issues.

          const response = await fetch(salesEngineerUrl, {
            method: "POST",
            headers: { "Content-Type": "application/json" },
            body: JSON.stringify(payload),
          });
+
+          if (!response.ok) {
+            throw new Error(`HTTP ${response.status}: ${response.statusText}`);
+          }
agents/agent-salesEngineer/agent/src/agents/rfpSchema/index.ts (3)

63-63: Apply static analysis suggestion for optional chaining.

The condition can be simplified using optional chaining as suggested by Biome.

-	if (contentType && contentType.startsWith("image/")) {
+	if (contentType?.startsWith("image/")) {

69-87: Consider using consistent OpenAI API patterns.

The image handling uses openai.responses.create() while other sections use openai.chat.completions.create(). This inconsistency could lead to confusion.

Consider standardizing on the chat completions API:

-		const response = await openai.responses.create({
-			model: "gpt-4o-mini",
-			input: [
-				{
-					role: "user",
-					content: [
-						{
-							type: "input_text",
-							text: EXTRACTION_PROMPT,
-						},
-						{
-							type: "input_image",
-							image_url: `data:${contentType};base64,${base64Image}`,
-							detail: "auto",
-						},
-					],
-				},
-			],
-		});
+		const response = await openai.chat.completions.create({
+			model: "gpt-4o-mini",
+			messages: [
+				{
+					role: "user",
+					content: [
+						{
+							type: "text",
+							text: EXTRACTION_PROMPT,
+						},
+						{
+							type: "image_url",
+							image_url: {
+								url: `data:${contentType};base64,${base64Image}`,
+								detail: "auto",
+							},
+						},
+					],
+				},
+			],
+		});

And update the response parsing:

-			const json = JSON.parse(response.output_text);
+			const json = JSON.parse(response.choices[0].message.content ?? "{}");

127-127: Apply static analysis suggestion for optional chaining.

The condition can be simplified using optional chaining as suggested by Biome.

-	} else if (contentType && contentType.startsWith("text/")) {
+	} else if (contentType?.startsWith("text/")) {
agents/agent-salesEngineer/agent/src/agents/rfpGenerator/index.ts (1)

160-165: Consider providing more specific error information.

While the error handling is present, consider including more context in the error response to help with debugging.

	} catch (e) {
		ctx.logger.error("Error generating RFP Markdown: %o", e);
-		return resp.text("Error generating RFP Markdown.", {
+		return resp.text(`Error generating RFP Markdown: ${e instanceof Error ? e.message : 'Unknown error'}`, {
			"content-type": "text/markdown",
		});
	}
agents/agent-salesEngineer/agent/src/agents/salesEngineer/index.ts (3)

159-162: Fix conversation history formatting.

Missing colon and space in the conversation history format.

Apply this diff to fix the formatting:

			await ctx.kv.set("sessions", data.sessionId, {
				jsonObject: updatedJsonObject,
-				history: `${history}\nUser:${userMessage}\nYou${analysis.message}`,
+				history: `${history}\nUser: ${userMessage}\nYou: ${analysis.message}`,
			});

72-95: Extract prompts to improve maintainability.

The inline prompts are quite long and make the code harder to maintain. Consider extracting them to constants or separate template files.

Create a separate file for prompts:

// prompts.ts
export const FILL_JSON_PROMPT = `
You are given the following:

- [JSON OBJECT]: {jsonObject}
- [USER MESSAGE]: {userMessage}
- [CONVERSATION HISTORY]: {history}

Your task is to fill in the missing or null fields...
`;

export const ANALYZE_COMPLETION_PROMPT = `
You are an assistant helping to collect RFP information...
`;

Then use template literals or a template engine to inject values.


159-162: Consider implementing conversation history management.

The conversation history grows unbounded, which could lead to token limit issues with OpenAI APIs and increased costs.

Consider implementing:

  1. A maximum history length with truncation of older messages
  2. Conversation summarization for long histories
  3. Token counting to stay within API limits

Example approach:

const MAX_HISTORY_TOKENS = 2000;
// Implement token counting and truncation logic
📜 Review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between 5a52145 and bd7e71e.

⛔ Files ignored due to path filters (5)
  • agents/agent-salesEngineer/agent/bun.lock is excluded by !**/*.lock
  • agents/agent-salesEngineer/agent/package-lock.json is excluded by !**/package-lock.json
  • agents/agent-salesEngineer/app/RFP.jpg is excluded by !**/*.jpg
  • agents/agent-salesEngineer/app/bun.lock is excluded by !**/*.lock
  • agents/agent-zep/uv.lock is excluded by !**/*.lock
📒 Files selected for processing (37)
  • agents/agent-salesEngineer/.gitignore (1 hunks)
  • agents/agent-salesEngineer/README.md (1 hunks)
  • agents/agent-salesEngineer/agent/.cursor/rules/agent.mdc (1 hunks)
  • agents/agent-salesEngineer/agent/.cursor/rules/agentuity.mdc (1 hunks)
  • agents/agent-salesEngineer/agent/.cursor/rules/sdk.mdc (1 hunks)
  • agents/agent-salesEngineer/agent/.editorconfig (1 hunks)
  • agents/agent-salesEngineer/agent/agentuity.yaml (1 hunks)
  • agents/agent-salesEngineer/agent/biome.json (1 hunks)
  • agents/agent-salesEngineer/agent/index.ts (1 hunks)
  • agents/agent-salesEngineer/agent/package.json (1 hunks)
  • agents/agent-salesEngineer/agent/src/agents/rfpGenerator/index.ts (1 hunks)
  • agents/agent-salesEngineer/agent/src/agents/rfpSchema/index.ts (1 hunks)
  • agents/agent-salesEngineer/agent/src/agents/rfpSchema/pdf-parse.d.ts (1 hunks)
  • agents/agent-salesEngineer/agent/src/agents/rfpSimple.js (1 hunks)
  • agents/agent-salesEngineer/agent/src/agents/salesEngineer/index.ts (1 hunks)
  • agents/agent-salesEngineer/agent/src/agents/temp/index.ts (1 hunks)
  • agents/agent-salesEngineer/agent/tsconfig.json (1 hunks)
  • agents/agent-salesEngineer/app/.env.example (1 hunks)
  • agents/agent-salesEngineer/app/app.js (1 hunks)
  • agents/agent-salesEngineer/app/example.txt (1 hunks)
  • agents/agent-salesEngineer/app/package.json (1 hunks)
  • agents/agent-zep/.cursor/rules/agent.mdc (1 hunks)
  • agents/agent-zep/.cursor/rules/agentuity.mdc (1 hunks)
  • agents/agent-zep/.cursor/rules/sdk.mdc (1 hunks)
  • agents/agent-zep/.editorconfig (1 hunks)
  • agents/agent-zep/.env.example (1 hunks)
  • agents/agent-zep/.gitignore (1 hunks)
  • agents/agent-zep/.python-version (1 hunks)
  • agents/agent-zep/README.md (1 hunks)
  • agents/agent-zep/agentuity-agents/__init__.py (1 hunks)
  • agents/agent-zep/agentuity-agents/agentZep/__init__.py (1 hunks)
  • agents/agent-zep/agentuity-agents/agentZep/agent.py (1 hunks)
  • agents/agent-zep/agentuity-agents/agentZep/zepSetup.py (1 hunks)
  • agents/agent-zep/agentuity.yaml (1 hunks)
  • agents/agent-zep/main.py (1 hunks)
  • agents/agent-zep/pyproject.toml (1 hunks)
  • agents/agent-zep/server.py (1 hunks)
🧰 Additional context used
🧠 Learnings (10)
agents/agent-zep/.cursor/rules/agentuity.mdc (10)
Learnt from: CR
PR: agentuity/examples#0
File: agents/Startup_News_Scraper/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-06-23T15:08:03.963Z
Learning: The Agentuity configuration file (agentuity.yaml) is reserved for configuring the AI Agent project and should not be edited or suggested for edits during code review.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/openai/from-oai/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-06-23T17:16:16.519Z
Learning: The Agentuity configuration file (agentuity.yaml) is reserved for configuring the AI Agent project and should not be edited or suggested for edits during code review.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/openai/from-oai-typescript/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-06-23T17:16:02.063Z
Learning: The Agentuity AI Configuration file (agentuity.yaml) is used to configure the AI Agent project and should not be edited or suggested for edits.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/miscellaneous/mem0/mem0demo/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-06-23T17:15:46.735Z
Learning: The Agentuity configuration file (agentuity.yaml) is used to configure the AI Agent project and should not be edited or suggested for edits.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/langchain/basic/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-06-23T17:14:18.092Z
Learning: The file 'agentuity.yaml' is used to configure the Agentuity AI Agent project and should not be edited or suggested for edits.
Learnt from: CR
PR: agentuity/examples#0
File: agents/agent-riza/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-06-23T14:58:41.453Z
Learning: The 'agentuity.yaml' file is a configuration file used by Agentuity to configure the AI Agent project and should not be edited or suggested for edits.
Learnt from: CR
PR: agentuity/examples#0
File: agents/deep-research-js/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-06-23T15:28:22.653Z
Learning: The 'agentuity.yaml' file is a configuration file used by Agentuity to configure the AI Agent project and should not be edited or suggested for edits.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/crewai/socialagent/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-06-23T17:13:52.368Z
Learning: The 'agentuity.yaml' file is a configuration file used by Agentuity to configure the AI Agent project and should not be edited or suggested for edits.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/agno/from_agno/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-06-23T17:13:14.406Z
Learning: In Agentuity AI projects, the 'agentuity.yaml' file serves as the configuration file for the AI Agent and should not be modified or suggested for edits during code review.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/pydantic/basic/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-06-23T17:16:33.550Z
Learning: The agentuity.yaml file is a configuration file used by Agentuity to configure the AI Agent project and should not be edited or suggested for edits during code review.
agents/agent-salesEngineer/agent/src/agents/temp/index.ts (13)
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/langgraph/basic/.cursor/rules/agent.mdc:0-0
Timestamp: 2025-06-23T17:14:39.393Z
Learning: In Agentuity AI Agent files (`**/src/agents/**/index.ts`), the default export should be an async function that handles the agent logic, typically accepting parameters `(req: AgentRequest, resp: AgentResponse, ctx: AgentContext)`.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/mastra/basic/.cursor/rules/agent.mdc:0-0
Timestamp: 2025-06-23T17:15:12.561Z
Learning: In Agentuity AI Agent files (`**/src/agents/**/index.ts`), the default export should be an async function that handles the agent logic, typically accepting parameters `(req: AgentRequest, resp: AgentResponse, ctx: AgentContext)`.
Learnt from: CR
PR: agentuity/examples#0
File: agents/Startup_News_Scraper/.cursor/rules/agent.mdc:0-0
Timestamp: 2025-06-23T15:08:01.527Z
Learning: In TypeScript Agent files for Agentuity (located at '**/src/agents/**/index.ts'), always export a default async function that handles the agent logic, typically named 'Agent' or contextually after the agent.
Learnt from: CR
PR: agentuity/examples#0
File: agentuity/sdk-js/streaming/.cursor/rules/agent.mdc:0-0
Timestamp: 2025-06-23T15:29:07.912Z
Learning: When writing an Agent file in TypeScript for Agentuity, always export a default async function that handles the agent logic, typically named Agent or contextually named after the Agent.
Learnt from: CR
PR: agentuity/examples#0
File: agents/agent-riza/.cursor/rules/agent.mdc:0-0
Timestamp: 2025-06-23T14:53:38.902Z
Learning: When writing an Agent file in TypeScript for Agentuity, always export a default async function, typically named Agent or contextually named after the Agent.
Learnt from: CR
PR: agentuity/examples#0
File: agents/deep-research-js/.cursor/rules/agent.mdc:0-0
Timestamp: 2025-06-23T15:28:20.749Z
Learning: Agent files in Agentuity should export a default async function that handles the agent logic, typically accepting parameters `(req: AgentRequest, resp: AgentResponse, ctx: AgentContext)`.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/vercel/basic/.cursor/rules/agent.mdc:0-0
Timestamp: 2025-06-23T17:16:49.315Z
Learning: When writing an Agent in TypeScript for Agentuity, always use the types provided by the `@agentuity/sdk` package for AgentRequest, AgentResponse, and AgentContext to ensure type safety and compatibility.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/langgraph/basic/.cursor/rules/agent.mdc:0-0
Timestamp: 2025-06-23T17:14:39.393Z
Learning: In Agentuity AI Agent files (`**/src/agents/**/index.ts`), import types such as `AgentRequest`, `AgentResponse`, and `AgentContext` from the `@agentuity/sdk` package to ensure type safety and consistency.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/mastra/basic/.cursor/rules/agent.mdc:0-0
Timestamp: 2025-06-23T17:15:12.561Z
Learning: In Agentuity AI Agent files (`**/src/agents/**/index.ts`), import types such as `AgentRequest`, `AgentResponse`, and `AgentContext` from the `@agentuity/sdk` package to ensure type safety and consistency.
Learnt from: CR
PR: agentuity/examples#0
File: agents/deep-research-js/.cursor/rules/agent.mdc:0-0
Timestamp: 2025-06-23T15:28:20.749Z
Learning: When writing Agentuity AI Agents in TypeScript, import types such as `AgentRequest`, `AgentResponse`, and `AgentContext` from the `@agentuity/sdk` package to ensure type safety and consistency.
Learnt from: CR
PR: agentuity/examples#0
File: patterns/llmAsJury/.cursor/rules/sdk.mdc:0-0
Timestamp: 2025-06-23T17:17:19.027Z
Learning: In the Agentuity JavaScript SDK, the main handler for an agent should implement the AgentHandler type: (request: AgentRequest, response: AgentResponse, context: AgentContext) => Promise<AgentResponseType>.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/vercel/basic/.cursor/rules/sdk.mdc:0-0
Timestamp: 2025-06-23T17:16:58.079Z
Learning: In the Agentuity JavaScript SDK, the main handler for an agent should implement the AgentHandler type: (request: AgentRequest, response: AgentResponse, context: AgentContext) => Promise<AgentResponseType>.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/openai/from-oai-typescript/.cursor/rules/sdk.mdc:0-0
Timestamp: 2025-06-23T17:16:08.480Z
Learning: In the Agentuity JavaScript SDK, the main handler for an agent should implement the AgentHandler type: (request: AgentRequest, response: AgentResponse, context: AgentContext) => Promise<AgentResponseType>.
agents/agent-salesEngineer/agent/.cursor/rules/agent.mdc (10)
Learnt from: CR
PR: agentuity/examples#0
File: agents/Startup_News_Scraper/.cursor/rules/agent.mdc:0-0
Timestamp: 2025-06-23T15:08:01.527Z
Learning: In TypeScript Agent files for Agentuity (located at '**/src/agents/**/index.ts'), always export a default async function that handles the agent logic, typically named 'Agent' or contextually after the agent.
Learnt from: CR
PR: agentuity/examples#0
File: agents/deep-research-js/.cursor/rules/agent.mdc:0-0
Timestamp: 2025-06-23T15:28:20.749Z
Learning: Agentuity agent files should always be written in TypeScript to leverage type safety and modern language features.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/mastra/basic/.cursor/rules/agent.mdc:0-0
Timestamp: 2025-06-23T17:15:12.561Z
Learning: In Agentuity AI Agent files (`**/src/agents/**/index.ts`), import types such as `AgentRequest`, `AgentResponse`, and `AgentContext` from the `@agentuity/sdk` package to ensure type safety and consistency.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/langgraph/basic/.cursor/rules/agent.mdc:0-0
Timestamp: 2025-06-23T17:14:39.393Z
Learning: In Agentuity AI Agent files (`**/src/agents/**/index.ts`), import types such as `AgentRequest`, `AgentResponse`, and `AgentContext` from the `@agentuity/sdk` package to ensure type safety and consistency.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/langgraph/basic/.cursor/rules/agent.mdc:0-0
Timestamp: 2025-06-23T17:14:39.393Z
Learning: In Agentuity AI Agent files (`**/src/agents/**/index.ts`), the default export should be an async function that handles the agent logic, typically accepting parameters `(req: AgentRequest, resp: AgentResponse, ctx: AgentContext)`.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/mastra/basic/.cursor/rules/agent.mdc:0-0
Timestamp: 2025-06-23T17:15:12.561Z
Learning: In Agentuity AI Agent files (`**/src/agents/**/index.ts`), the default export should be an async function that handles the agent logic, typically accepting parameters `(req: AgentRequest, resp: AgentResponse, ctx: AgentContext)`.
Learnt from: CR
PR: agentuity/examples#0
File: agentuity/sdk-js/streaming/.cursor/rules/agent.mdc:0-0
Timestamp: 2025-06-23T15:29:07.912Z
Learning: When writing an Agent file in TypeScript for Agentuity, always export a default async function that handles the agent logic, typically named Agent or contextually named after the Agent.
Learnt from: CR
PR: agentuity/examples#0
File: agents/agent-riza/.cursor/rules/agent.mdc:0-0
Timestamp: 2025-06-23T14:53:38.902Z
Learning: When writing an Agent file in TypeScript for Agentuity, always export a default async function, typically named Agent or contextually named after the Agent.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/vercel/basic/.cursor/rules/agent.mdc:0-0
Timestamp: 2025-06-23T17:16:49.315Z
Learning: When writing an Agent in TypeScript for Agentuity, always use the types provided by the `@agentuity/sdk` package for AgentRequest, AgentResponse, and AgentContext to ensure type safety and compatibility.
Learnt from: CR
PR: agentuity/examples#0
File: agents/deep-research-js/.cursor/rules/agent.mdc:0-0
Timestamp: 2025-06-23T15:28:20.749Z
Learning: When writing Agentuity AI Agents in TypeScript, import types such as `AgentRequest`, `AgentResponse`, and `AgentContext` from the `@agentuity/sdk` package to ensure type safety and consistency.
agents/agent-salesEngineer/agent/agentuity.yaml (10)
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/agno/from_agno/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-06-23T17:13:14.406Z
Learning: In Agentuity AI projects, the 'agentuity.yaml' file serves as the configuration file for the AI Agent and should not be modified or suggested for edits during code review.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/pydantic/basic/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-06-23T17:16:33.550Z
Learning: The agentuity.yaml file is a configuration file used by Agentuity to configure the AI Agent project and should not be edited or suggested for edits during code review.
Learnt from: CR
PR: agentuity/examples#0
File: agents/Startup_News_Scraper/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-06-23T15:08:03.963Z
Learning: The Agentuity configuration file (agentuity.yaml) is reserved for configuring the AI Agent project and should not be edited or suggested for edits during code review.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/openai/from-oai/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-06-23T17:16:16.519Z
Learning: The Agentuity configuration file (agentuity.yaml) is reserved for configuring the AI Agent project and should not be edited or suggested for edits during code review.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/langchain/basic/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-06-23T17:14:18.092Z
Learning: The file 'agentuity.yaml' is used to configure the Agentuity AI Agent project and should not be edited or suggested for edits.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/crewai/basic/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-06-23T17:13:30.329Z
Learning: In projects using Agentuity, the 'agentuity.yaml' file is reserved for configuration and should not be edited or suggested for edits during code review.
Learnt from: CR
PR: agentuity/examples#0
File: agents/agent-riza/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-06-23T14:58:41.453Z
Learning: The 'agentuity.yaml' file is a configuration file used by Agentuity to configure the AI Agent project and should not be edited or suggested for edits.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/crewai/socialagent/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-06-23T17:13:52.368Z
Learning: The 'agentuity.yaml' file is a configuration file used by Agentuity to configure the AI Agent project and should not be edited or suggested for edits.
Learnt from: CR
PR: agentuity/examples#0
File: agents/deep-research-js/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-06-23T15:28:22.653Z
Learning: The 'agentuity.yaml' file is a configuration file used by Agentuity to configure the AI Agent project and should not be edited or suggested for edits.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/miscellaneous/mem0/mem0demo/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-06-23T17:15:46.735Z
Learning: The Agentuity configuration file (agentuity.yaml) is used to configure the AI Agent project and should not be edited or suggested for edits.
agents/agent-salesEngineer/agent/.cursor/rules/agentuity.mdc (10)
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/openai/from-oai/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-06-23T17:16:16.519Z
Learning: The Agentuity configuration file (agentuity.yaml) is reserved for configuring the AI Agent project and should not be edited or suggested for edits during code review.
Learnt from: CR
PR: agentuity/examples#0
File: agents/Startup_News_Scraper/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-06-23T15:08:03.963Z
Learning: The Agentuity configuration file (agentuity.yaml) is reserved for configuring the AI Agent project and should not be edited or suggested for edits during code review.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/pydantic/basic/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-06-23T17:16:33.550Z
Learning: The agentuity.yaml file is a configuration file used by Agentuity to configure the AI Agent project and should not be edited or suggested for edits during code review.
Learnt from: CR
PR: agentuity/examples#0
File: agents/agent-riza/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-06-23T14:58:41.453Z
Learning: The 'agentuity.yaml' file is a configuration file used by Agentuity to configure the AI Agent project and should not be edited or suggested for edits.
Learnt from: CR
PR: agentuity/examples#0
File: agents/deep-research-js/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-06-23T15:28:22.653Z
Learning: The 'agentuity.yaml' file is a configuration file used by Agentuity to configure the AI Agent project and should not be edited or suggested for edits.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/crewai/socialagent/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-06-23T17:13:52.368Z
Learning: The 'agentuity.yaml' file is a configuration file used by Agentuity to configure the AI Agent project and should not be edited or suggested for edits.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/agno/from_agno/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-06-23T17:13:14.406Z
Learning: In Agentuity AI projects, the 'agentuity.yaml' file serves as the configuration file for the AI Agent and should not be modified or suggested for edits during code review.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/langchain/basic/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-06-23T17:14:18.092Z
Learning: The file 'agentuity.yaml' is used to configure the Agentuity AI Agent project and should not be edited or suggested for edits.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/miscellaneous/mem0/mem0demo/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-06-23T17:15:46.735Z
Learning: The Agentuity configuration file (agentuity.yaml) is used to configure the AI Agent project and should not be edited or suggested for edits.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/openai/from-oai-typescript/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-06-23T17:16:02.063Z
Learning: The Agentuity AI Configuration file (agentuity.yaml) is used to configure the AI Agent project and should not be edited or suggested for edits.
agents/agent-zep/agentuity.yaml (10)
Learnt from: CR
PR: agentuity/examples#0
File: agents/agent-riza/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-06-23T14:58:41.453Z
Learning: The 'agentuity.yaml' file is a configuration file used by Agentuity to configure the AI Agent project and should not be edited or suggested for edits.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/crewai/socialagent/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-06-23T17:13:52.368Z
Learning: The 'agentuity.yaml' file is a configuration file used by Agentuity to configure the AI Agent project and should not be edited or suggested for edits.
Learnt from: CR
PR: agentuity/examples#0
File: agents/deep-research-js/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-06-23T15:28:22.653Z
Learning: The 'agentuity.yaml' file is a configuration file used by Agentuity to configure the AI Agent project and should not be edited or suggested for edits.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/pydantic/basic/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-06-23T17:16:33.550Z
Learning: The agentuity.yaml file is a configuration file used by Agentuity to configure the AI Agent project and should not be edited or suggested for edits during code review.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/crewai/basic/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-06-23T17:13:30.329Z
Learning: In projects using Agentuity, the 'agentuity.yaml' file is reserved for configuration and should not be edited or suggested for edits during code review.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/agno/from_agno/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-06-23T17:13:14.406Z
Learning: In Agentuity AI projects, the 'agentuity.yaml' file serves as the configuration file for the AI Agent and should not be modified or suggested for edits during code review.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/openai/from-oai/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-06-23T17:16:16.519Z
Learning: The Agentuity configuration file (agentuity.yaml) is reserved for configuring the AI Agent project and should not be edited or suggested for edits during code review.
Learnt from: CR
PR: agentuity/examples#0
File: agents/Startup_News_Scraper/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-06-23T15:08:03.963Z
Learning: The Agentuity configuration file (agentuity.yaml) is reserved for configuring the AI Agent project and should not be edited or suggested for edits during code review.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/langchain/basic/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-06-23T17:14:18.092Z
Learning: The file 'agentuity.yaml' is used to configure the Agentuity AI Agent project and should not be edited or suggested for edits.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/miscellaneous/grokLiveSearch/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-06-23T17:15:30.804Z
Learning: In the context of Agentuity AI projects, the 'agentuity.yaml' file is a configuration file that should not be edited or suggested for edits during code review.
agents/agent-zep/.cursor/rules/agent.mdc (10)
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/openai/from-oai/.cursor/rules/agent.mdc:0-0
Timestamp: 2025-06-23T17:16:13.875Z
Learning: In Agentuity AI Agent Python files (agents/**/*.py), the main entry point should be an async function named `run` that accepts parameters of types AgentRequest, AgentResponse, and AgentContext.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/crewai/socialagent/.cursor/rules/agent.mdc:0-0
Timestamp: 2025-06-23T17:13:46.563Z
Learning: When writing Agentuity AI Agents in Python (in files matching agents/**/*.py), always define an async function named `run` that serves as the entry point for the agent.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/langchain/basic/.cursor/rules/agent.mdc:0-0
Timestamp: 2025-06-23T17:14:15.333Z
Learning: When writing Python AI Agent files for Agentuity in the 'agents/' directory, always define an async function named 'run' as the entry point.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/llamaindex/basic/.cursor/rules/agent.mdc:0-0
Timestamp: 2025-06-23T17:14:53.981Z
Learning: When writing Python AI Agent files for the Agentuity platform (in files matching agents/**/*.py), always define an async function named `run` as the entry point.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/openai/from-oai/.cursor/rules/agent.mdc:0-0
Timestamp: 2025-06-23T17:16:13.875Z
Learning: When writing Agentuity AI Agents in Python, always use type hints and adhere to Python best practices for code quality and maintainability.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/miscellaneous/mem0/mem0demo/.cursor/rules/agent.mdc:0-0
Timestamp: 2025-06-23T17:15:43.688Z
Learning: When writing Agentuity AI Agents in Python, always define an async function named `run` that serves as the entry point for the agent.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/miscellaneous/grokLiveSearch/.cursor/rules/agent.mdc:0-0
Timestamp: 2025-06-23T17:15:27.163Z
Learning: In Python agent files located under agents/**/*.py, always define an async function named `run` as the entry point for the agent.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/pydantic/basic/.cursor/rules/agent.mdc:0-0
Timestamp: 2025-06-23T17:16:30.899Z
Learning: In Python agent files under 'agents/**/*.py', always define an async function named 'run' as the entry point for the agent.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/crewai/basic/.cursor/rules/agent.mdc:0-0
Timestamp: 2025-06-23T17:13:28.272Z
Learning: In Python agent files under 'agents/**/*.py', always define an async function named 'run' as the entry point for the agent.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/pydantic/basic/.cursor/rules/agent.mdc:0-0
Timestamp: 2025-06-23T17:16:30.899Z
Learning: When writing agent code in 'agents/**/*.py', prefer importing types such as AgentRequest, AgentResponse, and AgentContext from the 'agentuity' package to ensure compatibility and consistency.
agents/agent-salesEngineer/agent/src/agents/rfpSchema/index.ts (2)
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/mastra/basic/.cursor/rules/agent.mdc:0-0
Timestamp: 2025-06-23T17:15:12.561Z
Learning: In Agentuity AI Agent files (`**/src/agents/**/index.ts`), the default export should be an async function that handles the agent logic, typically accepting parameters `(req: AgentRequest, resp: AgentResponse, ctx: AgentContext)`.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/langgraph/basic/.cursor/rules/agent.mdc:0-0
Timestamp: 2025-06-23T17:14:39.393Z
Learning: In Agentuity AI Agent files (`**/src/agents/**/index.ts`), the default export should be an async function that handles the agent logic, typically accepting parameters `(req: AgentRequest, resp: AgentResponse, ctx: AgentContext)`.
agents/agent-zep/agentuity-agents/agentZep/agent.py (10)
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/openai/from-oai/.cursor/rules/agent.mdc:0-0
Timestamp: 2025-06-23T17:16:13.875Z
Learning: In Agentuity AI Agent Python files (agents/**/*.py), the main entry point should be an async function named `run` that accepts parameters of types AgentRequest, AgentResponse, and AgentContext.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/agno/from_agno/.cursor/rules/sdk.mdc:0-0
Timestamp: 2025-06-23T17:13:21.187Z
Learning: In the Agentuity Python SDK, the main entry point for an agent is an async function named 'run' that takes three arguments: request (AgentRequest), response (AgentResponse), and context (AgentContext).
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/miscellaneous/mem0/mem0demo/.cursor/rules/sdk.mdc:0-0
Timestamp: 2025-06-23T17:15:53.658Z
Learning: In the Agentuity Python SDK, the main entry point for an agent is an async function named 'run' that takes three arguments: request (AgentRequest), response (AgentResponse), and context (AgentContext).
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/pydantic/basic/.cursor/rules/sdk.mdc:0-0
Timestamp: 2025-06-23T17:16:43.214Z
Learning: In the Agentuity Python SDK, the main handler for an agent is an async function named 'run' that takes 'request', 'response', and 'context' as parameters.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/crewai/socialagent/.cursor/rules/sdk.mdc:0-0
Timestamp: 2025-06-23T17:14:03.437Z
Learning: In the Agentuity Python SDK, the main agent handler should be an async function named 'run' that accepts 'request: AgentRequest', 'response: AgentResponse', and 'context: AgentContext' as arguments.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/miscellaneous/grokLiveSearch/.cursor/rules/sdk.mdc:0-0
Timestamp: 2025-06-23T17:15:39.390Z
Learning: In the Agentuity Python SDK, the main agent handler should be an async function named 'run' that accepts 'request: AgentRequest', 'response: AgentResponse', and 'context: AgentContext' as parameters.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/crewai/basic/.cursor/rules/sdk.mdc:0-0
Timestamp: 2025-06-23T17:13:37.977Z
Learning: In the Agentuity Python SDK, the main agent handler should be an async function named 'run' that accepts 'request: AgentRequest', 'response: AgentResponse', and 'context: AgentContext' as parameters.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/langchain/basic/.cursor/rules/sdk.mdc:0-0
Timestamp: 2025-06-23T17:14:31.499Z
Learning: In the Agentuity Python SDK, the main agent handler should be an async function named 'run' that accepts 'request: AgentRequest', 'response: AgentResponse', and 'context: AgentContext' as parameters.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/llamaindex/basic/.cursor/rules/sdk.mdc:0-0
Timestamp: 2025-06-23T17:15:05.904Z
Learning: In the Agentuity Python SDK, the main agent handler function should be defined as an async function named 'run' that accepts 'request' (AgentRequest), 'response' (AgentResponse), and 'context' (AgentContext) as parameters.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/openai/from-oai/.cursor/rules/sdk.mdc:0-0
Timestamp: 2025-06-23T17:16:25.368Z
Learning: In the Agentuity Python SDK, the main handler function for an agent should be defined as an async function named 'run' with the signature: async def run(request: AgentRequest, response: AgentResponse, context: AgentContext) -> Any.
agents/agent-salesEngineer/agent/.cursor/rules/sdk.mdc (10)
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/langgraph/basic/.cursor/rules/sdk.mdc:0-0
Timestamp: 2025-06-23T17:14:46.802Z
Learning: The Agentuity JavaScript SDK provides core interfaces such as AgentHandler, AgentRequest, AgentResponse, and AgentContext for building AI agents in TypeScript or JavaScript.
Learnt from: CR
PR: agentuity/examples#0
File: agents/agent-riza/.cursor/rules/sdk.mdc:0-0
Timestamp: 2025-06-23T15:23:48.673Z
Learning: The Agentuity JavaScript SDK provides core interfaces such as AgentHandler, AgentRequest, AgentResponse, and AgentContext for building AI agents in TypeScript or JavaScript.
Learnt from: CR
PR: agentuity/examples#0
File: agents/Startup_News_Scraper/.cursor/rules/sdk.mdc:0-0
Timestamp: 2025-06-23T15:18:13.541Z
Learning: The Agentuity JavaScript SDK provides core interfaces such as AgentHandler, AgentRequest, AgentResponse, and AgentContext for building AI agents in JavaScript and TypeScript.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/mastra/basic/.cursor/rules/sdk.mdc:0-0
Timestamp: 2025-06-23T17:15:21.314Z
Learning: For best practices in Agentuity SDK projects, use TypeScript for type safety, import types from @agentuity/sdk, use structured error handling with try/catch, leverage the provided logger, use storage APIs for data persistence, and consider agent communication for complex workflows.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/mastra/basic/.cursor/rules/agent.mdc:0-0
Timestamp: 2025-06-23T17:15:12.561Z
Learning: In Agentuity AI Agent files (`**/src/agents/**/index.ts`), import types such as `AgentRequest`, `AgentResponse`, and `AgentContext` from the `@agentuity/sdk` package to ensure type safety and consistency.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/langgraph/basic/.cursor/rules/agent.mdc:0-0
Timestamp: 2025-06-23T17:14:39.393Z
Learning: In Agentuity AI Agent files (`**/src/agents/**/index.ts`), import types such as `AgentRequest`, `AgentResponse`, and `AgentContext` from the `@agentuity/sdk` package to ensure type safety and consistency.
Learnt from: CR
PR: agentuity/examples#0
File: agentuity/sdk-js/streaming/.cursor/rules/sdk.mdc:0-0
Timestamp: 2025-06-23T15:34:15.858Z
Learning: The Agentuity JavaScript SDK defines a core handler function type called AgentHandler, which takes an AgentRequest, AgentResponse, and AgentContext, and returns a Promise of AgentResponseType. This pattern should be followed for agent entry points in TypeScript.
Learnt from: CR
PR: agentuity/examples#0
File: agents/deep-research-js/.cursor/rules/agent.mdc:0-0
Timestamp: 2025-06-23T15:28:20.749Z
Learning: When writing Agentuity AI Agents in TypeScript, import types such as `AgentRequest`, `AgentResponse`, and `AgentContext` from the `@agentuity/sdk` package to ensure type safety and consistency.
Learnt from: CR
PR: agentuity/examples#0
File: agents/Startup_News_Scraper/.cursor/rules/agent.mdc:0-0
Timestamp: 2025-06-23T15:08:01.527Z
Learning: When writing Agentuity agents in TypeScript, import types such as AgentRequest, AgentResponse, and AgentContext from the '@agentuity/sdk' package to ensure type safety and consistency.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/vercel/basic/.cursor/rules/agent.mdc:0-0
Timestamp: 2025-06-23T17:16:49.315Z
Learning: When writing an Agent in TypeScript for Agentuity, always use the types provided by the `@agentuity/sdk` package for AgentRequest, AgentResponse, and AgentContext to ensure type safety and compatibility.
🪛 LanguageTool
agents/agent-salesEngineer/README.md

[style] ~10-~10: The preposition ‘with’ is not usually used with the verb ‘talk’. Consider using ‘speak’ instead, or replacing the preposition.
Context: ...he sales engineer agent can then use to talk with them about. 3. RFP Generator Agent -...

(TALK_WITH)


[style] ~14-~14: This phrase is redundant (‘I’ stands for ‘interface’). Use simply “CLI”.
Context: ...so included in this project is a simple CLI interface that allows you to interact with the Sa...

(ACRONYM_TAUTOLOGY)


[style] ~19-~19: This phrase is redundant (‘I’ stands for ‘interface’). Use simply “CLI”.
Context: ...ory to install the dependencies for the CLI interface 3. Run bun install in the agent dir...

(ACRONYM_TAUTOLOGY)


[style] ~24-~24: This phrase is redundant (‘I’ stands for ‘interface’). Use simply “CLI”.
Context: ...ppin theapp` directory to start the CLI interface. ## Implementation Details ### Sales ...

(ACRONYM_TAUTOLOGY)


[style] ~58-~58: The preposition ‘with’ is not usually used with the verb ‘talk’. Consider using ‘speak’ instead, or replacing the preposition.
Context: ...he sales engineer agent can then use to talk with them about. It accepts documents and re...

(TALK_WITH)


[grammar] ~63-~63: Did you mean the formatting language “Markdown” (= proper noun)?
Context: ...he schema of the document and returns a markdown document. ### Setting up the Agent URL...

(MARKDOWN_NNP)

agents/agent-zep/README.md

[uncategorized] ~83-~83: Possible missing comma found.
Context: ...d. (You can use one or multiple session IDs which you generate yourself.) ```json ...

(AI_HYDRA_LEO_MISSING_COMMA)

agents/agent-salesEngineer/app/example.txt

[uncategorized] ~16-~16: Possible missing comma found.
Context: ...our project: > This is a project called JoeTea2 which is a competitor to Joe Tea ╭────...

(AI_HYDRA_LEO_MISSING_COMMA)


[style] ~33-~33: If you’re making a request, consider inserting ‘please’ or switching up your phrasing to sound more courteous and respectful.
Context: ...re a few details │ │ still missing. Could you tell me what the due date is for proposal su...

(COULD_YOU_PLEASE)


[uncategorized] ~62-~62: Use a comma before ‘but’ if it connects two independent clauses (unless they are closely connected and short).
Context: ...rious legal trouble for stealing Joe Tea but I think we can get around it. We need a...

(COMMA_COMPOUND_SENTENCE)


[uncategorized] ~68-~68: Use a comma before ‘but’ if it connects two independent clauses (unless they are closely connected and short).
Context: ...rious legal trouble for stealing Joe Tea but I think we can get around it. We need a...

(COMMA_COMPOUND_SENTENCE)


[style] ~102-~102: The phrase ‘a couple more’ may sound informal in some contexts. Improve your writing style by being more specific or using a more professional sounding alternative.
Context: ...elpful. We're nearly there! I just need a couple more things │ │ to wrap this up. Could y...

(A_COUPLE_MORE_STYLE_RULES)


[uncategorized] ~110-~110: A comma may be missing after the conjunctive/linking adverb ‘Currently’.
Context: ...r turn: > nicholasmirigliani@gmail.com. Currently we are going to not use any KPIs. This ...

(SENT_START_CONJUNCTIVE_LINKING_ADVERB_COMMA)


[uncategorized] ~116-~116: A comma may be missing after the conjunctive/linking adverb ‘Currently’.
Context: ... │ │ nicholasmirigliani@gmail.com. Currently we are going to not use any KPIs. This ...

(SENT_START_CONJUNCTIVE_LINKING_ADVERB_COMMA)


[style] ~150-~150: Consider using a synonym to be more concise.
Context: ...nfo, Nick! You've really helped fill in a lot of details. The last piece we're missing i...

(A_LOT_OF)


[style] ~150-~150: If you’re making a request, consider inserting ‘please’ or switching up your phrasing to sound more courteous and respectful.
Context: ...e we're missing is your contact number. Could you share │ │ that with me? Once I have th...

(COULD_YOU_PLEASE)

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

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

(MD026, no-trailing-punctuation)


113-113: Bare URL used
null

(MD034, no-bare-urls)

🪛 Flake8 (7.2.0)
agents/agent-zep/agentuity-agents/agentZep/zepSetup.py

[error] 13-13: expected 2 blank lines, found 1

(E302)

agents/agent-zep/agentuity-agents/agentZep/agent.py

[error] 12-12: module level import not at top of file

(E402)


[error] 25-25: expected 2 blank lines, found 1

(E302)


[error] 32-32: missing whitespace after ':'

(E231)


[error] 32-32: whitespace after '{'

(E201)


[error] 32-32: whitespace before '}'

(E202)


[error] 39-39: missing whitespace after ':'

(E231)


[error] 52-52: missing whitespace after ':'

(E231)


[error] 53-53: missing whitespace after ':'

(E231)


[error] 54-54: missing whitespace after ':'

(E231)


[error] 63-63: expected 2 blank lines, found 1

(E302)


[error] 74-74: do not use bare 'except'

(E722)


[error] 80-80: local variable 'e' is assigned to but never used

(F841)


[error] 133-133: do not use bare 'except'

(E722)

🪛 Biome (1.9.4)
agents/agent-salesEngineer/agent/src/agents/rfpSchema/index.ts

[error] 63-63: Change to an optional chain.

Unsafe fix: Change to an optional chain.

(lint/complexity/useOptionalChain)


[error] 127-127: Change to an optional chain.

Unsafe fix: Change to an optional chain.

(lint/complexity/useOptionalChain)

🪛 Pylint (3.3.7)
agents/agent-zep/agentuity-agents/agentZep/agent.py

[refactor] 63-63: Too many return statements (7/6)

(R0911)

🪛 Ruff (0.11.9)
agents/agent-zep/agentuity-agents/agentZep/agent.py

74-74: Do not use bare except

(E722)


80-80: Local variable e is assigned to but never used

Remove assignment to unused variable e

(F841)


133-133: Do not use bare except

(E722)

🔇 Additional comments (35)
agents/agent-zep/.python-version (1)

1-1: Confirm runtime & dependency compatibility with Python 3.12

Several libraries lag behind the latest Python release. Please verify that every dependency in pyproject.toml (or requirements.txt) installs and all tests pass under 3.12, or pin to the latest fully-supported minor (e.g., 3.11) to avoid unexpected runtime issues.

agents/agent-zep/agentuity-agents/__init__.py (1)

1-1: Package marker looks good

The empty __init__.py correctly makes the directory importable.

agents/agent-zep/agentuity-agents/agentZep/__init__.py (1)

1-2: Package marker looks good.

The empty __init__.py cleanly turns the directory into a Python package and keeps the package namespace uncluttered.

agents/agent-zep/pyproject.toml (1)

12-15: Verify that your package discovery pattern will include the actual agent modules.

include = ["agentuity-agents*"] matches the directory that contains your agent packages, but the directory itself is not an importable Python package because of the hyphen. Setuptools will still pick up agentuity-agents/agentZep (which is a package) only if an __init__.py lives inside agentZep. That is currently true, so things work, but if you add peer agents under the same folder ensure each has its own __init__.py.

No change required—just a heads-up.

agents/agent-zep/.cursor/rules/agentuity.mdc (1)

1-10: No action – informational rules file.

agents/agent-zep/agentuity.yaml (1)

1-65: Configuration file – per project guidelines we do not suggest edits here.

agents/agent-zep/.gitignore (1)

1-180: Excellent comprehensive .gitignore coverage.

This .gitignore file provides thorough coverage of Python development artifacts, from basic bytecode to advanced tooling like UV, PDM, and various IDEs. The inclusion of Agentuity-specific entries (.agentuity, crash logs) shows good project awareness.

agents/agent-zep/server.py (3)

6-18: Excellent environment validation with helpful error messages.

The environment validation logic provides clear, actionable error messages that guide users to resolve configuration issues. The detection of uv execution context and specific guidance for .env usage is particularly helpful.


20-28: Good warning system for non-Agentuity environments.

The warnings appropriately inform users when running outside the intended environment while allowing the agent to continue functioning. The recommendation to use agentuity dev provides clear guidance.


29-36: Clean logging setup and agent initialization.

The logging configuration is appropriate for the use case, and the autostart() call properly initializes the agent after all validation checks.

agents/agent-zep/.cursor/rules/sdk.mdc (1)

1-98: Comprehensive and well-structured SDK documentation.

This documentation provides excellent coverage of the Agentuity Python SDK, including clear examples, interface definitions, and best practices. The structure makes it easy to navigate and understand the available functionality.

agents/agent-zep/agentuity-agents/agentZep/zepSetup.py (2)

140-157: Well-implemented message conversion helper.

The convert_to_zep_messages function properly handles the conversion from dictionary format to Zep Message objects, with appropriate handling of optional fields like name.


13-173: Excellent sample data structure for demonstration purposes.

The setup function creates comprehensive and realistic sample data including user profiles, chat history, support cases, transactions, and account status. This provides a rich foundation for testing the Zep integration capabilities.

agents/agent-zep/agentuity-agents/agentZep/agent.py (1)

63-63: Excellent implementation of Agentuity agent pattern.

The function signature correctly follows the Agentuity pattern as specified in the retrieved learnings, with the async run function accepting AgentRequest, AgentResponse, and AgentContext parameters.

agents/agent-salesEngineer/agent/biome.json (1)

14-16: Good, explicit formatter rules.

Explicitly pinning the indent style, width, commas, quotes, and semicolons avoids “works on my formatter” issues.
No action needed here.

agents/agent-salesEngineer/agent/.cursor/rules/agentuity.mdc (1)

1-10: Guideline file looks correct.

Clear directive not to alter agentuity.yaml, aligned with previous learnings. 👍

agents/agent-salesEngineer/agent/src/agents/temp/index.ts (1)

1-14: LGTM! Agent follows Agentuity conventions correctly.

The agent implementation correctly follows the Agentuity patterns from the retrieved learnings:

  • Exports a default async function named Agent
  • Uses proper types from @agentuity/sdk
  • Accepts the standard (req, resp, ctx) parameters
agents/agent-salesEngineer/agent/tsconfig.json (1)

1-22: TypeScript configuration looks good for an Agentuity agent project.

The configuration properly sets up ESNext modules, strict typing, and includes the necessary @agentuity/sdk types.

agents/agent-salesEngineer/app/package.json (1)

1-19: CLI app package configuration looks functional.

The dependencies are appropriate for a CLI application with terminal styling and HTTP client capabilities.

agents/agent-salesEngineer/.gitignore (1)

1-39: Comprehensive .gitignore covers all necessary artifacts.

The gitignore properly excludes Node.js dependencies, build outputs, environment files, caches, IDE files, and Agentuity-specific build folders.

agents/agent-salesEngineer/agent/package.json (2)

1-41: Well-structured package configuration for an AI agent project.

The scripts, dependencies, and technical setup are appropriate for an Agentuity agent that processes PDFs and integrates with multiple AI providers.


32-40: Verify dependency versions are current.

Consider checking if these dependency versions are the latest stable releases for optimal performance and security.

What are the latest stable versions of @agentuity/sdk, @ai-sdk/openai, @ai-sdk/anthropic, and openai npm packages?
agents/agent-salesEngineer/app/example.txt (1)

1-241: LGTM! Comprehensive example demonstrates the system effectively.

The conversation transcript provides an excellent demonstration of the Sales Engineer Assistant's functionality, showing the complete flow from initial user input through iterative data collection to final RFP generation. The natural dialogue style effectively illustrates the user experience, and the minor grammar issues flagged by static analysis are acceptable in this conversational context.

agents/agent-salesEngineer/agent/index.ts (4)

1-9: Well-structured imports and type declarations.

The import statement and global namespace extension for NodeJS Process are properly implemented. The isBun property extension allows for runtime detection, which is used effectively in the environment validation logic.


11-25: Excellent environment validation with clear error messaging.

The validation logic for API keys is comprehensive and provides helpful error messages with color coding. The conditional handling for different runtime environments (Node.js vs Bun) with specific command suggestions is user-friendly.


27-41: Good warning system for non-Agentuity environments.

The warning system effectively informs users when running outside the Agentuity environment and provides appropriate recommendations based on the runtime (Bun vs Node.js).


43-52: Proper error handling in the runner invocation.

The runner is invoked with appropriate parameters and includes comprehensive error handling that logs both error messages and stack traces before exiting.

agents/agent-salesEngineer/agent/agentuity.yaml (1)

1-79: Configuration file acknowledged - no edits recommended.

This is an Agentuity configuration file that is generated and managed by the Agentuity platform. Per established guidelines, this file should not be modified or suggested for edits during code review as it's reserved for configuring the AI Agent project.

agents/agent-salesEngineer/README.md (1)

1-73: Excellent documentation structure and content.

The README provides comprehensive documentation for the Sales Engineer system, with clear explanations of the three-agent architecture, detailed quick start instructions, and thorough implementation details. The JSON request/response format examples are particularly helpful for developers.

agents/agent-salesEngineer/agent/.cursor/rules/sdk.mdc (1)

1-98: Comprehensive and well-structured SDK documentation.

This documentation file provides an excellent reference for the Agentuity JavaScript SDK, covering all core interfaces, storage APIs, logging capabilities, and best practices. The structure is logical, the method signatures are clear, and the inclusion of best practices helps developers follow recommended patterns. The link to complete documentation provides additional resources for developers.

agents/agent-salesEngineer/agent/.cursor/rules/agent.mdc (1)

1-37: LGTM! Guidelines align well with Agentuity best practices.

The cursor rules file effectively documents the Agentuity TypeScript agent patterns and aligns well with the retrieved learnings. The example code correctly demonstrates:

  • Importing types from @agentuity/sdk
  • Exporting a default async function with proper signature
  • Using the ctx.logger for logging

This will help ensure consistency across agent implementations in the project.

agents/agent-salesEngineer/agent/src/agents/rfpSchema/index.ts (1)

1-51: LGTM! Agent follows Agentuity patterns correctly.

The agent properly imports types from @agentuity/sdk, exports a default async function with the correct signature, and includes a welcome() function. The extraction prompt is well-structured for consistent JSON schema generation.

agents/agent-salesEngineer/agent/src/agents/rfpGenerator/index.ts (2)

1-122: LGTM! Well-structured agent with comprehensive example data.

The agent correctly follows Agentuity patterns and includes a detailed example RFP structure that will be helpful for users. The implementation properly imports types, exports the expected function signature, and uses structured logging.


155-157: Good use of optional chaining for robust error handling.

The optional chaining pattern completion.choices?.[0]?.message?.content properly handles potential undefined values in the OpenAI response structure, with a sensible fallback message.

agents/agent-salesEngineer/agent/src/agents/salesEngineer/index.ts (1)

28-28: Verify OpenAI API key configuration.

The OpenAI client is initialized without explicit configuration. Ensure that the OPENAI_API_KEY environment variable is properly set in the deployment environment.

#!/bin/bash
# Description: Check if environment variable validation exists in the codebase

# Search for OPENAI_API_KEY validation in the project
rg -A 3 "OPENAI_API_KEY"

# Check the main index.ts file for environment validation
fd -e ts "index.ts" -x cat {} \; | grep -A 10 -B 10 "process\.env"

Comment on lines 6 to 10
dependencies = [
"agentuity>=0.0.98",
"openai>=1.90.0",
"zep-cloud>=2.16.0",
]
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

Pin upper bounds for third-party dependencies to avoid breaking upgrades.

Open-ended version ranges (>=) can lead to silent CI / production breakages when a major release ships with backwards-incompatible changes. Consider constraining each dependency with an upper bound that reflects the next major version.

-    "agentuity>=0.0.98",
-    "openai>=1.90.0",
-    "zep-cloud>=2.16.0",
+    "agentuity>=0.0.98,<0.1.0",
+    "openai>=1.90.0,<2.0.0",
+    "zep-cloud>=2.16.0,<3.0.0",

If you rely on newer majors soon, bump deliberately and re-test rather than absorbing them implicitly.

📝 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
dependencies = [
"agentuity>=0.0.98",
"openai>=1.90.0",
"zep-cloud>=2.16.0",
]
dependencies = [
"agentuity>=0.0.98,<0.1.0",
"openai>=1.90.0,<2.0.0",
"zep-cloud>=2.16.0,<3.0.0",
]
🤖 Prompt for AI Agents
In agents/agent-zep/pyproject.toml around lines 6 to 10, the dependency versions
use open-ended ranges with >=, which can cause silent breakages when major
versions update. Modify each dependency version to include an upper bound just
before the next major version, for example, change "agentuity>=0.0.98" to
"agentuity>=0.0.98,<1.0.0", and similarly for the others, to prevent automatic
upgrades to incompatible major versions.

Comment on lines 164 to 173
# The lower-level data API allows us to add arbitrary data to a user's Knowledge Graph.
for tx in transactions:
await zep.graph.add(user_id=user_id, data=json.dumps(tx), type="json")

await zep.graph.add(
user_id=user_id, data=json.dumps(account_status), type="json"
)

for case in support_cases:
await zep.graph.add(user_id=user_id, data=json.dumps(case), type="json")
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

Minor issue: Account status is added multiple times.

The account status is being added to the graph inside the transactions loop, which means it gets added once for each transaction. This should be moved outside the loop.

 # The lower-level data API allows us to add arbitrary data to a user's Knowledge Graph.
 for tx in transactions:
     await zep.graph.add(user_id=user_id, data=json.dumps(tx), type="json")
 
-    await zep.graph.add(
-        user_id=user_id, data=json.dumps(account_status), type="json"
-    )
+
+await zep.graph.add(
+    user_id=user_id, data=json.dumps(account_status), type="json"
+)
 
 for case in support_cases:
     await zep.graph.add(user_id=user_id, data=json.dumps(case), type="json")
📝 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
# The lower-level data API allows us to add arbitrary data to a user's Knowledge Graph.
for tx in transactions:
await zep.graph.add(user_id=user_id, data=json.dumps(tx), type="json")
await zep.graph.add(
user_id=user_id, data=json.dumps(account_status), type="json"
)
for case in support_cases:
await zep.graph.add(user_id=user_id, data=json.dumps(case), type="json")
# The lower-level data API allows us to add arbitrary data to a user's Knowledge Graph.
for tx in transactions:
await zep.graph.add(user_id=user_id, data=json.dumps(tx), type="json")
await zep.graph.add(
user_id=user_id, data=json.dumps(account_status), type="json"
)
for case in support_cases:
await zep.graph.add(user_id=user_id, data=json.dumps(case), type="json")
🤖 Prompt for AI Agents
In agents/agent-zep/agentuity-agents/agentZep/zepSetup.py around lines 164 to
173, the account status is being added to the graph inside the transactions
loop, causing it to be added multiple times. Move the await call that adds
account_status outside and after the transactions loop so it is added only once.

Comment on lines 129 to 147
# {"action": "addUser"} is used to add a user to the Zep database.
elif action == "addUser":
try:
content = data["content"]
except:
return response.text("Missing 'content' in request.")
try:
user = await zep.user.add(
user_id=content["user_id"],
first_name=content["user_first_name"] or "",
last_name=content["user_last_name"] or "",
email=content["user_email"] or ""
)
return response.text(f"User added successfully. User ID: {user.user_id}")
except Exception as e:
return response.text(f"Error adding user: {e}")
else:
return response.text("Invalid action. Currently supported actions: ['setup', 'message']")

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

Fix error handling and update supported actions list.

The addUser action implementation is correct, but there are two issues to address.

Apply this diff to fix the issues:

     # {"action": "addUser"} is used to add a user to the Zep database.
     elif action == "addUser":
         try:
             content = data["content"]
-        except:
+        except KeyError:
             return response.text("Missing 'content' in request.")
         try:
             user = await zep.user.add(
                 user_id=content["user_id"],
                 first_name=content["user_first_name"] or "",
                 last_name=content["user_last_name"] or "",
                 email=content["user_email"] or ""
             )
             return response.text(f"User added successfully. User ID: {user.user_id}")
         except Exception as e:
             return response.text(f"Error adding user: {e}")
     else:
-        return response.text("Invalid action. Currently supported actions: ['setup', 'message']")
+        return response.text("Invalid action. Currently supported actions: ['setup', 'message', 'addUser']")
📝 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
# {"action": "addUser"} is used to add a user to the Zep database.
elif action == "addUser":
try:
content = data["content"]
except:
return response.text("Missing 'content' in request.")
try:
user = await zep.user.add(
user_id=content["user_id"],
first_name=content["user_first_name"] or "",
last_name=content["user_last_name"] or "",
email=content["user_email"] or ""
)
return response.text(f"User added successfully. User ID: {user.user_id}")
except Exception as e:
return response.text(f"Error adding user: {e}")
else:
return response.text("Invalid action. Currently supported actions: ['setup', 'message']")
# {"action": "addUser"} is used to add a user to the Zep database.
elif action == "addUser":
try:
content = data["content"]
except KeyError:
return response.text("Missing 'content' in request.")
try:
user = await zep.user.add(
user_id=content["user_id"],
first_name=content["user_first_name"] or "",
last_name=content["user_last_name"] or "",
email=content["user_email"] or ""
)
return response.text(f"User added successfully. User ID: {user.user_id}")
except Exception as e:
return response.text(f"Error adding user: {e}")
else:
return response.text("Invalid action. Currently supported actions: ['setup', 'message', 'addUser']")
🧰 Tools
🪛 Flake8 (7.2.0)

[error] 133-133: do not use bare 'except'

(E722)

🪛 Ruff (0.11.9)

133-133: Do not use bare except

(E722)

🤖 Prompt for AI Agents
In agents/agent-zep/agentuity-agents/agentZep/agent.py around lines 129 to 147,
the error handling for missing 'content' should catch a KeyError explicitly
instead of a bare except, and the else clause's supported actions list should
include 'addUser' along with 'setup' and 'message'. Update the except clause to
catch KeyError and modify the return message in the else clause to list all
three supported actions.

Comment on lines 63 to 89
async def run(request: AgentRequest, response: AgentResponse, context: AgentContext):
data = await request.data.json()
action = data["action"]
# In this example, you can send a request with {"action": "setup"} to give Zep some data about Jane Painter, a customer.
if action == "setup":
await setup(zep)

# {"action": "message"} is used to send a message to the agent.
elif action == "message":
try:
content = data["content"]
except:
return response.text("Missing 'content' in request.")

# Try to get the session if it exists, otherwise add it.
try:
await zep.memory.get_session(session_id=content["session_id"])
except Exception as e:
try:
await zep.memory.add_session(
user_id=content["user_id"],
session_id=content["session_id"],
)
except Exception as e:
context.logger.error(f"Error finding/adding session: {e}")
return response.text(f"Error finding/adding session: {e}")

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

Fix error handling and unused variable issues.

The run function correctly follows the Agentuity pattern. However, there are several error handling issues that need attention.

Apply this diff to improve error handling:

     # {"action": "message"} is used to send a message to the agent.
     elif action == "message":
         try:
             content = data["content"]
-        except:
+        except KeyError:
             return response.text("Missing 'content' in request.")

         # Try to get the session if it exists, otherwise add it.
         try:
             await zep.memory.get_session(session_id=content["session_id"])
-        except Exception as e:
+        except Exception:
             try:
                 await zep.memory.add_session(
                     user_id=content["user_id"],
                     session_id=content["session_id"],
                 )
             except Exception as e:
                 context.logger.error(f"Error finding/adding session: {e}")
                 return response.text(f"Error finding/adding session: {e}")
🧰 Tools
🪛 Flake8 (7.2.0)

[error] 63-63: expected 2 blank lines, found 1

(E302)


[error] 74-74: do not use bare 'except'

(E722)


[error] 80-80: local variable 'e' is assigned to but never used

(F841)

🪛 Pylint (3.3.7)

[refactor] 63-63: Too many return statements (7/6)

(R0911)

🪛 Ruff (0.11.9)

74-74: Do not use bare except

(E722)


80-80: Local variable e is assigned to but never used

Remove assignment to unused variable e

(F841)

🤖 Prompt for AI Agents
In agents/agent-zep/agentuity-agents/agentZep/agent.py between lines 63 and 89,
improve error handling by specifying the exception type in the first try-except
block when accessing 'content' to avoid catching all exceptions broadly. Also,
remove the unused variable 'e' in the first except block where 'content' is
missing. In the nested try-except for session handling, ensure the exception
variable 'e' is used only once and logged properly. This will make error
handling clearer and avoid unused variable warnings.

Comment on lines +6 to +12
[*]
indent_style = tab
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = false
insert_final_newline = false No newline at end of file
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

Indent-style conflict with biome.json.

.editorconfig sets indent_style = tab, yet biome.json (lines 14-15) enforces space indentation with width 2.
These two tools will constantly re-format each other. Decide on one style and align both files.

Example fix:

-indent_style = tab
-indent_size = 2
+indent_style = space
+indent_size = 2

(Or change Biome to tabs—just keep them consistent.)

📝 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
[*]
indent_style = tab
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = false
insert_final_newline = false
[*]
indent_style = space
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = false
insert_final_newline = false
🤖 Prompt for AI Agents
In agents/agent-salesEngineer/agent/.editorconfig lines 6 to 12, the
indent_style is set to tab, but biome.json enforces space indentation with size
2, causing conflicting formatting. To fix this, choose one indentation style and
apply it consistently in both files: either change .editorconfig to use spaces
with indent_size 2 or update biome.json to use tabs. Ensure both tools use the
same indent_style and size to prevent reformatting conflicts.

import { v4 as uuidv4 } from "uuid";
import gradient from "gradient-string";

const salesEngineerUrl = process.env.SALES_ENGINEER_URL;
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

Add validation for the required environment variable.

The SALES_ENGINEER_URL environment variable is used without validation, which could lead to runtime errors.

Add validation at startup:

 const salesEngineerUrl = process.env.SALES_ENGINEER_URL;
+
+if (!salesEngineerUrl) {
+  console.error(chalk.red("❌ Error: SALES_ENGINEER_URL environment variable is required"));
+  process.exit(1);
+}
📝 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 salesEngineerUrl = process.env.SALES_ENGINEER_URL;
const salesEngineerUrl = process.env.SALES_ENGINEER_URL;
if (!salesEngineerUrl) {
console.error(chalk.red("❌ Error: SALES_ENGINEER_URL environment variable is required"));
process.exit(1);
}
🤖 Prompt for AI Agents
In agents/agent-salesEngineer/app/app.js at line 11, the SALES_ENGINEER_URL
environment variable is used without validation, risking runtime errors if it is
undefined. Add a check after retrieving the variable to verify it is set; if
not, log an error and exit the process to prevent the app from running with an
invalid configuration.

Comment on lines +186 to +188
} catch (e) {
return resp.json({ error: e, message: "Bad input." });
}
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

Improve error handling in outer catch block.

The outer catch block should log errors and avoid exposing sensitive error details to the client.

Apply this diff to improve error handling:

	} catch (e) {
-		return resp.json({ error: e, message: "Bad input." });
+		ctx.logger.error("Failed to process agent request:", e);
+		return resp.json({ 
+			error: "Failed to process request",
+			message: "Invalid input data provided"
+		});
	}
📝 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
} catch (e) {
return resp.json({ error: e, message: "Bad input." });
}
} catch (e) {
ctx.logger.error("Failed to process agent request:", e);
return resp.json({
error: "Failed to process request",
message: "Invalid input data provided"
});
}
🤖 Prompt for AI Agents
In agents/agent-salesEngineer/agent/src/agents/salesEngineer/index.ts around
lines 186 to 188, the catch block currently returns the raw error object in the
JSON response, which may expose sensitive information. Modify the catch block to
log the error details internally using a logger, then return a generic error
message to the client without including the error object. This improves security
by preventing sensitive error data from being exposed externally.

NobbyBop and others added 4 commits June 24, 2025 12:12
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
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: 0

♻️ Duplicate comments (2)
agents/agent-salesEngineer/agent/src/agents/salesEngineer/index.ts (2)

109-112: Add error handling for JSON parsing.

JSON parsing from OpenAI responses should include error handling to prevent runtime crashes.

Apply this diff to add proper error handling:

-			const updatedJsonObject =
-				typeof result1.choices?.[0]?.message?.content === "string"
-					? JSON.parse(result1.choices[0].message.content)
-					: result1.choices[0].message.content;
+			let updatedJsonObject;
+			try {
+				const content = result1.choices?.[0]?.message?.content;
+				updatedJsonObject = typeof content === "string" 
+					? JSON.parse(content)
+					: content;
+			} catch (error) {
+				ctx.logger.error("Failed to parse OpenAI response:", error);
+				throw new Error("Invalid response format from AI model");
+			}

160-163: Add error handling for JSON parsing.

JSON parsing from OpenAI responses should include error handling to prevent runtime crashes.

Apply this diff to add proper error handling:

-			const analysis =
-				typeof result2.choices?.[0]?.message?.content === "string"
-					? JSON.parse(result2.choices[0].message.content)
-					: result2.choices[0].message.content;
+			let analysis;
+			try {
+				const content = result2.choices?.[0]?.message?.content;
+				analysis = typeof content === "string" 
+					? JSON.parse(content)
+					: content;
+			} catch (error) {
+				ctx.logger.error("Failed to parse OpenAI response:", error);
+				throw new Error("Invalid response format from AI model");
+			}
🧹 Nitpick comments (1)
agents/agent-salesEngineer/agent/src/agents/salesEngineer/index.ts (1)

165-169: Fix history string formatting.

The history string formatting is inconsistent and missing proper spacing.

Apply this diff to improve the formatting:

-				history: `${history}\nUser:${userMessage}\nYou${analysis.message}`,
+				history: `${history}\nUser: ${userMessage}\nYou: ${analysis.message}`,
📜 Review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between bd7e71e and 440d5a5.

📒 Files selected for processing (1)
  • agents/agent-salesEngineer/agent/src/agents/salesEngineer/index.ts (1 hunks)
🔇 Additional comments (5)
agents/agent-salesEngineer/agent/src/agents/salesEngineer/index.ts (5)

1-28: LGTM! Clean imports and type definitions.

The imports are appropriate and the type definitions are clear and well-structured for the agent's functionality.


9-14: LGTM! Clear welcome message.

The welcome function provides a clear and concise description of the agent's purpose.


45-68: Excellent! Template validation issue has been resolved.

The previous issue with template decoding has been properly addressed with validation for missing templates and error handling for invalid base64 data.


171-185: Excellent! Critical issue with RFP generation has been resolved.

The previous critical issue has been fixed - the code now correctly passes updatedJsonObject to the rfpGenerator agent, ensuring the RFP generation uses the latest user input.


186-195: Great improvement in error handling!

The error handling has been significantly improved from the previous version. The code now properly logs errors and provides secure, user-friendly error responses without exposing sensitive information.

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

♻️ Duplicate comments (2)
agents/agent-salesEngineer/agent/src/agents/salesEngineer/index.ts (2)

166-169: Add error handling for JSON parsing.

The JSON parsing operation lacks error handling, which could cause runtime crashes if the OpenAI response contains invalid JSON.

Apply this diff to add proper error handling:

-			const analysis =
-				typeof result2.choices?.[0]?.message?.content === "string"
-					? JSON.parse(result2.choices[0].message.content)
-					: result2.choices[0].message.content;
+			let analysis;
+			try {
+				const content = result2.choices?.[0]?.message?.content;
+				analysis = typeof content === "string"
+					? JSON.parse(content)
+					: content;
+			} catch (error) {
+				ctx.logger.error("Failed to parse analysis response:", error);
+				throw new Error("Invalid response format from AI model");
+			}

199-201: Improve error handling in outer catch block.

The outer catch block returns the raw error object, which may expose sensitive information to the client.

Apply this diff to improve error handling:

	} catch (e) {
-		return resp.json({ error: e, message: "Bad input." });
+		ctx.logger.error("Failed to process agent request:", e);
+		return resp.json({ 
+			error: "Failed to process request",
+			message: "Invalid input data provided"
+		});
	}
🧹 Nitpick comments (1)
agents/agent-salesEngineer/agent/src/agents/salesEngineer/index.ts (1)

174-174: Fix history string formatting.

Missing space before the colon in the history string construction will result in poor formatting.

Apply this diff to fix the formatting:

-				history: `${history}\nUser:${userMessage}\nYou${analysis.message}`,
+				history: `${history}\nUser: ${userMessage}\nYou: ${analysis.message}`,
📜 Review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between 440d5a5 and a98c8d1.

📒 Files selected for processing (1)
  • agents/agent-salesEngineer/agent/src/agents/salesEngineer/index.ts (1 hunks)
🔇 Additional comments (4)
agents/agent-salesEngineer/agent/src/agents/salesEngineer/index.ts (4)

1-28: LGTM: Clean imports and type definitions.

The imports, type definitions, and OpenAI client initialization are well-structured and appropriate for the agent's functionality.


52-60: LGTM: Template validation properly implemented.

The template validation and base64 decoding error handling have been correctly implemented, addressing the past review concerns about runtime errors.


109-118: LGTM: JSON parsing error handling properly implemented.

The JSON parsing now includes proper error handling with try-catch blocks and appropriate error logging, addressing the past review concerns.


180-184: LGTM: Correct usage of updatedJsonObject.

The code correctly uses updatedJsonObject instead of jsonObject for RFP generation, properly addressing the past review concern.

@NobbyBop NobbyBop changed the title Add sales engineer Add sales engineer AGENT-143 Jun 24, 2025
@NobbyBop NobbyBop merged commit 61337c0 into main Jul 18, 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.

3 participants