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: status_emoji =
"⏳";
break;
39 case TodoItem::Status::IN_PROGRESS: status_emoji =
"🔄";
break;
40 case TodoItem::Status::COMPLETED: status_emoji =
"✅";
break;
41 case TodoItem::Status::BLOCKED: status_emoji =
"🚫";
break;
42 case TodoItem::Status::CANCELLED: status_emoji =
"❌";
break;
45 std::cout << absl::StreamFormat(
"[%s] %s %s",
51 std::cout << absl::StreamFormat(
" [%s]", item.
category);
55 std::cout << absl::StreamFormat(
" (priority: %d)", item.
priority);
58 std::cout << std::endl;
62 std::cout <<
" Created: " << item.
created_at << std::endl;
63 std::cout <<
" Updated: " << item.
updated_at << std::endl;
66 std::cout <<
" Dependencies: " << absl::StrJoin(item.
dependencies,
", ") << std::endl;
70 std::cout <<
" Tools needed: " << absl::StrJoin(item.
tools_needed,
", ") << std::endl;
73 if (!item.
notes.empty()) {
74 std::cout <<
" Notes: " << item.
notes << std::endl;
81 return absl::InvalidArgumentError(
"Usage: agent todo create <description> [--category=<cat>] [--priority=<n>]");
84 std::string description = args[0];
88 for (
size_t i = 1; i < args.size(); ++i) {
89 if (args[i].find(
"--category=") == 0) {
90 category = args[i].substr(11);
91 }
else if (args[i].find(
"--priority=") == 0) {
92 priority = std::stoi(args[i].substr(11));
97 auto result = manager.CreateTodo(description, category, priority);
100 return result.status();
103 std::cout <<
"Created TODO:" << std::endl;
106 return absl::OkStatus();
110 std::string status_filter;
111 std::string category_filter;
113 for (
const auto& arg : args) {
114 if (arg.find(
"--status=") == 0) {
115 status_filter = arg.substr(9);
116 }
else if (arg.find(
"--category=") == 0) {
117 category_filter = arg.substr(11);
122 std::vector<TodoItem> todos;
124 if (!status_filter.empty()) {
125 auto status = TodoItem::StringToStatus(status_filter);
126 todos = manager.GetTodosByStatus(status);
127 }
else if (!category_filter.empty()) {
128 todos = manager.GetTodosByCategory(category_filter);
130 todos = manager.GetAllTodos();
134 std::cout <<
"No TODOs found." << std::endl;
135 return absl::OkStatus();
138 std::cout <<
"TODOs (" << todos.size() <<
"):" << std::endl;
139 for (
const auto& item : todos) {
143 return absl::OkStatus();
147 if (args.size() < 2) {
148 return absl::InvalidArgumentError(
"Usage: agent todo update <id> --status=<status>");
151 std::string
id = args[0];
152 std::string new_status_str;
154 for (
size_t i = 1; i < args.size(); ++i) {
155 if (args[i].find(
"--status=") == 0) {
156 new_status_str = args[i].substr(9);
160 if (new_status_str.empty()) {
161 return absl::InvalidArgumentError(
"--status parameter is required");
164 auto new_status = TodoItem::StringToStatus(new_status_str);
166 auto status = manager.UpdateStatus(
id, new_status);
172 std::cout <<
"Updated TODO " <<
id <<
" to status: " << new_status_str << std::endl;
173 return absl::OkStatus();
178 return absl::InvalidArgumentError(
"Usage: agent todo show <id>");
181 std::string
id = args[0];
183 auto result = manager.GetTodo(
id);
186 return result.status();
190 return absl::OkStatus();
195 return absl::InvalidArgumentError(
"Usage: agent todo delete <id>");
198 std::string
id = args[0];
200 auto status = manager.DeleteTodo(
id);
206 std::cout <<
"Deleted TODO " <<
id << std::endl;
207 return absl::OkStatus();
212 auto status = manager.ClearCompleted();
218 std::cout <<
"Cleared all completed TODOs" << std::endl;
219 return absl::OkStatus();
224 auto result = manager.GetNextActionableTodo();
227 return result.status();
230 std::cout <<
"Next actionable TODO:" << std::endl;
233 return absl::OkStatus();
238 auto result = manager.GenerateExecutionPlan();
241 return result.status();
244 auto& plan = *result;
246 std::cout <<
"No pending TODOs." << std::endl;
247 return absl::OkStatus();
250 std::cout <<
"Execution Plan (" << plan.size() <<
" tasks):" << std::endl;
251 for (
size_t i = 0; i < plan.size(); ++i) {
252 std::cout << absl::StreamFormat(
"%2d. ", i + 1);
256 return absl::OkStatus();
263 std::cerr <<
"Usage: agent todo <command> [options]" << std::endl;
264 std::cerr <<
"Commands:" << std::endl;
265 std::cerr <<
" create - Create a new TODO" << std::endl;
266 std::cerr <<
" list - List all TODOs" << std::endl;
267 std::cerr <<
" update - Update TODO status" << std::endl;
268 std::cerr <<
" show - Show TODO details" << std::endl;
269 std::cerr <<
" delete - Delete a TODO" << std::endl;
270 std::cerr <<
" clear-completed - Clear completed TODOs" << std::endl;
271 std::cerr <<
" next - Get next actionable TODO" << std::endl;
272 std::cerr <<
" plan - Generate execution plan" << std::endl;
273 return absl::InvalidArgumentError(
"No command specified");
276 std::string subcommand = args[0];
277 std::vector<std::string> subargs(args.begin() + 1, args.end());
279 if (subcommand ==
"create") {
280 return HandleTodoCreate(subargs);
281 }
else if (subcommand ==
"list") {
282 return HandleTodoList(subargs);
283 }
else if (subcommand ==
"update") {
284 return HandleTodoUpdate(subargs);
285 }
else if (subcommand ==
"show") {
286 return HandleTodoShow(subargs);
287 }
else if (subcommand ==
"delete") {
288 return HandleTodoDelete(subargs);
289 }
else if (subcommand ==
"clear-completed") {
290 return HandleTodoClearCompleted(subargs);
291 }
else if (subcommand ==
"next") {
292 return HandleTodoNext(subargs);
293 }
else if (subcommand ==
"plan") {
294 return HandleTodoPlan(subargs);
296 return absl::InvalidArgumentError(
297 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.
Main namespace for the application.
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