vector-task-mcp 1.2.5__tar.gz → 1.2.7__tar.gz
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.
- {vector_task_mcp-1.2.5 → vector_task_mcp-1.2.7}/PKG-INFO +1 -1
- {vector_task_mcp-1.2.5 → vector_task_mcp-1.2.7}/pyproject.toml +1 -1
- {vector_task_mcp-1.2.5 → vector_task_mcp-1.2.7}/src/task_store.py +31 -24
- {vector_task_mcp-1.2.5 → vector_task_mcp-1.2.7}/vector_task_mcp.egg-info/PKG-INFO +1 -1
- {vector_task_mcp-1.2.5 → vector_task_mcp-1.2.7}/.mcp.json +0 -0
- {vector_task_mcp-1.2.5 → vector_task_mcp-1.2.7}/.python-version +0 -0
- {vector_task_mcp-1.2.5 → vector_task_mcp-1.2.7}/CLAUDE.md +0 -0
- {vector_task_mcp-1.2.5 → vector_task_mcp-1.2.7}/LICENSE +0 -0
- {vector_task_mcp-1.2.5 → vector_task_mcp-1.2.7}/MANIFEST.in +0 -0
- {vector_task_mcp-1.2.5 → vector_task_mcp-1.2.7}/README.md +0 -0
- {vector_task_mcp-1.2.5 → vector_task_mcp-1.2.7}/claude-desktop-config.example.json +0 -0
- {vector_task_mcp-1.2.5 → vector_task_mcp-1.2.7}/main.py +0 -0
- {vector_task_mcp-1.2.5 → vector_task_mcp-1.2.7}/requirements.txt +0 -0
- {vector_task_mcp-1.2.5 → vector_task_mcp-1.2.7}/run-arm64.sh +0 -0
- {vector_task_mcp-1.2.5 → vector_task_mcp-1.2.7}/setup.cfg +0 -0
- {vector_task_mcp-1.2.5 → vector_task_mcp-1.2.7}/src/__init__.py +0 -0
- {vector_task_mcp-1.2.5 → vector_task_mcp-1.2.7}/src/embeddings.py +0 -0
- {vector_task_mcp-1.2.5 → vector_task_mcp-1.2.7}/src/models.py +0 -0
- {vector_task_mcp-1.2.5 → vector_task_mcp-1.2.7}/src/security.py +0 -0
- {vector_task_mcp-1.2.5 → vector_task_mcp-1.2.7}/tests/test_task_store.py +0 -0
- {vector_task_mcp-1.2.5 → vector_task_mcp-1.2.7}/vector_task_mcp.egg-info/SOURCES.txt +0 -0
- {vector_task_mcp-1.2.5 → vector_task_mcp-1.2.7}/vector_task_mcp.egg-info/dependency_links.txt +0 -0
- {vector_task_mcp-1.2.5 → vector_task_mcp-1.2.7}/vector_task_mcp.egg-info/entry_points.txt +0 -0
- {vector_task_mcp-1.2.5 → vector_task_mcp-1.2.7}/vector_task_mcp.egg-info/requires.txt +0 -0
- {vector_task_mcp-1.2.5 → vector_task_mcp-1.2.7}/vector_task_mcp.egg-info/top_level.txt +0 -0
|
@@ -236,10 +236,35 @@ class TaskStore:
|
|
|
236
236
|
# Recursively check grandparent
|
|
237
237
|
self._propagate_completed_to_parents(conn, parent_id)
|
|
238
238
|
|
|
239
|
+
def _propagate_pending_to_parents(self, conn: sqlite3.Connection, task_id: int) -> None:
|
|
240
|
+
"""
|
|
241
|
+
Recursively propagate 'pending' status to parent tasks when ANY child returns to pending.
|
|
242
|
+
|
|
243
|
+
Rules:
|
|
244
|
+
- Parent gets 'pending' when ANY child becomes 'pending'
|
|
245
|
+
- Recursively propagates up the parent chain
|
|
246
|
+
|
|
247
|
+
Args:
|
|
248
|
+
conn: Active database connection (must be within transaction)
|
|
249
|
+
task_id: Current task ID whose status just changed to 'pending'
|
|
250
|
+
"""
|
|
251
|
+
# Get parent_id of current task
|
|
252
|
+
cursor = conn.execute('SELECT parent_id FROM tasks WHERE id = ?', (task_id,))
|
|
253
|
+
row = cursor.fetchone()
|
|
254
|
+
if not row or not row[0]: # No parent
|
|
255
|
+
return
|
|
256
|
+
|
|
257
|
+
parent_id = row[0]
|
|
258
|
+
|
|
259
|
+
# Set parent to 'pending' unconditionally
|
|
260
|
+
conn.execute('UPDATE tasks SET status = ? WHERE id = ?', ('pending', parent_id))
|
|
261
|
+
# Recursively propagate to grandparent
|
|
262
|
+
self._propagate_pending_to_parents(conn, parent_id)
|
|
263
|
+
|
|
239
264
|
def _start_time_session(self, conn: sqlite3.Connection, task_id: int, start_status: str) -> None:
|
|
240
265
|
"""
|
|
241
266
|
Create new time session record in task_time_log table.
|
|
242
|
-
|
|
267
|
+
Only creates session for the specified task (no parent propagation).
|
|
243
268
|
|
|
244
269
|
Args:
|
|
245
270
|
conn: Active database connection (must be within transaction)
|
|
@@ -256,21 +281,10 @@ class TaskStore:
|
|
|
256
281
|
except Exception as e:
|
|
257
282
|
raise RuntimeError(f"Failed to start time session for task {task_id}: {e}")
|
|
258
283
|
|
|
259
|
-
# Get parent_id of current task
|
|
260
|
-
cursor = conn.execute('SELECT parent_id FROM tasks WHERE id = ?', (task_id,))
|
|
261
|
-
row = cursor.fetchone()
|
|
262
|
-
if not row or not row[0]: # No parent
|
|
263
|
-
return
|
|
264
|
-
|
|
265
|
-
parent_id = row[0]
|
|
266
|
-
|
|
267
|
-
# Recursively propagate session start to parent
|
|
268
|
-
self._start_time_session(conn, parent_id, start_status)
|
|
269
|
-
|
|
270
284
|
def _finish_time_session(self, conn: sqlite3.Connection, task_id: int, time_spent: float, finish_status: str) -> None:
|
|
271
285
|
"""
|
|
272
286
|
Complete existing time session record in task_time_log table.
|
|
273
|
-
|
|
287
|
+
Only completes session for the specified task (no parent propagation).
|
|
274
288
|
|
|
275
289
|
Args:
|
|
276
290
|
conn: Active database connection (must be within transaction)
|
|
@@ -303,17 +317,6 @@ class TaskStore:
|
|
|
303
317
|
except Exception as e:
|
|
304
318
|
raise RuntimeError(f"Failed to finish time session for task {task_id}: {e}")
|
|
305
319
|
|
|
306
|
-
# Get parent_id of current task
|
|
307
|
-
cursor = conn.execute('SELECT parent_id FROM tasks WHERE id = ?', (task_id,))
|
|
308
|
-
row = cursor.fetchone()
|
|
309
|
-
if not row or not row[0]: # No parent
|
|
310
|
-
return
|
|
311
|
-
|
|
312
|
-
parent_id = row[0]
|
|
313
|
-
|
|
314
|
-
# Recursively propagate session finish to parent with same time_spent and finish_status
|
|
315
|
-
self._finish_time_session(conn, parent_id, time_spent, finish_status)
|
|
316
|
-
|
|
317
320
|
def _get_status_history(self, conn: sqlite3.Connection, task_id: int, limit: int = 5) -> List[Dict[str, Any]]:
|
|
318
321
|
"""
|
|
319
322
|
Get status transition history from task_time_log.
|
|
@@ -872,6 +875,10 @@ class TaskStore:
|
|
|
872
875
|
if status_changed and new_status in TaskStatus.finish_statuses():
|
|
873
876
|
self._propagate_completed_to_parents(conn, task_id)
|
|
874
877
|
|
|
878
|
+
# Propagate 'pending' status to parent when ANY child returns to pending
|
|
879
|
+
if status_changed and new_status == 'pending':
|
|
880
|
+
self._propagate_pending_to_parents(conn, task_id)
|
|
881
|
+
|
|
875
882
|
conn.commit()
|
|
876
883
|
|
|
877
884
|
# Fetch updated task
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{vector_task_mcp-1.2.5 → vector_task_mcp-1.2.7}/vector_task_mcp.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|