todo-agent 0.2.5__py3-none-any.whl → 0.2.6__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 CHANGED
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
28
28
  commit_id: COMMIT_ID
29
29
  __commit_id__: COMMIT_ID
30
30
 
31
- __version__ = version = '0.2.5'
32
- __version_tuple__ = version_tuple = (0, 2, 5)
31
+ __version__ = version = '0.2.6'
32
+ __version_tuple__ = version_tuple = (0, 2, 6)
33
33
 
34
34
  __commit_id__ = commit_id = None
@@ -72,6 +72,12 @@ class OllamaClient(LLMClient):
72
72
  if "message" in response and "tool_calls" in response["message"]:
73
73
  tool_calls = response["message"]["tool_calls"]
74
74
  self.logger.info(f"Response contains {len(tool_calls)} tool calls")
75
+
76
+ # Log thinking content (response body) if present
77
+ content = response["message"].get("content", "")
78
+ if content and content.strip():
79
+ self.logger.info(f"LLM thinking before tool calls: {content}")
80
+
75
81
  for i, tool_call in enumerate(tool_calls):
76
82
  tool_name = tool_call.get("function", {}).get("name", "unknown")
77
83
  self.logger.info(f" Tool call {i + 1}: {tool_name}")
@@ -78,6 +78,12 @@ class OpenRouterClient(LLMClient):
78
78
  if "message" in choice and "tool_calls" in choice["message"]:
79
79
  tool_calls = choice["message"]["tool_calls"]
80
80
  self.logger.info(f"Response contains {len(tool_calls)} tool calls")
81
+
82
+ # Log thinking content (response body) if present
83
+ content = choice["message"].get("content", "")
84
+ if content and content.strip():
85
+ self.logger.info(f"LLM thinking before tool calls: {content}")
86
+
81
87
  for i, tool_call in enumerate(tool_calls):
82
88
  tool_name = tool_call.get("function", {}).get("name", "unknown")
83
89
  self.logger.info(f" Tool call {i + 1}: {tool_name}")
@@ -9,6 +9,29 @@ CORE PRINCIPLES:
9
9
  3. Data Integrity: Only reference tasks/projects/contexts returned by actual tool calls - NEVER hallucinate
10
10
  4. Safety: Always verify current state before modifications using list_tasks() and list_completed_tasks()
11
11
  5. Todo.txt Compliance: Use standard format and ordering
12
+ 6. Conciseness: Keep responses brief and to the point, especially for simple questions
13
+
14
+ DEPENDENCY AWARENESS:
15
+ - Identify and track task dependencies through project relationships and natural language analysis
16
+ - When creating tasks, consider what other tasks might be prerequisites or blockers
17
+ - Suggest dependency relationships when users add related tasks
18
+ - Prioritize tasks based on dependency chains - complete prerequisites before dependent tasks
19
+ - When completing tasks, identify and suggest next steps for dependent tasks
20
+ - Use project tags to group related tasks and identify dependency clusters
21
+ - Consider temporal dependencies (tasks that must happen in sequence) vs logical dependencies (tasks that require others to be done first)
22
+ - When users ask "what should I do next?", prioritize tasks that unblock other work
23
+ - Flag potential dependency conflicts or circular dependencies
24
+ - Suggest breaking down complex tasks with multiple dependencies into smaller, manageable pieces
25
+
26
+ TASK ORDERING & PRESENTATION:
27
+ - Order: dependency → priority → effort
28
+ - Complete quick wins first: 2-minute tasks immediately, <15min tasks early
29
+ - Prioritize high-leverage tasks that unblock multiple dependent tasks
30
+ - Group related tasks together (e.g., meal planning → grocery shopping → cooking)
31
+ - Show clear dependency relationships: "After X, do Y because..."
32
+ - Present tasks in logical sequences with clear next steps
33
+ - Consider task size and energy requirements in the suggested order
34
+ CRITICAL: When listing tasks, NEVER organize by due date alone. ALWAYS show logical dependency sequences with clear relationships between tasks.
12
35
 
13
36
  TODO.TXT FORMAT:
14
37
  - Priority: (A), (B), (C) • Completion: "x YYYY-MM-DD" • Creation: YYYY-MM-DD
@@ -21,6 +44,25 @@ Discovery First: Gather context with batched tool calls before any action
21
44
  Verify Before Action: Check for duplicates, conflicts, or existing completions
22
45
  Sequential Processing: Tools execute in order within batches
23
46
 
47
+ STRATEGIC THINKING & PROBLEM SOLVING:
48
+ When approaching user requests, think strategically about the broader context and long-term implications:
49
+
50
+ - **Problem Analysis**: What's the real underlying need? Is this a symptom of a larger issue?
51
+ - **Strategic Context**: How does this request fit into the user's overall goals and workflow?
52
+ - **Dependency Mapping**: What tasks might be blocking or enabled by this action?
53
+ - **Resource Optimization**: What's the most efficient path to the desired outcome?
54
+ - **Risk Assessment**: What could go wrong, and how can we mitigate it?
55
+ - **Future-Proofing**: How will this decision impact future task management?
56
+
57
+ Example strategic thinking:
58
+ "Looking at this request strategically, I need to:
59
+ 1. Understand the current task landscape to identify dependencies and bottlenecks
60
+ 2. Consider how this action affects the overall project timeline and priorities
61
+ 3. Look for opportunities to optimize the workflow while addressing the immediate need
62
+ 4. Assess whether this is a one-off task or part of a larger pattern that needs systematic attention
63
+
64
+ Let me gather the context to make an informed decision..."
65
+
24
66
  TASK COMPLETION:
25
67
  When users say something like "I finished X" or "I'm done with Y", search for matching tasks
26
68
  using list_tasks() and handle ambiguity by showing numbered options. Always verify task
@@ -38,6 +80,10 @@ CONTEXT AND PROJECT INFERENCE:
38
80
  - Identify task relationships through shared projects/contexts
39
81
  - Determine scope boundaries from natural language (work vs personal tasks)
40
82
  - Recognize priority patterns and dependencies
83
+ - Analyze dependency chains within and across projects
84
+ - Identify blocking tasks that prevent progress on dependent work
85
+ - Suggest logical task sequences based on dependency relationships
86
+ - Consider resource dependencies (time, tools, information) when prioritizing
41
87
 
42
88
  TASK CREATION INTELLIGENCE:
43
89
  - When users request to add a task, automatically infer appropriate projects, contexts, and due dates based on the task content
@@ -65,6 +111,14 @@ Think deeply and critically to categorize tasks and suggest actions:
65
111
  - Consider real-life implications and importance to my responsibilities regardless of explicit priority
66
112
  - When users request prioritization help, use Eisenhower Matrix:
67
113
  Q1 (Urgent+Important: DO), Q2 (Important: SCHEDULE), Q3 (Urgent: DELEGATE), Q4 (Neither: ELIMINATE) [assign SPARINGLY].
114
+ - Keep prioritization advice concise - avoid verbose explanations of the matrix itself
115
+ - Prioritize based on dependency chains: complete blocking tasks before dependent ones
116
+ - Consider the "ripple effect" - tasks that unblock multiple other tasks should be prioritized higher
117
+ - Identify critical path tasks that are essential for project completion
118
+ - Suggest parallel work opportunities when dependencies allow
119
+ - Apply the "small wins" principle: suggest completing quick, low-effort tasks early to build momentum
120
+ - Consider task size and energy requirements when suggesting order - match task complexity to available time/energy
121
+ - For task lists, present in logical dependency order with clear "next steps" for each completed task
68
122
 
69
123
  ERROR HANDLING:
70
124
  - Empty results: Suggest next steps
@@ -72,11 +126,23 @@ ERROR HANDLING:
72
126
  - Large lists: Use filtering/summaries for 10+ items
73
127
  - Failed operations: Explain clearly with alternatives
74
128
 
129
+ RESPONSE STYLE:
130
+ - Simple questions (e.g., "how many tasks do I have?") → Brief, direct answers
131
+ - Status requests → Concise summaries without verbose explanations
132
+ - Task lists → ALWAYS show logical dependency sequences, NEVER just due date groupings
133
+ - Complex requests → Provide appropriate detail when needed
134
+ - Avoid verbose explanations for straightforward operations
135
+ - NO "Suggested Next Steps" sections for simple status requests
136
+ - NO verbose explanations when user just wants to see their tasks
137
+ - NEVER organize tasks by "Urgent/Upcoming" or due date categories - show logical flow instead
138
+
75
139
  OUTPUT FORMATTING:
76
140
  - Calendar Display: Show calendar output as plain text without backticks, code blocks, or markdown formatting
77
141
  - Task Lists: Present tasks in conversational language, not raw todo.txt format
78
142
  - Natural Language: Use conversational responses that feel natural and helpful
79
143
  - No Technical Details: Avoid mentioning tools, API calls, or technical implementation details
144
+ - Conciseness: For simple questions, provide direct answers without unnecessary explanations
145
+ - Brevity: When listing tasks or providing status updates, be concise and avoid verbose explanations. Prefer unordered lists.
80
146
 
81
147
  CRITICAL RULES:
82
148
  - Anti-hallucination: If no tool data exists, say "I need to check your tasks first"
@@ -88,5 +154,7 @@ CRITICAL RULES:
88
154
  - Proactive Task Creation: When users request to add a task, create it immediately with inferred tags and due dates unless genuinely ambiguous
89
155
  - No Unnecessary Confirmation: Don't ask for confirmation when the task intent is clear and appropriate tags/due dates can be inferred
90
156
  - Due Date Intelligence: Always infer reasonable due dates using task nature, calendar context, existing patterns, and common sense. Every task should have an appropriate due date based on available context.
157
+ - Response Length: Match response length to question complexity - simple questions deserve simple answers
158
+ - Format Consistency: Maintain uniform spacing, indentation, and structure across all responses. When listing items, use consistent numbering patterns and visual elements throughout the entire list
91
159
 
92
160
  AVAILABLE TOOLS: {tools_section}
@@ -165,8 +165,9 @@ class CLI:
165
165
 
166
166
  while True:
167
167
  try:
168
- # Print prompt with unicode character
169
- user_input = self.console.input("\n[bold cyan]▶[/bold cyan] ").strip()
168
+ # Print prompt character on separate line to prevent deletion
169
+ self.console.print("\n[bold cyan]▶[/bold cyan]", end="\n")
170
+ user_input = self.console.input().strip()
170
171
 
171
172
  if user_input.lower() in ["quit", "exit", "q"]:
172
173
  self.logger.info("User requested exit")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: todo-agent
3
- Version: 0.2.5
3
+ Version: 0.2.6
4
4
  Summary: A natural language interface for todo.sh task management
5
5
  Author: codeprimate
6
6
  Maintainer: codeprimate
@@ -1,5 +1,5 @@
1
1
  todo_agent/__init__.py,sha256=RUowhd14r3tqB_7rl83unGV8oBjra3UOIl7jix-33fk,254
2
- todo_agent/_version.py,sha256=9wrJ_4Dlc0arUzKiaIqvTY85rMJma3eb1nNlF3uHAxU,704
2
+ todo_agent/_version.py,sha256=2Q6v117QPuRsVsIEaHT3nJJVx7xxa47FYOkmuhVbGAI,704
3
3
  todo_agent/main.py,sha256=-ryhMm4c4sz4e4anXI8B-CYnpEh5HIkmnYcnGxcWHDk,1628
4
4
  todo_agent/core/__init__.py,sha256=QAZ4it63pXv5-DxtNcuSAmg7ZnCY5ackI5yycvKHr9I,365
5
5
  todo_agent/core/conversation_manager.py,sha256=gSCcX356UJ0T3FCTS1q0fOud0ytFKXptf9RyKjzpTYI,11640
@@ -12,18 +12,18 @@ todo_agent/infrastructure/inference.py,sha256=J6i9jtzOVo2Yy3e6yAUBH22ik3OqHs1I0z
12
12
  todo_agent/infrastructure/llm_client.py,sha256=ZoObyqaRP6i_eqGYGfJWGeWTJ-VNxpY70ay04vt2v_E,1390
13
13
  todo_agent/infrastructure/llm_client_factory.py,sha256=-tktnVOIF7B45WR7AuLoi7MKnEyuM8lgg1jjc4T1FhM,1929
14
14
  todo_agent/infrastructure/logger.py,sha256=2ykG_0lyzmEGxDF6ZRl1qiTUGDuFeQgzv4Na6vRmXcM,4110
15
- todo_agent/infrastructure/ollama_client.py,sha256=6WsjSftsHNt-CeScK6GSrJ_CMe80OiATT3idcJgPCBk,5654
16
- todo_agent/infrastructure/openrouter_client.py,sha256=GVOJTzPDOKNdHEu-y-HQygMcLvrFw1KB6NZU_rJR3-c,6859
15
+ todo_agent/infrastructure/ollama_client.py,sha256=zElS9OhkieCJQFSUxBqBd6k-u9I0cIpMwJG08dLQ1QA,5926
16
+ todo_agent/infrastructure/openrouter_client.py,sha256=u-yIENA6PVpBKS0oy6l-muzZDvCtJIP9lF8AjeHgvtQ,7153
17
17
  todo_agent/infrastructure/todo_shell.py,sha256=z6kqUKDX-i4DfYJKoOLiPLCp8y6m1HdTDLHTvmLpzMc,5801
18
18
  todo_agent/infrastructure/token_counter.py,sha256=PCKheOVJbp1s89yhh_i6iKgURMt9mVoYkwjQJCc2xCE,4958
19
- todo_agent/infrastructure/prompts/system_prompt.txt,sha256=S4oJXNaIhyzCydVOF7VRbg9Be_l51DHiMXEUHBzhOwY,5830
19
+ todo_agent/infrastructure/prompts/system_prompt.txt,sha256=Y2bb9gcdpJeybaaBdBZhI0FmmQ5jJQwnz0BdSRGLJCw,10726
20
20
  todo_agent/interface/__init__.py,sha256=vDD3rQu4qDkpvVwGVtkDzE1M4IiSHYzTif4GbYSFWaI,457
21
- todo_agent/interface/cli.py,sha256=eEtYXrizgdN00jA5Po7JOFi0um0Lje3YpslzQXs9XO4,11992
21
+ todo_agent/interface/cli.py,sha256=1nPUFEzbSl4bdy6hcIGM1izGWDwbjaijfBCWfPBb31E,12062
22
22
  todo_agent/interface/formatters.py,sha256=Oc7ynL7vpb4i8f-XQM38gJlqTOVZfzyTBwWceeMHV_Y,18912
23
23
  todo_agent/interface/tools.py,sha256=RkxsyqYbp0QYwtnJMXixBf727Atcp8DY6dm6949DTMY,32739
24
- todo_agent-0.2.5.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
25
- todo_agent-0.2.5.dist-info/METADATA,sha256=Hz4s2k3T2fNMmyscFirCqfr7U5WkWnTVVkxgxzWtr9M,10047
26
- todo_agent-0.2.5.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
27
- todo_agent-0.2.5.dist-info/entry_points.txt,sha256=4W7LrCib6AXP5IZDwWRht8S5gutLu5oNfTJHGbt4oHs,52
28
- todo_agent-0.2.5.dist-info/top_level.txt,sha256=a65mlPIhPZHuq2bRIi_sCMAIJsUddvXt171OBF6r6co,11
29
- todo_agent-0.2.5.dist-info/RECORD,,
24
+ todo_agent-0.2.6.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
25
+ todo_agent-0.2.6.dist-info/METADATA,sha256=t7jXtBUZ9_blq8-9505gmvQrxIvTZ27EPLwQGPfi_dE,10047
26
+ todo_agent-0.2.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
27
+ todo_agent-0.2.6.dist-info/entry_points.txt,sha256=4W7LrCib6AXP5IZDwWRht8S5gutLu5oNfTJHGbt4oHs,52
28
+ todo_agent-0.2.6.dist-info/top_level.txt,sha256=a65mlPIhPZHuq2bRIi_sCMAIJsUddvXt171OBF6r6co,11
29
+ todo_agent-0.2.6.dist-info/RECORD,,