diff --git a/.github/ISSUE_TEMPLATE/1.bug.yml b/.github/ISSUE_TEMPLATE/1.bug.yml new file mode 100644 index 0000000..a74ef2b --- /dev/null +++ b/.github/ISSUE_TEMPLATE/1.bug.yml @@ -0,0 +1,173 @@ +name: Bug report 🐛 +description: Create a bug report for AutoGPT. +labels: ['status: needs triage'] +body: + - type: markdown + attributes: + value: | + ### ⚠️ Before you continue + * Check out our [backlog], [roadmap] and join our [discord] to discuss what's going on + * If you need help, you can ask in the [discussions] section or in [#tech-support] + * **Thoroughly search the [existing issues] before creating a new one** + * Read our [wiki page on Contributing] + [backlog]: https://github.com/orgs/Significant-Gravitas/projects/1 + [roadmap]: https://github.com/orgs/Significant-Gravitas/projects/2 + [discord]: https://discord.gg/autogpt + [discussions]: https://github.com/Significant-Gravitas/AutoGPT/discussions + [#tech-support]: https://discord.com/channels/1092243196446249134/1092275629602394184 + [existing issues]: https://github.com/Significant-Gravitas/AutoGPT/issues?q=is%3Aissue + [wiki page on Contributing]: https://github.com/Significant-Gravitas/AutoGPT/wiki/Contributing + + - type: checkboxes + attributes: + label: ⚠️ Search for existing issues first ⚠️ + description: > + Please [search the history](https://github.com/Significant-Gravitas/AutoGPT/issues) + to see if an issue already exists for the same problem. + options: + - label: I have searched the existing issues, and there is no existing issue for my problem + required: true + + - type: markdown + attributes: + value: | + Please confirm that the issue you have is described well and precise in the title above ⬆️. + A good rule of thumb: What would you type if you were searching for the issue? + + For example: + BAD - my AutoGPT keeps looping + GOOD - After performing execute_python_file, AutoGPT goes into a loop where it keeps trying to execute the file. + + ⚠️ SUPER-busy repo, please help the volunteer maintainers. + The less time we spend here, the more time we can spend building AutoGPT. + + Please help us help you by following these steps: + - Search for existing issues, adding a comment when you have the same or similar issue is tidier than "new issue" and + newer issues will not be reviewed earlier, this is dependent on the current priorities set by our wonderful team + - Ask on our Discord if your issue is known when you are unsure (https://discord.gg/autogpt) + - Provide relevant info: + - Provide commit-hash (`git rev-parse HEAD` gets it) if possible + - If it's a pip/packages issue, mention this in the title and provide pip version, python version + - If it's a crash, provide traceback and describe the error you got as precise as possible in the title. + + - type: dropdown + attributes: + label: Which Operating System are you using? + description: > + Please select the operating system you were using to run AutoGPT when this problem occurred. + options: + - Windows + - Linux + - MacOS + - Docker + - Devcontainer / Codespace + - Windows Subsystem for Linux (WSL) + - Other + validations: + required: true + nested_fields: + - type: text + attributes: + label: Specify the system + description: Please specify the system you are working on. + + - type: dropdown + attributes: + label: Which version of AutoGPT are you using? + description: | + Please select which version of AutoGPT you were using when this issue occurred. + If you downloaded the code from the [releases page](https://github.com/Significant-Gravitas/AutoGPT/releases/) make sure you were using the latest code. + **If you weren't please try with the [latest code](https://github.com/Significant-Gravitas/AutoGPT/releases/)**. + If installed with git you can run `git branch` to see which version of AutoGPT you are running. + options: + - Latest Release + - Stable (branch) + - Master (branch) + validations: + required: true + + - type: dropdown + attributes: + label: What LLM Provider do you use? + description: > + If you are using AutoGPT with `SMART_LLM=gpt-3.5-turbo`, your problems may be caused by + the [limitations](https://github.com/Significant-Gravitas/AutoGPT/issues?q=is%3Aissue+label%3A%22AI+model+limitation%22) of GPT-3.5. + options: + - Azure + - Groq + - Anthropic + - Llamafile + - Other (detail in issue) + validations: + required: true + + - type: dropdown + attributes: + label: Which area covers your issue best? + description: > + Select the area related to the issue you are reporting. + options: + - Installation and setup + - Memory + - Performance + - Prompt + - Commands + - Plugins + - AI Model Limitations + - Challenges + - Documentation + - Logging + - Agents + - Other + validations: + required: true + autolabels: true + nested_fields: + - type: text + attributes: + label: Specify the area + description: Please specify the area you think is best related to the issue. + + - type: input + attributes: + label: What commit or version are you using? + description: It is helpful for us to reproduce to know what version of the software you were using when this happened. Please run `git log -n 1 --pretty=format:"%H"` to output the full commit hash. + validations: + required: true + + - type: textarea + attributes: + label: Describe your issue. + description: Describe the problem you are experiencing. Try to describe only the issue and phrase it short but clear. ⚠️ Provide NO other data in this field + validations: + required: true + + #Following are optional file content uploads + - type: markdown + attributes: + value: | + ⚠️The following is OPTIONAL, please keep in mind that the log files may contain personal information such as credentials.⚠️ + + "The log files are located in the folder 'logs' inside the main AutoGPT folder." + + - type: textarea + attributes: + label: Upload Activity Log Content + description: | + Upload the activity log content, this can help us understand the issue better. + To do this, go to the folder logs in your main AutoGPT folder, open activity.log and copy/paste the contents to this field. + ⚠️ The activity log may contain personal data given to AutoGPT by you in prompt or input as well as + any personal information that AutoGPT collected out of files during last run. Do not add the activity log if you are not comfortable with sharing it. ⚠️ + validations: + required: false + + - type: textarea + attributes: + label: Upload Error Log Content + description: | + Upload the error log content, this will help us understand the issue better. + To do this, go to the folder logs in your main AutoGPT folder, open error.log and copy/paste the contents to this field. + ⚠️ The error log may contain personal data given to AutoGPT by you in prompt or input as well as + any personal information that AutoGPT collected out of files during last run. Do not add the activity log if you are not comfortable with sharing it. ⚠️ + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/2.feature.yml b/.github/ISSUE_TEMPLATE/2.feature.yml new file mode 100644 index 0000000..d673c1f --- /dev/null +++ b/.github/ISSUE_TEMPLATE/2.feature.yml @@ -0,0 +1,28 @@ +name: Feature request 🚀 +description: Suggest a new idea for AutoGPT! +labels: ['status: needs triage'] +body: + - type: markdown + attributes: + value: | + First, check out our [wiki page on Contributing](https://github.com/Significant-Gravitas/AutoGPT/wiki/Contributing) + Please provide a searchable summary of the issue in the title above ⬆️. + - type: checkboxes + attributes: + label: Duplicates + description: Please [search the history](https://github.com/Significant-Gravitas/AutoGPT/issues) to see if an issue already exists for the same problem. + options: + - label: I have searched the existing issues + required: true + - type: textarea + attributes: + label: Summary 💡 + description: Describe how it should work. + - type: textarea + attributes: + label: Examples 🌈 + description: Provide a link to other implementations, or screenshots of the expected behavior. + - type: textarea + attributes: + label: Motivation 🔦 + description: What are you trying to accomplish? How has the lack of this feature affected you? Providing context helps us come up with a solution that is more useful in the real world. diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..9b348b5 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,38 @@ + + +### Changes 🏗️ + + + +### Checklist 📋 + +#### For code changes: +- [ ] I have clearly listed my changes in the PR description +- [ ] I have made a test plan +- [ ] I have tested my changes according to the test plan: + + - [ ] ... + +
+ Example test plan + + - [ ] Create from scratch and execute an agent with at least 3 blocks + - [ ] Import an agent from file upload, and confirm it executes correctly + - [ ] Upload agent to marketplace + - [ ] Import an agent from marketplace and confirm it executes correctly + - [ ] Edit an agent from monitor, and confirm it executes correctly +
+ +#### For configuration changes: +- [ ] `.env.example` is updated or already compatible with my changes +- [ ] `docker-compose.yml` is updated or already compatible with my changes +- [ ] I have included a list of my configuration changes in the PR description (under **Changes**) + +
+ Examples of configuration changes + + - Changing ports + - Adding new services that need to communicate with each other + - Secrets or environment variable changes + - New or infrastructure changes such as databases +
diff --git a/.github/workflows/scripts/check_actions_status.py b/.github/workflows/scripts/check_actions_status.py new file mode 100644 index 0000000..37f83da --- /dev/null +++ b/.github/workflows/scripts/check_actions_status.py @@ -0,0 +1,116 @@ +import json +import os +import requests +import sys +import time +from typing import Dict, List, Tuple + +CHECK_INTERVAL = 30 + + +def get_environment_variables() -> Tuple[str, str, str, str, str]: + """Retrieve and return necessary environment variables.""" + try: + with open(os.environ["GITHUB_EVENT_PATH"]) as f: + event = json.load(f) + + # Handle both PR and merge group events + if "pull_request" in event: + sha = event["pull_request"]["head"]["sha"] + else: + sha = os.environ["GITHUB_SHA"] + + return ( + os.environ["GITHUB_API_URL"], + os.environ["GITHUB_REPOSITORY"], + sha, + os.environ["GITHUB_TOKEN"], + os.environ["GITHUB_RUN_ID"], + ) + except KeyError as e: + print(f"Error: Missing required environment variable or event data: {e}") + sys.exit(1) + + +def make_api_request(url: str, headers: Dict[str, str]) -> Dict: + """Make an API request and return the JSON response.""" + try: + print("Making API request to:", url) + response = requests.get(url, headers=headers, timeout=10) + response.raise_for_status() + return response.json() + except requests.RequestException as e: + print(f"Error: API request failed. {e}") + sys.exit(1) + + +def process_check_runs(check_runs: List[Dict]) -> Tuple[bool, bool]: + """Process check runs and return their status.""" + runs_in_progress = False + all_others_passed = True + + for run in check_runs: + if str(run["name"]) != "Check PR Status": + status = run["status"] + conclusion = run["conclusion"] + + if status == "completed": + if conclusion not in ["success", "skipped", "neutral"]: + all_others_passed = False + print( + f"Check run {run['name']} (ID: {run['id']}) has conclusion: {conclusion}" + ) + else: + runs_in_progress = True + print(f"Check run {run['name']} (ID: {run['id']}) is still {status}.") + all_others_passed = False + else: + print( + f"Skipping check run {run['name']} (ID: {run['id']}) as it is the current run." + ) + + return runs_in_progress, all_others_passed + + +def main(): + api_url, repo, sha, github_token, current_run_id = get_environment_variables() + + endpoint = f"{api_url}/repos/{repo}/commits/{sha}/check-runs" + headers = { + "Accept": "application/vnd.github.v3+json", + } + if github_token: + headers["Authorization"] = f"token {github_token}" + + print(f"Current run ID: {current_run_id}") + + while True: + data = make_api_request(endpoint, headers) + + check_runs = data["check_runs"] + + print("Processing check runs...") + + print(check_runs) + + runs_in_progress, all_others_passed = process_check_runs(check_runs) + + if not runs_in_progress: + break + + print( + "Some check runs are still in progress. " + f"Waiting {CHECK_INTERVAL} seconds before checking again..." + ) + time.sleep(CHECK_INTERVAL) + + if all_others_passed: + print("All other completed check runs have passed. This check passes.") + sys.exit(0) + else: + print("Some check runs have failed or have not completed. This check fails.") + sys.exit(1) + + +if __name__ == "__main__": + main() diff --git a/.vscode/all-projects.code-workspace b/.vscode/all-projects.code-workspace new file mode 100644 index 0000000..d5f6dfc --- /dev/null +++ b/.vscode/all-projects.code-workspace @@ -0,0 +1,77 @@ +{ + "folders": [ + { + "name": "frontend", + "path": "../tourai_platform/frontend" + }, + { + "name": "backend", + "path": "../tourai_platform/backend" + }, + { + "name": "build", + "path": "../build" + }, + { + "name": "models", + "path": "../models" + }, + { + "name": "infra", + "path": "../models/infra" + }, + { + "name": "checkpoints", + "path": "../models/checkpoints" + }, + { + "name": "data", + "path": "../models/data" + }, + { + "name": "libs", + "path": "../models/data/tourai_libs" + }, + { + "name": "node_modules", + "path": "../node_modules" + }, + { + "name": "public", + "path": "../public" + }, + { + "name": "server", + "path": "../server" + }, + { + "name": "src", + "path": "../src" + }, + { + "name": "docs", + "path": "../docs" + }, + { + "name": "logs", + "path": "../logs" + }, + { + "name": "[root]", + "path": ".." + } + ], + "settings": { + "python.analysis.typeCheckingMode": "basic" + }, + "extensions": { + "recommendations": [ + "charliermarsh.ruff", + "dart-code.flutter", + "ms-python.black-formatter", + "ms-python.vscode-pylance", + "prisma.prisma", + "qwtel.sqlite-viewer" + ] + } +} diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..c87827e --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,68 @@ +{ + "version": "0.1.0", + "isValid": "false", + "configurations": [ + { + "name": "Frontend: Server Side", + "type": "node-terminal", + "request": "launch", + "cwd": "${workspaceFolder}/tourai_platform/frontend", + "command": "yarn dev" + }, + { + "name": "Frontend: Client Side", + "type": "msedge", + "request": "launch", + "url": "http://localhost:3000" + }, + { + "name": "Frontend: Full Stack", + "type": "node-terminal", + + "request": "launch", + "command": "yarn dev", + "cwd": "${workspaceFolder}/tourai_platform/frontend", + "serverReadyAction": { + "pattern": "- Local:.+(https?://.+)", + "uriFormat": "%s", + "action": "debugWithEdge" + } + }, + { + "name": "Backend", + "type": "debugpy", + "request": "launch", + "module": "backend.app", + // "env": { + // "ENV": "dev" + // }, + "envFile": "${workspaceFolder}/backend/.env", + "justMyCode": false, + "cwd": "${workspaceFolder}/tourai_platform/backend" + }, + { + "name": "Marketplace", + "type": "debugpy", + "request": "launch", + "module": "tourai_platform.market.main", + "env": { + "ENV": "dev" + }, + "envFile": "${workspaceFolder}/market/.env", + "justMyCode": false, + "cwd": "${workspaceFolder}/market" + } + ], + "compounds": [ + { + "name": "Everything", + "configurations": ["Backend", "Frontend: Full Stack"], + // "preLaunchTask": "${defaultBuildTask}", + "stopAll": true, + "presentation": { + "hidden": false, + "order": 0 + } + } + ] +} diff --git a/docs/screenshots/readme.md b/docs/screenshots/readme.md new file mode 100644 index 0000000..455b2f8 --- /dev/null +++ b/docs/screenshots/readme.md @@ -0,0 +1,2 @@ +This folder contains screenshots to record each status during product development. +File named by "Screenshot"-"Created Day"-"Version" \ No newline at end of file