| | from src.dev_pilot.state.sdlc_state import SDLCState, UserStoryList |
| | from langchain_core.messages import SystemMessage |
| |
|
| | class ProjectRequirementNode: |
| | """ |
| | Graph Node for the project requirements |
| | |
| | """ |
| | |
| | def __init__(self, model): |
| | self.llm = model |
| | |
| | def initialize_project(self, state: SDLCState): |
| | """ |
| | Performs the project initilazation |
| | """ |
| | return state |
| | |
| | def get_user_requirements(self, state: SDLCState): |
| | """ |
| | Gets the requirements from the user |
| | """ |
| | pass |
| | |
| | def generate_user_stories(self, state: SDLCState): |
| | """ |
| | Auto-generate highly detailed and accurate user stories for each requirement. |
| | """ |
| | project_name = state["project_name"] |
| | requirements = state["requirements"] |
| | feedback_reason = state.get("user_stories_feedback", None) |
| |
|
| | prompt = f""" |
| | You are a senior software analyst specializing in Agile SDLC and user story generation. |
| | Your task is to generate **a separate and detailed user story for EACH requirement** from the project details below. |
| | |
| | --- |
| | **Project Name:** "{project_name}" |
| | |
| | **Requirements:** "{requirements} |
| | |
| | --- |
| | **Instructions for User Story Generation:** |
| | - Create **one user story per requirement**. |
| | - Assign a **unique identifier** (e.g., US-001, US-002, etc.). |
| | - Provide a **clear and concise title** summarizing the user story. |
| | - Write a **detailed description** using the "As a [user role], I want [goal] so that [benefit]" format. |
| | - Assign a **priority level** (1 = Critical, 2 = High, 3 = Medium, 4 = Low). |
| | - Define **acceptance criteria** with bullet points to ensure testability. |
| | - Use **domain-specific terminology** for clarity. |
| | |
| | {f"Additionally, consider the following feedback while refining the user stories: {feedback_reason}" if feedback_reason else ""} |
| | |
| | --- |
| | **Expected Output Format (for each user story):** |
| | - Unique Identifier: US-XXX |
| | - Title: [User Story Title] |
| | - Description: |
| | - As a [user role], I want [feature] so that [benefit]. |
| | - Priority: [1-4] |
| | - Acceptance Criteria: |
| | - [Criteria 1] |
| | - [Criteria 2] |
| | - [Criteria 3] |
| | |
| | Ensure that the user stories are **specific, testable, and aligned with Agile principles**. |
| | """ |
| |
|
| | llm_with_structured = self.llm.with_structured_output(UserStoryList) |
| | response = llm_with_structured.invoke(prompt) |
| | state["user_stories"] = response |
| | return state |
| | |
| | def review_user_stories(self, state: SDLCState): |
| | return state |
| | |
| | def revise_user_stories(self, state: SDLCState): |
| | pass |
| | |
| | def review_user_stories_router(self, state: SDLCState): |
| | return state.get("user_stories_review_status", "approved") |