diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index b1892a709..20e0e9606 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -1,7 +1,7 @@
default_stages: [ commit ]
# Install
-# 1. pip install pre-commit
+# 1. pip install pre-commit isort black
# 2. pre-commit install(the first time you download the repo, it will be cached for future use)
repos:
- repo: https://github.com/pycqa/isort
diff --git a/README.md b/README.md
index b0faf85c7..3668c2ab2 100644
--- a/README.md
+++ b/README.md
@@ -92,6 +92,16 @@ ### QuickStart & Demo Video
https://github.com/geekan/MetaGPT/assets/34952977/34345016-5d13-489d-b9f9-b82ace413419
+### Incremental Requirement & Fix Bug
+By using the following parameters, it is possible to iterate continuously on the project generated by MetaGPT.
+
+| CLI Parameter Name | Value Type | Optional/Required | Description | Usage |
+|--------------------|------------| --------- |------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------|
+| `--project-path` | path | Optional | The path where to load the project file from the previous version. | metagpt "BUG_FEEDBACK_XXX" --project-path "YOUR_PROJECT_FULL_PATH"
metagpt "INCREMENT_REQUIREMENTS" --project-path "YOUR_PROJECT_FULL_PATH" |
+| `--reqa-file` | File name | Optional | The name of the file for which to regenerate unit tests. This is a relative path based on the source code folder.
`--reqa-file "main.py"` | metagpt --reqa-file "main.py |
+| `--project-name` | str | Optional | Specify the name of new project to be used. The project name must adhere to both folder and code variable naming conventions. | metagpt "NEW_REQUIREMENTS" --project-name "YOUR_PROJECT_NAME" |
+
+
## Tutorial
- 🗒 [Online Document](https://docs.deepwisdom.ai/)
diff --git a/metagpt/actions/action_node.py b/metagpt/actions/action_node.py
index fb7d621d8..9bb12fc84 100644
--- a/metagpt/actions/action_node.py
+++ b/metagpt/actions/action_node.py
@@ -52,6 +52,7 @@ def dict_to_markdown(d, prefix="-", postfix="\n"):
class ActionNode:
"""ActionNode is a tree of nodes."""
+
mode: str
# Action Context
@@ -70,8 +71,15 @@ class ActionNode:
content: str
instruct_content: BaseModel
- def __init__(self, key: str, expected_type: Type, instruction: str, example: str, content: str = "",
- children: dict[str, "ActionNode"] = None):
+ def __init__(
+ self,
+ key: str,
+ expected_type: Type,
+ instruction: str,
+ example: str,
+ content: str = "",
+ children: dict[str, "ActionNode"] = None,
+ ):
self.key = key
self.expected_type = expected_type
self.instruction = instruction
diff --git a/metagpt/actions/project_management_an.py b/metagpt/actions/project_management_an.py
index 970cb0594..6208c1051 100644
--- a/metagpt/actions/project_management_an.py
+++ b/metagpt/actions/project_management_an.py
@@ -44,7 +44,7 @@ FULL_API_SPEC = ActionNode(
key="Full API spec",
expected_type=str,
instruction="Describe all APIs using OpenAPI 3.0 spec that may be used by both frontend and backend. If front-end "
- "and back-end communication is not required, leave it blank.",
+ "and back-end communication is not required, leave it blank.",
example="openapi: 3.0.0 ...",
)
diff --git a/metagpt/actions/write_code_review.py b/metagpt/actions/write_code_review.py
index 4b3e9aece..365c87063 100644
--- a/metagpt/actions/write_code_review.py
+++ b/metagpt/actions/write_code_review.py
@@ -154,11 +154,15 @@ class WriteCodeReview(Action):
code=iterative_code,
filename=self.context.code_doc.filename,
)
- cr_prompt = EXAMPLE_AND_INSTRUCTION.format(format_example=format_example, )
+ cr_prompt = EXAMPLE_AND_INSTRUCTION.format(
+ format_example=format_example,
+ )
logger.info(
f"Code review and rewrite {self.context.code_doc.filename}: {i+1}/{k} | {len(iterative_code)=}, {len(self.context.code_doc.content)=}"
)
- result, rewrited_code = await self.write_code_review_and_rewrite(context_prompt, cr_prompt, self.context.code_doc.filename)
+ result, rewrited_code = await self.write_code_review_and_rewrite(
+ context_prompt, cr_prompt, self.context.code_doc.filename
+ )
if "LBTM" in result:
iterative_code = rewrited_code
elif "LGTM" in result:
diff --git a/metagpt/roles/architect.py b/metagpt/roles/architect.py
index fa91d393d..fce6c3425 100644
--- a/metagpt/roles/architect.py
+++ b/metagpt/roles/architect.py
@@ -28,7 +28,7 @@ class Architect(Role):
profile: str = "Architect",
goal: str = "design a concise, usable, complete software system",
constraints: str = "make sure the architecture is simple enough and use appropriate open source libraries."
- "Use same language as user requirement"
+ "Use same language as user requirement",
) -> None:
"""Initializes the Architect with given attributes."""
super().__init__(name, profile, goal, constraints)
diff --git a/metagpt/roles/engineer.py b/metagpt/roles/engineer.py
index f1e65b177..2620fe4e5 100644
--- a/metagpt/roles/engineer.py
+++ b/metagpt/roles/engineer.py
@@ -73,7 +73,7 @@ class Engineer(Role):
profile: str = "Engineer",
goal: str = "write elegant, readable, extensible, efficient code",
constraints: str = "the code should conform to standards like google-style and be modular and maintainable. "
- "Use same language as user requirement",
+ "Use same language as user requirement",
n_borg: int = 1,
use_code_review: bool = False,
) -> None:
diff --git a/metagpt/roles/project_manager.py b/metagpt/roles/project_manager.py
index 5a2b9be50..657737513 100644
--- a/metagpt/roles/project_manager.py
+++ b/metagpt/roles/project_manager.py
@@ -26,7 +26,7 @@ class ProjectManager(Role):
name: str = "Eve",
profile: str = "Project Manager",
goal: str = "break down tasks according to PRD/technical design, generate a task list, and analyze task "
- "dependencies to start with the prerequisite modules",
+ "dependencies to start with the prerequisite modules",
constraints: str = "use same language as user requirement",
) -> None:
"""
diff --git a/metagpt/team.py b/metagpt/team.py
index 5ce07ef13..d56bb35d4 100644
--- a/metagpt/team.py
+++ b/metagpt/team.py
@@ -8,6 +8,7 @@
Section 2.2.3.3 of RFC 135.
"""
import warnings
+
from pydantic import BaseModel, Field
from metagpt.actions import UserRequirement
@@ -61,9 +62,12 @@ class Team(BaseModel):
Deprecated: This method will be removed in the future.
Please use the `run_project` method instead.
"""
- warnings.warn("The 'start_project' method is deprecated and will be removed in the future. "
- "Please use the 'run_project' method instead.",
- DeprecationWarning, stacklevel=2)
+ warnings.warn(
+ "The 'start_project' method is deprecated and will be removed in the future. "
+ "Please use the 'run_project' method instead.",
+ DeprecationWarning,
+ stacklevel=2,
+ )
return self.run_project(idea=idea, send_to=send_to)
def _save(self):