diff --git a/app/core/auth.py b/app/core/auth.py index f575a5a..5f8dea2 100644 --- a/app/core/auth.py +++ b/app/core/auth.py @@ -258,7 +258,7 @@ async def invalidate_session(redis: aioredis.Redis, session_id: str) -> None: from sqlalchemy import delete from app.core.db import get_session_factory - from app.models.session import SessionModel + from app.models.session import Session as SessionModel factory = get_session_factory() async with factory() as db: await db.execute( diff --git a/app/plugins/builtins/automation/routes.py b/app/plugins/builtins/automation/routes.py index 2b0b87d..1294da7 100644 --- a/app/plugins/builtins/automation/routes.py +++ b/app/plugins/builtins/automation/routes.py @@ -190,7 +190,7 @@ async def list_miniapps( from app.plugins.builtins.kommunikation.contracts import get_miniapp_registry registry = get_miniapp_registry() items = registry.list_apps() - return {"items": items, "total": len(items)} + return items @router.post( diff --git a/app/plugins/builtins/tags/routes.py b/app/plugins/builtins/tags/routes.py index eabc71b..ecaaaf1 100644 --- a/app/plugins/builtins/tags/routes.py +++ b/app/plugins/builtins/tags/routes.py @@ -186,7 +186,7 @@ async def assign_tag( ): """Assign a tag to an entity.""" tenant_id = uuid.UUID(current_user["tenant_id"]) - user_id = uuid.UUID(current_user["id"]) + user_id = uuid.UUID(current_user["user_id"]) tag_id = _parse_uuid(body.tag_id, "tag_id") entity_id = _parse_uuid(body.entity_id, "entity_id") @@ -247,7 +247,7 @@ async def unassign_tag( ): """Remove a tag assignment from an entity.""" tenant_id = uuid.UUID(current_user["tenant_id"]) - user_id = uuid.UUID(current_user["id"]) + user_id = uuid.UUID(current_user["user_id"]) tag_id = _parse_uuid(body.tag_id, "tag_id") entity_id = _parse_uuid(body.entity_id, "entity_id") diff --git a/app/plugins/builtins/unified_search/routes.py b/app/plugins/builtins/unified_search/routes.py index ce44964..86197fe 100644 --- a/app/plugins/builtins/unified_search/routes.py +++ b/app/plugins/builtins/unified_search/routes.py @@ -148,8 +148,13 @@ async def _do_search( user_id = uuid.UUID(current_user["user_id"]) is_system_admin = current_user.get("is_system_admin", False) - # KI query understanding - query_analysis = await llm_analyze_query(req.query, db=db, tenant_id=tenant_id) + # KI query understanding (skip if use_ai=False for performance) + use_ai = getattr(req, "use_ai", True) + if use_ai: + query_analysis = await llm_analyze_query(req.query, db=db, tenant_id=tenant_id) + else: + from app.plugins.builtins.unified_search.query_understanding import _fallback_query_analysis + query_analysis = _fallback_query_analysis(req.query) # Hybrid search with visibility filtering results = await hybrid_search( @@ -176,8 +181,12 @@ async def _do_search( "event": "calendar", } - # KI result aggregation - aggregation = await llm_aggregate_results(results, req.query, db=db, tenant_id=tenant_id) + # KI result aggregation (skip if use_ai=False for performance) + if use_ai: + aggregation = await llm_aggregate_results(results, req.query, db=db, tenant_id=tenant_id) + else: + from app.plugins.builtins.unified_search.query_understanding import _fallback_aggregate + aggregation = _fallback_aggregate(results, req.query) search_results = [ SearchResult( diff --git a/app/routes/compliance.py b/app/routes/compliance.py index f6fe808..c5d0875 100644 --- a/app/routes/compliance.py +++ b/app/routes/compliance.py @@ -330,10 +330,10 @@ async def create_incident( changes={"title": body.title, "incident_type": body.incident_type, "status": body.status}, ) db.add(audit) + await db.flush() + result = _incident_to_dict(incident) await db.commit() - await db.refresh(incident) - - return _incident_to_dict(incident) + return result @router.patch( diff --git a/app/routes/workflows.py b/app/routes/workflows.py index 4838b3c..ea88e7d 100644 --- a/app/routes/workflows.py +++ b/app/routes/workflows.py @@ -473,7 +473,7 @@ async def approve_workflow_step( body = {} comment = body.get("comment", "") - from app.core.approval import create_approval_request, decide_approval + from app.core.approval import create_approval_request, resolve_approval_request from app.models.workflow import WorkflowInstance from sqlalchemy import select @@ -500,9 +500,9 @@ async def approve_workflow_step( requested_by=user_id, requested_by_type="user", ) - await decide_approval( + await resolve_approval_request( db=db, - approval_id=approval["id"], + request_id=approval["id"], decision="approved", decided_by=user_id, comment=comment, @@ -536,7 +536,7 @@ async def reject_workflow_step( body = {} comment = body.get("comment", "") - from app.core.approval import create_approval_request, decide_approval + from app.core.approval import create_approval_request, resolve_approval_request from app.models.workflow import WorkflowInstance from sqlalchemy import select @@ -563,9 +563,9 @@ async def reject_workflow_step( requested_by=user_id, requested_by_type="user", ) - await decide_approval( + await resolve_approval_request( db=db, - approval_id=approval["id"], + request_id=approval["id"], decision="rejected", decided_by=user_id, comment=comment, diff --git a/app/services/contact_folder_service.py b/app/services/contact_folder_service.py index ad7c5e0..f091009 100644 --- a/app/services/contact_folder_service.py +++ b/app/services/contact_folder_service.py @@ -110,6 +110,7 @@ async def create_folder( sort_order=max_order + 1, ) db.add(folder) + await db.flush() result = _serialize_folder(folder) await db.commit() return result diff --git a/app/workflows/step_handlers.py b/app/workflows/step_handlers.py index 502bd89..a72232a 100644 --- a/app/workflows/step_handlers.py +++ b/app/workflows/step_handlers.py @@ -444,14 +444,15 @@ async def _handle_crm( result = await update_contact(db, tenant_id, uuid.UUID(entity_id), data) return StepResult(output={"contact": result} if result else {}) elif action == "create_company": - from app.services.company_service import create_company - result = await create_company(db, tenant_id, data) + from app.services.contact_service import create_contact + company_data = {**data, "type": "company"} + result = await create_contact(db, tenant_id, company_data) return StepResult(output={"company": result} if result else {}) elif action == "update_company": - from app.services.company_service import update_company + from app.services.contact_service import update_contact if not entity_id: return StepResult(error="update_company requires entity_id", abort=True) - result = await update_company(db, tenant_id, uuid.UUID(entity_id), data) + result = await update_contact(db, tenant_id, uuid.UUID(entity_id), data) return StepResult(output={"company": result} if result else {}) else: return StepResult(error=f"unknown crm action: {action}", abort=True) diff --git a/prestart.sh b/prestart.sh index ea70fc8..af51feb 100644 --- a/prestart.sh +++ b/prestart.sh @@ -70,6 +70,36 @@ PYEOF python3 /tmp/set_role_passwords.py rm -f /tmp/set_role_passwords.py +# Grant DELETE on all tables to crm_api, crm_auth, crm_worker (BUG-030 fix) +echo "[prestart] Granting DELETE on all tables to crm_api, crm_auth, crm_worker..." +python3 -c " +import asyncio, os +from sqlalchemy.ext.asyncio import create_async_engine +from sqlalchemy import text + +async def grant_delete(): + db_url = os.environ.get('MIGRATION_DATABASE_URL', os.environ.get('DATABASE_URL', '')) + if not db_url: + print('[prestart] No DATABASE_URL found, skipping GRANT DELETE') + return + engine = create_async_engine(db_url) + try: + async with engine.begin() as conn: + for role in ['crm_api', 'crm_auth', 'crm_worker']: + try: + await conn.execute(text(f'GRANT DELETE ON ALL TABLES IN SCHEMA public TO {role}')) + print(f'[prestart] GRANT DELETE to {role} OK') + except Exception as e: + print(f'[prestart] WARNING: Could not GRANT DELETE to {role}: {e}') + print('[prestart] GRANT DELETE complete.') + except Exception as e: + print(f'[prestart] WARNING: Could not GRANT DELETE: {e}') + finally: + await engine.dispose() + +asyncio.run(grant_delete()) +" + # Set crm_runtime password if RUNTIME_DB_PASSWORD is set (legacy support) if [ -n "$RUNTIME_DB_PASSWORD" ]; then echo "[prestart] Setting crm_runtime password..." diff --git a/scripts/test_suite/marathon_results.json b/scripts/test_suite/marathon_results.json index ccbc476..526204a 100644 --- a/scripts/test_suite/marathon_results.json +++ b/scripts/test_suite/marathon_results.json @@ -1,8 +1,8 @@ { - "timestamp": "2026-08-17T07:22:14.401718", - "total_time": 5.85, + "timestamp": "2026-08-21T23:28:32.357773", + "total_time": 3.8, "total_scripts": 7, - "total_issues": 1173, + "total_issues": 1287, "passed": 1, "failed": 6, "skipped": 0, @@ -11,24 +11,24 @@ "name": "trace_api_contracts", "description": "Frontend\u2194Backend API Contracts", "status": "FAIL", - "exit_code": 246, - "elapsed": 0.22, - "issues": 758 + "exit_code": 91, + "elapsed": 0.12, + "issues": 859 }, { "name": "trace_hooks", "description": "Hook Registrations vs Triggers", "status": "FAIL", - "exit_code": 64, - "elapsed": 0.29, - "issues": 64 + "exit_code": 70, + "elapsed": 0.14, + "issues": 70 }, { "name": "trace_functions", "description": "Dead Functions (defined but never called)", "status": "FAIL", "exit_code": 3, - "elapsed": 2.47, + "elapsed": 1.58, "issues": 3 }, { @@ -36,7 +36,7 @@ "description": "Unused Store Actions/State", "status": "FAIL", "exit_code": 67, - "elapsed": 0.09, + "elapsed": 0.04, "issues": 323 }, { @@ -44,24 +44,24 @@ "description": "Contract Attribute Mismatches", "status": "PASS", "exit_code": 0, - "elapsed": 1.41, + "elapsed": 0.93, "issues": 0 }, { "name": "trace_plugins", "description": "Plugin\u2192Manifest\u2192Frontend Verkabelung", "status": "FAIL", - "exit_code": 24, - "elapsed": 0.11, - "issues": 24 + "exit_code": 27, + "elapsed": 0.06, + "issues": 27 }, { "name": "trace_imports", "description": "Broken/Missing Imports", "status": "FAIL", - "exit_code": 1, - "elapsed": 1.24, - "issues": 1 + "exit_code": 5, + "elapsed": 0.92, + "issues": 5 } ] } \ No newline at end of file diff --git a/scripts/test_suite/results_trace_api_contracts.json b/scripts/test_suite/results_trace_api_contracts.json index 3e7c864..a13a1ed 100644 --- a/scripts/test_suite/results_trace_api_contracts.json +++ b/scripts/test_suite/results_trace_api_contracts.json @@ -528,6 +528,72 @@ "url": "/roles/{param}", "raw_url": "/roles/${id}" }, + { + "file": "api/knowledge.ts", + "method": "GET", + "url": "/wiki/articles${qs ", + "raw_url": "/wiki/articles${qs ? " + }, + { + "file": "api/knowledge.ts", + "method": "GET", + "url": "/wiki/articles/{param}", + "raw_url": "/wiki/articles/${articleId}" + }, + { + "file": "api/knowledge.ts", + "method": "GET", + "url": "/wiki/articles/{param}/versions", + "raw_url": "/wiki/articles/${articleId}/versions" + }, + { + "file": "api/knowledge.ts", + "method": "GET", + "url": "/wiki/categories", + "raw_url": "/wiki/categories" + }, + { + "file": "api/knowledge.ts", + "method": "GET", + "url": "/graph/relationships${qs ", + "raw_url": "/graph/relationships${qs ? " + }, + { + "file": "api/knowledge.ts", + "method": "POST", + "url": "/wiki/articles", + "raw_url": "/wiki/articles" + }, + { + "file": "api/knowledge.ts", + "method": "POST", + "url": "/wiki/articles/{param}/versions/{param}/restore", + "raw_url": "/wiki/articles/${articleId}/versions/${version}/restore" + }, + { + "file": "api/knowledge.ts", + "method": "POST", + "url": "/wiki/categories", + "raw_url": "/wiki/categories" + }, + { + "file": "api/knowledge.ts", + "method": "POST", + "url": "/knowledge/ask", + "raw_url": "/knowledge/ask" + }, + { + "file": "api/knowledge.ts", + "method": "PATCH", + "url": "/wiki/articles/{param}", + "raw_url": "/wiki/articles/${articleId}" + }, + { + "file": "api/knowledge.ts", + "method": "DELETE", + "url": "/wiki/articles/{param}", + "raw_url": "/wiki/articles/${articleId}" + }, { "file": "api/mcp.ts", "method": "GET", @@ -714,6 +780,30 @@ "url": "/agents/tools", "raw_url": "/agents/tools" }, + { + "file": "api/automation.ts", + "method": "GET", + "url": "/agents/tools", + "raw_url": "/agents/tools" + }, + { + "file": "api/automation.ts", + "method": "GET", + "url": "/agents/skills", + "raw_url": "/agents/skills" + }, + { + "file": "api/automation.ts", + "method": "GET", + "url": "/agents/{param}/runs", + "raw_url": "/agents/${agentId}/runs" + }, + { + "file": "api/automation.ts", + "method": "GET", + "url": "/agents/runs/recent", + "raw_url": "/agents/runs/recent?limit=${limit}" + }, { "file": "api/automation.ts", "method": "GET", @@ -861,8 +951,8 @@ { "file": "api/ai.ts", "method": "GET", - "url": "/ai/sessions/{param}/messages", - "raw_url": "/ai/sessions/${sessionId}/messages" + "url": "/ai/conversations/{param}/messages", + "raw_url": "/ai/conversations/${conversationId}/messages" }, { "file": "api/ai.ts", @@ -1212,6 +1302,12 @@ "url": "/tasks/{param}", "raw_url": "/tasks/${id}" }, + { + "file": "api/tasks.ts", + "method": "GET", + "url": "/tasks/{param}/subtasks", + "raw_url": "/tasks/${parentId}/subtasks" + }, { "file": "api/tasks.ts", "method": "POST", @@ -1230,6 +1326,24 @@ "url": "/tasks/{param}/status", "raw_url": "/tasks/${id}/status" }, + { + "file": "api/tasks.ts", + "method": "POST", + "url": "/tasks/{param}/subtasks", + "raw_url": "/tasks/${parentId}/subtasks" + }, + { + "file": "api/tasks.ts", + "method": "POST", + "url": "/tasks/{param}/dependencies", + "raw_url": "/tasks/${id}/dependencies" + }, + { + "file": "api/tasks.ts", + "method": "POST", + "url": "/tasks/{param}/decompose", + "raw_url": "/tasks/${goalId}/decompose" + }, { "file": "api/tasks.ts", "method": "PATCH", @@ -1242,6 +1356,12 @@ "url": "/tasks/{param}", "raw_url": "/tasks/${id}" }, + { + "file": "api/tasks.ts", + "method": "DELETE", + "url": "/tasks/{param}/dependencies/{param}", + "raw_url": "/tasks/${id}/dependencies/${dependsOn}" + }, { "file": "api/contacts.ts", "method": "GET", @@ -1386,6 +1506,18 @@ "url": "/backups", "raw_url": "/backups" }, + { + "file": "api/backups.ts", + "method": "GET", + "url": "/system-settings/backup-config", + "raw_url": "/system-settings/backup-config" + }, + { + "file": "api/backups.ts", + "method": "GET", + "url": "/system-settings/backup-history", + "raw_url": "/system-settings/backup-history" + }, { "file": "api/backups.ts", "method": "POST", @@ -1398,6 +1530,18 @@ "url": "/backups/{param}/restore", "raw_url": "/backups/${backupId}/restore" }, + { + "file": "api/backups.ts", + "method": "POST", + "url": "/system-settings/backup-now", + "raw_url": "/system-settings/backup-now" + }, + { + "file": "api/backups.ts", + "method": "PUT", + "url": "/system-settings/backup-config", + "raw_url": "/system-settings/backup-config" + }, { "file": "api/backups.ts", "method": "DELETE", @@ -1716,6 +1860,48 @@ "url": "/contact-folders/{param}/permissions/{param}", "raw_url": "/contact-folders/${folderId}/permissions/${permissionId}" }, + { + "file": "api/compliance.ts", + "method": "GET", + "url": "/compliance/ai-registry", + "raw_url": "/compliance/ai-registry" + }, + { + "file": "api/compliance.ts", + "method": "GET", + "url": "/compliance/dpia-template", + "raw_url": "/compliance/dpia-template" + }, + { + "file": "api/compliance.ts", + "method": "GET", + "url": "/compliance/incidents", + "raw_url": "/compliance/incidents" + }, + { + "file": "api/compliance.ts", + "method": "GET", + "url": "/compliance/retention-policies", + "raw_url": "/compliance/retention-policies" + }, + { + "file": "api/compliance.ts", + "method": "POST", + "url": "/compliance/incidents", + "raw_url": "/compliance/incidents" + }, + { + "file": "api/compliance.ts", + "method": "PATCH", + "url": "/compliance/incidents/{param}", + "raw_url": "/compliance/incidents/${id}" + }, + { + "file": "api/compliance.ts", + "method": "PATCH", + "url": "/compliance/retention-policies/{param}", + "raw_url": "/compliance/retention-policies/${key}" + }, { "file": "api/savedFilters.ts", "method": "GET", @@ -1734,6 +1920,72 @@ "url": "/saved-filters/{param}", "raw_url": "/saved-filters/${id}" }, + { + "file": "api/systemDashboard.ts", + "method": "GET", + "url": "/system/dashboard", + "raw_url": "/system/dashboard" + }, + { + "file": "api/systemDashboard.ts", + "method": "GET", + "url": "/system/alerts", + "raw_url": "/system/alerts" + }, + { + "file": "api/improvement.ts", + "method": "GET", + "url": "/improvement/proposals/{param}", + "raw_url": "/improvement/proposals/${id}" + }, + { + "file": "api/improvement.ts", + "method": "POST", + "url": "/improvement/signals/collect", + "raw_url": "/improvement/signals/collect" + }, + { + "file": "api/improvement.ts", + "method": "POST", + "url": "/improvement/patterns/detect", + "raw_url": "/improvement/patterns/detect" + }, + { + "file": "api/improvement.ts", + "method": "POST", + "url": "/improvement/proposals", + "raw_url": "/improvement/proposals" + }, + { + "file": "api/improvement.ts", + "method": "POST", + "url": "/improvement/proposals/{param}/evaluate", + "raw_url": "/improvement/proposals/${proposalId}/evaluate" + }, + { + "file": "api/improvement.ts", + "method": "POST", + "url": "/improvement/proposals/{param}/request-approval", + "raw_url": "/improvement/proposals/${proposalId}/request-approval" + }, + { + "file": "api/improvement.ts", + "method": "POST", + "url": "/improvement/proposals/{param}/activate", + "raw_url": "/improvement/proposals/${proposalId}/activate" + }, + { + "file": "api/improvement.ts", + "method": "POST", + "url": "/improvement/proposals/{param}/rollback", + "raw_url": "/improvement/proposals/${proposalId}/rollback" + }, + { + "file": "api/improvement.ts", + "method": "POST", + "url": "/improvement/proposals/{param}/measure", + "raw_url": "/improvement/proposals/${proposalId}/measure" + }, { "file": "api/policies.ts", "method": "GET", @@ -2185,6 +2437,16 @@ "method": "DELETE", "path": "/{filter_id}" }, + { + "file": "routes/audit.py", + "method": "GET", + "path": "/export" + }, + { + "file": "routes/audit.py", + "method": "DELETE", + "path": "/retention" + }, { "file": "routes/api_tokens.py", "method": "DELETE", @@ -2785,6 +3047,46 @@ "method": "POST", "path": "/instances/{instance_id}/cancel" }, + { + "file": "routes/workflows.py", + "method": "POST", + "path": "/instances/{instance_id}/resume" + }, + { + "file": "routes/workflows.py", + "method": "POST", + "path": "/{workflow_id}/trigger" + }, + { + "file": "routes/workflows.py", + "method": "POST", + "path": "/webhook/{token}" + }, + { + "file": "routes/workflows.py", + "method": "GET", + "path": "/instances/{instance_id}/history" + }, + { + "file": "routes/workflows.py", + "method": "POST", + "path": "/instances/{instance_id}/approve" + }, + { + "file": "routes/workflows.py", + "method": "POST", + "path": "/instances/{instance_id}/reject" + }, + { + "file": "routes/workflows.py", + "method": "GET", + "path": "/templates" + }, + { + "file": "routes/workflows.py", + "method": "POST", + "path": "/templates/{template_id}/instantiate" + }, { "file": "routes/outbox.py", "method": "GET", @@ -2820,6 +3122,36 @@ "method": "POST", "path": "/cleanup-published" }, + { + "file": "routes/system_settings.py", + "method": "GET", + "path": "/backup-config" + }, + { + "file": "routes/system_settings.py", + "method": "PUT", + "path": "/backup-config" + }, + { + "file": "routes/system_settings.py", + "method": "POST", + "path": "/backup-now" + }, + { + "file": "routes/system_settings.py", + "method": "GET", + "path": "/backup-history" + }, + { + "file": "routes/system_settings.py", + "method": "GET", + "path": "/dsgvo-export/{user_id}" + }, + { + "file": "routes/system_settings.py", + "method": "POST", + "path": "/dsar/{user_id}" + }, { "file": "routes/ai_copilot.py", "method": "POST", @@ -3035,6 +3367,71 @@ "method": "POST", "path": "/install-marketplace" }, + { + "file": "routes/compliance.py", + "method": "GET", + "path": "/ai-registry" + }, + { + "file": "routes/compliance.py", + "method": "GET", + "path": "/dpia-template" + }, + { + "file": "routes/compliance.py", + "method": "GET", + "path": "/incidents" + }, + { + "file": "routes/compliance.py", + "method": "POST", + "path": "/incidents" + }, + { + "file": "routes/compliance.py", + "method": "PATCH", + "path": "/incidents/{incident_id}" + }, + { + "file": "routes/compliance.py", + "method": "GET", + "path": "/retention-policies" + }, + { + "file": "routes/compliance.py", + "method": "PATCH", + "path": "/retention-policies/{key}" + }, + { + "file": "routes/approvals.py", + "method": "GET", + "path": "/{request_id}" + }, + { + "file": "routes/approvals.py", + "method": "POST", + "path": "/{request_id}/approve" + }, + { + "file": "routes/approvals.py", + "method": "POST", + "path": "/{request_id}/reject" + }, + { + "file": "routes/approvals.py", + "method": "POST", + "path": "/{request_id}/expire" + }, + { + "file": "routes/system_dashboard.py", + "method": "GET", + "path": "/dashboard" + }, + { + "file": "routes/system_dashboard.py", + "method": "GET", + "path": "/alerts" + }, { "file": "plugins/builtins/mcp_client/routes.py", "method": "GET", @@ -3209,6 +3606,30 @@ "path": "/subtasks/aggregate", "is_plugin": true }, + { + "file": "plugins/builtins/automation/skill_routes.py", + "method": "POST", + "path": "/", + "is_plugin": true + }, + { + "file": "plugins/builtins/automation/skill_routes.py", + "method": "GET", + "path": "/{skill_id}", + "is_plugin": true + }, + { + "file": "plugins/builtins/automation/skill_routes.py", + "method": "PATCH", + "path": "/{skill_id}", + "is_plugin": true + }, + { + "file": "plugins/builtins/automation/skill_routes.py", + "method": "DELETE", + "path": "/{skill_id}", + "is_plugin": true + }, { "file": "plugins/builtins/automation/agent_routes.py", "method": "POST", @@ -3239,6 +3660,18 @@ "path": "/{agent_id}", "is_plugin": true }, + { + "file": "plugins/builtins/automation/agent_routes.py", + "method": "GET", + "path": "/{agent_id}/ai-use-case", + "is_plugin": true + }, + { + "file": "plugins/builtins/automation/agent_routes.py", + "method": "PATCH", + "path": "/{agent_id}/ai-use-case", + "is_plugin": true + }, { "file": "plugins/builtins/automation/agent_routes.py", "method": "DELETE", @@ -3281,6 +3714,12 @@ "path": "/{id}/send-message", "is_plugin": true }, + { + "file": "plugins/builtins/automation/agent_routes.py", + "method": "POST", + "path": "/{id}/stream", + "is_plugin": true + }, { "file": "plugins/builtins/dms/routes.py", "method": "GET", @@ -3695,6 +4134,60 @@ "path": "/{mail_id}", "is_plugin": true }, + { + "file": "plugins/builtins/wiki/routes.py", + "method": "GET", + "path": "/articles", + "is_plugin": true + }, + { + "file": "plugins/builtins/wiki/routes.py", + "method": "POST", + "path": "/articles", + "is_plugin": true + }, + { + "file": "plugins/builtins/wiki/routes.py", + "method": "GET", + "path": "/articles/{article_id}", + "is_plugin": true + }, + { + "file": "plugins/builtins/wiki/routes.py", + "method": "PATCH", + "path": "/articles/{article_id}", + "is_plugin": true + }, + { + "file": "plugins/builtins/wiki/routes.py", + "method": "DELETE", + "path": "/articles/{article_id}", + "is_plugin": true + }, + { + "file": "plugins/builtins/wiki/routes.py", + "method": "GET", + "path": "/articles/{article_id}/versions", + "is_plugin": true + }, + { + "file": "plugins/builtins/wiki/routes.py", + "method": "POST", + "path": "/articles/{article_id}/versions/{version}/restore", + "is_plugin": true + }, + { + "file": "plugins/builtins/wiki/routes.py", + "method": "GET", + "path": "/categories", + "is_plugin": true + }, + { + "file": "plugins/builtins/wiki/routes.py", + "method": "POST", + "path": "/categories", + "is_plugin": true + }, { "file": "plugins/builtins/tasks/routes.py", "method": "GET", @@ -3725,6 +4218,36 @@ "path": "/{task_id}/status", "is_plugin": true }, + { + "file": "plugins/builtins/tasks/routes.py", + "method": "POST", + "path": "/{task_id}/subtasks", + "is_plugin": true + }, + { + "file": "plugins/builtins/tasks/routes.py", + "method": "GET", + "path": "/{task_id}/subtasks", + "is_plugin": true + }, + { + "file": "plugins/builtins/tasks/routes.py", + "method": "POST", + "path": "/{task_id}/dependencies", + "is_plugin": true + }, + { + "file": "plugins/builtins/tasks/routes.py", + "method": "DELETE", + "path": "/{task_id}/dependencies/{depends_on}", + "is_plugin": true + }, + { + "file": "plugins/builtins/tasks/routes.py", + "method": "POST", + "path": "/{task_id}/decompose", + "is_plugin": true + }, { "file": "plugins/builtins/calendar/routes.py", "method": "GET", @@ -4001,6 +4524,30 @@ "path": "/{report_id}/download", "is_plugin": true }, + { + "file": "plugins/builtins/knowledge/routes.py", + "method": "POST", + "path": "/extract", + "is_plugin": true + }, + { + "file": "plugins/builtins/knowledge/routes.py", + "method": "POST", + "path": "/ask", + "is_plugin": true + }, + { + "file": "plugins/builtins/knowledge/routes.py", + "method": "GET", + "path": "/review", + "is_plugin": true + }, + { + "file": "plugins/builtins/knowledge/routes.py", + "method": "POST", + "path": "/review/{extraction_id}", + "is_plugin": true + }, { "file": "plugins/builtins/entity_links/routes.py", "method": "POST", @@ -4325,42 +4872,6 @@ "path": "/tools", "is_plugin": true }, - { - "file": "plugins/builtins/ai_assistant/routes.py", - "method": "GET", - "path": "/sessions", - "is_plugin": true - }, - { - "file": "plugins/builtins/ai_assistant/routes.py", - "method": "POST", - "path": "/sessions", - "is_plugin": true - }, - { - "file": "plugins/builtins/ai_assistant/routes.py", - "method": "PUT", - "path": "/sessions/{session_id}", - "is_plugin": true - }, - { - "file": "plugins/builtins/ai_assistant/routes.py", - "method": "DELETE", - "path": "/sessions/{session_id}", - "is_plugin": true - }, - { - "file": "plugins/builtins/ai_assistant/routes.py", - "method": "GET", - "path": "/sessions/{session_id}/messages", - "is_plugin": true - }, - { - "file": "plugins/builtins/ai_assistant/routes.py", - "method": "POST", - "path": "/sessions/{session_id}/stream", - "is_plugin": true - }, { "file": "plugins/builtins/ai_assistant/routes.py", "method": "GET", @@ -4388,19 +4899,13 @@ { "file": "plugins/builtins/ai_assistant/routes.py", "method": "POST", - "path": "/sessions/{session_id}/attachments", + "path": "/conversations/{conversation_id}/stream", "is_plugin": true }, { "file": "plugins/builtins/ai_assistant/routes.py", "method": "GET", - "path": "/sessions/{session_id}/attachments", - "is_plugin": true - }, - { - "file": "plugins/builtins/ai_assistant/routes.py", - "method": "GET", - "path": "/attachments/{attachment_id}/download", + "path": "/conversations/{conversation_id}/messages", "is_plugin": true }, { @@ -4522,6 +5027,78 @@ "method": "GET", "path": "/online-users", "is_plugin": true + }, + { + "file": "plugins/builtins/self_improvement/routes.py", + "method": "POST", + "path": "/signals/collect", + "is_plugin": true + }, + { + "file": "plugins/builtins/self_improvement/routes.py", + "method": "GET", + "path": "/signals", + "is_plugin": true + }, + { + "file": "plugins/builtins/self_improvement/routes.py", + "method": "POST", + "path": "/patterns/detect", + "is_plugin": true + }, + { + "file": "plugins/builtins/self_improvement/routes.py", + "method": "GET", + "path": "/patterns", + "is_plugin": true + }, + { + "file": "plugins/builtins/self_improvement/routes.py", + "method": "POST", + "path": "/proposals", + "is_plugin": true + }, + { + "file": "plugins/builtins/self_improvement/routes.py", + "method": "GET", + "path": "/proposals", + "is_plugin": true + }, + { + "file": "plugins/builtins/self_improvement/routes.py", + "method": "GET", + "path": "/proposals/{proposal_id}", + "is_plugin": true + }, + { + "file": "plugins/builtins/self_improvement/routes.py", + "method": "POST", + "path": "/proposals/{proposal_id}/evaluate", + "is_plugin": true + }, + { + "file": "plugins/builtins/self_improvement/routes.py", + "method": "POST", + "path": "/proposals/{proposal_id}/request-approval", + "is_plugin": true + }, + { + "file": "plugins/builtins/self_improvement/routes.py", + "method": "POST", + "path": "/proposals/{proposal_id}/activate", + "is_plugin": true + }, + { + "file": "plugins/builtins/self_improvement/routes.py", + "method": "POST", + "path": "/proposals/{proposal_id}/rollback", + "is_plugin": true + }, + { + "file": "plugins/builtins/self_improvement/routes.py", + "method": "POST", + "path": "/proposals/{proposal_id}/measure", + "is_plugin": true } ], "issues": [ @@ -5165,6 +5742,94 @@ "severity": "HIGH", "message": "Frontend calls DELETE /roles/{param} but no matching backend endpoint found" }, + { + "type": "frontend_call_no_backend", + "method": "GET", + "url": "/wiki/articles${qs ", + "file": "api/knowledge.ts", + "severity": "HIGH", + "message": "Frontend calls GET /wiki/articles${qs but no matching backend endpoint found" + }, + { + "type": "frontend_call_no_backend", + "method": "GET", + "url": "/wiki/articles/{param}", + "file": "api/knowledge.ts", + "severity": "HIGH", + "message": "Frontend calls GET /wiki/articles/{param} but no matching backend endpoint found" + }, + { + "type": "frontend_call_no_backend", + "method": "GET", + "url": "/wiki/articles/{param}/versions", + "file": "api/knowledge.ts", + "severity": "HIGH", + "message": "Frontend calls GET /wiki/articles/{param}/versions but no matching backend endpoint found" + }, + { + "type": "frontend_call_no_backend", + "method": "GET", + "url": "/wiki/categories", + "file": "api/knowledge.ts", + "severity": "HIGH", + "message": "Frontend calls GET /wiki/categories but no matching backend endpoint found" + }, + { + "type": "frontend_call_no_backend", + "method": "GET", + "url": "/graph/relationships${qs ", + "file": "api/knowledge.ts", + "severity": "HIGH", + "message": "Frontend calls GET /graph/relationships${qs but no matching backend endpoint found" + }, + { + "type": "frontend_call_no_backend", + "method": "POST", + "url": "/wiki/articles", + "file": "api/knowledge.ts", + "severity": "HIGH", + "message": "Frontend calls POST /wiki/articles but no matching backend endpoint found" + }, + { + "type": "frontend_call_no_backend", + "method": "POST", + "url": "/wiki/articles/{param}/versions/{param}/restore", + "file": "api/knowledge.ts", + "severity": "HIGH", + "message": "Frontend calls POST /wiki/articles/{param}/versions/{param}/restore but no matching backend endpoint found" + }, + { + "type": "frontend_call_no_backend", + "method": "POST", + "url": "/wiki/categories", + "file": "api/knowledge.ts", + "severity": "HIGH", + "message": "Frontend calls POST /wiki/categories but no matching backend endpoint found" + }, + { + "type": "frontend_call_no_backend", + "method": "POST", + "url": "/knowledge/ask", + "file": "api/knowledge.ts", + "severity": "HIGH", + "message": "Frontend calls POST /knowledge/ask but no matching backend endpoint found" + }, + { + "type": "frontend_call_no_backend", + "method": "PATCH", + "url": "/wiki/articles/{param}", + "file": "api/knowledge.ts", + "severity": "HIGH", + "message": "Frontend calls PATCH /wiki/articles/{param} but no matching backend endpoint found" + }, + { + "type": "frontend_call_no_backend", + "method": "DELETE", + "url": "/wiki/articles/{param}", + "file": "api/knowledge.ts", + "severity": "HIGH", + "message": "Frontend calls DELETE /wiki/articles/{param} but no matching backend endpoint found" + }, { "type": "frontend_call_no_backend", "method": "GET", @@ -5397,6 +6062,38 @@ "severity": "HIGH", "message": "Frontend calls GET /agents/tools but no matching backend endpoint found" }, + { + "type": "frontend_call_no_backend", + "method": "GET", + "url": "/agents/tools", + "file": "api/automation.ts", + "severity": "HIGH", + "message": "Frontend calls GET /agents/tools but no matching backend endpoint found" + }, + { + "type": "frontend_call_no_backend", + "method": "GET", + "url": "/agents/skills", + "file": "api/automation.ts", + "severity": "HIGH", + "message": "Frontend calls GET /agents/skills but no matching backend endpoint found" + }, + { + "type": "frontend_call_no_backend", + "method": "GET", + "url": "/agents/{param}/runs", + "file": "api/automation.ts", + "severity": "HIGH", + "message": "Frontend calls GET /agents/{param}/runs but no matching backend endpoint found" + }, + { + "type": "frontend_call_no_backend", + "method": "GET", + "url": "/agents/runs/recent", + "file": "api/automation.ts", + "severity": "HIGH", + "message": "Frontend calls GET /agents/runs/recent but no matching backend endpoint found" + }, { "type": "frontend_call_no_backend", "method": "GET", @@ -5568,10 +6265,10 @@ { "type": "frontend_call_no_backend", "method": "GET", - "url": "/ai/sessions/{param}/messages", + "url": "/ai/conversations/{param}/messages", "file": "api/ai.ts", "severity": "HIGH", - "message": "Frontend calls GET /ai/sessions/{param}/messages but no matching backend endpoint found" + "message": "Frontend calls GET /ai/conversations/{param}/messages but no matching backend endpoint found" }, { "type": "frontend_call_no_backend", @@ -6037,6 +6734,14 @@ "severity": "HIGH", "message": "Frontend calls GET /tasks/{param} but no matching backend endpoint found" }, + { + "type": "frontend_call_no_backend", + "method": "GET", + "url": "/tasks/{param}/subtasks", + "file": "api/tasks.ts", + "severity": "HIGH", + "message": "Frontend calls GET /tasks/{param}/subtasks but no matching backend endpoint found" + }, { "type": "frontend_call_no_backend", "method": "POST", @@ -6061,6 +6766,30 @@ "severity": "HIGH", "message": "Frontend calls POST /tasks/{param}/status but no matching backend endpoint found" }, + { + "type": "frontend_call_no_backend", + "method": "POST", + "url": "/tasks/{param}/subtasks", + "file": "api/tasks.ts", + "severity": "HIGH", + "message": "Frontend calls POST /tasks/{param}/subtasks but no matching backend endpoint found" + }, + { + "type": "frontend_call_no_backend", + "method": "POST", + "url": "/tasks/{param}/dependencies", + "file": "api/tasks.ts", + "severity": "HIGH", + "message": "Frontend calls POST /tasks/{param}/dependencies but no matching backend endpoint found" + }, + { + "type": "frontend_call_no_backend", + "method": "POST", + "url": "/tasks/{param}/decompose", + "file": "api/tasks.ts", + "severity": "HIGH", + "message": "Frontend calls POST /tasks/{param}/decompose but no matching backend endpoint found" + }, { "type": "frontend_call_no_backend", "method": "PATCH", @@ -6077,6 +6806,14 @@ "severity": "HIGH", "message": "Frontend calls DELETE /tasks/{param} but no matching backend endpoint found" }, + { + "type": "frontend_call_no_backend", + "method": "DELETE", + "url": "/tasks/{param}/dependencies/{param}", + "file": "api/tasks.ts", + "severity": "HIGH", + "message": "Frontend calls DELETE /tasks/{param}/dependencies/{param} but no matching backend endpoint found" + }, { "type": "frontend_call_no_backend", "method": "GET", @@ -6269,6 +7006,22 @@ "severity": "HIGH", "message": "Frontend calls GET /backups but no matching backend endpoint found" }, + { + "type": "frontend_call_no_backend", + "method": "GET", + "url": "/system-settings/backup-config", + "file": "api/backups.ts", + "severity": "HIGH", + "message": "Frontend calls GET /system-settings/backup-config but no matching backend endpoint found" + }, + { + "type": "frontend_call_no_backend", + "method": "GET", + "url": "/system-settings/backup-history", + "file": "api/backups.ts", + "severity": "HIGH", + "message": "Frontend calls GET /system-settings/backup-history but no matching backend endpoint found" + }, { "type": "frontend_call_no_backend", "method": "POST", @@ -6285,6 +7038,22 @@ "severity": "HIGH", "message": "Frontend calls POST /backups/{param}/restore but no matching backend endpoint found" }, + { + "type": "frontend_call_no_backend", + "method": "POST", + "url": "/system-settings/backup-now", + "file": "api/backups.ts", + "severity": "HIGH", + "message": "Frontend calls POST /system-settings/backup-now but no matching backend endpoint found" + }, + { + "type": "frontend_call_no_backend", + "method": "PUT", + "url": "/system-settings/backup-config", + "file": "api/backups.ts", + "severity": "HIGH", + "message": "Frontend calls PUT /system-settings/backup-config but no matching backend endpoint found" + }, { "type": "frontend_call_no_backend", "method": "DELETE", @@ -6709,6 +7478,62 @@ "severity": "HIGH", "message": "Frontend calls DELETE /contact-folders/{param}/permissions/{param} but no matching backend endpoint found" }, + { + "type": "frontend_call_no_backend", + "method": "GET", + "url": "/compliance/ai-registry", + "file": "api/compliance.ts", + "severity": "HIGH", + "message": "Frontend calls GET /compliance/ai-registry but no matching backend endpoint found" + }, + { + "type": "frontend_call_no_backend", + "method": "GET", + "url": "/compliance/dpia-template", + "file": "api/compliance.ts", + "severity": "HIGH", + "message": "Frontend calls GET /compliance/dpia-template but no matching backend endpoint found" + }, + { + "type": "frontend_call_no_backend", + "method": "GET", + "url": "/compliance/incidents", + "file": "api/compliance.ts", + "severity": "HIGH", + "message": "Frontend calls GET /compliance/incidents but no matching backend endpoint found" + }, + { + "type": "frontend_call_no_backend", + "method": "GET", + "url": "/compliance/retention-policies", + "file": "api/compliance.ts", + "severity": "HIGH", + "message": "Frontend calls GET /compliance/retention-policies but no matching backend endpoint found" + }, + { + "type": "frontend_call_no_backend", + "method": "POST", + "url": "/compliance/incidents", + "file": "api/compliance.ts", + "severity": "HIGH", + "message": "Frontend calls POST /compliance/incidents but no matching backend endpoint found" + }, + { + "type": "frontend_call_no_backend", + "method": "PATCH", + "url": "/compliance/incidents/{param}", + "file": "api/compliance.ts", + "severity": "HIGH", + "message": "Frontend calls PATCH /compliance/incidents/{param} but no matching backend endpoint found" + }, + { + "type": "frontend_call_no_backend", + "method": "PATCH", + "url": "/compliance/retention-policies/{param}", + "file": "api/compliance.ts", + "severity": "HIGH", + "message": "Frontend calls PATCH /compliance/retention-policies/{param} but no matching backend endpoint found" + }, { "type": "frontend_call_no_backend", "method": "GET", @@ -6733,6 +7558,94 @@ "severity": "HIGH", "message": "Frontend calls DELETE /saved-filters/{param} but no matching backend endpoint found" }, + { + "type": "frontend_call_no_backend", + "method": "GET", + "url": "/system/dashboard", + "file": "api/systemDashboard.ts", + "severity": "HIGH", + "message": "Frontend calls GET /system/dashboard but no matching backend endpoint found" + }, + { + "type": "frontend_call_no_backend", + "method": "GET", + "url": "/system/alerts", + "file": "api/systemDashboard.ts", + "severity": "HIGH", + "message": "Frontend calls GET /system/alerts but no matching backend endpoint found" + }, + { + "type": "frontend_call_no_backend", + "method": "GET", + "url": "/improvement/proposals/{param}", + "file": "api/improvement.ts", + "severity": "HIGH", + "message": "Frontend calls GET /improvement/proposals/{param} but no matching backend endpoint found" + }, + { + "type": "frontend_call_no_backend", + "method": "POST", + "url": "/improvement/signals/collect", + "file": "api/improvement.ts", + "severity": "HIGH", + "message": "Frontend calls POST /improvement/signals/collect but no matching backend endpoint found" + }, + { + "type": "frontend_call_no_backend", + "method": "POST", + "url": "/improvement/patterns/detect", + "file": "api/improvement.ts", + "severity": "HIGH", + "message": "Frontend calls POST /improvement/patterns/detect but no matching backend endpoint found" + }, + { + "type": "frontend_call_no_backend", + "method": "POST", + "url": "/improvement/proposals", + "file": "api/improvement.ts", + "severity": "HIGH", + "message": "Frontend calls POST /improvement/proposals but no matching backend endpoint found" + }, + { + "type": "frontend_call_no_backend", + "method": "POST", + "url": "/improvement/proposals/{param}/evaluate", + "file": "api/improvement.ts", + "severity": "HIGH", + "message": "Frontend calls POST /improvement/proposals/{param}/evaluate but no matching backend endpoint found" + }, + { + "type": "frontend_call_no_backend", + "method": "POST", + "url": "/improvement/proposals/{param}/request-approval", + "file": "api/improvement.ts", + "severity": "HIGH", + "message": "Frontend calls POST /improvement/proposals/{param}/request-approval but no matching backend endpoint found" + }, + { + "type": "frontend_call_no_backend", + "method": "POST", + "url": "/improvement/proposals/{param}/activate", + "file": "api/improvement.ts", + "severity": "HIGH", + "message": "Frontend calls POST /improvement/proposals/{param}/activate but no matching backend endpoint found" + }, + { + "type": "frontend_call_no_backend", + "method": "POST", + "url": "/improvement/proposals/{param}/rollback", + "file": "api/improvement.ts", + "severity": "HIGH", + "message": "Frontend calls POST /improvement/proposals/{param}/rollback but no matching backend endpoint found" + }, + { + "type": "frontend_call_no_backend", + "method": "POST", + "url": "/improvement/proposals/{param}/measure", + "file": "api/improvement.ts", + "severity": "HIGH", + "message": "Frontend calls POST /improvement/proposals/{param}/measure but no matching backend endpoint found" + }, { "type": "frontend_call_no_backend", "method": "GET", @@ -7333,6 +8246,22 @@ "severity": "LOW", "message": "Backend endpoint DELETE /{filter_id} is never called by frontend" }, + { + "type": "backend_endpoint_no_frontend", + "method": "GET", + "path": "/export", + "file": "routes/audit.py", + "severity": "LOW", + "message": "Backend endpoint GET /export is never called by frontend" + }, + { + "type": "backend_endpoint_no_frontend", + "method": "DELETE", + "path": "/retention", + "file": "routes/audit.py", + "severity": "LOW", + "message": "Backend endpoint DELETE /retention is never called by frontend" + }, { "type": "backend_endpoint_no_frontend", "method": "DELETE", @@ -8293,6 +9222,70 @@ "severity": "LOW", "message": "Backend endpoint POST /instances/{instance_id}/cancel is never called by frontend" }, + { + "type": "backend_endpoint_no_frontend", + "method": "POST", + "path": "/instances/{instance_id}/resume", + "file": "routes/workflows.py", + "severity": "LOW", + "message": "Backend endpoint POST /instances/{instance_id}/resume is never called by frontend" + }, + { + "type": "backend_endpoint_no_frontend", + "method": "POST", + "path": "/{workflow_id}/trigger", + "file": "routes/workflows.py", + "severity": "LOW", + "message": "Backend endpoint POST /{workflow_id}/trigger is never called by frontend" + }, + { + "type": "backend_endpoint_no_frontend", + "method": "POST", + "path": "/webhook/{token}", + "file": "routes/workflows.py", + "severity": "LOW", + "message": "Backend endpoint POST /webhook/{token} is never called by frontend" + }, + { + "type": "backend_endpoint_no_frontend", + "method": "GET", + "path": "/instances/{instance_id}/history", + "file": "routes/workflows.py", + "severity": "LOW", + "message": "Backend endpoint GET /instances/{instance_id}/history is never called by frontend" + }, + { + "type": "backend_endpoint_no_frontend", + "method": "POST", + "path": "/instances/{instance_id}/approve", + "file": "routes/workflows.py", + "severity": "LOW", + "message": "Backend endpoint POST /instances/{instance_id}/approve is never called by frontend" + }, + { + "type": "backend_endpoint_no_frontend", + "method": "POST", + "path": "/instances/{instance_id}/reject", + "file": "routes/workflows.py", + "severity": "LOW", + "message": "Backend endpoint POST /instances/{instance_id}/reject is never called by frontend" + }, + { + "type": "backend_endpoint_no_frontend", + "method": "GET", + "path": "/templates", + "file": "routes/workflows.py", + "severity": "LOW", + "message": "Backend endpoint GET /templates is never called by frontend" + }, + { + "type": "backend_endpoint_no_frontend", + "method": "POST", + "path": "/templates/{template_id}/instantiate", + "file": "routes/workflows.py", + "severity": "LOW", + "message": "Backend endpoint POST /templates/{template_id}/instantiate is never called by frontend" + }, { "type": "backend_endpoint_no_frontend", "method": "GET", @@ -8349,6 +9342,54 @@ "severity": "LOW", "message": "Backend endpoint POST /cleanup-published is never called by frontend" }, + { + "type": "backend_endpoint_no_frontend", + "method": "GET", + "path": "/backup-config", + "file": "routes/system_settings.py", + "severity": "LOW", + "message": "Backend endpoint GET /backup-config is never called by frontend" + }, + { + "type": "backend_endpoint_no_frontend", + "method": "PUT", + "path": "/backup-config", + "file": "routes/system_settings.py", + "severity": "LOW", + "message": "Backend endpoint PUT /backup-config is never called by frontend" + }, + { + "type": "backend_endpoint_no_frontend", + "method": "POST", + "path": "/backup-now", + "file": "routes/system_settings.py", + "severity": "LOW", + "message": "Backend endpoint POST /backup-now is never called by frontend" + }, + { + "type": "backend_endpoint_no_frontend", + "method": "GET", + "path": "/backup-history", + "file": "routes/system_settings.py", + "severity": "LOW", + "message": "Backend endpoint GET /backup-history is never called by frontend" + }, + { + "type": "backend_endpoint_no_frontend", + "method": "GET", + "path": "/dsgvo-export/{user_id}", + "file": "routes/system_settings.py", + "severity": "LOW", + "message": "Backend endpoint GET /dsgvo-export/{user_id} is never called by frontend" + }, + { + "type": "backend_endpoint_no_frontend", + "method": "POST", + "path": "/dsar/{user_id}", + "file": "routes/system_settings.py", + "severity": "LOW", + "message": "Backend endpoint POST /dsar/{user_id} is never called by frontend" + }, { "type": "backend_endpoint_no_frontend", "method": "POST", @@ -8693,6 +9734,110 @@ "severity": "LOW", "message": "Backend endpoint POST /install-marketplace is never called by frontend" }, + { + "type": "backend_endpoint_no_frontend", + "method": "GET", + "path": "/ai-registry", + "file": "routes/compliance.py", + "severity": "LOW", + "message": "Backend endpoint GET /ai-registry is never called by frontend" + }, + { + "type": "backend_endpoint_no_frontend", + "method": "GET", + "path": "/dpia-template", + "file": "routes/compliance.py", + "severity": "LOW", + "message": "Backend endpoint GET /dpia-template is never called by frontend" + }, + { + "type": "backend_endpoint_no_frontend", + "method": "GET", + "path": "/incidents", + "file": "routes/compliance.py", + "severity": "LOW", + "message": "Backend endpoint GET /incidents is never called by frontend" + }, + { + "type": "backend_endpoint_no_frontend", + "method": "POST", + "path": "/incidents", + "file": "routes/compliance.py", + "severity": "LOW", + "message": "Backend endpoint POST /incidents is never called by frontend" + }, + { + "type": "backend_endpoint_no_frontend", + "method": "PATCH", + "path": "/incidents/{incident_id}", + "file": "routes/compliance.py", + "severity": "LOW", + "message": "Backend endpoint PATCH /incidents/{incident_id} is never called by frontend" + }, + { + "type": "backend_endpoint_no_frontend", + "method": "GET", + "path": "/retention-policies", + "file": "routes/compliance.py", + "severity": "LOW", + "message": "Backend endpoint GET /retention-policies is never called by frontend" + }, + { + "type": "backend_endpoint_no_frontend", + "method": "PATCH", + "path": "/retention-policies/{key}", + "file": "routes/compliance.py", + "severity": "LOW", + "message": "Backend endpoint PATCH /retention-policies/{key} is never called by frontend" + }, + { + "type": "backend_endpoint_no_frontend", + "method": "GET", + "path": "/{request_id}", + "file": "routes/approvals.py", + "severity": "LOW", + "message": "Backend endpoint GET /{request_id} is never called by frontend" + }, + { + "type": "backend_endpoint_no_frontend", + "method": "POST", + "path": "/{request_id}/approve", + "file": "routes/approvals.py", + "severity": "LOW", + "message": "Backend endpoint POST /{request_id}/approve is never called by frontend" + }, + { + "type": "backend_endpoint_no_frontend", + "method": "POST", + "path": "/{request_id}/reject", + "file": "routes/approvals.py", + "severity": "LOW", + "message": "Backend endpoint POST /{request_id}/reject is never called by frontend" + }, + { + "type": "backend_endpoint_no_frontend", + "method": "POST", + "path": "/{request_id}/expire", + "file": "routes/approvals.py", + "severity": "LOW", + "message": "Backend endpoint POST /{request_id}/expire is never called by frontend" + }, + { + "type": "backend_endpoint_no_frontend", + "method": "GET", + "path": "/dashboard", + "file": "routes/system_dashboard.py", + "severity": "LOW", + "message": "Backend endpoint GET /dashboard is never called by frontend" + }, + { + "type": "backend_endpoint_no_frontend", + "method": "GET", + "path": "/alerts", + "file": "routes/system_dashboard.py", + "severity": "LOW", + "message": "Backend endpoint GET /alerts is never called by frontend" + }, { "type": "backend_endpoint_no_frontend", "method": "GET", @@ -8925,6 +10070,38 @@ "severity": "LOW", "message": "Backend endpoint POST /subtasks/aggregate is never called by frontend" }, + { + "type": "backend_endpoint_no_frontend", + "method": "POST", + "path": "/", + "file": "plugins/builtins/automation/skill_routes.py", + "severity": "LOW", + "message": "Backend endpoint POST / is never called by frontend" + }, + { + "type": "backend_endpoint_no_frontend", + "method": "GET", + "path": "/{skill_id}", + "file": "plugins/builtins/automation/skill_routes.py", + "severity": "LOW", + "message": "Backend endpoint GET /{skill_id} is never called by frontend" + }, + { + "type": "backend_endpoint_no_frontend", + "method": "PATCH", + "path": "/{skill_id}", + "file": "plugins/builtins/automation/skill_routes.py", + "severity": "LOW", + "message": "Backend endpoint PATCH /{skill_id} is never called by frontend" + }, + { + "type": "backend_endpoint_no_frontend", + "method": "DELETE", + "path": "/{skill_id}", + "file": "plugins/builtins/automation/skill_routes.py", + "severity": "LOW", + "message": "Backend endpoint DELETE /{skill_id} is never called by frontend" + }, { "type": "backend_endpoint_no_frontend", "method": "POST", @@ -8965,6 +10142,22 @@ "severity": "LOW", "message": "Backend endpoint PATCH /{agent_id} is never called by frontend" }, + { + "type": "backend_endpoint_no_frontend", + "method": "GET", + "path": "/{agent_id}/ai-use-case", + "file": "plugins/builtins/automation/agent_routes.py", + "severity": "LOW", + "message": "Backend endpoint GET /{agent_id}/ai-use-case is never called by frontend" + }, + { + "type": "backend_endpoint_no_frontend", + "method": "PATCH", + "path": "/{agent_id}/ai-use-case", + "file": "plugins/builtins/automation/agent_routes.py", + "severity": "LOW", + "message": "Backend endpoint PATCH /{agent_id}/ai-use-case is never called by frontend" + }, { "type": "backend_endpoint_no_frontend", "method": "DELETE", @@ -9021,6 +10214,14 @@ "severity": "LOW", "message": "Backend endpoint POST /{id}/send-message is never called by frontend" }, + { + "type": "backend_endpoint_no_frontend", + "method": "POST", + "path": "/{id}/stream", + "file": "plugins/builtins/automation/agent_routes.py", + "severity": "LOW", + "message": "Backend endpoint POST /{id}/stream is never called by frontend" + }, { "type": "backend_endpoint_no_frontend", "method": "GET", @@ -9573,6 +10774,78 @@ "severity": "LOW", "message": "Backend endpoint GET /{mail_id} is never called by frontend" }, + { + "type": "backend_endpoint_no_frontend", + "method": "GET", + "path": "/articles", + "file": "plugins/builtins/wiki/routes.py", + "severity": "LOW", + "message": "Backend endpoint GET /articles is never called by frontend" + }, + { + "type": "backend_endpoint_no_frontend", + "method": "POST", + "path": "/articles", + "file": "plugins/builtins/wiki/routes.py", + "severity": "LOW", + "message": "Backend endpoint POST /articles is never called by frontend" + }, + { + "type": "backend_endpoint_no_frontend", + "method": "GET", + "path": "/articles/{article_id}", + "file": "plugins/builtins/wiki/routes.py", + "severity": "LOW", + "message": "Backend endpoint GET /articles/{article_id} is never called by frontend" + }, + { + "type": "backend_endpoint_no_frontend", + "method": "PATCH", + "path": "/articles/{article_id}", + "file": "plugins/builtins/wiki/routes.py", + "severity": "LOW", + "message": "Backend endpoint PATCH /articles/{article_id} is never called by frontend" + }, + { + "type": "backend_endpoint_no_frontend", + "method": "DELETE", + "path": "/articles/{article_id}", + "file": "plugins/builtins/wiki/routes.py", + "severity": "LOW", + "message": "Backend endpoint DELETE /articles/{article_id} is never called by frontend" + }, + { + "type": "backend_endpoint_no_frontend", + "method": "GET", + "path": "/articles/{article_id}/versions", + "file": "plugins/builtins/wiki/routes.py", + "severity": "LOW", + "message": "Backend endpoint GET /articles/{article_id}/versions is never called by frontend" + }, + { + "type": "backend_endpoint_no_frontend", + "method": "POST", + "path": "/articles/{article_id}/versions/{version}/restore", + "file": "plugins/builtins/wiki/routes.py", + "severity": "LOW", + "message": "Backend endpoint POST /articles/{article_id}/versions/{version}/restore is never called by frontend" + }, + { + "type": "backend_endpoint_no_frontend", + "method": "GET", + "path": "/categories", + "file": "plugins/builtins/wiki/routes.py", + "severity": "LOW", + "message": "Backend endpoint GET /categories is never called by frontend" + }, + { + "type": "backend_endpoint_no_frontend", + "method": "POST", + "path": "/categories", + "file": "plugins/builtins/wiki/routes.py", + "severity": "LOW", + "message": "Backend endpoint POST /categories is never called by frontend" + }, { "type": "backend_endpoint_no_frontend", "method": "GET", @@ -9613,6 +10886,46 @@ "severity": "LOW", "message": "Backend endpoint POST /{task_id}/status is never called by frontend" }, + { + "type": "backend_endpoint_no_frontend", + "method": "POST", + "path": "/{task_id}/subtasks", + "file": "plugins/builtins/tasks/routes.py", + "severity": "LOW", + "message": "Backend endpoint POST /{task_id}/subtasks is never called by frontend" + }, + { + "type": "backend_endpoint_no_frontend", + "method": "GET", + "path": "/{task_id}/subtasks", + "file": "plugins/builtins/tasks/routes.py", + "severity": "LOW", + "message": "Backend endpoint GET /{task_id}/subtasks is never called by frontend" + }, + { + "type": "backend_endpoint_no_frontend", + "method": "POST", + "path": "/{task_id}/dependencies", + "file": "plugins/builtins/tasks/routes.py", + "severity": "LOW", + "message": "Backend endpoint POST /{task_id}/dependencies is never called by frontend" + }, + { + "type": "backend_endpoint_no_frontend", + "method": "DELETE", + "path": "/{task_id}/dependencies/{depends_on}", + "file": "plugins/builtins/tasks/routes.py", + "severity": "LOW", + "message": "Backend endpoint DELETE /{task_id}/dependencies/{depends_on} is never called by frontend" + }, + { + "type": "backend_endpoint_no_frontend", + "method": "POST", + "path": "/{task_id}/decompose", + "file": "plugins/builtins/tasks/routes.py", + "severity": "LOW", + "message": "Backend endpoint POST /{task_id}/decompose is never called by frontend" + }, { "type": "backend_endpoint_no_frontend", "method": "GET", @@ -9917,6 +11230,38 @@ "severity": "LOW", "message": "Backend endpoint GET /{report_id}/download is never called by frontend" }, + { + "type": "backend_endpoint_no_frontend", + "method": "POST", + "path": "/extract", + "file": "plugins/builtins/knowledge/routes.py", + "severity": "LOW", + "message": "Backend endpoint POST /extract is never called by frontend" + }, + { + "type": "backend_endpoint_no_frontend", + "method": "POST", + "path": "/ask", + "file": "plugins/builtins/knowledge/routes.py", + "severity": "LOW", + "message": "Backend endpoint POST /ask is never called by frontend" + }, + { + "type": "backend_endpoint_no_frontend", + "method": "GET", + "path": "/review", + "file": "plugins/builtins/knowledge/routes.py", + "severity": "LOW", + "message": "Backend endpoint GET /review is never called by frontend" + }, + { + "type": "backend_endpoint_no_frontend", + "method": "POST", + "path": "/review/{extraction_id}", + "file": "plugins/builtins/knowledge/routes.py", + "severity": "LOW", + "message": "Backend endpoint POST /review/{extraction_id} is never called by frontend" + }, { "type": "backend_endpoint_no_frontend", "method": "POST", @@ -10325,54 +11670,6 @@ "severity": "LOW", "message": "Backend endpoint GET /tools is never called by frontend" }, - { - "type": "backend_endpoint_no_frontend", - "method": "GET", - "path": "/sessions", - "file": "plugins/builtins/ai_assistant/routes.py", - "severity": "LOW", - "message": "Backend endpoint GET /sessions is never called by frontend" - }, - { - "type": "backend_endpoint_no_frontend", - "method": "POST", - "path": "/sessions", - "file": "plugins/builtins/ai_assistant/routes.py", - "severity": "LOW", - "message": "Backend endpoint POST /sessions is never called by frontend" - }, - { - "type": "backend_endpoint_no_frontend", - "method": "PUT", - "path": "/sessions/{session_id}", - "file": "plugins/builtins/ai_assistant/routes.py", - "severity": "LOW", - "message": "Backend endpoint PUT /sessions/{session_id} is never called by frontend" - }, - { - "type": "backend_endpoint_no_frontend", - "method": "DELETE", - "path": "/sessions/{session_id}", - "file": "plugins/builtins/ai_assistant/routes.py", - "severity": "LOW", - "message": "Backend endpoint DELETE /sessions/{session_id} is never called by frontend" - }, - { - "type": "backend_endpoint_no_frontend", - "method": "GET", - "path": "/sessions/{session_id}/messages", - "file": "plugins/builtins/ai_assistant/routes.py", - "severity": "LOW", - "message": "Backend endpoint GET /sessions/{session_id}/messages is never called by frontend" - }, - { - "type": "backend_endpoint_no_frontend", - "method": "POST", - "path": "/sessions/{session_id}/stream", - "file": "plugins/builtins/ai_assistant/routes.py", - "severity": "LOW", - "message": "Backend endpoint POST /sessions/{session_id}/stream is never called by frontend" - }, { "type": "backend_endpoint_no_frontend", "method": "GET", @@ -10408,26 +11705,18 @@ { "type": "backend_endpoint_no_frontend", "method": "POST", - "path": "/sessions/{session_id}/attachments", + "path": "/conversations/{conversation_id}/stream", "file": "plugins/builtins/ai_assistant/routes.py", "severity": "LOW", - "message": "Backend endpoint POST /sessions/{session_id}/attachments is never called by frontend" + "message": "Backend endpoint POST /conversations/{conversation_id}/stream is never called by frontend" }, { "type": "backend_endpoint_no_frontend", "method": "GET", - "path": "/sessions/{session_id}/attachments", + "path": "/conversations/{conversation_id}/messages", "file": "plugins/builtins/ai_assistant/routes.py", "severity": "LOW", - "message": "Backend endpoint GET /sessions/{session_id}/attachments is never called by frontend" - }, - { - "type": "backend_endpoint_no_frontend", - "method": "GET", - "path": "/attachments/{attachment_id}/download", - "file": "plugins/builtins/ai_assistant/routes.py", - "severity": "LOW", - "message": "Backend endpoint GET /attachments/{attachment_id}/download is never called by frontend" + "message": "Backend endpoint GET /conversations/{conversation_id}/messages is never called by frontend" }, { "type": "backend_endpoint_no_frontend", @@ -10588,13 +11877,109 @@ "file": "plugins/builtins/ai_ui_control/routes.py", "severity": "LOW", "message": "Backend endpoint GET /online-users is never called by frontend" + }, + { + "type": "backend_endpoint_no_frontend", + "method": "POST", + "path": "/signals/collect", + "file": "plugins/builtins/self_improvement/routes.py", + "severity": "LOW", + "message": "Backend endpoint POST /signals/collect is never called by frontend" + }, + { + "type": "backend_endpoint_no_frontend", + "method": "GET", + "path": "/signals", + "file": "plugins/builtins/self_improvement/routes.py", + "severity": "LOW", + "message": "Backend endpoint GET /signals is never called by frontend" + }, + { + "type": "backend_endpoint_no_frontend", + "method": "POST", + "path": "/patterns/detect", + "file": "plugins/builtins/self_improvement/routes.py", + "severity": "LOW", + "message": "Backend endpoint POST /patterns/detect is never called by frontend" + }, + { + "type": "backend_endpoint_no_frontend", + "method": "GET", + "path": "/patterns", + "file": "plugins/builtins/self_improvement/routes.py", + "severity": "LOW", + "message": "Backend endpoint GET /patterns is never called by frontend" + }, + { + "type": "backend_endpoint_no_frontend", + "method": "POST", + "path": "/proposals", + "file": "plugins/builtins/self_improvement/routes.py", + "severity": "LOW", + "message": "Backend endpoint POST /proposals is never called by frontend" + }, + { + "type": "backend_endpoint_no_frontend", + "method": "GET", + "path": "/proposals", + "file": "plugins/builtins/self_improvement/routes.py", + "severity": "LOW", + "message": "Backend endpoint GET /proposals is never called by frontend" + }, + { + "type": "backend_endpoint_no_frontend", + "method": "GET", + "path": "/proposals/{proposal_id}", + "file": "plugins/builtins/self_improvement/routes.py", + "severity": "LOW", + "message": "Backend endpoint GET /proposals/{proposal_id} is never called by frontend" + }, + { + "type": "backend_endpoint_no_frontend", + "method": "POST", + "path": "/proposals/{proposal_id}/evaluate", + "file": "plugins/builtins/self_improvement/routes.py", + "severity": "LOW", + "message": "Backend endpoint POST /proposals/{proposal_id}/evaluate is never called by frontend" + }, + { + "type": "backend_endpoint_no_frontend", + "method": "POST", + "path": "/proposals/{proposal_id}/request-approval", + "file": "plugins/builtins/self_improvement/routes.py", + "severity": "LOW", + "message": "Backend endpoint POST /proposals/{proposal_id}/request-approval is never called by frontend" + }, + { + "type": "backend_endpoint_no_frontend", + "method": "POST", + "path": "/proposals/{proposal_id}/activate", + "file": "plugins/builtins/self_improvement/routes.py", + "severity": "LOW", + "message": "Backend endpoint POST /proposals/{proposal_id}/activate is never called by frontend" + }, + { + "type": "backend_endpoint_no_frontend", + "method": "POST", + "path": "/proposals/{proposal_id}/rollback", + "file": "plugins/builtins/self_improvement/routes.py", + "severity": "LOW", + "message": "Backend endpoint POST /proposals/{proposal_id}/rollback is never called by frontend" + }, + { + "type": "backend_endpoint_no_frontend", + "method": "POST", + "path": "/proposals/{proposal_id}/measure", + "file": "plugins/builtins/self_improvement/routes.py", + "severity": "LOW", + "message": "Backend endpoint POST /proposals/{proposal_id}/measure is never called by frontend" } ], "summary": { - "total_frontend_calls": 363, - "total_backend_endpoints": 419, - "total_issues": 758, - "high_severity": 350, - "low_severity": 408 + "total_frontend_calls": 405, + "total_backend_endpoints": 478, + "total_issues": 859, + "high_severity": 392, + "low_severity": 467 } } \ No newline at end of file diff --git a/scripts/test_suite/results_trace_contracts.json b/scripts/test_suite/results_trace_contracts.json index 7f45be2..c922920 100644 --- a/scripts/test_suite/results_trace_contracts.json +++ b/scripts/test_suite/results_trace_contracts.json @@ -321,6 +321,11 @@ "contract": "DmsContract", "attribute": "DmsFile", "file": "app/plugins/builtins/permissions/public_routes.py" + }, + { + "contract": "KommunikationContract", + "attribute": "send_message", + "file": "app/plugins/builtins/self_improvement/services.py" } ], "mismatches": [] diff --git a/scripts/test_suite/results_trace_functions.json b/scripts/test_suite/results_trace_functions.json index de4a117..ca54a4e 100644 --- a/scripts/test_suite/results_trace_functions.json +++ b/scripts/test_suite/results_trace_functions.json @@ -1,8 +1,8 @@ { - "py_defs": 1575, - "py_dead": 627, - "ts_defs": 959, - "ts_dead": 442, + "py_defs": 1773, + "py_dead": 692, + "ts_defs": 1020, + "ts_dead": 457, "critical_dead": [ { "name": "seed_default_workspace", diff --git a/scripts/test_suite/results_trace_hooks.json b/scripts/test_suite/results_trace_hooks.json index b8c47b5..c5aeeef 100644 --- a/scripts/test_suite/results_trace_hooks.json +++ b/scripts/test_suite/results_trace_hooks.json @@ -32,6 +32,10 @@ "file": "app/plugins/builtins/mail/plugin.py", "hook_name": "mail.after_delete" }, + { + "file": "app/plugins/builtins/wiki/plugin.py", + "hook_name": "wiki" + }, { "file": "app/plugins/builtins/contacts/plugin.py", "hook_name": "contact.after_create" @@ -67,6 +71,18 @@ { "file": "app/plugins/builtins/calendar/plugin.py", "hook_name": "calendar_entry.after_delete" + }, + { + "file": "app/plugins/builtins/knowledge/plugin.py", + "hook_name": "wiki.article.created" + }, + { + "file": "app/plugins/builtins/knowledge/plugin.py", + "hook_name": "wiki.article.updated" + }, + { + "file": "app/plugins/builtins/knowledge/plugin.py", + "hook_name": "knowledge" } ], "triggers": [ @@ -94,6 +110,14 @@ "file": "app/routes/companies.py", "hook_name": "company.after_delete" }, + { + "file": "app/ai/agent_loop.py", + "hook_name": "agent.step" + }, + { + "file": "app/ai/agent_loop.py", + "hook_name": "agent.step" + }, { "file": "app/services/contact_service.py", "hook_name": "contact.before_create" @@ -407,7 +431,24 @@ "hook_name": "tag.after_delete" } ], - "orphan_registrations": [], + "orphan_registrations": [ + { + "file": "app/plugins/builtins/wiki/plugin.py", + "hook_name": "wiki" + }, + { + "file": "app/plugins/builtins/knowledge/plugin.py", + "hook_name": "wiki.article.created" + }, + { + "file": "app/plugins/builtins/knowledge/plugin.py", + "hook_name": "wiki.article.updated" + }, + { + "file": "app/plugins/builtins/knowledge/plugin.py", + "hook_name": "knowledge" + } + ], "orphan_triggers": [ { "file": "app/routes/companies.py", @@ -433,6 +474,14 @@ "file": "app/routes/companies.py", "hook_name": "company.after_delete" }, + { + "file": "app/ai/agent_loop.py", + "hook_name": "agent.step" + }, + { + "file": "app/ai/agent_loop.py", + "hook_name": "agent.step" + }, { "file": "app/services/contact_service.py", "hook_name": "contact.before_update" diff --git a/scripts/test_suite/results_trace_imports.json b/scripts/test_suite/results_trace_imports.json index 0624dc5..f24a07c 100644 --- a/scripts/test_suite/results_trace_imports.json +++ b/scripts/test_suite/results_trace_imports.json @@ -1,6 +1,34 @@ { - "total_imports": 2251, + "total_imports": 2556, "broken": [ + { + "file": "app/workflows/step_handlers.py", + "module": "app.services.company_service", + "name": "create_company", + "line": 447, + "issue": "Module not found" + }, + { + "file": "app/workflows/step_handlers.py", + "module": "app.services.company_service", + "name": "update_company", + "line": 451, + "issue": "Module not found" + }, + { + "file": "app/routes/workflows.py", + "module": "app.core.approval", + "name": "decide_approval", + "line": 476, + "issue": "Name 'decide_approval' not found in module" + }, + { + "file": "app/routes/workflows.py", + "module": "app.core.approval", + "name": "decide_approval", + "line": 539, + "issue": "Name 'decide_approval' not found in module" + }, { "file": "app/core/auth.py", "module": "app.models.session", diff --git a/scripts/test_suite/results_trace_plugins.json b/scripts/test_suite/results_trace_plugins.json index 95c1667..8894de0 100644 --- a/scripts/test_suite/results_trace_plugins.json +++ b/scripts/test_suite/results_trace_plugins.json @@ -30,6 +30,11 @@ "path": "app/plugins/builtins/migrations", "has_manifest": false }, + { + "name": "wiki", + "path": "app/plugins/builtins/wiki", + "has_manifest": false + }, { "name": "tests", "path": "app/plugins/builtins/tests", @@ -80,6 +85,11 @@ "path": "app/plugins/builtins/system_notif", "has_manifest": false }, + { + "name": "knowledge", + "path": "app/plugins/builtins/knowledge", + "has_manifest": false + }, { "name": "entity_links", "path": "app/plugins/builtins/entity_links", @@ -119,6 +129,11 @@ "name": "ai_ui_control", "path": "app/plugins/builtins/ai_ui_control", "has_manifest": false + }, + { + "name": "self_improvement", + "path": "app/plugins/builtins/self_improvement", + "has_manifest": false } ], "frontend_refs": {}, @@ -268,6 +283,26 @@ "path": "/subtasks/aggregate", "file": "app/plugins/builtins/automation/routes.py" }, + { + "method": "POST", + "path": "/", + "file": "app/plugins/builtins/automation/skill_routes.py" + }, + { + "method": "GET", + "path": "/{skill_id}", + "file": "app/plugins/builtins/automation/skill_routes.py" + }, + { + "method": "PATCH", + "path": "/{skill_id}", + "file": "app/plugins/builtins/automation/skill_routes.py" + }, + { + "method": "DELETE", + "path": "/{skill_id}", + "file": "app/plugins/builtins/automation/skill_routes.py" + }, { "method": "POST", "path": "/", @@ -293,6 +328,16 @@ "path": "/{agent_id}", "file": "app/plugins/builtins/automation/agent_routes.py" }, + { + "method": "GET", + "path": "/{agent_id}/ai-use-case", + "file": "app/plugins/builtins/automation/agent_routes.py" + }, + { + "method": "PATCH", + "path": "/{agent_id}/ai-use-case", + "file": "app/plugins/builtins/automation/agent_routes.py" + }, { "method": "DELETE", "path": "/{agent_id}", @@ -328,6 +373,11 @@ "path": "/{id}/send-message", "file": "app/plugins/builtins/automation/agent_routes.py" }, + { + "method": "POST", + "path": "/{id}/stream", + "file": "app/plugins/builtins/automation/agent_routes.py" + }, { "method": "GET", "path": "/folders", @@ -673,6 +723,51 @@ "path": "/{mail_id}", "file": "app/plugins/builtins/mail/routes.py" }, + { + "method": "GET", + "path": "/articles", + "file": "app/plugins/builtins/wiki/routes.py" + }, + { + "method": "POST", + "path": "/articles", + "file": "app/plugins/builtins/wiki/routes.py" + }, + { + "method": "GET", + "path": "/articles/{article_id}", + "file": "app/plugins/builtins/wiki/routes.py" + }, + { + "method": "PATCH", + "path": "/articles/{article_id}", + "file": "app/plugins/builtins/wiki/routes.py" + }, + { + "method": "DELETE", + "path": "/articles/{article_id}", + "file": "app/plugins/builtins/wiki/routes.py" + }, + { + "method": "GET", + "path": "/articles/{article_id}/versions", + "file": "app/plugins/builtins/wiki/routes.py" + }, + { + "method": "POST", + "path": "/articles/{article_id}/versions/{version}/restore", + "file": "app/plugins/builtins/wiki/routes.py" + }, + { + "method": "GET", + "path": "/categories", + "file": "app/plugins/builtins/wiki/routes.py" + }, + { + "method": "POST", + "path": "/categories", + "file": "app/plugins/builtins/wiki/routes.py" + }, { "method": "GET", "path": "/{task_id}", @@ -698,6 +793,31 @@ "path": "/{task_id}/status", "file": "app/plugins/builtins/tasks/routes.py" }, + { + "method": "POST", + "path": "/{task_id}/subtasks", + "file": "app/plugins/builtins/tasks/routes.py" + }, + { + "method": "GET", + "path": "/{task_id}/subtasks", + "file": "app/plugins/builtins/tasks/routes.py" + }, + { + "method": "POST", + "path": "/{task_id}/dependencies", + "file": "app/plugins/builtins/tasks/routes.py" + }, + { + "method": "DELETE", + "path": "/{task_id}/dependencies/{depends_on}", + "file": "app/plugins/builtins/tasks/routes.py" + }, + { + "method": "POST", + "path": "/{task_id}/decompose", + "file": "app/plugins/builtins/tasks/routes.py" + }, { "method": "GET", "path": "/calendar/entries", @@ -928,6 +1048,26 @@ "path": "/{report_id}/download", "file": "app/plugins/builtins/report_generator/routes.py" }, + { + "method": "POST", + "path": "/extract", + "file": "app/plugins/builtins/knowledge/routes.py" + }, + { + "method": "POST", + "path": "/ask", + "file": "app/plugins/builtins/knowledge/routes.py" + }, + { + "method": "GET", + "path": "/review", + "file": "app/plugins/builtins/knowledge/routes.py" + }, + { + "method": "POST", + "path": "/review/{extraction_id}", + "file": "app/plugins/builtins/knowledge/routes.py" + }, { "method": "POST", "path": "/files/{file_id}/link", @@ -1198,36 +1338,6 @@ "path": "/tools", "file": "app/plugins/builtins/ai_assistant/routes.py" }, - { - "method": "GET", - "path": "/sessions", - "file": "app/plugins/builtins/ai_assistant/routes.py" - }, - { - "method": "POST", - "path": "/sessions", - "file": "app/plugins/builtins/ai_assistant/routes.py" - }, - { - "method": "PUT", - "path": "/sessions/{session_id}", - "file": "app/plugins/builtins/ai_assistant/routes.py" - }, - { - "method": "DELETE", - "path": "/sessions/{session_id}", - "file": "app/plugins/builtins/ai_assistant/routes.py" - }, - { - "method": "GET", - "path": "/sessions/{session_id}/messages", - "file": "app/plugins/builtins/ai_assistant/routes.py" - }, - { - "method": "POST", - "path": "/sessions/{session_id}/stream", - "file": "app/plugins/builtins/ai_assistant/routes.py" - }, { "method": "GET", "path": "/folders", @@ -1250,17 +1360,12 @@ }, { "method": "POST", - "path": "/sessions/{session_id}/attachments", + "path": "/conversations/{conversation_id}/stream", "file": "app/plugins/builtins/ai_assistant/routes.py" }, { "method": "GET", - "path": "/sessions/{session_id}/attachments", - "file": "app/plugins/builtins/ai_assistant/routes.py" - }, - { - "method": "GET", - "path": "/attachments/{attachment_id}/download", + "path": "/conversations/{conversation_id}/messages", "file": "app/plugins/builtins/ai_assistant/routes.py" }, { @@ -1362,6 +1467,66 @@ "method": "GET", "path": "/online-users", "file": "app/plugins/builtins/ai_ui_control/routes.py" + }, + { + "method": "POST", + "path": "/signals/collect", + "file": "app/plugins/builtins/self_improvement/routes.py" + }, + { + "method": "GET", + "path": "/signals", + "file": "app/plugins/builtins/self_improvement/routes.py" + }, + { + "method": "POST", + "path": "/patterns/detect", + "file": "app/plugins/builtins/self_improvement/routes.py" + }, + { + "method": "GET", + "path": "/patterns", + "file": "app/plugins/builtins/self_improvement/routes.py" + }, + { + "method": "POST", + "path": "/proposals", + "file": "app/plugins/builtins/self_improvement/routes.py" + }, + { + "method": "GET", + "path": "/proposals", + "file": "app/plugins/builtins/self_improvement/routes.py" + }, + { + "method": "GET", + "path": "/proposals/{proposal_id}", + "file": "app/plugins/builtins/self_improvement/routes.py" + }, + { + "method": "POST", + "path": "/proposals/{proposal_id}/evaluate", + "file": "app/plugins/builtins/self_improvement/routes.py" + }, + { + "method": "POST", + "path": "/proposals/{proposal_id}/request-approval", + "file": "app/plugins/builtins/self_improvement/routes.py" + }, + { + "method": "POST", + "path": "/proposals/{proposal_id}/activate", + "file": "app/plugins/builtins/self_improvement/routes.py" + }, + { + "method": "POST", + "path": "/proposals/{proposal_id}/rollback", + "file": "app/plugins/builtins/self_improvement/routes.py" + }, + { + "method": "POST", + "path": "/proposals/{proposal_id}/measure", + "file": "app/plugins/builtins/self_improvement/routes.py" } ], "issues": [ @@ -1395,6 +1560,11 @@ "issue": "No manifest.py", "severity": "HIGH" }, + { + "plugin": "wiki", + "issue": "No manifest.py", + "severity": "HIGH" + }, { "plugin": "tests", "issue": "No manifest.py", @@ -1445,6 +1615,11 @@ "issue": "No manifest.py", "severity": "HIGH" }, + { + "plugin": "knowledge", + "issue": "No manifest.py", + "severity": "HIGH" + }, { "plugin": "entity_links", "issue": "No manifest.py", @@ -1484,6 +1659,11 @@ "plugin": "ai_ui_control", "issue": "No manifest.py", "severity": "HIGH" + }, + { + "plugin": "self_improvement", + "issue": "No manifest.py", + "severity": "HIGH" } ] } \ No newline at end of file diff --git a/scripts/test_suite/results_trace_stores.json b/scripts/test_suite/results_trace_stores.json index 89d92e4..4243f1a 100644 --- a/scripts/test_suite/results_trace_stores.json +++ b/scripts/test_suite/results_trace_stores.json @@ -1,701 +1,701 @@ { "stores": { "calendarStore": [ - "visibleCalendarIds", - "setActiveCalendarId", - "rangeEnd", - "mode", - "setVisibleWeek", - "setVisibleMonth", - "visibleMonth", - "setViewMode", "goToNextDay", - "setSelectedEntry", - "goToNextMonth", "goToToday", - "goToNextWeek", - "visibleDay", + "setVisibleWeek", "calendars", - "setRangeStart", - "visibleWeek", - "goToPrevMonth", "rangeStart", - "toggleCalendarVisibility", - "goToPrevWeek", - "selectedEntry", "setVisibleDay", + "visibleCalendarIds", + "viewMode", + "setRangeStart", + "setActiveCalendarId", + "visibleMonth", + "goToPrevMonth", + "goToPrevWeek", "setCalendars", + "entry", + "activeCalendarId", + "selectedEntry", + "toggleCalendarVisibility", + "visibleWeek", + "mode", + "goToNextMonth", + "rangeEnd", + "setSelectedEntry", + "visibleDay", + "setRangeEnd", + "goToNextWeek", + "setViewMode", "goToPrevDay", "date", - "viewMode", - "setRangeEnd", - "activeCalendarId", - "entry" + "setVisibleMonth" ], "aiUIControlStore": [ - "setActiveTab", - "setActiveCommand", - "modal", - "connected", - "value", - "activeCommand", - "lastFeedback", - "commandHistory", - "status", - "settings", + "feedback", "pendingFilter", - "activeTab", - "setLastFeedback", - "activeModal", - "active", - "pendingSettings", - "filter", - "setConnected", - "setAIActive", - "setPendingSettings", + "addCommandToHistory", "setActiveModal", "clearPending", - "section", - "action", + "status", + "lastFeedback", "command_id", - "aiActive", + "section", + "active", + "activeTab", + "settings", "entity", + "modal", + "connected", + "activeCommand", + "activeModal", + "value", + "setAIActive", + "setPendingSettings", + "pendingSettings", + "setActiveTab", + "commandHistory", + "setConnected", "setPendingFilter", - "addCommandToHistory", - "feedback" + "action", + "setActiveCommand", + "filter", + "aiActive", + "setLastFeedback" ], "onboardingStore": [ - "complete", - "skip", - "skipped", - "goToStep", - "isActive", - "reset", "completed", "prev", - "data", + "complete", "next", - "start", - "step" + "skip", + "data", + "isActive", + "step", + "skipped", + "reset", + "goToStep", + "start" ], "windowStore": [ - "title", - "closeWindow", - "updateWindowSize", - "toggleFullscreen", - "null", - "restoreWindow", - "componentProps", - "component", - "size", - "windows", - "type", "height", - "toggleAiChat", - "updateWindowPosition", + "closeWindow", "activeWindowId", - "openWindow", - "minimizeWindow", - "position", - "aiChatVisible", - "const", - "zIndex", - "config", - "newWindow", - "nextZIndex", + "title", "width", - "setActiveWindow" + "type", + "aiChatVisible", + "setActiveWindow", + "config", + "windows", + "const", + "component", + "toggleAiChat", + "componentProps", + "position", + "updateWindowSize", + "updateWindowPosition", + "zIndex", + "openWindow", + "toggleFullscreen", + "size", + "null", + "newWindow", + "restoreWindow", + "nextZIndex", + "minimizeWindow" ], "commandPaletteStore": [ - "open", - "isOpen", "close", - "toggle" + "isOpen", + "toggle", + "open" ], "pluginToolbarStore": [ - "updateItem", - "unregisterPlugin", - "plugin", - "items", - "null", "registerItems", + "unregisterPlugin", "value", "activePlugin", + "items", "updates", + "null", + "query", + "label", + "updateItem", "onClick", "setActivePlugin", - "query", - "label" + "plugin" ], "commStore": [ - "title", + "display_name", + "participant_id", + "addMessage", + "file_id", + "file_source", "last_msg_sender_type", "attachments", - "edited_at", - "participant_id", - "content", - "content_format", - "role", - "unreadCounts", - "is_archived", - "block_data", - "is_direct", - "file_size", - "sender_id", - "locked_by", - "convs", - "setTyping", - "file_source", - "blocks", - "setUnread", - "thumbnail_path", - "sender_type", - "count", - "is_locked", - "participant_type", - "userIds", - "setLoading", - "metadata", - "created_by", - "file_id", - "unread_count", "conversations", - "last_msg_preview", + "is_archived", + "sender_id", + "setTyping", "reactions", - "reply_to_id", - "messages", - "display_name", - "block_type", - "setActiveConversation", - "sort_order", - "conv", - "updateConversation", "created_by_type", - "msgs", - "addMessage", - "last_msg_at", - "activeConversationId", - "setConversations", - "file_name", "setMessages", - "conversation_id", - "is_pinned", - "created_at", - "loading", - "typingUsers", - "convId", + "title", + "block_data", + "conv", + "participant_type", + "participants", + "unreadCounts", + "is_locked", "file_type", - "participants" + "blocks", + "content_format", + "setUnread", + "last_msg_at", + "created_at", + "last_msg_preview", + "messages", + "loading", + "count", + "role", + "edited_at", + "convs", + "setLoading", + "created_by", + "setActiveConversation", + "is_direct", + "thumbnail_path", + "reply_to_id", + "msgs", + "convId", + "conversation_id", + "userIds", + "activeConversationId", + "block_type", + "sort_order", + "file_size", + "file_name", + "typingUsers", + "unread_count", + "sender_type", + "is_pinned", + "locked_by", + "updateConversation", + "setConversations", + "metadata", + "content" ], "pluginStore": [ - "path", - "row_span", - "icon", - "setManifests", - "getAllDashboardWidgets", + "display_name", + "order", + "field_type", "group", "label_key", - "version", - "protected", - "setLoading", "label", - "component", - "getAllMenuItems", - "required", - "permission", - "settings_pages", + "badge_key", + "col_span", + "dashboard_widgets", "error", "loaded", - "getAllSettingsPages", - "display_name", - "menu_items", - "getAllPageRoutes", - "options", - "order", - "entity_type", - "entityType", - "manifests", - "detail_tabs", - "parent", - "setError", - "getDetailTabsForEntity", - "dashboard_widgets", - "default_value", - "entity", - "page_routes", - "loading", - "col_span", - "field_type", - "is_core", + "settings_pages", + "path", + "version", + "getAllMenuItems", + "protected", "getCustomFieldsForEntity", + "options", + "default_value", + "is_core", + "parent", + "setManifests", + "setError", + "entity", "custom_fields", "reset", - "badge_key" + "required", + "loading", + "entityType", + "component", + "menu_items", + "setLoading", + "icon", + "page_routes", + "getAllDashboardWidgets", + "getAllPageRoutes", + "getAllSettingsPages", + "manifests", + "row_span", + "entity_type", + "permission", + "getDetailTabsForEntity", + "detail_tabs" ], "themeStore": [ - "saveToStorage", - "borderRadius", - "toggleDarkMode", - "amount", - "target", - "config", - "loadFromStorage", - "result", "darkMode", - "applyTheme", - "base", - "fontFamily", - "primaryColor", - "DEFAULT_THEME", "scales", + "result", + "fontFamily", + "base", "setTheme", - "accentColor" + "config", + "accentColor", + "amount", + "applyTheme", + "borderRadius", + "loadFromStorage", + "primaryColor", + "toggleDarkMode", + "DEFAULT_THEME", + "target", + "saveToStorage" ], "uiStore": [ - "toasts", - "clearToasts", - "open", - "suggestionSidebarOpen", - "index", - "toggleSuggestionSidebar", - "setMessageSidebarCollapsed", - "aiSidebarCollapsed", - "removeToast", - "clearNotifications", - "collapsed", - "sidebarOpen", - "aiSidebarTab", - "removeNotification", - "setSidebarOpen", - "messageSidebarCollapsed", - "locale", - "toggleAISidebar", "addToast", - "toast", - "setLocale", - "toggleSidebar", + "index", "notifications", - "message", - "setAISidebarTab", - "toggleMessageSidebar", - "theme", - "setAISidebarCollapsed", - "openAISidebarProactive", + "toast", + "removeToast", "type", - "setTheme" + "setTheme", + "setAISidebarTab", + "openAISidebarProactive", + "sidebarOpen", + "collapsed", + "toggleSuggestionSidebar", + "messageSidebarCollapsed", + "suggestionSidebarOpen", + "locale", + "aiSidebarCollapsed", + "setAISidebarCollapsed", + "toggleAISidebar", + "setLocale", + "open", + "toasts", + "aiSidebarTab", + "setMessageSidebarCollapsed", + "toggleMessageSidebar", + "removeNotification", + "toggleSidebar", + "clearNotifications", + "message", + "theme", + "setSidebarOpen", + "clearToasts" ], "workspaceStore": [ - "visibleModuleKeys", - "description", - "icon", - "setActiveWorkspace", - "setMyWorkspaces", - "widget_key", - "myWorkspaces", - "isModuleVisible", - "position_x", - "setLoading", - "workspaces", - "position_y", - "is_visible", - "modules", - "menu_order", "height", - "workspace_id", - "moduleKey", + "setMyWorkspaces", "hasWorkspaces", - "context", - "is_default", + "widget_key", + "workspaces", + "is_visible", + "visibleModuleKeys", + "position_x", + "workspace_id", "module_key", - "setContext", - "config", - "widgets", - "activeWorkspaceId", - "loading", - "isLoading", + "modules", "width", + "context", + "menu_order", + "config", + "isLoading", "reset", - "is_active" + "loading", + "is_default", + "description", + "widgets", + "isModuleVisible", + "is_active", + "setLoading", + "myWorkspaces", + "icon", + "position_y", + "activeWorkspaceId", + "setContext", + "moduleKey", + "setActiveWorkspace" ], "authStore": [ - "isSystemAdmin", - "tenants", - "first_name", - "role", - "avatar_url", - "logout", - "setTenant", - "fieldPerms", - "setAuthenticated", - "setLoading", - "last_name", - "field_permissions", - "permissions", + "setUser", + "tenant", + "slug", "error", "user", - "setPermissions", + "logout", "is_system_admin", - "tenant", - "currentTenant", - "setError", - "authed", - "email", - "isAuthenticated", + "fieldPerms", "perms", - "loading", + "setError", "isLoading", - "slug", - "setUser" + "setTenant", + "loading", + "tenants", + "authed", + "role", + "isSystemAdmin", + "setAuthenticated", + "setLoading", + "permissions", + "currentTenant", + "isAuthenticated", + "setPermissions", + "email", + "avatar_url", + "last_name", + "first_name", + "field_permissions" ] }, "usage": {}, "unused": { "calendarStore": [ - "visibleCalendarIds", - "setActiveCalendarId", - "rangeEnd", - "mode", - "setVisibleWeek", - "setVisibleMonth", - "visibleMonth", - "setViewMode", "goToNextDay", - "setSelectedEntry", - "goToNextMonth", "goToToday", - "goToNextWeek", - "visibleDay", + "setVisibleWeek", "calendars", - "setRangeStart", - "visibleWeek", - "goToPrevMonth", "rangeStart", - "toggleCalendarVisibility", - "goToPrevWeek", - "selectedEntry", "setVisibleDay", + "visibleCalendarIds", + "viewMode", + "setRangeStart", + "setActiveCalendarId", + "visibleMonth", + "goToPrevMonth", + "goToPrevWeek", "setCalendars", + "entry", + "activeCalendarId", + "selectedEntry", + "toggleCalendarVisibility", + "visibleWeek", + "mode", + "goToNextMonth", + "rangeEnd", + "setSelectedEntry", + "visibleDay", + "setRangeEnd", + "goToNextWeek", + "setViewMode", "goToPrevDay", "date", - "viewMode", - "setRangeEnd", - "activeCalendarId", - "entry" + "setVisibleMonth" ], "aiUIControlStore": [ - "setActiveTab", - "setActiveCommand", - "modal", - "connected", - "value", - "activeCommand", - "lastFeedback", - "commandHistory", - "status", - "settings", + "feedback", "pendingFilter", - "activeTab", - "setLastFeedback", - "activeModal", - "active", - "pendingSettings", - "filter", - "setConnected", - "setAIActive", - "setPendingSettings", + "addCommandToHistory", "setActiveModal", "clearPending", - "section", - "action", + "status", + "lastFeedback", "command_id", - "aiActive", + "section", + "active", + "activeTab", + "settings", "entity", + "modal", + "connected", + "activeCommand", + "activeModal", + "value", + "setAIActive", + "setPendingSettings", + "pendingSettings", + "setActiveTab", + "commandHistory", + "setConnected", "setPendingFilter", - "addCommandToHistory", - "feedback" + "action", + "setActiveCommand", + "filter", + "aiActive", + "setLastFeedback" ], "onboardingStore": [ - "complete", - "skip", - "skipped", - "goToStep", - "isActive", - "reset", "completed", "prev", - "data", + "complete", "next", - "start", - "step" + "skip", + "data", + "isActive", + "step", + "skipped", + "reset", + "goToStep", + "start" ], "windowStore": [ - "title", - "closeWindow", - "updateWindowSize", - "toggleFullscreen", - "null", - "restoreWindow", - "componentProps", - "component", - "size", - "windows", - "type", "height", - "toggleAiChat", - "updateWindowPosition", + "closeWindow", "activeWindowId", - "openWindow", - "minimizeWindow", - "position", - "aiChatVisible", - "const", - "zIndex", - "config", - "newWindow", - "nextZIndex", + "title", "width", - "setActiveWindow" + "type", + "aiChatVisible", + "setActiveWindow", + "config", + "windows", + "const", + "component", + "toggleAiChat", + "componentProps", + "position", + "updateWindowSize", + "updateWindowPosition", + "zIndex", + "openWindow", + "toggleFullscreen", + "size", + "null", + "newWindow", + "restoreWindow", + "nextZIndex", + "minimizeWindow" ], "commandPaletteStore": [ - "open", - "isOpen", "close", - "toggle" + "isOpen", + "toggle", + "open" ], "pluginToolbarStore": [ - "updateItem", - "unregisterPlugin", - "plugin", - "items", - "null", "registerItems", + "unregisterPlugin", "value", "activePlugin", + "items", "updates", + "null", + "query", + "label", + "updateItem", "onClick", "setActivePlugin", - "query", - "label" + "plugin" ], "commStore": [ - "title", + "display_name", + "participant_id", + "addMessage", + "file_id", + "file_source", "last_msg_sender_type", "attachments", - "edited_at", - "participant_id", - "content", - "content_format", - "role", - "unreadCounts", - "is_archived", - "block_data", - "is_direct", - "file_size", - "sender_id", - "locked_by", - "convs", - "setTyping", - "file_source", - "blocks", - "setUnread", - "thumbnail_path", - "sender_type", - "count", - "is_locked", - "participant_type", - "userIds", - "setLoading", - "metadata", - "created_by", - "file_id", - "unread_count", "conversations", - "last_msg_preview", + "is_archived", + "sender_id", + "setTyping", "reactions", - "reply_to_id", - "messages", - "display_name", - "block_type", - "setActiveConversation", - "sort_order", - "conv", - "updateConversation", "created_by_type", - "msgs", - "addMessage", - "last_msg_at", - "activeConversationId", - "setConversations", - "file_name", "setMessages", - "conversation_id", - "is_pinned", - "created_at", - "loading", - "typingUsers", - "convId", + "title", + "block_data", + "conv", + "participant_type", + "participants", + "unreadCounts", + "is_locked", "file_type", - "participants" + "blocks", + "content_format", + "setUnread", + "last_msg_at", + "created_at", + "last_msg_preview", + "messages", + "loading", + "count", + "role", + "edited_at", + "convs", + "setLoading", + "created_by", + "setActiveConversation", + "is_direct", + "thumbnail_path", + "reply_to_id", + "msgs", + "convId", + "conversation_id", + "userIds", + "activeConversationId", + "block_type", + "sort_order", + "file_size", + "file_name", + "typingUsers", + "unread_count", + "sender_type", + "is_pinned", + "locked_by", + "updateConversation", + "setConversations", + "metadata", + "content" ], "pluginStore": [ - "path", - "row_span", - "icon", - "setManifests", - "getAllDashboardWidgets", + "display_name", + "order", + "field_type", "group", "label_key", - "version", - "protected", - "setLoading", "label", - "component", - "getAllMenuItems", - "required", - "permission", - "settings_pages", + "badge_key", + "col_span", + "dashboard_widgets", "error", "loaded", - "getAllSettingsPages", - "display_name", - "menu_items", - "getAllPageRoutes", - "options", - "order", - "entity_type", - "entityType", - "manifests", - "detail_tabs", - "parent", - "setError", - "getDetailTabsForEntity", - "dashboard_widgets", - "default_value", - "entity", - "page_routes", - "loading", - "col_span", - "field_type", - "is_core", + "settings_pages", + "path", + "version", + "getAllMenuItems", + "protected", "getCustomFieldsForEntity", + "options", + "default_value", + "is_core", + "parent", + "setManifests", + "setError", + "entity", "custom_fields", "reset", - "badge_key" + "required", + "loading", + "entityType", + "component", + "menu_items", + "setLoading", + "icon", + "page_routes", + "getAllDashboardWidgets", + "getAllPageRoutes", + "getAllSettingsPages", + "manifests", + "row_span", + "entity_type", + "permission", + "getDetailTabsForEntity", + "detail_tabs" ], "themeStore": [ - "saveToStorage", - "borderRadius", - "toggleDarkMode", - "amount", - "target", - "config", - "loadFromStorage", - "result", "darkMode", - "applyTheme", - "base", - "fontFamily", - "primaryColor", - "DEFAULT_THEME", "scales", + "result", + "fontFamily", + "base", "setTheme", - "accentColor" + "config", + "accentColor", + "amount", + "applyTheme", + "borderRadius", + "loadFromStorage", + "primaryColor", + "toggleDarkMode", + "DEFAULT_THEME", + "target", + "saveToStorage" ], "uiStore": [ - "toasts", - "clearToasts", - "open", - "suggestionSidebarOpen", - "index", - "toggleSuggestionSidebar", - "setMessageSidebarCollapsed", - "aiSidebarCollapsed", - "removeToast", - "clearNotifications", - "collapsed", - "sidebarOpen", - "aiSidebarTab", - "removeNotification", - "setSidebarOpen", - "messageSidebarCollapsed", - "locale", - "toggleAISidebar", "addToast", - "toast", - "setLocale", - "toggleSidebar", + "index", "notifications", - "message", - "setAISidebarTab", - "toggleMessageSidebar", - "theme", - "setAISidebarCollapsed", - "openAISidebarProactive", + "toast", + "removeToast", "type", - "setTheme" + "setTheme", + "setAISidebarTab", + "openAISidebarProactive", + "sidebarOpen", + "collapsed", + "toggleSuggestionSidebar", + "messageSidebarCollapsed", + "suggestionSidebarOpen", + "locale", + "aiSidebarCollapsed", + "setAISidebarCollapsed", + "toggleAISidebar", + "setLocale", + "open", + "toasts", + "aiSidebarTab", + "setMessageSidebarCollapsed", + "toggleMessageSidebar", + "removeNotification", + "toggleSidebar", + "clearNotifications", + "message", + "theme", + "setSidebarOpen", + "clearToasts" ], "workspaceStore": [ - "visibleModuleKeys", - "description", - "icon", - "setActiveWorkspace", - "setMyWorkspaces", - "widget_key", - "myWorkspaces", - "isModuleVisible", - "position_x", - "setLoading", - "workspaces", - "position_y", - "is_visible", - "modules", - "menu_order", "height", - "workspace_id", - "moduleKey", + "setMyWorkspaces", "hasWorkspaces", - "context", - "is_default", + "widget_key", + "workspaces", + "is_visible", + "visibleModuleKeys", + "position_x", + "workspace_id", "module_key", - "setContext", - "config", - "widgets", - "activeWorkspaceId", - "loading", - "isLoading", + "modules", "width", + "context", + "menu_order", + "config", + "isLoading", "reset", - "is_active" + "loading", + "is_default", + "description", + "widgets", + "isModuleVisible", + "is_active", + "setLoading", + "myWorkspaces", + "icon", + "position_y", + "activeWorkspaceId", + "setContext", + "moduleKey", + "setActiveWorkspace" ], "authStore": [ - "isSystemAdmin", - "tenants", - "first_name", - "role", - "avatar_url", - "logout", - "setTenant", - "fieldPerms", - "setAuthenticated", - "setLoading", - "last_name", - "field_permissions", - "permissions", + "setUser", + "tenant", + "slug", "error", "user", - "setPermissions", + "logout", "is_system_admin", - "tenant", - "currentTenant", - "setError", - "authed", - "email", - "isAuthenticated", + "fieldPerms", "perms", - "loading", + "setError", "isLoading", - "slug", - "setUser" + "setTenant", + "loading", + "tenants", + "authed", + "role", + "isSystemAdmin", + "setAuthenticated", + "setLoading", + "permissions", + "currentTenant", + "isAuthenticated", + "setPermissions", + "email", + "avatar_url", + "last_name", + "first_name", + "field_permissions" ] } } \ No newline at end of file