5#include "absl/strings/str_cat.h"
6#include "absl/strings/str_format.h"
7#include "absl/strings/str_join.h"
8#include "absl/strings/str_split.h"
23 static bool initialized =
false;
27 std::cerr <<
"Warning: Failed to initialize TODO manager: "
28 << status.message() << std::endl;
36 std::string status_emoji;
38 case TodoItem::Status::PENDING:
41 case TodoItem::Status::IN_PROGRESS:
44 case TodoItem::Status::COMPLETED:
47 case TodoItem::Status::BLOCKED:
50 case TodoItem::Status::CANCELLED:
55 std::cout << absl::StreamFormat(
"[%s] %s %s", item.
id, status_emoji,
59 std::cout << absl::StreamFormat(
" [%s]", item.
category);
63 std::cout << absl::StreamFormat(
" (priority: %d)", item.
priority);
66 std::cout << std::endl;
70 std::cout <<
" Created: " << item.
created_at << std::endl;
71 std::cout <<
" Updated: " << item.
updated_at << std::endl;
74 std::cout <<
" Dependencies: " << absl::StrJoin(item.
dependencies,
", ")
79 std::cout <<
" Tools needed: " << absl::StrJoin(item.
tools_needed,
", ")
83 if (!item.
notes.empty()) {
84 std::cout <<
" Notes: " << item.
notes << std::endl;
91 return absl::InvalidArgumentError(
92 "Usage: agent todo create <description> [--category=<cat>] "
100 for (
size_t i = 1; i < args.size(); ++i) {
101 if (args[i].find(
"--category=") == 0) {
103 }
else if (args[i].find(
"--priority=") == 0) {
104 priority = std::stoi(args[i].substr(11));
112 return result.status();
115 std::cout <<
"Created TODO:" << std::endl;
118 return absl::OkStatus();
122 std::string status_filter;
123 std::string category_filter;
125 for (
const auto& arg : args) {
126 if (arg.find(
"--status=") == 0) {
127 status_filter = arg.substr(9);
128 }
else if (arg.find(
"--category=") == 0) {
129 category_filter = arg.substr(11);
134 std::vector<TodoItem> todos;
136 if (!status_filter.empty()) {
137 auto status = TodoItem::StringToStatus(status_filter);
138 todos = manager.GetTodosByStatus(status);
139 }
else if (!category_filter.empty()) {
140 todos = manager.GetTodosByCategory(category_filter);
142 todos = manager.GetAllTodos();
146 std::cout <<
"No TODOs found." << std::endl;
147 return absl::OkStatus();
150 std::cout <<
"TODOs (" << todos.size() <<
"):" << std::endl;
151 for (
const auto& item : todos) {
155 return absl::OkStatus();
159 if (args.size() < 2) {
160 return absl::InvalidArgumentError(
161 "Usage: agent todo update <id> --status=<status>");
164 std::string
id = args[0];
165 std::string new_status_str;
167 for (
size_t i = 1; i < args.size(); ++i) {
168 if (args[i].find(
"--status=") == 0) {
169 new_status_str = args[i].substr(9);
173 if (new_status_str.empty()) {
174 return absl::InvalidArgumentError(
"--status parameter is required");
177 auto new_status = TodoItem::StringToStatus(new_status_str);
179 auto status = manager.UpdateStatus(
id, new_status);
185 std::cout <<
"Updated TODO " <<
id <<
" to status: " << new_status_str
187 return absl::OkStatus();
192 return absl::InvalidArgumentError(
"Usage: agent todo show <id>");
195 std::string
id = args[0];
197 auto result = manager.GetTodo(
id);
200 return result.status();
204 return absl::OkStatus();
209 return absl::InvalidArgumentError(
"Usage: agent todo delete <id>");
212 std::string
id = args[0];
214 auto status = manager.DeleteTodo(
id);
220 std::cout <<
"Deleted TODO " <<
id << std::endl;
221 return absl::OkStatus();
226 auto status = manager.ClearCompleted();
232 std::cout <<
"Cleared all completed TODOs" << std::endl;
233 return absl::OkStatus();
238 auto result = manager.GetNextActionableTodo();
241 return result.status();
244 std::cout <<
"Next actionable TODO:" << std::endl;
247 return absl::OkStatus();
252 auto result = manager.GenerateExecutionPlan();
255 return result.status();
258 auto& plan = *result;
260 std::cout <<
"No pending TODOs." << std::endl;
261 return absl::OkStatus();
264 std::cout <<
"Execution Plan (" << plan.size() <<
" tasks):" << std::endl;
265 for (
size_t i = 0; i < plan.size(); ++i) {
266 std::cout << absl::StreamFormat(
"%2d. ", i + 1);
270 return absl::OkStatus();
277 std::cerr <<
"Usage: agent todo <command> [options]" << std::endl;
278 std::cerr <<
"Commands:" << std::endl;
279 std::cerr <<
" create - Create a new TODO" << std::endl;
280 std::cerr <<
" list - List all TODOs" << std::endl;
281 std::cerr <<
" update - Update TODO status" << std::endl;
282 std::cerr <<
" show - Show TODO details" << std::endl;
283 std::cerr <<
" delete - Delete a TODO" << std::endl;
284 std::cerr <<
" clear-completed - Clear completed TODOs" << std::endl;
285 std::cerr <<
" next - Get next actionable TODO" << std::endl;
286 std::cerr <<
" plan - Generate execution plan" << std::endl;
287 return absl::InvalidArgumentError(
"No command specified");
290 std::string subcommand = args[0];
291 std::vector<std::string> subargs(args.begin() + 1, args.end());
293 if (subcommand ==
"create") {
294 return HandleTodoCreate(subargs);
295 }
else if (subcommand ==
"list") {
296 return HandleTodoList(subargs);
297 }
else if (subcommand ==
"update") {
298 return HandleTodoUpdate(subargs);
299 }
else if (subcommand ==
"show") {
300 return HandleTodoShow(subargs);
301 }
else if (subcommand ==
"delete") {
302 return HandleTodoDelete(subargs);
303 }
else if (subcommand ==
"clear-completed") {
304 return HandleTodoClearCompleted(subargs);
305 }
else if (subcommand ==
"next") {
306 return HandleTodoNext(subargs);
307 }
else if (subcommand ==
"plan") {
308 return HandleTodoPlan(subargs);
310 return absl::InvalidArgumentError(
311 absl::StrFormat(
"Unknown todo command: %s", subcommand));
Manages TODO lists for z3ed agent task execution.
absl::Status Initialize()
Initialize the TODO manager and load persisted data.
absl::Status HandleTodoShow(const std::vector< std::string > &args)
absl::Status HandleTodoPlan(const std::vector< std::string > &args)
absl::Status HandleTodoUpdate(const std::vector< std::string > &args)
void PrintTodo(const TodoItem &item, bool detailed=false)
absl::Status HandleTodoNext(const std::vector< std::string > &args)
absl::Status HandleTodoClearCompleted(const std::vector< std::string > &args)
absl::Status HandleTodoCreate(const std::vector< std::string > &args)
absl::Status HandleTodoList(const std::vector< std::string > &args)
absl::Status HandleTodoDelete(const std::vector< std::string > &args)
TodoManager & GetTodoManager()
absl::Status HandleTodoCommand(const std::vector< std::string > &args)
Handle z3ed agent todo commands.
Represents a single TODO item for task management.
enum yaze::cli::agent::TodoItem::Status status
std::vector< std::string > dependencies
std::vector< std::string > tools_needed
std::string StatusToString() const