todo-agent 0.3.1__py3-none-any.whl → 0.3.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- todo_agent/_version.py +2 -2
- todo_agent/core/conversation_manager.py +1 -1
- todo_agent/core/exceptions.py +54 -3
- todo_agent/core/todo_manager.py +115 -49
- todo_agent/infrastructure/calendar_utils.py +2 -4
- todo_agent/infrastructure/inference.py +95 -50
- todo_agent/infrastructure/llm_client.py +224 -1
- todo_agent/infrastructure/ollama_client.py +68 -77
- todo_agent/infrastructure/openrouter_client.py +70 -73
- todo_agent/infrastructure/prompts/system_prompt.txt +112 -70
- todo_agent/infrastructure/todo_shell.py +2 -16
- todo_agent/interface/cli.py +109 -17
- todo_agent/interface/formatters.py +22 -0
- todo_agent/interface/progress.py +58 -0
- todo_agent/interface/tools.py +142 -23
- {todo_agent-0.3.1.dist-info → todo_agent-0.3.2.dist-info}/METADATA +3 -3
- todo_agent-0.3.2.dist-info/RECORD +30 -0
- todo_agent-0.3.1.dist-info/RECORD +0 -29
- {todo_agent-0.3.1.dist-info → todo_agent-0.3.2.dist-info}/WHEEL +0 -0
- {todo_agent-0.3.1.dist-info → todo_agent-0.3.2.dist-info}/entry_points.txt +0 -0
- {todo_agent-0.3.1.dist-info → todo_agent-0.3.2.dist-info}/licenses/LICENSE +0 -0
- {todo_agent-0.3.1.dist-info → todo_agent-0.3.2.dist-info}/top_level.txt +0 -0
todo_agent/interface/tools.py
CHANGED
@@ -10,22 +10,24 @@ Discovery Tools (Call FIRST):
|
|
10
10
|
- list_completed_tasks() - List all completed tasks from done.txt
|
11
11
|
|
12
12
|
Task Management Tools:
|
13
|
-
- add_task(description, priority?, project?, context?, due?,
|
13
|
+
- add_task(description, priority?, project?, context?, due?, duration?) - Add new task to todo.txt
|
14
14
|
- complete_task(task_number) - Mark task as complete by line number
|
15
15
|
- replace_task(task_number, new_description) - Replace entire task content
|
16
16
|
- append_to_task(task_number, text) - Add text to end of existing task
|
17
17
|
- prepend_to_task(task_number, text) - Add text to beginning of existing task
|
18
18
|
- delete_task(task_number, term?) - Delete entire task or remove specific term
|
19
|
+
- created_completed_task(description, completion_date?, project?, context?) - Create task and immediately mark as completed
|
19
20
|
|
20
21
|
Priority Management Tools:
|
21
22
|
- set_priority(task_number, priority) - Set or change task priority (A-Z)
|
22
23
|
- remove_priority(task_number) - Remove priority from task
|
24
|
+
|
25
|
+
Task Modification Tools:
|
23
26
|
- set_due_date(task_number, due_date) - Set or update due date for a task by intelligently rewriting it (use empty string to remove due date)
|
24
27
|
- set_context(task_number, context) - Set or update context for a task by intelligently rewriting it (use empty string to remove context)
|
25
28
|
- set_project(task_number, projects) - Set or update projects for a task by intelligently rewriting it (handles array of projects with add/remove operations)
|
26
29
|
|
27
30
|
Utility Tools:
|
28
|
-
- get_overview() - Show task statistics and summary
|
29
31
|
- move_task(task_number, destination, source?) - Move task between files
|
30
32
|
- archive_tasks() - Archive completed tasks from todo.txt to done.txt
|
31
33
|
- get_calendar(month, year) - Get calendar for specific month and year
|
@@ -68,6 +70,7 @@ class ToolCallHandler:
|
|
68
70
|
),
|
69
71
|
"parameters": {"type": "object", "properties": {}, "required": []},
|
70
72
|
},
|
73
|
+
"progress_description": "📁 Discovering available projects...",
|
71
74
|
},
|
72
75
|
{
|
73
76
|
"type": "function",
|
@@ -83,6 +86,7 @@ class ToolCallHandler:
|
|
83
86
|
),
|
84
87
|
"parameters": {"type": "object", "properties": {}, "required": []},
|
85
88
|
},
|
89
|
+
"progress_description": "📍 Finding available contexts...",
|
86
90
|
},
|
87
91
|
{
|
88
92
|
"type": "function",
|
@@ -102,6 +106,7 @@ class ToolCallHandler:
|
|
102
106
|
),
|
103
107
|
"parameters": {"type": "object", "properties": {}, "required": []},
|
104
108
|
},
|
109
|
+
"progress_description": "📋 Scanning your task list...",
|
105
110
|
},
|
106
111
|
{
|
107
112
|
"type": "function",
|
@@ -120,6 +125,7 @@ class ToolCallHandler:
|
|
120
125
|
),
|
121
126
|
"parameters": {"type": "object", "properties": {}, "required": []},
|
122
127
|
},
|
128
|
+
"progress_description": "✅ Checking completion history...",
|
123
129
|
},
|
124
130
|
{
|
125
131
|
"type": "function",
|
@@ -166,10 +172,6 @@ class ToolCallHandler:
|
|
166
172
|
"type": "string",
|
167
173
|
"description": "Optional due date in YYYY-MM-DD format. Use parse_date() tool to convert natural language expressions like 'tomorrow', 'next week', 'by Friday' to YYYY-MM-DD format",
|
168
174
|
},
|
169
|
-
"recurring": {
|
170
|
-
"type": "string",
|
171
|
-
"description": "Optional recurring pattern in rec:frequency[:interval] format (e.g., 'rec:daily', 'rec:weekly:2', 'rec:monthly'). Use for tasks that repeat automatically.",
|
172
|
-
},
|
173
175
|
"duration": {
|
174
176
|
"type": "string",
|
175
177
|
"description": "Optional duration estimate in format: minutes (e.g., '30m'), hours (e.g., '2h'), or days (e.g., '1d'). Use for time planning and task prioritization.",
|
@@ -178,6 +180,7 @@ class ToolCallHandler:
|
|
178
180
|
"required": ["description"],
|
179
181
|
},
|
180
182
|
},
|
183
|
+
"progress_description": "➕ Creating new task...",
|
181
184
|
},
|
182
185
|
{
|
183
186
|
"type": "function",
|
@@ -201,6 +204,7 @@ class ToolCallHandler:
|
|
201
204
|
"required": ["task_number"],
|
202
205
|
},
|
203
206
|
},
|
207
|
+
"progress_description": "🎯 Marking task complete...",
|
204
208
|
},
|
205
209
|
{
|
206
210
|
"type": "function",
|
@@ -228,6 +232,7 @@ class ToolCallHandler:
|
|
228
232
|
"required": ["task_number", "new_description"],
|
229
233
|
},
|
230
234
|
},
|
235
|
+
"progress_description": "✏️ Updating task description...",
|
231
236
|
},
|
232
237
|
{
|
233
238
|
"type": "function",
|
@@ -249,14 +254,15 @@ class ToolCallHandler:
|
|
249
254
|
"type": "integer",
|
250
255
|
"description": "The line number of the task to modify (required)",
|
251
256
|
},
|
252
|
-
"
|
257
|
+
"text_to_append": {
|
253
258
|
"type": "string",
|
254
|
-
"description": "
|
259
|
+
"description": "Text to add to the end of the task (required)",
|
255
260
|
},
|
256
261
|
},
|
257
|
-
"required": ["task_number", "
|
262
|
+
"required": ["task_number", "text_to_append"],
|
258
263
|
},
|
259
264
|
},
|
265
|
+
"progress_description": "📝 Adding notes to task...",
|
260
266
|
},
|
261
267
|
{
|
262
268
|
"type": "function",
|
@@ -283,6 +289,7 @@ class ToolCallHandler:
|
|
283
289
|
"required": ["task_number", "text"],
|
284
290
|
},
|
285
291
|
},
|
292
|
+
"progress_description": "📝 Adding prefix to task...",
|
286
293
|
},
|
287
294
|
{
|
288
295
|
"type": "function",
|
@@ -313,6 +320,7 @@ class ToolCallHandler:
|
|
313
320
|
"required": ["task_number"],
|
314
321
|
},
|
315
322
|
},
|
323
|
+
"progress_description": "🗑️ Deleting task...",
|
316
324
|
},
|
317
325
|
{
|
318
326
|
"type": "function",
|
@@ -340,6 +348,7 @@ class ToolCallHandler:
|
|
340
348
|
"required": ["task_number", "priority"],
|
341
349
|
},
|
342
350
|
},
|
351
|
+
"progress_description": "🏷️ Setting priority...",
|
343
352
|
},
|
344
353
|
{
|
345
354
|
"type": "function",
|
@@ -363,6 +372,7 @@ class ToolCallHandler:
|
|
363
372
|
"required": ["task_number"],
|
364
373
|
},
|
365
374
|
},
|
375
|
+
"progress_description": "🏷️ Removing priority...",
|
366
376
|
},
|
367
377
|
{
|
368
378
|
"type": "function",
|
@@ -394,6 +404,7 @@ class ToolCallHandler:
|
|
394
404
|
"required": ["task_number", "due_date"],
|
395
405
|
},
|
396
406
|
},
|
407
|
+
"progress_description": "📅 Setting due date...",
|
397
408
|
},
|
398
409
|
{
|
399
410
|
"type": "function",
|
@@ -425,6 +436,7 @@ class ToolCallHandler:
|
|
425
436
|
"required": ["task_number", "context"],
|
426
437
|
},
|
427
438
|
},
|
439
|
+
"progress_description": "📍 Setting context...",
|
428
440
|
},
|
429
441
|
{
|
430
442
|
"type": "function",
|
@@ -460,17 +472,7 @@ class ToolCallHandler:
|
|
460
472
|
"required": ["task_number", "projects"],
|
461
473
|
},
|
462
474
|
},
|
463
|
-
|
464
|
-
{
|
465
|
-
"type": "function",
|
466
|
-
"function": {
|
467
|
-
"name": "get_overview",
|
468
|
-
"description": (
|
469
|
-
"Show task statistics and summary. Use this when user asks for "
|
470
|
-
"an overview, summary, or statistics about their tasks."
|
471
|
-
),
|
472
|
-
"parameters": {"type": "object", "properties": {}, "required": []},
|
473
|
-
},
|
475
|
+
"progress_description": "🏷️ Setting project tags...",
|
474
476
|
},
|
475
477
|
{
|
476
478
|
"type": "function",
|
@@ -502,6 +504,7 @@ class ToolCallHandler:
|
|
502
504
|
"required": ["task_number", "destination"],
|
503
505
|
},
|
504
506
|
},
|
507
|
+
"progress_description": "📦 Moving task...",
|
505
508
|
},
|
506
509
|
{
|
507
510
|
"type": "function",
|
@@ -514,6 +517,7 @@ class ToolCallHandler:
|
|
514
517
|
),
|
515
518
|
"parameters": {"type": "object", "properties": {}, "required": []},
|
516
519
|
},
|
520
|
+
"progress_description": "📦 Archiving completed tasks...",
|
517
521
|
},
|
518
522
|
{
|
519
523
|
"type": "function",
|
@@ -540,6 +544,7 @@ class ToolCallHandler:
|
|
540
544
|
"required": ["date_expression"],
|
541
545
|
},
|
542
546
|
},
|
547
|
+
"progress_description": "📅 Converting date expression...",
|
543
548
|
},
|
544
549
|
{
|
545
550
|
"type": "function",
|
@@ -575,6 +580,73 @@ class ToolCallHandler:
|
|
575
580
|
"required": ["month", "year"],
|
576
581
|
},
|
577
582
|
},
|
583
|
+
"progress_description": "📅 Generating calendar...",
|
584
|
+
},
|
585
|
+
{
|
586
|
+
"type": "function",
|
587
|
+
"function": {
|
588
|
+
"name": "created_completed_task",
|
589
|
+
"description": (
|
590
|
+
"Create a task and immediately mark it as completed. "
|
591
|
+
"USE CASE: Call this when user says they completed something on a specific date (e.g., 'I did the laundry today', 'I finished the report yesterday', 'I cleaned the garage last week') "
|
592
|
+
"and you have already researched existing tasks to determine no match exists. "
|
593
|
+
"WORKFLOW: 1) Use list_tasks() to search for existing tasks, 2) Use list_completed_tasks() to verify it's not already done, "
|
594
|
+
"3) If no match found, call this tool to create and complete the task in one operation. "
|
595
|
+
"STRATEGIC CONTEXT: This is a convenience tool for the common pattern of 'I did X on [date]' - "
|
596
|
+
"it creates a task with the specified completion date and immediately marks it complete. "
|
597
|
+
"The LLM should handle the research and decision-making about whether to use this tool."
|
598
|
+
),
|
599
|
+
"parameters": {
|
600
|
+
"type": "object",
|
601
|
+
"properties": {
|
602
|
+
"description": {
|
603
|
+
"type": "string",
|
604
|
+
"description": "The task description of what was completed (required)",
|
605
|
+
},
|
606
|
+
"completion_date": {
|
607
|
+
"type": "string",
|
608
|
+
"description": "Optional completion date in YYYY-MM-DD format (defaults to today)",
|
609
|
+
},
|
610
|
+
"project": {
|
611
|
+
"type": "string",
|
612
|
+
"description": "Optional project name (without the + symbol) for new task creation",
|
613
|
+
},
|
614
|
+
"context": {
|
615
|
+
"type": "string",
|
616
|
+
"description": "Optional context name (without the @ symbol) for new task creation",
|
617
|
+
},
|
618
|
+
},
|
619
|
+
"required": ["description"],
|
620
|
+
},
|
621
|
+
},
|
622
|
+
"progress_description": "✅ Creating completed task...",
|
623
|
+
},
|
624
|
+
{
|
625
|
+
"type": "function",
|
626
|
+
"function": {
|
627
|
+
"name": "restore_completed_task",
|
628
|
+
"description": (
|
629
|
+
"Restore a completed task from done.txt back to todo.txt, making it active again. "
|
630
|
+
"USE CASE: Call this when user wants to reactivate a previously completed task. "
|
631
|
+
"WORKFLOW: 1) Use list_completed_tasks() to find the completed task to restore, "
|
632
|
+
"2) Call restore_completed_task() with the task number from done.txt. "
|
633
|
+
"NOT FOR: Creating new tasks, completing tasks, or any other task operations. "
|
634
|
+
"This tool ONLY restores existing completed tasks to active status. "
|
635
|
+
"IMPORTANT: Use list_completed_tasks() first to find the correct task number "
|
636
|
+
"if user doesn't specify it."
|
637
|
+
),
|
638
|
+
"parameters": {
|
639
|
+
"type": "object",
|
640
|
+
"properties": {
|
641
|
+
"task_number": {
|
642
|
+
"type": "integer",
|
643
|
+
"description": "The line number of the completed task in done.txt to restore (required)",
|
644
|
+
}
|
645
|
+
},
|
646
|
+
"required": ["task_number"],
|
647
|
+
},
|
648
|
+
},
|
649
|
+
"progress_description": "🔄 Restoring completed task...",
|
578
650
|
},
|
579
651
|
]
|
580
652
|
|
@@ -731,8 +803,54 @@ class ToolCallHandler:
|
|
731
803
|
|
732
804
|
def execute_tool(self, tool_call: Dict[str, Any]) -> Dict[str, Any]:
|
733
805
|
"""Execute a tool call and return the result."""
|
734
|
-
|
735
|
-
|
806
|
+
# Validate tool call structure
|
807
|
+
if not isinstance(tool_call, dict):
|
808
|
+
return {
|
809
|
+
"tool_call_id": "unknown",
|
810
|
+
"name": "unknown",
|
811
|
+
"output": "ERROR: Invalid tool call format",
|
812
|
+
"error": True,
|
813
|
+
"error_type": "malformed_tool_call",
|
814
|
+
"error_details": "Tool call is not a dictionary",
|
815
|
+
"user_message": "I received a malformed request. Please try again, or type 'clear' to reset our conversation."
|
816
|
+
}
|
817
|
+
|
818
|
+
if "function" not in tool_call:
|
819
|
+
return {
|
820
|
+
"tool_call_id": tool_call.get("id", "unknown"),
|
821
|
+
"name": "unknown",
|
822
|
+
"output": "ERROR: Tool call missing function definition",
|
823
|
+
"error": True,
|
824
|
+
"error_type": "malformed_tool_call",
|
825
|
+
"error_details": "Tool call missing function field",
|
826
|
+
"user_message": "I received a malformed request. Please try again, or type 'clear' to reset our conversation."
|
827
|
+
}
|
828
|
+
|
829
|
+
function = tool_call["function"]
|
830
|
+
if not isinstance(function, dict):
|
831
|
+
return {
|
832
|
+
"tool_call_id": tool_call.get("id", "unknown"),
|
833
|
+
"name": "unknown",
|
834
|
+
"output": "ERROR: Function definition is not a dictionary",
|
835
|
+
"error": True,
|
836
|
+
"error_type": "malformed_tool_call",
|
837
|
+
"error_details": "Function field is not a dictionary",
|
838
|
+
"user_message": "I received a malformed request. Please try again, or type 'clear' to reset our conversation."
|
839
|
+
}
|
840
|
+
|
841
|
+
tool_name = function.get("name")
|
842
|
+
if not tool_name:
|
843
|
+
return {
|
844
|
+
"tool_call_id": tool_call.get("id", "unknown"),
|
845
|
+
"name": "unknown",
|
846
|
+
"output": "ERROR: Tool call missing function name",
|
847
|
+
"error": True,
|
848
|
+
"error_type": "malformed_tool_call",
|
849
|
+
"error_details": "Function missing name field",
|
850
|
+
"user_message": "I received a malformed request. Please try again, or type 'clear' to reset our conversation."
|
851
|
+
}
|
852
|
+
|
853
|
+
arguments = function.get("arguments", {})
|
736
854
|
tool_call_id = tool_call.get("id", "unknown")
|
737
855
|
|
738
856
|
# Handle arguments that might be a string (JSON) or already a dict
|
@@ -779,11 +897,12 @@ class ToolCallHandler:
|
|
779
897
|
"set_due_date": self.todo_manager.set_due_date,
|
780
898
|
"set_context": self.todo_manager.set_context,
|
781
899
|
"set_project": self.todo_manager.set_project,
|
782
|
-
"get_overview": self.todo_manager.get_overview,
|
783
900
|
"move_task": self.todo_manager.move_task,
|
784
901
|
"archive_tasks": self.todo_manager.archive_tasks,
|
785
902
|
"parse_date": self._parse_date,
|
786
903
|
"get_calendar": self._get_calendar,
|
904
|
+
"created_completed_task": self.todo_manager.created_completed_task,
|
905
|
+
"restore_completed_task": self.todo_manager.restore_completed_task,
|
787
906
|
}
|
788
907
|
|
789
908
|
if tool_name not in method_map:
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: todo-agent
|
3
|
-
Version: 0.3.
|
3
|
+
Version: 0.3.2
|
4
4
|
Summary: A natural language interface for todo.sh task management
|
5
5
|
Author: codeprimate
|
6
6
|
Maintainer: codeprimate
|
@@ -68,7 +68,7 @@ todo-agent "show my work tasks"
|
|
68
68
|
|
69
69
|
**Get intelligent insights** beyond basic task lists. It organizes tasks strategically, suggests priorities, and recommends optimal timing based on your patterns.
|
70
70
|
|
71
|
-
**Work smarter** with automatic duplicate detection
|
71
|
+
**Work smarter** with automatic duplicate detection and calendar-aware scheduling.
|
72
72
|
|
73
73
|
**Choose your privacy** - use cloud AI (OpenRouter) or run locally (Ollama).
|
74
74
|
|
@@ -163,7 +163,7 @@ todo-agent "what tasks are blocking other work?"
|
|
163
163
|
### Natural Language Intelligence
|
164
164
|
```bash
|
165
165
|
todo-agent "add dentist appointment next Monday"
|
166
|
-
|
166
|
+
|
167
167
|
todo-agent "move all completed tasks to archive"
|
168
168
|
todo-agent "show me tasks I can do from home"
|
169
169
|
```
|
@@ -0,0 +1,30 @@
|
|
1
|
+
todo_agent/__init__.py,sha256=RUowhd14r3tqB_7rl83unGV8oBjra3UOIl7jix-33fk,254
|
2
|
+
todo_agent/_version.py,sha256=e8NqPtZ8fggRgk3GPrqZ_U_BDV8aSULw1u_Gn9NNbnk,704
|
3
|
+
todo_agent/main.py,sha256=-ryhMm4c4sz4e4anXI8B-CYnpEh5HIkmnYcnGxcWHDk,1628
|
4
|
+
todo_agent/core/__init__.py,sha256=QAZ4it63pXv5-DxtNcuSAmg7ZnCY5ackI5yycvKHr9I,365
|
5
|
+
todo_agent/core/conversation_manager.py,sha256=9aAWogswZe9Cs7wKT47RG-cLh1LQ5D9RbhUHJVUyTS8,13549
|
6
|
+
todo_agent/core/exceptions.py,sha256=kH-xf30H1vlMHk7GTWclkhIdR_mGPylYu4vWiTl7_zA,2058
|
7
|
+
todo_agent/core/todo_manager.py,sha256=H-cBB0wm9_KdHBWm9bGJVpoNYRgikSegLpFE4QcJOAw,18991
|
8
|
+
todo_agent/infrastructure/__init__.py,sha256=SGbHXgzq6U1DMgOfWPMsWEK99zjPSF-6gzy7xqc5fsI,284
|
9
|
+
todo_agent/infrastructure/calendar_utils.py,sha256=8tOZHN5CNrRHpTQHYzskmsZNJKWuUFjrjyvHQ76AhzU,1837
|
10
|
+
todo_agent/infrastructure/config.py,sha256=zyp6qOlg1nN_awphivlgGNBE6fL0Hf66YgvWxR8ldyQ,2117
|
11
|
+
todo_agent/infrastructure/inference.py,sha256=lsaxfXu5gJIy9vkX9qbX9jtZL4XGpRT9KNbcNU-4tro,14683
|
12
|
+
todo_agent/infrastructure/llm_client.py,sha256=zkgET3tbLK7utLzrhKFxLxSDhEeJ2DuCSZ8FFYceZQk,9371
|
13
|
+
todo_agent/infrastructure/llm_client_factory.py,sha256=-tktnVOIF7B45WR7AuLoi7MKnEyuM8lgg1jjc4T1FhM,1929
|
14
|
+
todo_agent/infrastructure/logger.py,sha256=2ykG_0lyzmEGxDF6ZRl1qiTUGDuFeQgzv4Na6vRmXcM,4110
|
15
|
+
todo_agent/infrastructure/ollama_client.py,sha256=9qwY1fdwh9H55HJoNvXZS0xm2ooAXRKqYYsYrmJOetM,5570
|
16
|
+
todo_agent/infrastructure/openrouter_client.py,sha256=jWzGBnr9tqt4HFGUyVLjjUpM3QGMcdDsjCH6pT3CmFE,6727
|
17
|
+
todo_agent/infrastructure/todo_shell.py,sha256=NwbXTRF3dLNKzBYPS_4ObG-R1UV1dzXXf2asyKi36x0,17199
|
18
|
+
todo_agent/infrastructure/token_counter.py,sha256=PCKheOVJbp1s89yhh_i6iKgURMt9mVoYkwjQJCc2xCE,4958
|
19
|
+
todo_agent/infrastructure/prompts/system_prompt.txt,sha256=yXyYWJeB7IV6QK7NnywdUwPL_dKV0fxUD38hxr2Bc90,22984
|
20
|
+
todo_agent/interface/__init__.py,sha256=vDD3rQu4qDkpvVwGVtkDzE1M4IiSHYzTif4GbYSFWaI,457
|
21
|
+
todo_agent/interface/cli.py,sha256=5mUgCz3kJUfko5bVbpkWcMDvDPY_ysJhMEpbQlwBnBY,16226
|
22
|
+
todo_agent/interface/formatters.py,sha256=81Rud5tw7p3eSsXf6Ifuii8Iy7igT8kkX8eltHZ6l9A,20077
|
23
|
+
todo_agent/interface/progress.py,sha256=fcBSB1xodQ1xE7iU5hWe_G3t4_rE6lJpoqeCuazTnis,1811
|
24
|
+
todo_agent/interface/tools.py,sha256=A09LSxbobvHUu8XfEYTYs5uiM7bVgaqAvbY0qEcSYGI,51373
|
25
|
+
todo_agent-0.3.2.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
26
|
+
todo_agent-0.3.2.dist-info/METADATA,sha256=IVSq9-aM-JkzSEHWPVOrvkW3PwjqSbaXEW4SIOo-CCc,10056
|
27
|
+
todo_agent-0.3.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
28
|
+
todo_agent-0.3.2.dist-info/entry_points.txt,sha256=4W7LrCib6AXP5IZDwWRht8S5gutLu5oNfTJHGbt4oHs,52
|
29
|
+
todo_agent-0.3.2.dist-info/top_level.txt,sha256=a65mlPIhPZHuq2bRIi_sCMAIJsUddvXt171OBF6r6co,11
|
30
|
+
todo_agent-0.3.2.dist-info/RECORD,,
|
@@ -1,29 +0,0 @@
|
|
1
|
-
todo_agent/__init__.py,sha256=RUowhd14r3tqB_7rl83unGV8oBjra3UOIl7jix-33fk,254
|
2
|
-
todo_agent/_version.py,sha256=gGLpQUQx-ty9SEy9PYw9OgJWWzJLBnCpfJOfzL7SjlI,704
|
3
|
-
todo_agent/main.py,sha256=-ryhMm4c4sz4e4anXI8B-CYnpEh5HIkmnYcnGxcWHDk,1628
|
4
|
-
todo_agent/core/__init__.py,sha256=QAZ4it63pXv5-DxtNcuSAmg7ZnCY5ackI5yycvKHr9I,365
|
5
|
-
todo_agent/core/conversation_manager.py,sha256=nRFcDMqZtumVipggzVe94Hwz9HDbc2CrTssk_HImwEI,13548
|
6
|
-
todo_agent/core/exceptions.py,sha256=cPvvkIbKdI7l51wC7cE-ZxUi54P3nf2m7x2lMNMRFYM,399
|
7
|
-
todo_agent/core/todo_manager.py,sha256=wOgwXZCS5xZw7lHDnIar0L8r1pvgdUguu6kmFF9xSi8,16282
|
8
|
-
todo_agent/infrastructure/__init__.py,sha256=SGbHXgzq6U1DMgOfWPMsWEK99zjPSF-6gzy7xqc5fsI,284
|
9
|
-
todo_agent/infrastructure/calendar_utils.py,sha256=HmF0ykXF_6GbdoJvZLIv6fKwT6ipixoywdTMkIXmkGU,1871
|
10
|
-
todo_agent/infrastructure/config.py,sha256=zyp6qOlg1nN_awphivlgGNBE6fL0Hf66YgvWxR8ldyQ,2117
|
11
|
-
todo_agent/infrastructure/inference.py,sha256=T_xwSd2oB5CsPKExJoQ_RahpMB4U0PKIOUMR0vQyE5I,11883
|
12
|
-
todo_agent/infrastructure/llm_client.py,sha256=ZoObyqaRP6i_eqGYGfJWGeWTJ-VNxpY70ay04vt2v_E,1390
|
13
|
-
todo_agent/infrastructure/llm_client_factory.py,sha256=-tktnVOIF7B45WR7AuLoi7MKnEyuM8lgg1jjc4T1FhM,1929
|
14
|
-
todo_agent/infrastructure/logger.py,sha256=2ykG_0lyzmEGxDF6ZRl1qiTUGDuFeQgzv4Na6vRmXcM,4110
|
15
|
-
todo_agent/infrastructure/ollama_client.py,sha256=RVgHqX37k7q5xEaEXdhcCv2HYQiszs1QV39RxFFMIas,5902
|
16
|
-
todo_agent/infrastructure/openrouter_client.py,sha256=2Ysf69z265dgkgDMLJR92v26-32DkuSAqKSN-ZCEX_Y,6948
|
17
|
-
todo_agent/infrastructure/todo_shell.py,sha256=0-GT_ReYMPCujy1KrB5PEQ98fbIZJm9-sVre5iCkFYE,17633
|
18
|
-
todo_agent/infrastructure/token_counter.py,sha256=PCKheOVJbp1s89yhh_i6iKgURMt9mVoYkwjQJCc2xCE,4958
|
19
|
-
todo_agent/infrastructure/prompts/system_prompt.txt,sha256=sin8wOFrDntTgKL1udlwE3iNxf_Pk1H1ZGzxGon23Wc,18931
|
20
|
-
todo_agent/interface/__init__.py,sha256=vDD3rQu4qDkpvVwGVtkDzE1M4IiSHYzTif4GbYSFWaI,457
|
21
|
-
todo_agent/interface/cli.py,sha256=rSHJjSlKEV8dirCcMT1zX55i8raMOE_3IB6CUFGLgiI,12094
|
22
|
-
todo_agent/interface/formatters.py,sha256=DiQLemndiuFWjLcBRPpu1wVnJcoYAFP8t_fJstOgaDs,18918
|
23
|
-
todo_agent/interface/tools.py,sha256=nPO4Sx-JlRUv0-JTzg6caSdDr7tGLGagMvEqblnDJfU,44364
|
24
|
-
todo_agent-0.3.1.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
25
|
-
todo_agent-0.3.1.dist-info/METADATA,sha256=HXdjiFn4ELWARfPjhQjpLY8lx2tiHezZ7ylkvQ8EXsI,10134
|
26
|
-
todo_agent-0.3.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
27
|
-
todo_agent-0.3.1.dist-info/entry_points.txt,sha256=4W7LrCib6AXP5IZDwWRht8S5gutLu5oNfTJHGbt4oHs,52
|
28
|
-
todo_agent-0.3.1.dist-info/top_level.txt,sha256=a65mlPIhPZHuq2bRIi_sCMAIJsUddvXt171OBF6r6co,11
|
29
|
-
todo_agent-0.3.1.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|