db.sqlite•176 kB
SQLite format 3 @ � + 0 � .j� � ��i�
�M u �<m1+4= �c�tableprojectsprojectsCREATE TABLE projects (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT UNIQUE NOT NULL,
description TEXT NOT NULL,
status TEXT NOT NULL DEFAULT 'pending',
created_at TIMESTAMP NOT NULL,
updated_at TIMESTAMP NOT NULL
)/C indexsqlite_autoindex_projects_1projects �//�Uviewtodo_item_detailstodo_item_detailsCREATE VIEW todo_item_details AS
SELECT
ti.id,
ti.title,
ti.description,
ti.status,
ti."order",
ti.dependencies,
ti.task_id,
t.name as task_name,
t.project_id,
p.name as project_name,
COUNT(tif.file_id) as file_count,
ti.created_at,
ti.updated_at
FROM todo_items ti
LEFT JOIN tasks t ON ti.task_id = t.id
LEFT JOIN projects p ON t.project_id = p.id
LEFT JOIN todo_item_files tif ON ti.id = tif.todo_item_id
GROUP BY ti.id, ti.title, ti.description, ti.status, ti."order", ti.dependencies, ti.task_id, t.name, t.project_id, p.name, ti.created_at, ti.updated_at�A!!�Qviewtask_statstask_statsCREATE VIEW task_stats AS
SELECT
t.id,
t.name,
t.status,
t."order",
t.dependencies,
t.project_id,
p.name as project_name,
COUNT(ti.id) as total_todo_items,
COUNT(CASE WHEN ti.status = 'completed' THEN 1 END) as completed_todo_items,
COUNT(CASE WHEN ti.status = 'in_progress' THEN 1 END) as active_todo_items,
ROUND(
CASE
WHEN COUNT(ti.id) = 0 THEN 0
ELSE (COUNT(CASE WHEN ti.status = 'completed' THEN 1 END) * 100.0 / COUNT(ti.id))
END, 2
) as completion_percentage,
t.created_at,
t.updated_at
FROM tasks t
LEFT JOIN projects p ON t.project_id = p.id
LEFT JOIN todo_items ti ON t.id = ti.task_id
GROUP BY t.id, t.name, t.status, t."order", t.dependencies, t.project_id, p.name, t.created_at, t.updated_at�''�Oviewproject_statsproject_statsCREATE VIEW project_stats AS
SELECT
p.id,
p.name,
p.status,
COUNT(t.id) as total_tasks,
COUNT(CASE WHEN t.status = 'completed' THEN 1 END) as completed_tasks,
COUNT(CASE WHEN t.status = 'in_progress' THEN 1 END) as active_tasks,
ROUND(
CASE
WHEN COUNT(t.id) = 0 THEN 0
ELSE (COUNT(CASE WHEN t.status = 'completed' THEN 1 END) * 100.0 / COUNT(t.id))
END, 2
) as completion_percentage,
p.created_at,
p.updated_at
FROM projects p
LEFT JOIN tasks t ON p.id = t.project_id
GROUP BY p.id, p.name, p.status, p.created_at, p.updated_at�t9�#triggerupdate_files_timestampfilesCREATE TRIGGER update_files_timestamp
AFTER UPDATE ON files
FOR EACH ROW
WHEN NEW.updated_at = OLD.updated_at
BEGIN
UPDATE files SET updated_at = CURRENT_TIMESTAMP WHERE id = NEW.id;
ENDI)aindexidx_files_pathfilesCREATE INDEX idx_files_path ON files(path)O-iindexidx_files_lockedfilesCREATE INDEX idx_files_locked ON files(locked)=Q+ indexsqlite_autoindex_todo_item_files_1todo_item_files �~++�3tabletodo_item_filestodo_item_filesCREATE TABLE todo_item_files (
todo_item_id INTEGER NOT NULL,
file_id INTEGER NOT NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (todo_item_id, file_id),
FOREIGN KEY (todo_item_id) REFERENCES todo_items(id) ON DELETE CASCADE,
FOREIGN KEY (file_id) REFERENCES files(id) ON DELETE CASCADE
))= indexsqlite_autoindex_files_1files�W�
tablefilesfilesCREATE TABLE files (
id INTEGER PRIMARY KEY AUTOINCREMENT,
path TEXT NOT NULL UNIQUE CHECK(length(trim(path)) > 0),
locked BOOLEAN NOT NULL DEFAULT FALSE,
locked_by TEXT DEFAULT NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
)P++Ytablesqlite_sequencesqlite_sequenceCREATE TABLE sqlite_sequence !
� ��&
� g !CAAaudit-testTesting comprehensive auditpending2025-07-16 12:56:33.8049402025-07-16 12:56:33.804940i 17AAtest-audit-projectTesting audit loggingpending2025-07-16 12:53:11.8380302025-07-16 12:53:11.838030�} �sAAmac-mcpMCP Agent Coordinator Server - A unified server for coordinating multiple autonomous agents with project management, task coordination, file locking, and audit trail functionalitypending2025-07-16 12:28:26.2102902025-07-16 12:28:26.210290m %KAAtest-projectA test project for verificationpending2025-07-16 12:13:56.0278902025-07-16 12:13:56.027890
� � ����� %audit_eventsuprojects
todo_!todo_files!todo_items tasks
� ���� !audit-test1test-audit-projectmac-mcp% test-project
� �B
�
�
� Y #AATest TaskA test taskpending2025-07-16 12:56:38.8602562025-07-16 12:56:38.860256�
E�WAAWeb Dashboard Audit Trail UIAdd audit trail and project completion summary views to the web dashboard, including timeline visualization, filtering capabilities, and detailed completion reports.pending2025-07-16 12:30:08.7097152025-07-16 12:30:08.709715�
I�AAProject Completion Summary APICreate MCP tools and HTTP API endpoints to retrieve comprehensive project completion summaries, including completed tasks/todos with timestamps, agent assignments, and progress analytics.pending2025-07-16 12:30:07.0804732025-07-16 12:30:07.080473�1
E�)AAAudit Logging InfrastructureImplement core audit logging functionality including helper functions to capture status changes, task/todo completions, file lock events, and project milestones. Add audit logging to all existing MCP tools.pending2025-07-16 12:30:05.4093912025-07-16 12:30:05.409391�I
c�= AADatabase Schema Enhancement for Audit TrailCreate a comprehensive audit_events table to track all actions, status changes, and important events with timestamps, agent information, and detailed context. This will enable full traceability of project activities.pending2025-07-16 12:30:03.5583892025-07-16 12:30:03.558389p SAATest TaskA test task to verify functionalitypending2025-07-16 12:13:56.0329142025-07-16 12:13:56.032914
u �T)�i�
�M u �m1+4= �c�tableproje �c/C indexsqlite_autoindex_projects_1projects�c�tableprojectsprojectsCREATE TABLE projects (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT UNIQUE NOT NULL,
description TEXT NOT NULL,
status TEXT NOT NULL DEFAULT 'pending',
created_at TIMESTAMP NOT NULL,
updated_at TIMESTAMP NOT NULL
)�//�Uviewtodo_item_detailstodo_item_detailsCREATE VIEW todo_item_details AS
SELECT
ti.id,
ti.title,
ti.description,
ti.status,
ti."order",
ti.dependencies,
ti.task_id,
t.name as task_name,
t.project_id,
p.name as project_name,
COUNT(tif.file_id) as file_count,
ti.created_at,
ti.updated_at
FROM todo_items ti
LEFT JOIN tasks t ON ti.task_id = t.id
LEFT JOIN projects p ON t.project_id = p.id
LEFT JOIN todo_item_files tif ON ti.id = tif.todo_item_id
GROUP BY ti.id, ti.title, ti.description, ti.status, ti."order", ti.dependencies, ti.task_id, t.name, t.project_id, p.name, ti.created_at, ti.updated_at�A!!�Qviewtask_statstask_statsCREATE VIEW task_stats AS
SELECT
t.id,
t.name,
t.status,
t."order",
t.dependencies,
t.project_id,
p.name as project_name,
COUNT(ti.id) as total_todo_items,
COUNT(CASE WHEN ti.status = 'completed' THEN 1 END) as completed_todo_items,
COUNT(CASE WHEN ti.status = 'in_progress' THEN 1 END) as active_todo_items,
ROUND(
CASE
WHEN COUNT(ti.id) = 0 THEN 0
ELSE (COUNT(CASE WHEN ti.status = 'completed' THEN 1 END) * 100.0 / COUNT(ti.id))
END, 2
) as completion_percentage,
t.created_at,
t.updated_at
FROM tasks t
LEFT JOIN projects p ON t.project_id = p.id
LEFT JOIN todo_items ti ON t.id = ti.task_id
GROUP BY t.id, t.name, t.status, t."order", t.dependencies, t.project_id, p.name, t.created_at, t.updated_at�''�Oviewproject_statsproject_statsCREATE VIEW project_stats AS
SELECT
p.id,
p.name,
p.status,
COUNT(t.id) as total_tasks,
COUNT(CASE WHEN t.status = 'completed' THEN 1 END) as completed_tasks,
COUNT(CASE WHEN t.status = 'in_progress' THEN 1 END) as active_tasks,
ROUND(
CASE
WHEN COUNT(t.id) = 0 THEN 0
ELSE (COUNT(CASE WHEN t.status = 'completed' THEN 1 END) * 100.0 / COUNT(t.id))
END, 2
) as completion_percentage,
p.created_at,
p.updated_at
FROM projects p
LEFT JOIN tasks t ON p.id = t.project_id
GROUP BY p.id, p.name, p.status, p.created_at, p.updated_at�t9�#triggerupdate_files_timestampfilesCREATE TRIGGER update_files_timestamp
AFTER UPDATE ON files
FOR EACH ROW
WHEN NEW.updated_at = OLD.updated_at
BEGIN
UPDATE files SET updated_at = CURRENT_TIMESTAMP WHERE id = NEW.id;
ENDI)aindexidx_files_pathfilesCREATE INDEX idx_files_path ON files(path)O-iindexidx_files_lockedfilesCREATE INDEX idx_files_locked ON files(locked)=Q+ indexsqlite_autoindex_todo_item_files_1todo_item_files �~++�3tabletodo_item_filestodo_item_filesCREATE TABLE todo_item_files (
todo_item_id INTEGER NOT NULL,
file_id INTEGER NOT NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (todo_item_id, file_id),
FOREIGN KEY (todo_item_id) REFERENCES todo_items(id) ON DELETE CASCADE,
FOREIGN KEY (file_id) REFERENCES files(id) ON DELETE CASCADE
))= indexsqlite_autoindex_files_1files�W�
tablefilesfilesCREATE TABLE files (
id INTEGER PRIMARY KEY AUTOINCREMENT,
path TEXT NOT NULL UNIQUE CHECK(length(trim(path)) > 0),
locked BOOLEAN NOT NULL DEFAULT FALSE,
locked_by TEXT DEFAULT NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
)P++Ytablesqlite_sequencesqlite_sequenceCREATE TABLE sqlite_sequence(name,seq)
2 � �nQ#2� �u K�2�Z/ f ['5yindexidx_tasks_project_idtasksCREATE INDEX idx_tasks_project_id ON tasks(project_id)�J%!!�_tablefile_locksfile_locksCREATE TABLE file_locks (
file_path TEXT PRIMARY KEY,
locked_by TEXT NOT NULL,
locked_at TIMESTAMP NOT NULL
)�G! indexsqlite_autoindex_file_locks_1file_locks�P#!!�ktabletodo_filestodo_filesCREATE TABLE todo_files (
id INTEGER PRIMARY KEY AUTOINCREMENT,
todo_id INTEGER NOT NULL,
file_path TEXT NOT NULL,
FOREIGN KEY (todo_id) REFERENCES todo_items (id) ON DELETE CASCADE,
UNIQUE(todo_id, file_path)
)3$G! indexsqlite_autoindex_todo_files_1todo_files�Y!//�atabletodo_dependenciestodo_dependenciesCREATE TABLE todo_dependencies (
id INTEGER PRIMARY KEY AUTOINCREMENT,
todo_id INTEGER NOT NULL,
depends_on_todo_id INTEGER NOT NULL,
FOREIGN KEY (todo_id) REFERENCES todo_items (id) ON DELETE CASCADE,
FOREIGN KEY (depends_on_todo_id) REFERENCES todo_items (id) ON DELETE CASCADE,
UNIQUE(todo_id, depends_on_todo_id)
)f U/ indexsqlit/C indexsqlite_autoindex_projects_1projects�O//�Mtabletask_dependenciestask_dependencies
CREATE TABLE task_dependencies (
id INTEGER PRIMARY KEY AUTOINCREMENT,
task_id INTEGER NOT NULL,
depends_on_task_id INTEGER NOT NULL,
FOREIGN KEY (task_id) REFERENCES tasks (id) ON DELETE CASCADE,
FOREIGN KEY (depends_on_task_id) REFERENCES tasks (id) ON DELETE CASCADE,
UNIQUE(task_id, depends_on_task_id)
)A U/ indexsqlite_autoindex_task_dependencies_1task_dependencies� �I!!�]tabletodo_itemstodo_itemsCREATE TABLE todo_items (
id INTEGER PRIMARY KEY AUTOINCREMENT,
task_id INTEGER NOT NULL,
title TEXT NOT NULL,
description TEXT NOT NULL DEFAULT '',
order_index INTEGER NOT NULL DEFAULT 0,
status TEXT NOT NULL DEFAULT 'pending',
assigned_agent TEXT NULL,
created_at TIMESTAMP NOT NULL,
updated_at TIMESTAMP NOT NULL,
FOREIGN KEY (task_id) REFERENCES tasks (id) ON DELETE CASCADE
)��tabletaskstasksCREATE TABLE tasks (
id INTEGER PRIMARY KEY AUTOINCREMENT,
project_id INTEGER NOT NULL,
name TEXT NOT NULL,
description TEXT NOT NULL DEFAULT '',
order_index INTEGER NOT NULL DEFAULT 0,
status TEXT NOT NULL DEFAULT 'pending',
created_at TIMESTAMP NOT NULL,
updated_at TIMESTAMP NOT NULL,
FOREIGN KEY (project_id) REFERENCES projects (id) ON DELETE CASCADE
) �C indexsqlite_autoindex_projects_1projects�c�tableprojectsprojectsCREATE TA�(,%%�tableaudit_eventsaudit_eventsCREATE TABLE audit_events (
id INTEGER PRIMARY KEY AUTOINCREMENT,
event_type TEXT NOT NULL,
entity_type TEXT NOT NULL,
entity_id INTEGER,
entity_name TEXT,
old_status TEXT,
new_status TEXT,
agent_id TEXT,
project_name TEXT,
task_name TEXT,
details TEXT,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
)m+=!� indexidx_file_locks_locked_byfile_locksCREATE INDEX id�c�tableprojectsprojectsCREATE TABLE projects (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT UNIQUE NOT NULL,
description TEXT NOT NULL,
status TEXT NOT NULL DEFAULT 'pending',
created_at TIMESTAMP NOT NULL,
updated_at TIMESTAMP NOT NULL
) � $�
���
� �����d��� � � q� AAAdd audit trail filtering and search functionalityImplement client-side filtering by event type, agent, date range, and search by entity name or description with instant filtering updatespending2025-07-16 13:06:26.5451742025-07-16 13:06:26.545174� o�7 AAImplement audit trail data fetching and renderingAdd JavaScript functions to fetch audit trail data from the API, render audit events in a timeline format, and handle real-time updates via WebSocketpending2025-07-16 13:06:21.4029432025-07-16 13:06:21.402943�{ Y�' AACreate audit trail view HTML structureAdd HTML structure for the audit trail view including timeline container, filtering controls (date range, event type, agent), and empty statepending2025-07-16 13:06:16.2298262025-07-16 13:06:16.229826� Y�1 AAAdd audit trail navigation and routingAdd an "Audit Trail" button/tab to the project detail view header and implement client-side routing to switch between kanban and audit trail viewspending2025-07-16 13:06:11.0867752025-07-16 13:06:11.086775�} U�+ AAAdd completion analytics and metricsImplement analytics calculations like average completion time, agent productivity metrics, task complexity analysis, and completion rate trendscompleted2025-07-16 12:40:19.1722422025-07-16 13:04:09.916009� e�! AAAdd HTTP API endpoint for completion summaryCreate /api/projects/{project_name}/completion-summary HTTP endpoint that provides JSON formatted completion data for external consumptioncompleted2025-07-16 12:40:17.3662532025-07-16 13:03:59.706074�)
i�q AACreate get_project_completion_summary MCP toolAdd a new MCP tool that returns comprehensive project completion data including completed tasks/todos with timestamps, agent assignments, duration metrics, and progress analyticscompleted2025-07-16 12:40:15.5569542025-07-16 13:03:49.509900�q [�
AAAdd audit logging to project operationsIntegrate audit logging into create_project(), get_project(), and any project status changes to capture project lifecycle eventscompleted2025-07-16 12:37:29.8209562025-07-16 13:02:54.859312�S _�M AAAdd audit logging to file lock operationsIntegrate audit logging into lock_files() and unlock_files() operations to track resource accesscompleted2025-07-16 12:37:34.0980782025-07-16 13:03:32.789923�\ U�i AAAdd audit logging to todo operationsIntegrate audit logging into create_todo_item(), update_todo_status(), todo assignments, and completion eventscompleted2025-07-16 12:37:32.5709362025-07-16 13:03:22.567164�I U�C AAAdd audit logging to task operationsIntegrate audit logging into create_task(), task status changes, and task completion eventscompleted2025-07-16 12:37:31.0453352025-07-16 13:03:12.355990\
# AATest TodoA test todocompleted2025-07-16 12:56:43.9059682025-07-16 12:56:59.065069� M�e AACreate audit_events table schemaDesign and create the audit_events table with fields for: id, event_type, entity_type, entity_id, old_status, new_status, agent_id, project_name, details (JSON), created_atcompleted2025-07-16 12:30:14.7488782025-07-16 12:34:08.219432� W�? AACreate audit logging helper functionsCreate reusable helper functions for logging audit events: log_status_change(), log_project_event(), log_task_event(), log_todo_event(), log_file_event()completed2025-07-16 12:37:28.5910712025-07-16 12:39:09.202982�F G�K AATest database schema creationVerify that the audit_events table is created correctly and can store audit event data properlycompleted2025-07-16 12:30:17.9584392025-07-16 12:37:19.957743�p K� AAAdd database migration functionCreate a database initialization/migration function that creates the audit_events table if it doesn't exist and handles schema upgradescompleted2025-07-16 12:30:16.5234462025-07-16 12:35:33.445699^
- AATest TodoA test todo itempending2025-07-16 12:13:56.0379422025-07-16 12:13:56.0 #
� ��������~pbTF.���� =static/css/dashboard.css 9static/js/dashboard.js 9static/js/dashboard.js /static/index.html 9static/js/dashboard.js /static/index.html
test.py main.py main.py
main.py main.py main.py main.py main.py main.py main.py main.py main.py %test_file.py
� ��������qcUG/���� =static/css/dashboard.css9static/js/dashboard.js9static/js/dashboard.js/static/index.html9static/js/dashboard.js/static/index.html
test.py
main.py
main.py
main.py
main.py
main.py
main.py
main.py
main.py
main.py
main.py
main.py % test_file.py
�s G93Astatic/js/dashboard.jsagent-dashboard-dev2025-07-16 13:06:47I=3Astatic/css/dashboard.cssagent-dashboard-dev2025-07-16 13:10:05.514206
�� 9static/js/dashbo= static/css/dashboard.css
� ������
� ������������������
U ����y����9k]G�+��
completed
completeds
completed
completed
completed
completed
completed
� pend
completed
completed
completed�
completed
completed
completed
completed
completed pe
completed
completed
pending
� �������������������
�� 3agent-dashboard-dev3 agent-dashboard-dev � '�����?
�
�i�S�=�'���j�>