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.
Files changed (25) hide show
  1. {vector_task_mcp-1.2.5 → vector_task_mcp-1.2.7}/PKG-INFO +1 -1
  2. {vector_task_mcp-1.2.5 → vector_task_mcp-1.2.7}/pyproject.toml +1 -1
  3. {vector_task_mcp-1.2.5 → vector_task_mcp-1.2.7}/src/task_store.py +31 -24
  4. {vector_task_mcp-1.2.5 → vector_task_mcp-1.2.7}/vector_task_mcp.egg-info/PKG-INFO +1 -1
  5. {vector_task_mcp-1.2.5 → vector_task_mcp-1.2.7}/.mcp.json +0 -0
  6. {vector_task_mcp-1.2.5 → vector_task_mcp-1.2.7}/.python-version +0 -0
  7. {vector_task_mcp-1.2.5 → vector_task_mcp-1.2.7}/CLAUDE.md +0 -0
  8. {vector_task_mcp-1.2.5 → vector_task_mcp-1.2.7}/LICENSE +0 -0
  9. {vector_task_mcp-1.2.5 → vector_task_mcp-1.2.7}/MANIFEST.in +0 -0
  10. {vector_task_mcp-1.2.5 → vector_task_mcp-1.2.7}/README.md +0 -0
  11. {vector_task_mcp-1.2.5 → vector_task_mcp-1.2.7}/claude-desktop-config.example.json +0 -0
  12. {vector_task_mcp-1.2.5 → vector_task_mcp-1.2.7}/main.py +0 -0
  13. {vector_task_mcp-1.2.5 → vector_task_mcp-1.2.7}/requirements.txt +0 -0
  14. {vector_task_mcp-1.2.5 → vector_task_mcp-1.2.7}/run-arm64.sh +0 -0
  15. {vector_task_mcp-1.2.5 → vector_task_mcp-1.2.7}/setup.cfg +0 -0
  16. {vector_task_mcp-1.2.5 → vector_task_mcp-1.2.7}/src/__init__.py +0 -0
  17. {vector_task_mcp-1.2.5 → vector_task_mcp-1.2.7}/src/embeddings.py +0 -0
  18. {vector_task_mcp-1.2.5 → vector_task_mcp-1.2.7}/src/models.py +0 -0
  19. {vector_task_mcp-1.2.5 → vector_task_mcp-1.2.7}/src/security.py +0 -0
  20. {vector_task_mcp-1.2.5 → vector_task_mcp-1.2.7}/tests/test_task_store.py +0 -0
  21. {vector_task_mcp-1.2.5 → vector_task_mcp-1.2.7}/vector_task_mcp.egg-info/SOURCES.txt +0 -0
  22. {vector_task_mcp-1.2.5 → vector_task_mcp-1.2.7}/vector_task_mcp.egg-info/dependency_links.txt +0 -0
  23. {vector_task_mcp-1.2.5 → vector_task_mcp-1.2.7}/vector_task_mcp.egg-info/entry_points.txt +0 -0
  24. {vector_task_mcp-1.2.5 → vector_task_mcp-1.2.7}/vector_task_mcp.egg-info/requires.txt +0 -0
  25. {vector_task_mcp-1.2.5 → vector_task_mcp-1.2.7}/vector_task_mcp.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: vector-task-mcp
3
- Version: 1.2.5
3
+ Version: 1.2.7
4
4
  Summary: A secure, vector-based task management server for Claude Desktop using sqlite-vec and sentence-transformers
5
5
  Author-email: Xsaven <xsaven@gmail.com>
6
6
  License: MIT
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "vector-task-mcp"
3
- version = "1.2.5"
3
+ version = "1.2.7"
4
4
  description = "A secure, vector-based task management server for Claude Desktop using sqlite-vec and sentence-transformers"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10"
@@ -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
- Recursively propagates session start to parent tasks.
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
- Recursively propagates session finish to parent tasks with same time_spent.
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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: vector-task-mcp
3
- Version: 1.2.5
3
+ Version: 1.2.7
4
4
  Summary: A secure, vector-based task management server for Claude Desktop using sqlite-vec and sentence-transformers
5
5
  Author-email: Xsaven <xsaven@gmail.com>
6
6
  License: MIT
File without changes
File without changes