vector-task-mcp 1.2.4__tar.gz → 1.2.6__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.4 → vector_task_mcp-1.2.6}/PKG-INFO +1 -1
- {vector_task_mcp-1.2.4 → vector_task_mcp-1.2.6}/pyproject.toml +1 -1
- {vector_task_mcp-1.2.4 → vector_task_mcp-1.2.6}/src/task_store.py +68 -0
- {vector_task_mcp-1.2.4 → vector_task_mcp-1.2.6}/vector_task_mcp.egg-info/PKG-INFO +1 -1
- {vector_task_mcp-1.2.4 → vector_task_mcp-1.2.6}/.mcp.json +0 -0
- {vector_task_mcp-1.2.4 → vector_task_mcp-1.2.6}/.python-version +0 -0
- {vector_task_mcp-1.2.4 → vector_task_mcp-1.2.6}/CLAUDE.md +0 -0
- {vector_task_mcp-1.2.4 → vector_task_mcp-1.2.6}/LICENSE +0 -0
- {vector_task_mcp-1.2.4 → vector_task_mcp-1.2.6}/MANIFEST.in +0 -0
- {vector_task_mcp-1.2.4 → vector_task_mcp-1.2.6}/README.md +0 -0
- {vector_task_mcp-1.2.4 → vector_task_mcp-1.2.6}/claude-desktop-config.example.json +0 -0
- {vector_task_mcp-1.2.4 → vector_task_mcp-1.2.6}/main.py +0 -0
- {vector_task_mcp-1.2.4 → vector_task_mcp-1.2.6}/requirements.txt +0 -0
- {vector_task_mcp-1.2.4 → vector_task_mcp-1.2.6}/run-arm64.sh +0 -0
- {vector_task_mcp-1.2.4 → vector_task_mcp-1.2.6}/setup.cfg +0 -0
- {vector_task_mcp-1.2.4 → vector_task_mcp-1.2.6}/src/__init__.py +0 -0
- {vector_task_mcp-1.2.4 → vector_task_mcp-1.2.6}/src/embeddings.py +0 -0
- {vector_task_mcp-1.2.4 → vector_task_mcp-1.2.6}/src/models.py +0 -0
- {vector_task_mcp-1.2.4 → vector_task_mcp-1.2.6}/src/security.py +0 -0
- {vector_task_mcp-1.2.4 → vector_task_mcp-1.2.6}/tests/test_task_store.py +0 -0
- {vector_task_mcp-1.2.4 → vector_task_mcp-1.2.6}/vector_task_mcp.egg-info/SOURCES.txt +0 -0
- {vector_task_mcp-1.2.4 → vector_task_mcp-1.2.6}/vector_task_mcp.egg-info/dependency_links.txt +0 -0
- {vector_task_mcp-1.2.4 → vector_task_mcp-1.2.6}/vector_task_mcp.egg-info/entry_points.txt +0 -0
- {vector_task_mcp-1.2.4 → vector_task_mcp-1.2.6}/vector_task_mcp.egg-info/requires.txt +0 -0
- {vector_task_mcp-1.2.4 → vector_task_mcp-1.2.6}/vector_task_mcp.egg-info/top_level.txt +0 -0
|
@@ -201,6 +201,66 @@ class TaskStore:
|
|
|
201
201
|
# Recursively propagate to grandparent
|
|
202
202
|
self._propagate_time_to_parents(conn, parent_id, time_delta)
|
|
203
203
|
|
|
204
|
+
def _propagate_completed_to_parents(self, conn: sqlite3.Connection, task_id: int) -> None:
|
|
205
|
+
"""
|
|
206
|
+
Recursively propagate 'completed' status to parent tasks when ALL children are finished.
|
|
207
|
+
|
|
208
|
+
Rules:
|
|
209
|
+
- Parent gets 'completed' ONLY when ALL children are in finish statuses (completed/tested/validated)
|
|
210
|
+
- Recursively propagates up the parent chain with same check at each level
|
|
211
|
+
|
|
212
|
+
Args:
|
|
213
|
+
conn: Active database connection (must be within transaction)
|
|
214
|
+
task_id: Current task ID whose status just changed to a finish status
|
|
215
|
+
"""
|
|
216
|
+
# Get parent_id of current task
|
|
217
|
+
cursor = conn.execute('SELECT parent_id FROM tasks WHERE id = ?', (task_id,))
|
|
218
|
+
row = cursor.fetchone()
|
|
219
|
+
if not row or not row[0]: # No parent
|
|
220
|
+
return
|
|
221
|
+
|
|
222
|
+
parent_id = row[0]
|
|
223
|
+
finish_statuses = TaskStatus.finish_statuses()
|
|
224
|
+
|
|
225
|
+
# Check if ALL children of parent are in finish statuses
|
|
226
|
+
placeholders = ','.join('?' * len(finish_statuses))
|
|
227
|
+
cursor = conn.execute(f'''
|
|
228
|
+
SELECT COUNT(*) FROM tasks
|
|
229
|
+
WHERE parent_id = ? AND status NOT IN ({placeholders})
|
|
230
|
+
''', (parent_id, *finish_statuses))
|
|
231
|
+
non_finished = cursor.fetchone()[0]
|
|
232
|
+
|
|
233
|
+
if non_finished == 0:
|
|
234
|
+
# All children finished → set parent to 'completed'
|
|
235
|
+
conn.execute('UPDATE tasks SET status = ? WHERE id = ?', ('completed', parent_id))
|
|
236
|
+
# Recursively check grandparent
|
|
237
|
+
self._propagate_completed_to_parents(conn, parent_id)
|
|
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
|
+
|
|
204
264
|
def _start_time_session(self, conn: sqlite3.Connection, task_id: int, start_status: str) -> None:
|
|
205
265
|
"""
|
|
206
266
|
Create new time session record in task_time_log table.
|
|
@@ -833,6 +893,14 @@ class TaskStore:
|
|
|
833
893
|
elif old_status == 'in_progress' and new_status != 'in_progress':
|
|
834
894
|
self._finish_time_session(conn, task_id, time_delta, new_status)
|
|
835
895
|
|
|
896
|
+
# Propagate 'completed' status to parent when ALL children are finished
|
|
897
|
+
if status_changed and new_status in TaskStatus.finish_statuses():
|
|
898
|
+
self._propagate_completed_to_parents(conn, task_id)
|
|
899
|
+
|
|
900
|
+
# Propagate 'pending' status to parent when ANY child returns to pending
|
|
901
|
+
if status_changed and new_status == 'pending':
|
|
902
|
+
self._propagate_pending_to_parents(conn, task_id)
|
|
903
|
+
|
|
836
904
|
conn.commit()
|
|
837
905
|
|
|
838
906
|
# 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.4 → vector_task_mcp-1.2.6}/vector_task_mcp.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|