Aider-AI / aider

aider is AI pair programming in your terminal
https://aider.chat/
Apache License 2.0
20.94k stars 1.93k forks source link

[FeatReq] Add a Tasklist to Aider #959

Open Emasoft opened 2 months ago

Emasoft commented 2 months ago

Issue

Aider needs a task list. This will help the progress and keeping track of with the code changes we need. The best would be taking the example from Github: we need just three things:

The user should be able to create those with two new aider commands:

“/task feature : add a feature request description “/task bug : add a bug report

Also the AI should be able to create those entries by itself in the /ask mode if the user asks for new features, or if the user report a bug.

Those two kind of entries could also be imported from the github repo issues list, with a command like this:

“/github-sync repo url

You should also be able to specify if you want just to sync the bugs and/or the features:

“/github-sync repo url features bugs”

When you need to have a overview of the project progress, you should be able to call a command like:

“/task list”

...and getting a result like:

TASKLIST:

n Description Reference URL Status
1 [❇️ Feat] Add user authentication feature https://github.com/myproject/issues/45 📝 planned
2 [🪲Bug] Fix crash on startup when configuration is missing https://github.com/myproject/issues/32 ✅ solved
3 [❇️ Feat] Implement dark mode for the application 📝 planned
4 [🪲Bug] Resolve memory leak in data processing module https://github.com/myproject/issues/19 🔄 in progress
5 [❇️ Feat] Add support for exporting data in CSV format https://github.com/myproject/issues/52 📝 planned
6 [🪲Bug] Correct typo in user settings description ✅ solved
7 [❇️ Feat] Create an admin dashboard for monitoring activities 📝 planned
8 [🪲Bug] Address layout issues on mobile devices https://github.com/myproject/issues/27 📝 planned
9 [❇️ Feat] Integrate third-party API for weather updates 📝 planned
10 [🪲Bug] Fix broken link in the help documentation ❌ wontfix

Project Status Summary:

Write a task number and the new status (Example: “21 solved”). “n drop” to delete a task. C to clear all tasks:
> 8 solved

In Aider help: You can show the tasklist with the command /task list You can delete a task with the command /task drop n You can change the status of a task with the command /task status n new-status You can create new bug report with the command /task bug description You can create new feature request with the command /task feature description
You can sync bug reports and feature requests with your Github repo with /github-sync URL

NOTE: The AI can create tasks, but only the user can change the status of a task. Until a task is not marked as solved the AI will try to complete it, starting with fixing bugs, and only when all bugs are fixed it will start adding new features. Of course the user can ask the AI to focus on a certain task number.

What do you think?

Version and model info

No response

sholub89 commented 2 months ago

@Emasoft , wanted to mention - the original idea of /ask was an actual non-modify mode. So the tasklist edit has to be done somehow else.

I wish there was a tasklist implementation, that would be super helpful. FYI there is a workaround I found on the web where people create a webpage with the tasks and add it to the context of Aider. Since it is a webpage - Aider can't modify it and it stays intact while you can refer to it saying work on task 1, fix the issue 6 etc.. But that isn't very convenient.

paul-gauthier commented 2 months ago

Thanks for trying aider and filing this issue.

Why not just have aider use a file like TASKS.md to create the task list? Then ask it work on items and mark them as done, etc?

Emasoft commented 2 months ago

No, for it to work it is necessary to implement a ‘function calling’ of some sort. The AI should be able to select and retrieve the description of each task, and read its status. Or (maybe better) Aider should provide that content to the AI programmatically. It is true that a tasklist should be saved in an external YAML file (each YAML file could represent a project, but not explicitly). They can just be loaded by aider with aider --tasklist aider_tasks.yaml, but this file is going to be too big to be loaded in the context entirely. Only the selected task details should be loaded at any time. Do not be confused by my example above: the true descriptions of features can be very long, and can include files and links to docs or web pages. By default at start the AI should be setup by Aider by adding to the chat the description of the first open task in the tasklist. Also to be effective, a task list should also include a list of the resources necessary to complete the task. Lets call it “task resources”. The Task Resources is a list of paths and urls. Each task should have this dedicated list called Task Resources that must be added to the chat before start working on the task. Each tasklist yaml file should be saved in the root of each corresponding project. In this way, useless files will be dropped, while only the files or docs/html that are strictly needed for the task are added to the chat to minimize the consumption of the context tokens. The tasklist in this way would be an efficient way to partition the project in small manageable chunks, saving tons of tokens. No more adding all project files to the chat everytime. The user will just switch from a task to another, and Aider should automatically clear the context, and load in the chat the selected task DESCRIPTION plus ONLY the RESOURCES (code & data files, web urls, docs) needed to complete the task. Once you select a task, you should be able to see a tag (on screen or in the prompt) with written: “Working on Task 234”. All files and web resources added to the chat while working on a specific task will be saved as the Task Resources list for that task, and restored when working on that task. In this way working with Aider would be much more efficient and simple. Just imagine loading Aider and seeing the list of tasks to complete, each with the already defined description and attached resources, and you should only select the number to see Aider automatically add the task prompt and the required resources to the chat and start working on it. Sweet!

NOTE: I strongly suggest using StrictYAML instead of YAML for storing the task lists, because is type-safe and has less issues with escaping characters (something useful with coding related prompts). And aider should parse it, not the AI. See here: https://github.com/crdoconnor/strictyaml/blob/0.13.0/FAQ.rst