From 5780cc032448c2d7185d7bf664c96594eb0adda0 Mon Sep 17 00:00:00 2001 From: ValueOn AG Date: Sun, 12 Apr 2026 18:32:21 +0200 Subject: [PATCH] cleanup routesintegration view --- app.py | 9 - modules/datamodels/datamodelUam.py | 4 +- .../routeFeatureGraphicalEditor.py | 203 -- .../features/trustee/routeFeatureTrustee.py | 65 + modules/interfaces/interfaceDbManagement.py | 2 +- modules/routes/routeAdminRbacExport.py | 602 ---- modules/routes/routeAdminRbacRules.py | 32 +- .../routes/routeAdminUserAccessOverview.py | 119 +- modules/routes/routeBilling.py | 43 - modules/routes/routeClickup.py | 158 +- modules/routes/routeDataFiles.py | 38 - modules/routes/routeI18n.py | 45 - modules/routes/routeMessaging.py | 514 ---- modules/routes/routeSecurityAdmin.py | 435 --- modules/routes/routeSecurityGoogle.py | 64 - modules/routes/routeSecurityMsft.py | 18 - modules/routes/routeSharepoint.py | 217 -- modules/routes/routeSystem.py | 443 ++- modules/routes/routeVoiceGoogle.py | 364 +-- modules/routes/routeWorkflowDashboard.py | 162 +- .../serviceAgent/conversationManager.py | 21 +- .../coreTools/_featureSubAgentTools.py | 19 +- .../services/serviceAgent/mainServiceAgent.py | 22 +- modules/system/mainSystem.py | 9 + .../actions/refreshAccountingData.py | 7 + scripts/function_imports_analysis.txt | 444 --- scripts/import_analysis.csv | 2685 ----------------- scripts/migrate_async_to_sync.py | 4 - 28 files changed, 728 insertions(+), 6020 deletions(-) delete mode 100644 modules/routes/routeAdminRbacExport.py delete mode 100644 modules/routes/routeMessaging.py delete mode 100644 modules/routes/routeSecurityAdmin.py delete mode 100644 scripts/function_imports_analysis.txt delete mode 100644 scripts/import_analysis.csv diff --git a/app.py b/app.py index 937cab28..5cff7c59 100644 --- a/app.py +++ b/app.py @@ -570,9 +570,6 @@ app.include_router(voiceGoogleRouter) from modules.routes.routeVoiceUser import router as voiceUserRouter app.include_router(voiceUserRouter) -from modules.routes.routeSecurityAdmin import router as adminSecurityRouter -app.include_router(adminSecurityRouter) - from modules.routes.routeSharepoint import router as sharepointRouter app.include_router(sharepointRouter) @@ -582,9 +579,6 @@ app.include_router(adminLogsRouter) from modules.routes.routeAdminRbacRules import router as rbacAdminRulesRouter app.include_router(rbacAdminRulesRouter) -from modules.routes.routeMessaging import router as messagingRouter -app.include_router(messagingRouter) - from modules.routes.routeAdminFeatures import router as featuresAdminRouter app.include_router(featuresAdminRouter) @@ -600,9 +594,6 @@ app.include_router(notificationsRouter) from modules.routes.routeI18n import router as i18nRouter app.include_router(i18nRouter) -from modules.routes.routeAdminRbacExport import router as rbacAdminExportRouter -app.include_router(rbacAdminExportRouter) - from modules.routes.routeAdminUserAccessOverview import router as userAccessOverviewRouter app.include_router(userAccessOverviewRouter) diff --git a/modules/datamodels/datamodelUam.py b/modules/datamodels/datamodelUam.py index 7bac8672..61e7c105 100644 --- a/modules/datamodels/datamodelUam.py +++ b/modules/datamodels/datamodelUam.py @@ -243,12 +243,12 @@ class User(PowerOnModel): ) language: str = Field( default="de", - description="Preferred UI language code (must exist as UiLanguageSet; loaded from /api/i18n/user-language-options).", + description="Preferred UI language code (must exist as UiLanguageSet).", json_schema_extra={ "frontend_type": "select", "frontend_readonly": False, "frontend_required": True, - "frontend_options": "/api/i18n/user-language-options", + "frontend_options": "/api/i18n/codes", "label": "Sprache", }, ) diff --git a/modules/features/graphicalEditor/routeFeatureGraphicalEditor.py b/modules/features/graphicalEditor/routeFeatureGraphicalEditor.py index 7f2139e5..3e608e9c 100644 --- a/modules/features/graphicalEditor/routeFeatureGraphicalEditor.py +++ b/modules/features/graphicalEditor/routeFeatureGraphicalEditor.py @@ -110,38 +110,6 @@ def _validateInstanceAccess(instanceId: str, context: RequestContext) -> str: return str(instance.mandateId) if instance.mandateId else "" -@router.get("/{instanceId}/info") -@limiter.limit("60/minute") -def get_info( - request: Request, - instanceId: str = Path(..., description="Feature instance ID"), - context: RequestContext = Depends(getRequestContext), -) -> dict: - """Minimal info endpoint - proves the feature works.""" - _validateInstanceAccess(instanceId, context) - return { - "featureCode": "graphicalEditor", - "instanceId": instanceId, - "status": "ok", - "message": "GraphicalEditor feature ready.", - } - - -@router.post("/{instanceId}/schedule-sync") -@limiter.limit("10/minute") -def post_schedule_sync( - request: Request, - instanceId: str = Path(..., description="Feature instance ID"), - context: RequestContext = Depends(getRequestContext), -) -> dict: - """Manually trigger schedule sync (re-register cron jobs for all schedule workflows).""" - _validateInstanceAccess(instanceId, context) - from modules.workflows.scheduler.mainScheduler import syncNow - - result = syncNow() - return {"success": True, **(result or {})} - - @router.get("/{instanceId}/node-types") @limiter.limit("60/minute") def get_node_types( @@ -1003,128 +971,6 @@ def delete_workflow( return {"success": True} -@router.post("/{instanceId}/workflows/{workflowId}/webhooks/{entryPointId}") -@limiter.limit("60/minute") -async def post_workflow_webhook( - request: Request, - instanceId: str = Path(..., description="Feature instance ID"), - workflowId: str = Path(..., description="Workflow ID"), - entryPointId: str = Path(..., description="Entry point ID (kind must be webhook)"), - body: dict = Body(default_factory=dict), - context: RequestContext = Depends(getRequestContext), -) -> dict: - """Invoke a workflow via a webhook entry point.""" - mandateId = _validateInstanceAccess(instanceId, context) - userId = str(context.user.id) if context.user else None - iface = getGraphicalEditorInterface(context.user, mandateId, instanceId) - wf = iface.getWorkflow(workflowId) - if not wf or not wf.get("graph"): - raise HTTPException(status_code=404, detail=routeApiMsg("Workflow not found")) - inv = find_invocation(wf, entryPointId) - if not inv: - raise HTTPException(status_code=404, detail=routeApiMsg("Entry point not found")) - if inv.get("kind") != "webhook": - raise HTTPException(status_code=400, detail=routeApiMsg("Entry point is not a webhook")) - if not inv.get("enabled", True): - raise HTTPException(status_code=400, detail=routeApiMsg("Entry point is disabled")) - cfg = inv.get("config") or {} - secret = cfg.get("webhookSecret") - if secret: - hdr = request.headers.get("X-Webhook-Secret") - if hdr != str(secret): - raise HTTPException(status_code=403, detail=routeApiMsg("Invalid webhook secret")) - - services = getGraphicalEditorServices( - context.user, - mandateId=mandateId, - featureInstanceId=instanceId, - ) - from modules.workflows.processing.shared.methodDiscovery import discoverMethods - discoverMethods(services) - - title = inv.get("title") or {} - label = resolveText(title) - pl = body if isinstance(body, dict) else {} - base = default_run_envelope( - "webhook", - entry_point_id=inv.get("id"), - entry_point_label=label or None, - payload=pl, - raw={"httpBody": body}, - ) - run_env = normalize_run_envelope(base, user_id=userId) - - result = await executeGraph( - graph=wf["graph"], - services=services, - workflowId=workflowId, - instanceId=instanceId, - userId=userId, - mandateId=mandateId, - automation2_interface=iface, - run_envelope=run_env, - ) - return result - - -@router.post("/{instanceId}/workflows/{workflowId}/forms/{entryPointId}/submit") -@limiter.limit("60/minute") -async def post_workflow_form_submit( - request: Request, - instanceId: str = Path(..., description="Feature instance ID"), - workflowId: str = Path(..., description="Workflow ID"), - entryPointId: str = Path(..., description="Entry point ID (kind must be form)"), - body: dict = Body(default_factory=dict), - context: RequestContext = Depends(getRequestContext), -) -> dict: - """Form-style submit: same as execute with trigger.type form and payload from body.""" - mandateId = _validateInstanceAccess(instanceId, context) - userId = str(context.user.id) if context.user else None - iface = getGraphicalEditorInterface(context.user, mandateId, instanceId) - wf = iface.getWorkflow(workflowId) - if not wf or not wf.get("graph"): - raise HTTPException(status_code=404, detail=routeApiMsg("Workflow not found")) - inv = find_invocation(wf, entryPointId) - if not inv: - raise HTTPException(status_code=404, detail=routeApiMsg("Entry point not found")) - if inv.get("kind") != "form": - raise HTTPException(status_code=400, detail=routeApiMsg("Entry point is not a form")) - if not inv.get("enabled", True): - raise HTTPException(status_code=400, detail=routeApiMsg("Entry point is disabled")) - - services = getGraphicalEditorServices( - context.user, - mandateId=mandateId, - featureInstanceId=instanceId, - ) - from modules.workflows.processing.shared.methodDiscovery import discoverMethods - discoverMethods(services) - - title = inv.get("title") or {} - label = resolveText(title) - pl = body if isinstance(body, dict) else {} - base = default_run_envelope( - "form", - entry_point_id=inv.get("id"), - entry_point_label=label or None, - payload=pl, - raw={"formBody": body}, - ) - run_env = normalize_run_envelope(base, user_id=userId) - - result = await executeGraph( - graph=wf["graph"], - services=services, - workflowId=workflowId, - instanceId=instanceId, - userId=userId, - mandateId=mandateId, - automation2_interface=iface, - run_envelope=run_env, - ) - return result - - # ------------------------------------------------------------------------- # Runs and Resume # ------------------------------------------------------------------------- @@ -1182,55 +1028,6 @@ def get_run_steps( return {"steps": steps} -@router.post("/{instanceId}/runs/{runId}/resume") -@limiter.limit("30/minute") -async def resume_run( - request: Request, - instanceId: str = Path(..., description="Feature instance ID"), - runId: str = Path(..., description="Run ID"), - body: dict = Body(..., description="{ taskId, result }"), - context: RequestContext = Depends(getRequestContext), -) -> dict: - """Resume a paused run after task completion.""" - mandateId = _validateInstanceAccess(instanceId, context) - iface = getGraphicalEditorInterface(context.user, mandateId, instanceId) - run = iface.getRun(runId) - if not run: - raise HTTPException(status_code=404, detail=routeApiMsg("Run not found")) - taskId = body.get("taskId") - result = body.get("result") - if not taskId or result is None: - raise HTTPException(status_code=400, detail=routeApiMsg("taskId and result required")) - task = iface.getTask(taskId) - if not task or task.get("runId") != runId: - raise HTTPException(status_code=404, detail=routeApiMsg("Task not found")) - if task.get("status") != "pending": - raise HTTPException(status_code=400, detail=routeApiMsg("Task already completed")) - iface.updateTask(taskId, status="completed", result=result) - nodeId = task.get("nodeId") - nodeOutputs = dict(run.get("nodeOutputs") or {}) - nodeOutputs[nodeId] = result - workflowId = run.get("workflowId") - wf = iface.getWorkflow(workflowId) if workflowId else None - if not wf or not wf.get("graph"): - raise HTTPException(status_code=400, detail=routeApiMsg("Workflow graph not found")) - graph = wf["graph"] - services = getGraphicalEditorServices(context.user, mandateId=mandateId, featureInstanceId=instanceId) - resume_result = await executeGraph( - graph=graph, - services=services, - workflowId=workflowId, - instanceId=instanceId, - userId=str(context.user.id) if context.user else None, - mandateId=mandateId, - automation2_interface=iface, - initialNodeOutputs=nodeOutputs, - startAfterNodeId=nodeId, - runId=runId, - ) - return resume_result - - # ------------------------------------------------------------------------- # Tasks # ------------------------------------------------------------------------- diff --git a/modules/features/trustee/routeFeatureTrustee.py b/modules/features/trustee/routeFeatureTrustee.py index 3233523b..9695c7bb 100644 --- a/modules/features/trustee/routeFeatureTrustee.py +++ b/modules/features/trustee/routeFeatureTrustee.py @@ -1729,6 +1729,71 @@ def clear_ai_data_cache( return {"cleared": removed, "featureInstanceId": instanceId} +# ===== Data Export ===== + +@router.get("/{instanceId}/accounting/export-data") +@limiter.limit("3/minute") +def export_accounting_data( + request: Request, + instanceId: str = Path(..., description="Feature Instance ID"), + context: RequestContext = Depends(getRequestContext), +) -> Response: + """Export all TrusteeData* tables for this instance as a JSON download (admin only).""" + mandateId = _validateInstanceAccess(instanceId, context) + + from .datamodelFeatureTrustee import ( + TrusteeDataAccount, + TrusteeDataJournalEntry, + TrusteeDataJournalLine, + TrusteeDataContact, + TrusteeDataAccountBalance, + TrusteeAccountingConfig, + ) + import time as _time + + interface = getInterface(context.user, mandateId=mandateId, featureInstanceId=instanceId) + _filter = {"featureInstanceId": instanceId} + + tables: Dict[str, Any] = {} + for tableName, model in [ + ("TrusteeDataAccount", TrusteeDataAccount), + ("TrusteeDataJournalEntry", TrusteeDataJournalEntry), + ("TrusteeDataJournalLine", TrusteeDataJournalLine), + ("TrusteeDataContact", TrusteeDataContact), + ("TrusteeDataAccountBalance", TrusteeDataAccountBalance), + ]: + records = interface.db.getRecordset(model, recordFilter=_filter) or [] + tables[tableName] = records + + cfgRecords = interface.db.getRecordset( + TrusteeAccountingConfig, + recordFilter={"featureInstanceId": instanceId, "isActive": True}, + ) + syncInfo = {} + if cfgRecords: + cfg = cfgRecords[0] + syncInfo = { + "connectorType": cfg.get("connectorType", ""), + "lastSyncAt": cfg.get("lastSyncAt"), + "lastSyncStatus": cfg.get("lastSyncStatus", ""), + } + + payload = { + "exportedAt": _time.time(), + "featureInstanceId": instanceId, + "mandateId": mandateId, + "syncInfo": syncInfo, + "tables": tables, + } + + jsonBytes = json.dumps(payload, ensure_ascii=False, default=str).encode("utf-8") + return Response( + content=jsonBytes, + media_type="application/json", + headers={"Content-Disposition": f'attachment; filename="trustee_data_{instanceId[:8]}.json"'}, + ) + + # ===== Position-Document Query ===== @router.get("/{instanceId}/positions/document/{documentId}", response_model=List[TrusteePosition]) diff --git a/modules/interfaces/interfaceDbManagement.py b/modules/interfaces/interfaceDbManagement.py index 98b86b3b..f202ac3d 100644 --- a/modules/interfaces/interfaceDbManagement.py +++ b/modules/interfaces/interfaceDbManagement.py @@ -1709,7 +1709,7 @@ class ComponentObjects: logger.warning(f"No access to file ID {fileId}") return None - fileDataEntries = getRecordsetWithRBAC(self.db, FileData, self.currentUser, recordFilter={"id": fileId}, mandateId=self.mandateId) + fileDataEntries = self.db.getRecordset(FileData, recordFilter={"id": fileId}) if not fileDataEntries: logger.warning(f"No data found for file ID {fileId}") return None diff --git a/modules/routes/routeAdminRbacExport.py b/modules/routes/routeAdminRbacExport.py deleted file mode 100644 index c6e3671e..00000000 --- a/modules/routes/routeAdminRbacExport.py +++ /dev/null @@ -1,602 +0,0 @@ -# Copyright (c) 2025 Patrick Motsch -# All rights reserved. -""" -RBAC export/import routes for the backend API. -Implements endpoints for exporting and importing RBAC configurations. - -Multi-Tenant Design: -- Global templates: SysAdmin can export/import -- Mandate-scoped RBAC: Mandate Admin can export/import -- Feature instance roles: Included in mandate export -""" - -from fastapi import APIRouter, HTTPException, Depends, Request, UploadFile, File -from fastapi.responses import JSONResponse -from typing import List, Dict, Any, Optional -from fastapi import status -import logging -import json -from pydantic import BaseModel, Field - -from modules.auth import limiter, getRequestContext, RequestContext, requireSysAdminRole -from modules.datamodels.datamodelUam import User -from modules.datamodels.datamodelRbac import Role, AccessRule -from modules.datamodels.datamodelUtils import coerce_text_multilingual -from modules.interfaces.interfaceDbApp import getRootInterface -from modules.shared.timeUtils import getUtcTimestamp -from modules.shared.i18nRegistry import apiRouteContext -routeApiMsg = apiRouteContext("routeAdminRbacExport") - -logger = logging.getLogger(__name__) - -router = APIRouter( - prefix="/api/rbac", - tags=["RBAC Export/Import"], - responses={404: {"description": "Not found"}} -) - - -# ============================================================================= -# Request/Response Models -# ============================================================================= - -class RoleExport(BaseModel): - """Export model for a role with its access rules""" - roleLabel: str - description: Dict[str, str] - featureCode: Optional[str] - isSystemRole: bool - accessRules: List[Dict[str, Any]] - - -class RbacExportData(BaseModel): - """Complete RBAC export data""" - exportVersion: str = "1.0" - exportedAt: float - exportedBy: str - scope: str # "global" or "mandate" - mandateId: Optional[str] - roles: List[RoleExport] - - -class RbacImportResult(BaseModel): - """Result of RBAC import operation""" - rolesCreated: int - rolesUpdated: int - rolesSkipped: int - rulesCreated: int - rulesUpdated: int - errors: List[str] - - -# ============================================================================= -# Global RBAC Export/Import (SysAdmin only) -# ============================================================================= - -@router.get("/export/global", response_model=RbacExportData) -@limiter.limit("10/minute") -def export_global_rbac( - request: Request, - sysAdmin: User = Depends(requireSysAdminRole) -) -> RbacExportData: - """ - Export global (template) RBAC rules. - - SysAdmin only - exports template roles that are copied to new feature instances. - These are roles with mandateId=NULL. - """ - try: - rootInterface = getRootInterface() - - # Get all global template roles (mandateId is NULL) using interface method - allRoles = rootInterface.getAllRoles() - globalRoles = [r for r in allRoles if r.mandateId is None] - - exportRoles = [] - for role in globalRoles: - roleId = role.id - - # Get access rules for this role using interface method - accessRules = rootInterface.getAccessRulesByRole(roleId) - - exportRoles.append(RoleExport( - roleLabel=role.roleLabel, - description=role.description or {}, - featureCode=role.featureCode, - isSystemRole=role.isSystemRole, - accessRules=[ - { - "context": r.context, - "item": r.item, - "view": r.view if r.view is not None else False, - "read": r.read, - "create": r.create, - "update": r.update, - "delete": r.delete - } - for r in accessRules - ] - )) - - logger.info(f"SysAdmin {sysAdmin.id} exported global RBAC ({len(exportRoles)} roles)") - - return RbacExportData( - exportedAt=getUtcTimestamp(), - exportedBy=str(sysAdmin.id), - scope="global", - mandateId=None, - roles=exportRoles - ) - - except Exception as e: - logger.error(f"Error exporting global RBAC: {e}") - raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, - detail=f"Failed to export RBAC: {str(e)}" - ) - - -@router.post("/import/global", response_model=RbacImportResult) -@limiter.limit("5/minute") -async def import_global_rbac( - request: Request, - file: UploadFile = File(..., description="JSON file with RBAC export data"), - updateExisting: bool = False, - sysAdmin: User = Depends(requireSysAdminRole) -) -> RbacImportResult: - """ - Import global (template) RBAC rules. - - SysAdmin only - imports template roles and their access rules. - - Args: - file: JSON file containing RbacExportData - updateExisting: If True, update existing roles. If False, skip them. - """ - try: - # Read and parse file - content = await file.read() - try: - data = json.loads(content.decode("utf-8")) - except json.JSONDecodeError as e: - raise HTTPException( - status_code=status.HTTP_400_BAD_REQUEST, - detail=f"Invalid JSON: {str(e)}" - ) - - # Validate structure - if "roles" not in data: - raise HTTPException( - status_code=status.HTTP_400_BAD_REQUEST, - detail=routeApiMsg("Missing 'roles' field in import data") - ) - - rootInterface = getRootInterface() - result = RbacImportResult( - rolesCreated=0, - rolesUpdated=0, - rolesSkipped=0, - rulesCreated=0, - rulesUpdated=0, - errors=[] - ) - - for roleData in data.get("roles", []): - try: - roleLabel = roleData.get("roleLabel") - featureCode = roleData.get("featureCode") - - if not roleLabel: - result.errors.append(f"Role without label skipped") - result.rolesSkipped += 1 - continue - - # Check if role exists (global role with same label and featureCode) using interface method - allRoles = rootInterface.getAllRoles() - existingRoles = [ - r for r in allRoles - if r.roleLabel == roleLabel - and r.mandateId is None - and r.featureCode == featureCode - ] - - if existingRoles: - if updateExisting: - # Update existing role - existingRole = existingRoles[0] - roleId = existingRole.id - - rootInterface.db.recordModify( - Role, - roleId, - { - "description": roleData.get("description", {}), - "isSystemRole": roleData.get("isSystemRole", False) - } - ) - - # Update access rules - result.rulesUpdated += _updateAccessRules( - rootInterface, - roleId, - roleData.get("accessRules", []) - ) - - result.rolesUpdated += 1 - else: - result.rolesSkipped += 1 - continue - else: - # Create new role - newRole = Role( - roleLabel=roleLabel, - description=coerce_text_multilingual(roleData.get("description", {})), - featureCode=featureCode, - mandateId=None, - featureInstanceId=None, - isSystemRole=roleData.get("isSystemRole", False) - ) - - createdRole = rootInterface.db.recordCreate(Role, newRole.model_dump()) - roleId = createdRole.get("id") - - # Create access rules - for ruleData in roleData.get("accessRules", []): - newRule = AccessRule( - roleId=roleId, - context=ruleData.get("context"), - item=ruleData.get("item"), - view=ruleData.get("view", False), - read=ruleData.get("read"), - create=ruleData.get("create"), - update=ruleData.get("update"), - delete=ruleData.get("delete") - ) - rootInterface.db.recordCreate(AccessRule, newRule.model_dump()) - result.rulesCreated += 1 - - result.rolesCreated += 1 - - except Exception as e: - result.errors.append(f"Error processing role '{roleData.get('roleLabel', 'unknown')}': {str(e)}") - - logger.info( - f"SysAdmin {sysAdmin.id} imported global RBAC: " - f"{result.rolesCreated} created, {result.rolesUpdated} updated, " - f"{result.rolesSkipped} skipped" - ) - - return result - - except HTTPException: - raise - except Exception as e: - logger.error(f"Error importing global RBAC: {e}") - raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, - detail=f"Failed to import RBAC: {str(e)}" - ) - - -# ============================================================================= -# Mandate RBAC Export/Import (Mandate Admin) -# ============================================================================= - -@router.get("/export/mandate", response_model=RbacExportData) -@limiter.limit("10/minute") -def export_mandate_rbac( - request: Request, - includeFeatureInstances: bool = True, - context: RequestContext = Depends(getRequestContext) -) -> RbacExportData: - """ - Export RBAC rules for the current mandate. - - Requires Mandate-Admin role. Exports mandate-level roles and optionally - feature instance roles. - - Args: - includeFeatureInstances: Include feature instance roles in export - """ - if not context.mandateId: - raise HTTPException( - status_code=status.HTTP_400_BAD_REQUEST, - detail=routeApiMsg("X-Mandate-Id header is required") - ) - - # Check mandate admin permission - if not _hasMandateAdminRole(context): - raise HTTPException( - status_code=status.HTTP_403_FORBIDDEN, - detail=routeApiMsg("Mandate-Admin role required to export RBAC") - ) - - try: - rootInterface = getRootInterface() - - # Get mandate-level roles using interface method - allRoles = rootInterface.getAllRoles() - mandateRoles = [ - r for r in allRoles - if str(r.mandateId) == str(context.mandateId) - ] - - # Filter by feature instance if not including them - if not includeFeatureInstances: - mandateRoles = [r for r in mandateRoles if not r.featureInstanceId] - - exportRoles = [] - for role in mandateRoles: - roleId = role.id - - # Get access rules for this role using interface method - accessRules = rootInterface.getAccessRulesByRole(roleId) - - exportRoles.append(RoleExport( - roleLabel=role.roleLabel, - description=role.description or {}, - featureCode=role.featureCode, - isSystemRole=role.isSystemRole, - accessRules=[ - { - "context": r.context, - "item": r.item, - "view": r.view if r.view is not None else False, - "read": r.read, - "create": r.create, - "update": r.update, - "delete": r.delete - } - for r in accessRules - ] - )) - - logger.info( - f"User {context.user.id} exported mandate {context.mandateId} RBAC " - f"({len(exportRoles)} roles)" - ) - - return RbacExportData( - exportedAt=getUtcTimestamp(), - exportedBy=str(context.user.id), - scope="mandate", - mandateId=str(context.mandateId), - roles=exportRoles - ) - - except HTTPException: - raise - except Exception as e: - logger.error(f"Error exporting mandate RBAC: {e}") - raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, - detail=f"Failed to export RBAC: {str(e)}" - ) - - -@router.post("/import/mandate", response_model=RbacImportResult) -@limiter.limit("5/minute") -async def import_mandate_rbac( - request: Request, - file: UploadFile = File(..., description="JSON file with RBAC export data"), - updateExisting: bool = False, - context: RequestContext = Depends(getRequestContext) -) -> RbacImportResult: - """ - Import RBAC rules for the current mandate. - - Requires Mandate-Admin role. Imports roles as mandate-level roles - (not feature instance roles - those are created via template copying). - - Args: - file: JSON file containing RbacExportData - updateExisting: If True, update existing roles. If False, skip them. - """ - if not context.mandateId: - raise HTTPException( - status_code=status.HTTP_400_BAD_REQUEST, - detail=routeApiMsg("X-Mandate-Id header is required") - ) - - # Check mandate admin permission - if not _hasMandateAdminRole(context): - raise HTTPException( - status_code=status.HTTP_403_FORBIDDEN, - detail=routeApiMsg("Mandate-Admin role required to import RBAC") - ) - - try: - # Read and parse file - content = await file.read() - try: - data = json.loads(content.decode("utf-8")) - except json.JSONDecodeError as e: - raise HTTPException( - status_code=status.HTTP_400_BAD_REQUEST, - detail=f"Invalid JSON: {str(e)}" - ) - - # Validate structure - if "roles" not in data: - raise HTTPException( - status_code=status.HTTP_400_BAD_REQUEST, - detail=routeApiMsg("Missing 'roles' field in import data") - ) - - rootInterface = getRootInterface() - result = RbacImportResult( - rolesCreated=0, - rolesUpdated=0, - rolesSkipped=0, - rulesCreated=0, - rulesUpdated=0, - errors=[] - ) - - for roleData in data.get("roles", []): - try: - roleLabel = roleData.get("roleLabel") - featureCode = roleData.get("featureCode") - - if not roleLabel: - result.errors.append(f"Role without label skipped") - result.rolesSkipped += 1 - continue - - # System roles cannot be imported at mandate level - if roleData.get("isSystemRole", False): - result.errors.append(f"System role '{roleLabel}' skipped (SysAdmin only)") - result.rolesSkipped += 1 - continue - - # Check if role exists (mandate role with same label) using interface method - allRoles = rootInterface.getAllRoles() - existingRoles = [ - r for r in allRoles - if r.roleLabel == roleLabel - and str(r.mandateId) == str(context.mandateId) - and r.featureInstanceId is None # Only mandate-level roles - ] - - if existingRoles: - if updateExisting: - # Update existing role - existingRole = existingRoles[0] - roleId = existingRole.id - - rootInterface.db.recordModify( - Role, - roleId, - {"description": roleData.get("description", {})} - ) - - # Update access rules - result.rulesUpdated += _updateAccessRules( - rootInterface, - roleId, - roleData.get("accessRules", []) - ) - - result.rolesUpdated += 1 - else: - result.rolesSkipped += 1 - continue - else: - # Create new role at mandate level - newRole = Role( - roleLabel=roleLabel, - description=coerce_text_multilingual(roleData.get("description", {})), - featureCode=featureCode, - mandateId=str(context.mandateId), - featureInstanceId=None, - isSystemRole=False # Never create system roles via import - ) - - createdRole = rootInterface.db.recordCreate(Role, newRole.model_dump()) - roleId = createdRole.get("id") - - # Create access rules - for ruleData in roleData.get("accessRules", []): - newRule = AccessRule( - roleId=roleId, - context=ruleData.get("context"), - item=ruleData.get("item"), - view=ruleData.get("view", False), - read=ruleData.get("read"), - create=ruleData.get("create"), - update=ruleData.get("update"), - delete=ruleData.get("delete") - ) - rootInterface.db.recordCreate(AccessRule, newRule.model_dump()) - result.rulesCreated += 1 - - result.rolesCreated += 1 - - except Exception as e: - result.errors.append(f"Error processing role '{roleData.get('roleLabel', 'unknown')}': {str(e)}") - - logger.info( - f"User {context.user.id} imported mandate {context.mandateId} RBAC: " - f"{result.rolesCreated} created, {result.rolesUpdated} updated, " - f"{result.rolesSkipped} skipped" - ) - - return result - - except HTTPException: - raise - except Exception as e: - logger.error(f"Error importing mandate RBAC: {e}") - raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, - detail=f"Failed to import RBAC: {str(e)}" - ) - - -# ============================================================================= -# Helper Functions -# ============================================================================= - -def _hasMandateAdminRole(context: RequestContext) -> bool: - """ - Check if the user has mandate admin role in the current context. - """ - if context.hasSysAdminRole: - return True - - if not context.roleIds: - return False - - try: - rootInterface = getRootInterface() - - for roleId in context.roleIds: - role = rootInterface.getRole(roleId) - if role: - roleLabel = role.roleLabel - # Admin role at mandate level - if roleLabel == "admin" and not role.featureInstanceId: - return True - - return False - - except Exception as e: - logger.error(f"Error checking mandate admin role: {e}") - return False - - -def _updateAccessRules(interface, roleId: str, newRules: List[Dict[str, Any]]) -> int: - """ - Update access rules for a role. - Replaces existing rules with new ones. - - Returns: - Number of rules created/updated - """ - try: - # Delete existing rules for this role using interface method - existingRules = interface.getAccessRulesByRole(roleId) - for rule in existingRules: - interface.db.recordDelete(AccessRule, rule.id) - - # Create new rules - count = 0 - for ruleData in newRules: - newRule = AccessRule( - roleId=roleId, - context=ruleData.get("context"), - item=ruleData.get("item"), - view=ruleData.get("view", False), - read=ruleData.get("read"), - create=ruleData.get("create"), - update=ruleData.get("update"), - delete=ruleData.get("delete") - ) - interface.db.recordCreate(AccessRule, newRule.model_dump()) - count += 1 - - return count - - except Exception as e: - logger.error(f"Error updating access rules: {e}") - return 0 diff --git a/modules/routes/routeAdminRbacRules.py b/modules/routes/routeAdminRbacRules.py index d78ebeaa..468bf21b 100644 --- a/modules/routes/routeAdminRbacRules.py +++ b/modules/routes/routeAdminRbacRules.py @@ -911,7 +911,7 @@ def list_roles( result.append({ "id": role.id, "roleLabel": role.roleLabel, - "description": role.description.model_dump() if hasattr(role.description, 'model_dump') else role.description, + "description": resolveText(role.description), "mandateId": role.mandateId, "featureInstanceId": role.featureInstanceId, "featureCode": role.featureCode, @@ -1040,7 +1040,7 @@ def get_roles_filter_values( result.append({ "id": role.id, "roleLabel": role.roleLabel, - "description": role.description.model_dump() if hasattr(role.description, 'model_dump') else role.description, + "description": resolveText(role.description), "mandateId": role.mandateId, "featureInstanceId": role.featureInstanceId, "featureCode": role.featureCode, @@ -1157,7 +1157,7 @@ def get_role( return { "id": role.id, "roleLabel": role.roleLabel, - "description": role.description.model_dump() if hasattr(role.description, 'model_dump') else role.description, + "description": resolveText(role.description), "mandateId": role.mandateId, "featureInstanceId": role.featureInstanceId, "featureCode": role.featureCode, @@ -1407,32 +1407,6 @@ def getCatalogObjects( ) -@router.get("/catalog/stats", response_model=Dict[str, Any]) -@limiter.limit("60/minute") -def getCatalogStats( - request: Request, - currentUser: User = Depends(requireSysAdminRole) -) -> Dict[str, Any]: - """ - Get statistics about the RBAC catalog. - - Returns: - - Statistics about registered features, objects, and roles - """ - try: - from modules.security.rbacCatalog import getCatalogService - - catalog = getCatalogService() - return catalog.getCatalogStats() - - except Exception as e: - logger.error(f"Error getting catalog stats: {str(e)}") - raise HTTPException( - status_code=500, - detail=f"Failed to get catalog stats: {str(e)}" - ) - - # ============================================================================= # CLEANUP: Remove duplicate AccessRules # ============================================================================= diff --git a/modules/routes/routeAdminUserAccessOverview.py b/modules/routes/routeAdminUserAccessOverview.py index 59bf415f..ab04d085 100644 --- a/modules/routes/routeAdminUserAccessOverview.py +++ b/modules/routes/routeAdminUserAccessOverview.py @@ -15,7 +15,7 @@ import logging from modules.auth import limiter from modules.auth.authentication import getRequestContext, RequestContext from modules.datamodels.datamodelUam import User, UserInDB -from modules.datamodels.datamodelRbac import Role, AccessRule, AccessRuleContext +from modules.datamodels.datamodelRbac import Role, AccessRule from modules.datamodels.datamodelMembership import ( UserMandate, UserMandateRole, @@ -498,120 +498,3 @@ def getUserAccessOverview( detail=f"Failed to get user access overview: {str(e)}" ) - -@router.get("/{userId}/effective-permissions", response_model=Dict[str, Any]) -@limiter.limit("60/minute") -def getEffectivePermissions( - request: Request, - userId: str = Path(..., description="User ID"), - mandateId: str = Query(..., description="Mandate ID context"), - featureInstanceId: Optional[str] = Query(None, description="Feature instance ID context"), - accessContext: str = Query("DATA", alias="context", description="Context type: DATA, UI, or RESOURCE"), - item: Optional[str] = Query(None, description="Specific item to check permissions for"), - context: RequestContext = Depends(getRequestContext) -) -> Dict[str, Any]: - """ - Get effective (resolved) permissions for a user in a specific context. - This uses the RBAC resolution logic to show what permissions actually apply. - MULTI-TENANT: SysAdmin sees all. MandateAdmin can check users in their own mandates. - - Path Parameters: - - userId: User ID - - Query Parameters: - - mandateId: Required mandate context - - featureInstanceId: Optional feature instance context - - context: Permission context (DATA, UI, RESOURCE) - - item: Optional specific item to check - - Returns: - - Effective permissions after RBAC resolution - """ - if not context.hasSysAdminRole: - # Check if user has admin role in any mandate - if not _hasMandateAdminRole(context): - raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail=routeApiMsg("Admin role required")) - - try: - interface = getRootInterface() - - # MandateAdmin: verify the requested user shares at least one admin mandate - if not context.hasSysAdminRole: - adminMandateIds = [] - adminUserMandates = interface.getUserMandates(str(context.user.id)) - for um in adminUserMandates: - umId = getattr(um, 'id', None) - mid = getattr(um, 'mandateId', None) - if not umId or not mid: - continue - roleIds = interface.getRoleIdsForUserMandate(str(umId)) - for roleId in roleIds: - role = interface.getRole(roleId) - if role and role.roleLabel == "admin" and not role.featureInstanceId: - adminMandateIds.append(str(mid)) - break - - if not adminMandateIds: - raise HTTPException(status_code=403, detail=routeApiMsg("Insufficient permissions")) - - userInAdminMandate = False - for mid in adminMandateIds: - if _isUserInMandate(interface, userId, mid): - userInAdminMandate = True - break - - if not userInAdminMandate: - raise HTTPException(status_code=403, detail=routeApiMsg("Benutzer gehört nicht zu Ihrem Mandate")) - - # Get user - user = interface.getUser(userId) - if not user: - raise HTTPException( - status_code=404, - detail=f"User {userId} not found" - ) - - # Convert context string to enum - try: - contextEnum = AccessRuleContext(accessContext) - except ValueError: - raise HTTPException( - status_code=400, - detail=f"Invalid context: {accessContext}. Must be DATA, UI, or RESOURCE." - ) - - # Use RBAC interface to get actual permissions - from modules.security.rbac import RbacClass - rbac = RbacClass(interface.db, dbApp=interface.db) - - permissions = rbac.getUserPermissions( - user=user, - context=contextEnum, - item=item or "", - mandateId=mandateId, - featureInstanceId=featureInstanceId - ) - - return { - "userId": userId, - "mandateId": mandateId, - "featureInstanceId": featureInstanceId, - "context": accessContext, - "item": item, - "effectivePermissions": { - "view": permissions.view, - "read": _getAccessLevelLabel(permissions.read.value if permissions.read else None), - "create": _getAccessLevelLabel(permissions.create.value if permissions.create else None), - "update": _getAccessLevelLabel(permissions.update.value if permissions.update else None), - "delete": _getAccessLevelLabel(permissions.delete.value if permissions.delete else None), - } - } - - except HTTPException: - raise - except Exception as e: - logger.error(f"Error getting effective permissions: {str(e)}") - raise HTTPException( - status_code=500, - detail=f"Failed to get effective permissions: {str(e)}" - ) diff --git a/modules/routes/routeBilling.py b/modules/routes/routeBilling.py index c99ffc2a..800f106d 100644 --- a/modules/routes/routeBilling.py +++ b/modules/routes/routeBilling.py @@ -1453,49 +1453,6 @@ def getTransactionsAdmin( raise HTTPException(status_code=500, detail=str(e)) -@router.get("/admin/transactions/{targetMandateId}/filter-values") -@limiter.limit("60/minute") -def getTransactionFilterValues( - request: Request, - targetMandateId: str = Path(..., description="Mandate ID"), - column: str = Query(..., description="Column key"), - pagination: Optional[str] = Query(None, description="JSON-encoded current filters"), - ctx: RequestContext = Depends(getRequestContext), -): - """Return distinct filter values for a column in mandate transactions.""" - if not _isAdminOfMandate(ctx, targetMandateId): - raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail=routeApiMsg("Admin role required for this mandate")) - try: - crossFilterParams: Optional[PaginationParams] = None - if pagination: - try: - paginationDict = json.loads(pagination) - if paginationDict: - paginationDict = normalize_pagination_dict(paginationDict) - filters = paginationDict.get("filters", {}) - filters.pop(column, None) - paginationDict["filters"] = filters - paginationDict.pop("sort", None) - crossFilterParams = PaginationParams(**paginationDict) - except (json.JSONDecodeError, ValueError): - pass - - try: - billingInterface = getBillingInterface(ctx.user, targetMandateId) - return billingInterface.getTransactionDistinctValues( - mandateIds=[targetMandateId], - column=column, - pagination=crossFilterParams, - ) - except Exception: - enriched, _ = _buildTransactionsList(ctx, targetMandateId) - crossFiltered = _applyFiltersAndSort(enriched, crossFilterParams) - return _extractDistinctValues(crossFiltered, column) - except Exception as e: - logger.error(f"Error getting filter values for transactions: {e}") - raise HTTPException(status_code=500, detail=str(e)) - - # ============================================================================= # Mandate View Endpoints (for Admins) # ============================================================================= diff --git a/modules/routes/routeClickup.py b/modules/routes/routeClickup.py index 07202791..ccf1c481 100644 --- a/modules/routes/routeClickup.py +++ b/modules/routes/routeClickup.py @@ -1,18 +1,17 @@ # Copyright (c) 2025 Patrick Motsch # All rights reserved. -"""ClickUp API routes — teams, hierarchy, lists, tasks (connection-scoped).""" +"""ClickUp API routes — lists and tasks (connection-scoped). OAuth lives under /api/clickup/auth/* in routeSecurityClickup.""" import logging from typing import Any, Dict, Optional from fastapi import APIRouter, Depends, HTTPException, Path, Query, Request, status -from pydantic import BaseModel - from modules.auth import getCurrentUser, limiter from modules.datamodels.datamodelUam import AuthAuthority, User, UserConnection from modules.interfaces.interfaceDbApp import getInterface from modules.serviceHub import getInterface as getServices from modules.shared.i18nRegistry import apiRouteContext + routeApiMsg = apiRouteContext("routeClickup") logger = logging.getLogger(__name__) @@ -64,22 +63,6 @@ def _svc_for_connection(current_user: User, connection: UserConnection): return services.clickup -# --- Routes (prefix is /api/clickup; OAuth lives under /api/clickup/auth/* in routeSecurityClickup) --- - - -@router.get("/{connectionId}/teams", response_model=Dict[str, Any]) -@limiter.limit("30/minute") -async def get_teams( - request: Request, - connectionId: str = Path(..., description="ClickUp UserConnection id"), - currentUser: User = Depends(getCurrentUser), -) -> Dict[str, Any]: - interface = getInterface(currentUser) - conn = _clickup_connection_or_404(interface, connectionId, currentUser.id) - cu = _svc_for_connection(currentUser, conn) - return await cu.getAuthorizedTeams() - - @router.get("/{connectionId}/teams/{teamId}", response_model=Dict[str, Any]) @limiter.limit("60/minute") async def get_team( @@ -95,62 +78,6 @@ async def get_team( return await cu.getTeam(teamId) -@router.get("/{connectionId}/teams/{teamId}/spaces", response_model=Dict[str, Any]) -@limiter.limit("60/minute") -async def get_spaces( - request: Request, - connectionId: str = Path(...), - teamId: str = Path(...), - currentUser: User = Depends(getCurrentUser), -) -> Dict[str, Any]: - interface = getInterface(currentUser) - conn = _clickup_connection_or_404(interface, connectionId, currentUser.id) - cu = _svc_for_connection(currentUser, conn) - return await cu.getSpaces(teamId) - - -@router.get("/{connectionId}/spaces/{spaceId}/folders", response_model=Dict[str, Any]) -@limiter.limit("60/minute") -async def get_folders( - request: Request, - connectionId: str = Path(...), - spaceId: str = Path(...), - currentUser: User = Depends(getCurrentUser), -) -> Dict[str, Any]: - interface = getInterface(currentUser) - conn = _clickup_connection_or_404(interface, connectionId, currentUser.id) - cu = _svc_for_connection(currentUser, conn) - return await cu.getFolders(spaceId) - - -@router.get("/{connectionId}/spaces/{spaceId}/lists", response_model=Dict[str, Any]) -@limiter.limit("60/minute") -async def get_folderless_lists( - request: Request, - connectionId: str = Path(...), - spaceId: str = Path(...), - currentUser: User = Depends(getCurrentUser), -) -> Dict[str, Any]: - interface = getInterface(currentUser) - conn = _clickup_connection_or_404(interface, connectionId, currentUser.id) - cu = _svc_for_connection(currentUser, conn) - return await cu.getFolderlessLists(spaceId) - - -@router.get("/{connectionId}/folders/{folderId}/lists", response_model=Dict[str, Any]) -@limiter.limit("60/minute") -async def get_lists_in_folder( - request: Request, - connectionId: str = Path(...), - folderId: str = Path(...), - currentUser: User = Depends(getCurrentUser), -) -> Dict[str, Any]: - interface = getInterface(currentUser) - conn = _clickup_connection_or_404(interface, connectionId, currentUser.id) - cu = _svc_for_connection(currentUser, conn) - return await cu.getListsInFolder(folderId) - - @router.get("/{connectionId}/lists/{listId}", response_model=Dict[str, Any]) @limiter.limit("60/minute") async def get_list( @@ -195,29 +122,6 @@ async def get_list_tasks( return await cu.getTasksInList(listId, page=page, include_closed=include_closed) -class TaskCreateBody(BaseModel): - body: Dict[str, Any] - - -@router.post("/{connectionId}/lists/{listId}/tasks", response_model=Dict[str, Any]) -@limiter.limit("30/minute") -async def create_list_task( - request: Request, - payload: TaskCreateBody, - connectionId: str = Path(...), - listId: str = Path(...), - currentUser: User = Depends(getCurrentUser), -) -> Dict[str, Any]: - interface = getInterface(currentUser) - conn = _clickup_connection_or_404(interface, connectionId, currentUser.id) - cu = _svc_for_connection(currentUser, conn) - return await cu.createTask(listId, payload.body) - - -class TaskUpdateBody(BaseModel): - body: Dict[str, Any] - - @router.get("/{connectionId}/tasks/{taskId}", response_model=Dict[str, Any]) @limiter.limit("60/minute") async def get_task( @@ -230,61 +134,3 @@ async def get_task( conn = _clickup_connection_or_404(interface, connectionId, currentUser.id) cu = _svc_for_connection(currentUser, conn) return await cu.getTask(taskId) - - -@router.put("/{connectionId}/tasks/{taskId}", response_model=Dict[str, Any]) -@limiter.limit("30/minute") -async def update_task( - request: Request, - payload: TaskUpdateBody, - connectionId: str = Path(...), - taskId: str = Path(...), - currentUser: User = Depends(getCurrentUser), -) -> Dict[str, Any]: - interface = getInterface(currentUser) - conn = _clickup_connection_or_404(interface, connectionId, currentUser.id) - cu = _svc_for_connection(currentUser, conn) - return await cu.updateTask(taskId, payload.body) - - -@router.delete("/{connectionId}/tasks/{taskId}", response_model=Dict[str, Any]) -@limiter.limit("30/minute") -async def delete_task( - request: Request, - connectionId: str = Path(...), - taskId: str = Path(...), - currentUser: User = Depends(getCurrentUser), -) -> Dict[str, Any]: - interface = getInterface(currentUser) - conn = _clickup_connection_or_404(interface, connectionId, currentUser.id) - cu = _svc_for_connection(currentUser, conn) - return await cu.deleteTask(taskId) - - -@router.get("/{connectionId}/teams/{teamId}/tasks/search", response_model=Dict[str, Any]) -@limiter.limit("30/minute") -async def search_team_tasks( - request: Request, - connectionId: str = Path(...), - teamId: str = Path(...), - query: str = Query(..., description="Search query"), - page: int = Query(0), - currentUser: User = Depends(getCurrentUser), -) -> Dict[str, Any]: - interface = getInterface(currentUser) - conn = _clickup_connection_or_404(interface, connectionId, currentUser.id) - cu = _svc_for_connection(currentUser, conn) - return await cu.searchTeamTasks(teamId, query=query, page=page) - - -@router.get("/{connectionId}/user", response_model=Dict[str, Any]) -@limiter.limit("30/minute") -async def get_authorized_user( - request: Request, - connectionId: str = Path(...), - currentUser: User = Depends(getCurrentUser), -) -> Dict[str, Any]: - interface = getInterface(currentUser) - conn = _clickup_connection_or_404(interface, connectionId, currentUser.id) - cu = _svc_for_connection(currentUser, conn) - return await cu.getAuthorizedUser() diff --git a/modules/routes/routeDataFiles.py b/modules/routes/routeDataFiles.py index efac6430..49eaa000 100644 --- a/modules/routes/routeDataFiles.py +++ b/modules/routes/routeDataFiles.py @@ -944,44 +944,6 @@ def delete_file( return {"message": f"File with ID {fileId} successfully deleted"} -@router.get("/stats", response_model=Dict[str, Any]) -@limiter.limit("30/minute") -def get_file_stats( - request: Request, - currentUser: User = Depends(getCurrentUser) -) -> Dict[str, Any]: - """Returns statistics about the stored files""" - try: - managementInterface = interfaceDbManagement.getInterface(currentUser) - - # Get all files - metadata only - allFiles = managementInterface.getAllFiles() - - # Calculate statistics - totalFiles = len(allFiles) - totalSize = sum(file.fileSize for file in allFiles) - - # Group by file type - fileTypes = {} - for file in allFiles: - fileType = file.mimeType.split("/")[0] - if fileType not in fileTypes: - fileTypes[fileType] = 0 - fileTypes[fileType] += 1 - - return { - "totalFiles": totalFiles, - "totalSizeBytes": totalSize, - "fileTypes": fileTypes - } - - except Exception as e: - logger.error(f"Error retrieving file statistics: {str(e)}") - raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, - detail=f"Error retrieving file statistics: {str(e)}" - ) - @router.get("/{fileId}/download") @limiter.limit("30/minute") def download_file( diff --git a/modules/routes/routeI18n.py b/modules/routes/routeI18n.py index 23a6ad46..a50739d7 100644 --- a/modules/routes/routeI18n.py +++ b/modules/routes/routeI18n.py @@ -508,24 +508,6 @@ async def list_language_codes(): return sorted(out, key=lambda x: (not x.get("isDefault"), x["code"])) -@router.get("/user-language-options") -async def list_user_language_options(): - """Select options for User.language: all UiLanguageSets except ``xx`` (basis set). - - Returns ``[{ \"value\": code, \"label\": name }, ...]`` for FormGenerator ``frontend_options`` URL. - """ - db = _publicMgmtDb() - rows = db.getRecordset(UiLanguageSet) - out: List[Dict[str, str]] = [] - for r in rows: - code = r.get("id") - if not code or code == "xx": - continue - lbl = (r.get("label") or "").strip() or code - out.append({"value": code, "label": lbl}) - return sorted(out, key=lambda x: (x.get("label") or x["value"]).lower()) - - @router.get("/sets/{code}") async def get_language_set(code: str): db = _publicMgmtDb() @@ -859,33 +841,6 @@ async def sync_xx_master( return result -@router.put("/sets/update-all") -async def update_all_language_sets( - request: Request, - adminUser: User = Depends(requireSysAdminRole), -): - """Sync xx-master (if body provided), then update ALL language sets via AI.""" - db = getMgmtInterface(adminUser, mandateId=None).db - - fromBody = await _readOptionalEntriesFromBody(request) - xxSync: Optional[dict] = None - if fromBody is not None: - xxSync = _syncXxMaster(db, str(adminUser.id), fromBody) - if xxSync.get("error"): - return {"xxSync": xxSync, "updated": []} - - rows = db.getRecordset(UiLanguageSet) - results = [] - for r in rows: - cid = r["id"] - if cid == "xx": - continue - res = await _syncLanguageWithXx(db, cid, str(adminUser.id), adminUser=adminUser) - results.append(res) - await _reloadI18nCache() - return {"xxSync": xxSync, "updated": results} - - @router.get("/sets/{code}/sync-diff") async def get_language_sync_diff( code: str, diff --git a/modules/routes/routeMessaging.py b/modules/routes/routeMessaging.py deleted file mode 100644 index c2e0766f..00000000 --- a/modules/routes/routeMessaging.py +++ /dev/null @@ -1,514 +0,0 @@ -# Copyright (c) 2025 Patrick Motsch -# All rights reserved. -from fastapi import APIRouter, HTTPException, Depends, Body, Path, Request, Query -from typing import List, Dict, Any, Optional -from fastapi import status -import logging -import json - -# Import auth module -from modules.auth import limiter, getCurrentUser, getRequestContext, RequestContext -from modules.datamodels.datamodelRbac import Role - -# Import interfaces -import modules.interfaces.interfaceDbManagement as interfaceDbManagement -from modules.datamodels.datamodelMessaging import ( - MessagingSubscription, - MessagingSubscriptionRegistration, - MessagingDelivery, - MessagingChannel, - MessagingEventParameters, - MessagingSubscriptionExecutionResult -) -from modules.datamodels.datamodelUam import User -from modules.datamodels.datamodelPagination import PaginationParams, PaginatedResponse, PaginationMetadata, normalize_pagination_dict -from modules.shared.i18nRegistry import apiRouteContext -routeApiMsg = apiRouteContext("routeMessaging") - -# Configure logger -logger = logging.getLogger(__name__) - -# Create router for messaging endpoints -router = APIRouter( - prefix="/api/messaging", - tags=["Messaging"], - responses={404: {"description": "Not found"}} -) - - -# Subscription Endpoints - -@router.get("/subscriptions", response_model=PaginatedResponse[MessagingSubscription]) -@limiter.limit("60/minute") -def get_subscriptions( - request: Request, - pagination: Optional[str] = Query(None, description="JSON-encoded PaginationParams object"), - currentUser: User = Depends(getCurrentUser) -) -> PaginatedResponse[MessagingSubscription]: - """Get subscriptions with optional pagination, sorting, and filtering.""" - paginationParams = None - if pagination: - try: - paginationDict = json.loads(pagination) - if paginationDict: - paginationDict = normalize_pagination_dict(paginationDict) - paginationParams = PaginationParams(**paginationDict) if paginationDict else None - except (json.JSONDecodeError, ValueError) as e: - raise HTTPException( - status_code=400, - detail=f"Invalid pagination parameter: {str(e)}" - ) - - managementInterface = interfaceDbManagement.getInterface(currentUser) - result = managementInterface.getAllSubscriptions(pagination=paginationParams) - - if paginationParams: - return PaginatedResponse( - items=result.items, - pagination=PaginationMetadata( - currentPage=paginationParams.page, - pageSize=paginationParams.pageSize, - totalItems=result.totalItems, - totalPages=result.totalPages, - sort=paginationParams.sort, - filters=paginationParams.filters - ) - ) - else: - return PaginatedResponse( - items=result, - pagination=None - ) - - -@router.post("/subscriptions", response_model=MessagingSubscription) -@limiter.limit("60/minute") -def create_subscription( - request: Request, - subscription: MessagingSubscription, - currentUser: User = Depends(getCurrentUser) -) -> MessagingSubscription: - """Create a new subscription""" - managementInterface = interfaceDbManagement.getInterface(currentUser) - - subscriptionData = subscription.model_dump(exclude={"id"}) - newSubscription = managementInterface.createSubscription(subscriptionData) - - return MessagingSubscription(**newSubscription) - - -@router.get("/subscriptions/{subscriptionId}", response_model=MessagingSubscription) -@limiter.limit("60/minute") -def get_subscription( - request: Request, - subscriptionId: str = Path(..., description="ID of the subscription"), - currentUser: User = Depends(getCurrentUser) -) -> MessagingSubscription: - """Get a specific subscription""" - managementInterface = interfaceDbManagement.getInterface(currentUser) - - subscription = managementInterface.getSubscription(subscriptionId) - if not subscription: - raise HTTPException( - status_code=status.HTTP_404_NOT_FOUND, - detail=f"Subscription with ID {subscriptionId} not found" - ) - - return subscription - - -@router.put("/subscriptions/{subscriptionId}", response_model=MessagingSubscription) -@limiter.limit("60/minute") -def update_subscription( - request: Request, - subscriptionId: str = Path(..., description="ID of the subscription to update"), - subscriptionData: MessagingSubscription = Body(...), - currentUser: User = Depends(getCurrentUser) -) -> MessagingSubscription: - """Update an existing subscription""" - managementInterface = interfaceDbManagement.getInterface(currentUser) - - existingSubscription = managementInterface.getSubscription(subscriptionId) - if not existingSubscription: - raise HTTPException( - status_code=status.HTTP_404_NOT_FOUND, - detail=f"Subscription with ID {subscriptionId} not found" - ) - - updateData = subscriptionData.model_dump(exclude={"id", "subscriptionId"}) - updatedSubscription = managementInterface.updateSubscription(subscriptionId, updateData) - - if not updatedSubscription: - raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, - detail=routeApiMsg("Error updating the subscription") - ) - - return MessagingSubscription(**updatedSubscription) - - -@router.delete("/subscriptions/{subscriptionId}", response_model=Dict[str, Any]) -@limiter.limit("60/minute") -def delete_subscription( - request: Request, - subscriptionId: str = Path(..., description="ID of the subscription to delete"), - currentUser: User = Depends(getCurrentUser) -) -> Dict[str, Any]: - """Delete a subscription""" - managementInterface = interfaceDbManagement.getInterface(currentUser) - - existingSubscription = managementInterface.getSubscription(subscriptionId) - if not existingSubscription: - raise HTTPException( - status_code=status.HTTP_404_NOT_FOUND, - detail=f"Subscription with ID {subscriptionId} not found" - ) - - success = managementInterface.deleteSubscription(subscriptionId) - if not success: - raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, - detail=routeApiMsg("Error deleting the subscription") - ) - - return {"message": f"Subscription with ID {subscriptionId} successfully deleted"} - - -# Registration Endpoints - -@router.get("/subscriptions/{subscriptionId}/registrations", response_model=PaginatedResponse[MessagingSubscriptionRegistration]) -@limiter.limit("60/minute") -def get_subscription_registrations( - request: Request, - subscriptionId: str = Path(..., description="ID of the subscription"), - pagination: Optional[str] = Query(None, description="JSON-encoded PaginationParams object"), - currentUser: User = Depends(getCurrentUser) -) -> PaginatedResponse[MessagingSubscriptionRegistration]: - """Get registrations for a subscription""" - paginationParams = None - if pagination: - try: - paginationDict = json.loads(pagination) - if paginationDict: - paginationDict = normalize_pagination_dict(paginationDict) - paginationParams = PaginationParams(**paginationDict) if paginationDict else None - except (json.JSONDecodeError, ValueError) as e: - raise HTTPException( - status_code=400, - detail=f"Invalid pagination parameter: {str(e)}" - ) - - managementInterface = interfaceDbManagement.getInterface(currentUser) - result = managementInterface.getAllRegistrations( - subscriptionId=subscriptionId, - pagination=paginationParams - ) - - if paginationParams: - return PaginatedResponse( - items=result.items, - pagination=PaginationMetadata( - currentPage=paginationParams.page, - pageSize=paginationParams.pageSize, - totalItems=result.totalItems, - totalPages=result.totalPages, - sort=paginationParams.sort, - filters=paginationParams.filters - ) - ) - else: - return PaginatedResponse( - items=result, - pagination=None - ) - - -@router.post("/subscriptions/{subscriptionId}/subscribe", response_model=MessagingSubscriptionRegistration) -@limiter.limit("60/minute") -def subscribe_user( - request: Request, - subscriptionId: str = Path(..., description="ID of the subscription"), - channel: MessagingChannel = Body(..., embed=True), - channelConfig: str = Body(..., embed=True), - currentUser: User = Depends(getCurrentUser) -) -> MessagingSubscriptionRegistration: - """Subscribe user to a subscription with a specific channel""" - managementInterface = interfaceDbManagement.getInterface(currentUser) - - registration = managementInterface.subscribeUser( - subscriptionId=subscriptionId, - userId=currentUser.id, - channel=channel, - channelConfig=channelConfig - ) - - return MessagingSubscriptionRegistration(**registration) - - -@router.delete("/subscriptions/{subscriptionId}/unsubscribe", response_model=Dict[str, Any]) -@limiter.limit("60/minute") -def unsubscribe_user( - request: Request, - subscriptionId: str = Path(..., description="ID of the subscription"), - channel: MessagingChannel = Body(..., embed=True), - currentUser: User = Depends(getCurrentUser) -) -> Dict[str, Any]: - """Unsubscribe user from a subscription for a specific channel""" - managementInterface = interfaceDbManagement.getInterface(currentUser) - - success = managementInterface.unsubscribeUser( - subscriptionId=subscriptionId, - userId=currentUser.id, - channel=channel - ) - - if not success: - raise HTTPException( - status_code=status.HTTP_404_NOT_FOUND, - detail=routeApiMsg("Registration not found") - ) - - return {"message": f"Successfully unsubscribed from {subscriptionId} for channel {channel.value}"} - - -@router.get("/registrations", response_model=PaginatedResponse[MessagingSubscriptionRegistration]) -@limiter.limit("60/minute") -def get_my_registrations( - request: Request, - pagination: Optional[str] = Query(None, description="JSON-encoded PaginationParams object"), - currentUser: User = Depends(getCurrentUser) -) -> PaginatedResponse[MessagingSubscriptionRegistration]: - """Get own registrations""" - paginationParams = None - if pagination: - try: - paginationDict = json.loads(pagination) - if paginationDict: - paginationDict = normalize_pagination_dict(paginationDict) - paginationParams = PaginationParams(**paginationDict) if paginationDict else None - except (json.JSONDecodeError, ValueError) as e: - raise HTTPException( - status_code=400, - detail=f"Invalid pagination parameter: {str(e)}" - ) - - managementInterface = interfaceDbManagement.getInterface(currentUser) - result = managementInterface.getAllRegistrations( - userId=currentUser.id, - pagination=paginationParams - ) - - if paginationParams: - return PaginatedResponse( - items=result.items, - pagination=PaginationMetadata( - currentPage=paginationParams.page, - pageSize=paginationParams.pageSize, - totalItems=result.totalItems, - totalPages=result.totalPages, - sort=paginationParams.sort, - filters=paginationParams.filters - ) - ) - else: - return PaginatedResponse( - items=result, - pagination=None - ) - - -@router.put("/registrations/{registrationId}", response_model=MessagingSubscriptionRegistration) -@limiter.limit("60/minute") -def update_registration( - request: Request, - registrationId: str = Path(..., description="ID of the registration to update"), - registrationData: MessagingSubscriptionRegistration = Body(...), - currentUser: User = Depends(getCurrentUser) -) -> MessagingSubscriptionRegistration: - """Update a registration""" - managementInterface = interfaceDbManagement.getInterface(currentUser) - - existingRegistration = managementInterface.getRegistration(registrationId) - if not existingRegistration: - raise HTTPException( - status_code=status.HTTP_404_NOT_FOUND, - detail=f"Registration with ID {registrationId} not found" - ) - - updateData = registrationData.model_dump(exclude={"id", "subscriptionId", "userId"}) - updatedRegistration = managementInterface.updateRegistration(registrationId, updateData) - - if not updatedRegistration: - raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, - detail=routeApiMsg("Error updating the registration") - ) - - return MessagingSubscriptionRegistration(**updatedRegistration) - - -@router.delete("/registrations/{registrationId}", response_model=Dict[str, Any]) -@limiter.limit("60/minute") -def delete_registration( - request: Request, - registrationId: str = Path(..., description="ID of the registration to delete"), - currentUser: User = Depends(getCurrentUser) -) -> Dict[str, Any]: - """Delete a registration""" - managementInterface = interfaceDbManagement.getInterface(currentUser) - - existingRegistration = managementInterface.getRegistration(registrationId) - if not existingRegistration: - raise HTTPException( - status_code=status.HTTP_404_NOT_FOUND, - detail=f"Registration with ID {registrationId} not found" - ) - - success = managementInterface.deleteRegistration(registrationId) - if not success: - raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, - detail=routeApiMsg("Error deleting the registration") - ) - - return {"message": f"Registration with ID {registrationId} successfully deleted"} - - -# Trigger Endpoints - -def _getTriggerKey(request: Request) -> str: - """Custom key function for trigger rate limiting per subscriptionId""" - subscriptionId = request.path_params.get("subscriptionId", "unknown") - return f"{request.client.host}:{subscriptionId}" - - -@router.post("/trigger/{subscriptionId}", response_model=MessagingSubscriptionExecutionResult) -@limiter.limit("60/minute", key_func=_getTriggerKey) -def trigger_subscription( - request: Request, - subscriptionId: str = Path(..., description="ID of the subscription to trigger"), - eventParameters: Dict[str, Any] = Body(...), - context: RequestContext = Depends(getRequestContext) -) -> MessagingSubscriptionExecutionResult: - """ - Trigger a subscription with event parameters. - - Requires Mandate-Admin role or SysAdmin. - """ - # RBAC-Check: Admin or Mandate-Admin can trigger - if not _hasTriggerPermission(context): - raise HTTPException( - status_code=status.HTTP_403_FORBIDDEN, - detail=routeApiMsg("Admin or Mandate-Admin role required to trigger subscriptions") - ) - - # Get messaging service from request app state - from modules.serviceHub import getInterface as getServicesInterface - services = getServicesInterface(context.user, None, mandateId=str(context.mandateId)) - - # Konvertiere Dict zu Pydantic Model - eventParams = MessagingEventParameters(triggerData=eventParameters) - - executionResult = services.messaging.executeSubscription(subscriptionId, eventParams) - return executionResult - - -def _hasTriggerPermission(context: RequestContext) -> bool: - """ - Check if user has permission to trigger subscriptions. - Requires admin or mandate-admin role. - """ - if context.hasSysAdminRole: - return True - - if not context.roleIds: - return False - - try: - from modules.interfaces.interfaceDbApp import getRootInterface - rootInterface = getRootInterface() - - for roleId in context.roleIds: - role = rootInterface.getRole(roleId) - if role: - roleLabel = role.roleLabel - # Admin role at mandate level or system admin - if roleLabel in ("admin", "sysadmin"): - return True - - return False - - except Exception as e: - logger.error(f"Error checking trigger permission: {e}") - return False - - -# Delivery Endpoints - -@router.get("/deliveries", response_model=PaginatedResponse[MessagingDelivery]) -@limiter.limit("60/minute") -def get_deliveries( - request: Request, - subscriptionId: Optional[str] = Query(None, description="Filter by subscription ID"), - pagination: Optional[str] = Query(None, description="JSON-encoded PaginationParams object"), - currentUser: User = Depends(getCurrentUser) -) -> PaginatedResponse[MessagingDelivery]: - """Get delivery history""" - paginationParams = None - if pagination: - try: - paginationDict = json.loads(pagination) - if paginationDict: - paginationDict = normalize_pagination_dict(paginationDict) - paginationParams = PaginationParams(**paginationDict) if paginationDict else None - except (json.JSONDecodeError, ValueError) as e: - raise HTTPException( - status_code=400, - detail=f"Invalid pagination parameter: {str(e)}" - ) - - managementInterface = interfaceDbManagement.getInterface(currentUser) - result = managementInterface.getDeliveries( - subscriptionId=subscriptionId, - userId=currentUser.id, # Users can only see their own deliveries - pagination=paginationParams - ) - - if paginationParams: - return PaginatedResponse( - items=result.items, - pagination=PaginationMetadata( - currentPage=paginationParams.page, - pageSize=paginationParams.pageSize, - totalItems=result.totalItems, - totalPages=result.totalPages, - sort=paginationParams.sort, - filters=paginationParams.filters - ) - ) - else: - return PaginatedResponse( - items=result, - pagination=None - ) - - -@router.get("/deliveries/{deliveryId}", response_model=MessagingDelivery) -@limiter.limit("60/minute") -def get_delivery( - request: Request, - deliveryId: str = Path(..., description="ID of the delivery"), - currentUser: User = Depends(getCurrentUser) -) -> MessagingDelivery: - """Get a specific delivery""" - managementInterface = interfaceDbManagement.getInterface(currentUser) - - delivery = managementInterface.getDelivery(deliveryId) - if not delivery: - raise HTTPException( - status_code=status.HTTP_404_NOT_FOUND, - detail=f"Delivery with ID {deliveryId} not found" - ) - - return delivery - diff --git a/modules/routes/routeSecurityAdmin.py b/modules/routes/routeSecurityAdmin.py deleted file mode 100644 index acc5cdc5..00000000 --- a/modules/routes/routeSecurityAdmin.py +++ /dev/null @@ -1,435 +0,0 @@ -# Copyright (c) 2025 Patrick Motsch -# All rights reserved. -""" -Security Administration routes. -MULTI-TENANT: These are SYSTEM-LEVEL operations requiring isSysAdmin=true. -No mandate context - SysAdmin manages infrastructure, not data. -""" -from fastapi import APIRouter, HTTPException, Depends, status, Request, Body -from fastapi.responses import FileResponse, JSONResponse -from typing import Optional, Dict, Any, List -import os -import logging - -from modules.auth import getCurrentUser, limiter, requireSysAdmin -from modules.connectors.connectorDbPostgre import DatabaseConnector -from modules.interfaces.interfaceDbApp import getRootInterface -from modules.datamodels.datamodelUam import User, UserInDB, AuthAuthority -from modules.datamodels.datamodelSecurity import Token -from modules.shared.configuration import APP_CONFIG -from modules.shared.i18nRegistry import apiRouteContext -routeApiMsg = apiRouteContext("routeSecurityAdmin") - -logger = logging.getLogger(__name__) - -router = APIRouter( - prefix="/api/admin", - tags=["Security Administration"], - responses={ - 404: {"description": "Not found"}, - 400: {"description": "Bad request"}, - 401: {"description": "Unauthorized"}, - 403: {"description": "Forbidden"}, - 500: {"description": "Internal server error"} - } -) - - -def _getPoweronDatabases() -> List[str]: - """Load databases from PostgreSQL host matching poweron_%.""" - dbHost = APP_CONFIG.get("DB_HOST") - dbUser = APP_CONFIG.get("DB_USER") - dbPassword = APP_CONFIG.get("DB_PASSWORD_SECRET") - dbPort = int(APP_CONFIG.get("DB_PORT", 5432)) - - # Connect to 'postgres' system database to query all databases - connector = DatabaseConnector( - dbHost=dbHost, - dbDatabase="postgres", - dbUser=dbUser, - dbPassword=dbPassword, - dbPort=dbPort, - userId=None - ) - - try: - with connector.connection.cursor() as cursor: - cursor.execute( - """ - SELECT datname - FROM pg_database - WHERE datname LIKE 'poweron_%' - AND datistemplate = false - ORDER BY datname - """ - ) - rows = cursor.fetchall() - return [row["datname"] for row in rows if row.get("datname")] - finally: - connector.close() - - -def _getDatabaseConnector(databaseName: str, userId: str = None) -> DatabaseConnector: - """ - Create a generic DatabaseConnector for any poweron_* database. - Fully dynamic - no interface mapping needed. - """ - if not databaseName.startswith("poweron_"): - raise ValueError(f"Invalid database name: {databaseName}") - - dbHost = APP_CONFIG.get("DB_HOST") - dbUser = APP_CONFIG.get("DB_USER") - dbPassword = APP_CONFIG.get("DB_PASSWORD_SECRET") - dbPort = int(APP_CONFIG.get("DB_PORT", 5432)) - - connector = DatabaseConnector( - dbHost=dbHost, - dbDatabase=databaseName, - dbUser=dbUser, - dbPassword=dbPassword, - dbPort=dbPort, - userId=userId - ) - return connector - - -# ---------------------- -# Token listing and revocation -# ---------------------- - -@router.get("/tokens") -@limiter.limit("30/minute") -def list_tokens( - request: Request, - currentUser: User = Depends(requireSysAdmin), - userId: Optional[str] = None, - authority: Optional[str] = None, - sessionId: Optional[str] = None, - statusFilter: Optional[str] = None, - connectionId: Optional[str] = None, -) -> List[Dict[str, Any]]: - """ - List all tokens in the system. - MULTI-TENANT: SysAdmin-only, no mandate filter (system-level view). - """ - try: - appInterface = getRootInterface() - - recordFilter: Dict[str, Any] = {} - if userId: - recordFilter["userId"] = userId - if authority: - recordFilter["authority"] = authority - if sessionId: - recordFilter["sessionId"] = sessionId - if connectionId: - recordFilter["connectionId"] = connectionId - if statusFilter: - recordFilter["status"] = statusFilter - # MULTI-TENANT: SysAdmin sees ALL tokens (no mandate filter) - # Use interface method to get tokens with flexible filtering - tokens = appInterface.getAllTokens(recordFilter=recordFilter) - return tokens - except HTTPException: - raise - except Exception as e: - logger.error(f"Error listing tokens: {str(e)}") - raise HTTPException(status_code=500, detail=routeApiMsg("Failed to list tokens")) - - -@router.post("/tokens/revoke/user") -@limiter.limit("30/minute") -def revoke_tokens_by_user( - request: Request, - currentUser: User = Depends(requireSysAdmin), - payload: Dict[str, Any] = Body(...) -) -> Dict[str, Any]: - """ - Revoke all tokens for a user. - MULTI-TENANT: SysAdmin-only, can revoke across all mandates. - """ - try: - userId = payload.get("userId") - authority = payload.get("authority") - reason = payload.get("reason", "sysadmin revoke") - if not userId: - raise HTTPException(status_code=400, detail=routeApiMsg("userId is required")) - - appInterface = getRootInterface() - # MULTI-TENANT: SysAdmin can revoke any user's tokens (no mandate restriction) - count = appInterface.revokeTokensByUser( - userId=userId, - authority=AuthAuthority(authority) if authority else None, - mandateId=None, # SysAdmin: no mandate filter - revokedBy=currentUser.id, - reason=reason - ) - return {"revoked": count} - except HTTPException: - raise - except Exception as e: - logger.error(f"Error revoking tokens by user: {str(e)}") - raise HTTPException(status_code=500, detail=routeApiMsg("Failed to revoke tokens")) - - -@router.post("/tokens/revoke/session") -@limiter.limit("30/minute") -def revoke_tokens_by_session( - request: Request, - currentUser: User = Depends(requireSysAdmin), - payload: Dict[str, Any] = Body(...) -) -> Dict[str, Any]: - """ - Revoke all tokens for a specific session. - MULTI-TENANT: SysAdmin-only. - """ - try: - userId = payload.get("userId") - sessionId = payload.get("sessionId") - authority = payload.get("authority", "local") - reason = payload.get("reason", "sysadmin session revoke") - if not userId or not sessionId: - raise HTTPException(status_code=400, detail=routeApiMsg("userId and sessionId are required")) - - appInterface = getRootInterface() - # MULTI-TENANT: SysAdmin can revoke any session (no mandate check) - count = appInterface.revokeTokensBySessionId( - sessionId=sessionId, - userId=userId, - authority=AuthAuthority(authority), - revokedBy=currentUser.id, - reason=reason - ) - return {"revoked": count} - except HTTPException: - raise - except Exception as e: - logger.error(f"Error revoking tokens by session: {str(e)}") - raise HTTPException(status_code=500, detail=routeApiMsg("Failed to revoke session tokens")) - - -@router.post("/tokens/revoke/id") -@limiter.limit("30/minute") -def revoke_token_by_id( - request: Request, - currentUser: User = Depends(requireSysAdmin), - payload: Dict[str, Any] = Body(...) -) -> Dict[str, Any]: - """ - Revoke a specific token by ID. - MULTI-TENANT: SysAdmin-only. - """ - try: - tokenId = payload.get("tokenId") - reason = payload.get("reason", "sysadmin revoke") - if not tokenId: - raise HTTPException(status_code=400, detail=routeApiMsg("tokenId is required")) - appInterface = getRootInterface() - # MULTI-TENANT: SysAdmin can revoke any token (no mandate check) - ok = appInterface.revokeTokenById(tokenId, revokedBy=currentUser.id, reason=reason) - return {"revoked": 1 if ok else 0} - except HTTPException: - raise - except Exception as e: - logger.error(f"Error revoking token by id: {str(e)}") - raise HTTPException(status_code=500, detail=routeApiMsg("Failed to revoke token")) - - -@router.post("/tokens/revoke/mandate") -@limiter.limit("10/minute") -def revoke_tokens_by_mandate( - request: Request, - currentUser: User = Depends(requireSysAdmin), - payload: Dict[str, Any] = Body(...) -) -> Dict[str, Any]: - """ - Revoke all tokens for users in a mandate. - MULTI-TENANT: SysAdmin-only, can revoke tokens for any mandate. - """ - try: - mandateId = payload.get("mandateId") - authority = payload.get("authority", "local") - reason = payload.get("reason", "sysadmin mandate revoke") - if not mandateId: - raise HTTPException(status_code=400, detail=routeApiMsg("mandateId is required")) - - # MULTI-TENANT: SysAdmin can revoke tokens for any mandate - appInterface = getRootInterface() - - # Get all UserMandate entries for this mandate to find users using interface method - userMandates = appInterface.getUserMandatesByMandate(mandateId) - - total = 0 - for um in userMandates: - total += appInterface.revokeTokensByUser( - userId=um.userId, - authority=AuthAuthority(authority) if authority else None, - mandateId=None, # Revoke all tokens for user - revokedBy=currentUser.id, - reason=reason - ) - return {"revoked": total} - except HTTPException: - raise - except Exception as e: - logger.error(f"Error revoking tokens by mandate: {str(e)}") - raise HTTPException(status_code=500, detail=routeApiMsg("Failed to revoke mandate tokens")) - - - - -# ---------------------- -# Database admin -# ---------------------- - -@router.get("/databases") -@limiter.limit("10/minute") -def list_databases( - request: Request, - currentUser: User = Depends(requireSysAdmin) -) -> Dict[str, Any]: - """ - List all poweron_* databases. - MULTI-TENANT: SysAdmin-only (infrastructure management). - """ - try: - databases = _getPoweronDatabases() - return {"databases": databases} - except Exception as e: - logger.error(f"Failed to load databases from host: {e}") - raise HTTPException(status_code=500, detail=routeApiMsg("Failed to load databases from host")) - - -@router.get("/databases/{database_name}/tables") -@limiter.limit("30/minute") -def get_database_tables( - request: Request, - database_name: str, - currentUser: User = Depends(requireSysAdmin) -) -> Dict[str, Any]: - """ - List tables in a database. - MULTI-TENANT: SysAdmin-only (infrastructure management). - """ - if not database_name.startswith("poweron_"): - raise HTTPException(status_code=400, detail=routeApiMsg("Invalid database name format")) - - connector = None - try: - connector = _getDatabaseConnector(database_name, currentUser.id) - tables = connector.getTables() - return {"tables": tables} - except ValueError as e: - raise HTTPException(status_code=400, detail=str(e)) - except Exception as e: - logger.error(f"Error getting database tables: {str(e)}") - raise HTTPException(status_code=500, detail=f"Failed to get database tables: {str(e)}") - finally: - if connector: - connector.close() - - -@router.post("/databases/{database_name}/tables/{table_name}/drop") -@limiter.limit("10/minute") -def drop_table( - request: Request, - database_name: str, - table_name: str, - currentUser: User = Depends(requireSysAdmin), - payload: Dict[str, Any] = Body(...) -) -> Dict[str, Any]: - """ - Drop a table from a database. - MULTI-TENANT: SysAdmin-only (infrastructure management). - """ - if not database_name.startswith("poweron_"): - raise HTTPException(status_code=400, detail=routeApiMsg("Invalid database name format")) - - connector = None - try: - connector = _getDatabaseConnector(database_name, currentUser.id) - conn = connector.connection - with conn.cursor() as cursor: - # Check if table exists - cursor.execute(""" - SELECT table_name FROM information_schema.tables - WHERE table_schema = 'public' AND table_name = %s - """, (table_name,)) - if not cursor.fetchone(): - raise HTTPException(status_code=404, detail=routeApiMsg("Table not found")) - - # Drop the table - cursor.execute(f'DROP TABLE IF EXISTS "{table_name}" CASCADE') - conn.commit() - logger.warning(f"Admin drop_table executed by {currentUser.id}: dropped table '{table_name}' from database '{database_name}'") - return {"message": f"Table '{table_name}' dropped successfully from database '{database_name}'"} - except HTTPException: - raise - except ValueError as e: - raise HTTPException(status_code=400, detail=str(e)) - except Exception as e: - logger.error(f"Error dropping table: {str(e)}") - if connector and connector.connection: - connector.connection.rollback() - raise HTTPException(status_code=500, detail=routeApiMsg("Failed to drop table")) - finally: - if connector: - connector.close() - - -@router.post("/databases/drop") -@limiter.limit("5/minute") -def drop_database( - request: Request, - currentUser: User = Depends(requireSysAdmin), - payload: Dict[str, Any] = Body(...) -) -> Dict[str, Any]: - """ - Drop all tables in a database. - MULTI-TENANT: SysAdmin-only (infrastructure management). - """ - dbName = payload.get("database") - - if not dbName or not dbName.startswith("poweron_"): - raise HTTPException(status_code=400, detail=routeApiMsg("Invalid database name")) - - # Validate database exists - try: - configuredDbs = _getPoweronDatabases() - except Exception as e: - logger.warning(f"Failed to load databases from host: {e}") - configuredDbs = [] - - if configuredDbs and dbName not in configuredDbs: - raise HTTPException(status_code=400, detail=f"Database not found. Available: {configuredDbs}") - - connector = None - try: - connector = _getDatabaseConnector(dbName, currentUser.id) - conn = connector.connection - with conn.cursor() as cursor: - # Drop all user tables (public schema) - cursor.execute(""" - SELECT table_name FROM information_schema.tables - WHERE table_schema = 'public' AND table_type = 'BASE TABLE' - """) - tables = [row['table_name'] for row in cursor.fetchall()] - dropped = [] - for tbl in tables: - cursor.execute(f'DROP TABLE IF EXISTS "{tbl}" CASCADE') - dropped.append(tbl) - conn.commit() - logger.warning(f"Admin drop_database executed by {currentUser.id}: dropped tables from '{dbName}': {dropped}") - return {"droppedTables": dropped} - except ValueError as e: - raise HTTPException(status_code=400, detail=str(e)) - except Exception as e: - logger.error(f"Error dropping database tables: {str(e)}") - if connector and connector.connection: - connector.connection.rollback() - raise HTTPException(status_code=500, detail=routeApiMsg("Failed to drop database tables")) - finally: - if connector: - connector.close() - - diff --git a/modules/routes/routeSecurityGoogle.py b/modules/routes/routeSecurityGoogle.py index 6f227dcc..96b84203 100644 --- a/modules/routes/routeSecurityGoogle.py +++ b/modules/routes/routeSecurityGoogle.py @@ -111,24 +111,6 @@ DATA_CLIENT_SECRET = APP_CONFIG.get("Service_GOOGLE_DATA_CLIENT_SECRET") DATA_REDIRECT_URI = APP_CONFIG.get("Service_GOOGLE_DATA_REDIRECT_URI") -@router.get("/config") -def get_config(): - """Debug: OAuth configuration (Auth vs Data apps).""" - return { - "auth_client_id": AUTH_CLIENT_ID, - "auth_client_secret": "***" if AUTH_CLIENT_SECRET else None, - "auth_redirect_uri": AUTH_REDIRECT_URI, - "auth_scopes": googleAuthScopes, - "data_client_id": DATA_CLIENT_ID, - "data_client_secret": "***" if DATA_CLIENT_SECRET else None, - "data_redirect_uri": DATA_REDIRECT_URI, - "data_scopes": googleDataScopes, - "config_loaded": bool( - AUTH_CLIENT_ID and AUTH_CLIENT_SECRET and AUTH_REDIRECT_URI and DATA_CLIENT_ID and DATA_CLIENT_SECRET and DATA_REDIRECT_URI - ), - } - - def _require_google_auth_config(): if not AUTH_CLIENT_ID or not AUTH_CLIENT_SECRET or not AUTH_REDIRECT_URI: raise HTTPException( @@ -620,52 +602,6 @@ def logout( ) -@router.post("/verify") -@limiter.limit("30/minute") -async def verify_token( - request: Request, - currentUser: User = Depends(getCurrentUser), -) -> Dict[str, Any]: - try: - appInterface = getInterface(currentUser) - connections = appInterface.getUserConnections(currentUser.id) - google_connection = None - for conn in connections: - if conn.authority == AuthAuthority.GOOGLE: - google_connection = conn - break - if not google_connection: - raise HTTPException( - status_code=status.HTTP_404_NOT_FOUND, - detail=routeApiMsg("No Google connection found for current user"), - ) - current_token = TokenManager().getFreshToken(google_connection.id) - if not current_token: - raise HTTPException( - status_code=status.HTTP_404_NOT_FOUND, - detail=routeApiMsg("No Google token found for this connection"), - ) - token_verification = await verify_google_token(current_token.tokenAccess) - return { - "valid": token_verification.get("valid", False), - "scopes": token_verification.get("scopes", []), - "expires_in": token_verification.get("expires_in", 0), - "email": token_verification.get("email"), - "user_id": token_verification.get("user_id"), - "error": token_verification.get("error") - if not token_verification.get("valid") - else None, - } - except HTTPException: - raise - except Exception as e: - logger.error(f"Error verifying Google token: {str(e)}") - raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, - detail=f"Failed to verify token: {str(e)}", - ) - - @router.post("/refresh") @limiter.limit("10/minute") async def refresh_token( diff --git a/modules/routes/routeSecurityMsft.py b/modules/routes/routeSecurityMsft.py index 72f7759a..88575881 100644 --- a/modules/routes/routeSecurityMsft.py +++ b/modules/routes/routeSecurityMsft.py @@ -678,24 +678,6 @@ def logout( ) -@router.post("/cleanup") -@limiter.limit("5/minute") -def cleanup_expired_tokens( - request: Request, - currentUser: User = Depends(getCurrentUser), -) -> Dict[str, Any]: - try: - appInterface = getInterface(currentUser) - cleaned_count = appInterface.cleanupExpiredTokens() - return {"message": "Cleanup completed successfully", "tokens_cleaned": cleaned_count} - except Exception as e: - logger.error(f"Error cleaning up expired tokens: {str(e)}") - raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, - detail=f"Failed to cleanup expired tokens: {str(e)}", - ) - - @router.post("/refresh") @limiter.limit("10/minute") async def refresh_token( diff --git a/modules/routes/routeSharepoint.py b/modules/routes/routeSharepoint.py index 4ab80679..4ae38112 100644 --- a/modules/routes/routeSharepoint.py +++ b/modules/routes/routeSharepoint.py @@ -29,18 +29,6 @@ router = APIRouter( } ) -def _getUserConnection(interface, connectionId: str, userId: str) -> Optional[UserConnection]: - """Get a user connection by ID, ensuring it belongs to the user""" - try: - connections = interface.getUserConnections(userId) - for conn in connections: - if conn.id == connectionId: - return conn - return None - except Exception as e: - logger.error(f"Error getting user connection: {str(e)}") - return None - def _getUserConnectionByReference(interface, connectionReference: str, userId: str) -> Optional[UserConnection]: """ Get a user connection by reference string (format: connection:authority:username). @@ -79,211 +67,6 @@ def _getUserConnectionByReference(interface, connectionReference: str, userId: s logger.error(f"Error getting user connection by reference: {str(e)}") return None -@router.get("/{connectionId}/sites", response_model=List[Dict[str, Any]]) -@limiter.limit("30/minute") -async def get_sharepoint_sites( - request: Request, - connectionId: str = Path(..., description="Microsoft connection ID"), - currentUser: User = Depends(getCurrentUser) -) -> List[Dict[str, Any]]: - """Get all SharePoint sites accessible via a Microsoft connection""" - try: - interface = getInterface(currentUser) - - # Get the connection and verify it belongs to the user - connection = _getUserConnection(interface, connectionId, currentUser.id) - if not connection: - raise HTTPException( - status_code=status.HTTP_404_NOT_FOUND, - detail=f"Connection {connectionId} not found or does not belong to user" - ) - - # Verify it's a Microsoft connection - authority = connection.authority.value if hasattr(connection.authority, 'value') else str(connection.authority) - if authority.lower() != 'msft': - raise HTTPException( - status_code=status.HTTP_400_BAD_REQUEST, - detail=f"Connection {connectionId} is not a Microsoft connection" - ) - - # Initialize services - services = getServices(currentUser, None) - - # Set access token on SharePoint service - if not services.sharepoint.setAccessTokenFromConnection(connection): - raise HTTPException( - status_code=status.HTTP_401_UNAUTHORIZED, - detail=routeApiMsg("Failed to set SharePoint access token. Connection may be expired or invalid.") - ) - - # Discover SharePoint sites - sites = await services.sharepoint.discoverSites() - - return sites - - except HTTPException: - raise - except Exception as e: - logger.error(f"Error getting SharePoint sites: {str(e)}") - raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, - detail=f"Error getting SharePoint sites: {str(e)}" - ) - -@router.get("/{connectionId}/sites/{siteId}/folders", response_model=List[Dict[str, Any]]) -@limiter.limit("60/minute") -async def list_sharepoint_folders( - request: Request, - connectionId: str = Path(..., description="Microsoft connection ID"), - siteId: str = Path(..., description="SharePoint site ID"), - path: Optional[str] = Query(None, description="Folder path (empty for root)"), - currentUser: User = Depends(getCurrentUser) -) -> List[Dict[str, Any]]: - """List folder contents for a SharePoint site and folder path""" - try: - interface = getInterface(currentUser) - - # Get the connection and verify it belongs to the user - connection = _getUserConnection(interface, connectionId, currentUser.id) - if not connection: - raise HTTPException( - status_code=status.HTTP_404_NOT_FOUND, - detail=f"Connection {connectionId} not found or does not belong to user" - ) - - # Verify it's a Microsoft connection - authority = connection.authority.value if hasattr(connection.authority, 'value') else str(connection.authority) - if authority.lower() != 'msft': - raise HTTPException( - status_code=status.HTTP_400_BAD_REQUEST, - detail=f"Connection {connectionId} is not a Microsoft connection" - ) - - # Initialize services - services = getServices(currentUser, None) - - # Set access token on SharePoint service - if not services.sharepoint.setAccessTokenFromConnection(connection): - raise HTTPException( - status_code=status.HTTP_401_UNAUTHORIZED, - detail=routeApiMsg("Failed to set SharePoint access token. Connection may be expired or invalid.") - ) - - # Normalize folder path (empty string for root) - folderPath = path or '' - - # List folder contents - items = await services.sharepoint.listFolderContents(siteId, folderPath) - - return items or [] - - except HTTPException: - raise - except Exception as e: - logger.error(f"Error listing SharePoint folders: {str(e)}") - raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, - detail=f"Error listing SharePoint folders: {str(e)}" - ) - - -@router.get("/{connectionId}/folder-options", response_model=List[Dict[str, Any]]) -@limiter.limit("30/minute") -async def getSharepointFolderOptions( - request: Request, - connectionId: str = Path(..., description="Microsoft connection ID"), - siteId: Optional[str] = Query(None, description="Specific site ID to browse (if omitted, returns sites only)"), - path: Optional[str] = Query(None, description="Folder path within site to browse"), - currentUser: User = Depends(getCurrentUser) -) -> List[Dict[str, Any]]: - """ - Get SharePoint folders formatted as dropdown options. - - Two modes: - 1. If siteId is not provided: Returns list of sites (for site selection) - 2. If siteId is provided: Returns folders within that site (optionally at specific path) - - This avoids expensive iteration through all sites and folders. - """ - try: - interface = getInterface(currentUser) - - # Get the connection and verify it belongs to the user - connection = _getUserConnection(interface, connectionId, currentUser.id) - if not connection: - raise HTTPException( - status_code=status.HTTP_404_NOT_FOUND, - detail=f"Connection {connectionId} not found or does not belong to user" - ) - - # Verify it's a Microsoft connection - authority = connection.authority.value if hasattr(connection.authority, 'value') else str(connection.authority) - if authority.lower() != 'msft': - raise HTTPException( - status_code=status.HTTP_400_BAD_REQUEST, - detail=f"Connection {connectionId} is not a Microsoft connection" - ) - - # Initialize services - services = getServices(currentUser, None) - - # Set access token on SharePoint service - if not services.sharepoint.setAccessTokenFromConnection(connection): - raise HTTPException( - status_code=status.HTTP_401_UNAUTHORIZED, - detail=routeApiMsg("Failed to set SharePoint access token. Connection may be expired or invalid.") - ) - - # Mode 1: Return sites list if no siteId specified - if not siteId: - sites = await services.sharepoint.discoverSites() - return [ - { - "type": "site", - "value": site.get("id"), - "label": site.get("displayName", "Unknown Site"), - "siteId": site.get("id"), - "siteName": site.get("displayName", "Unknown Site"), - "webUrl": site.get("webUrl", ""), - "path": _extractSitePath(site.get("webUrl", "")) - } - for site in sites - ] - - # Mode 2: Return folders within specific site - folderPath = path or "" - items = await services.sharepoint.listFolderContents(siteId, folderPath) - - if not items: - return [] - - folderOptions = [] - for item in items: - if item.get("type") == "folder": - folderName = item.get("name", "") - itemPath = f"{folderPath}/{folderName}" if folderPath else folderName - - folderOptions.append({ - "type": "folder", - "value": itemPath, - "label": folderName, - "siteId": siteId, - "folderName": folderName, - "path": itemPath, - "hasChildren": True # Assume folders may have children - }) - - return folderOptions - - except HTTPException: - raise - except Exception as e: - logger.error(f"Error getting SharePoint folder options: {str(e)}") - raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, - detail=f"Error getting SharePoint folder options: {str(e)}" - ) - def _extractSitePath(webUrl: str) -> str: """Extract site path from webUrl (e.g., https://company.sharepoint.com/sites/MySite -> /sites/MySite)""" diff --git a/modules/routes/routeSystem.py b/modules/routes/routeSystem.py index fb921293..7c3e17a3 100644 --- a/modules/routes/routeSystem.py +++ b/modules/routes/routeSystem.py @@ -11,7 +11,9 @@ Navigation API Konzept: """ import logging -from typing import Dict, List, Any, Optional +import time +from collections import Counter +from typing import Dict, List, Any, Optional, Set from fastapi import APIRouter, Depends, Request from slowapi import Limiter from slowapi.util import get_remote_address @@ -255,6 +257,7 @@ def _buildDynamicBlock( featuresMap[featureKey]["instances"].append({ "id": str(instance.id), "uiLabel": instance.label, + "featureCode": instance.featureCode, "order": 10, "views": views, "isAdmin": permissions.get("isAdmin", False), @@ -510,4 +513,442 @@ def get_navigation( return { "blocks": [], "error": str(e), + } + + +# ============================================================================= +# AI models (integrations overview) +# ============================================================================= + + +def _buildIntegrationsOverviewPayload(userId: str, user=None) -> Dict[str, Any]: + """ + Single payload for the Integrations architecture page: real UserConnections, + DataSource / FeatureDataSource rows, trustee accounting bindings, AICore + connector modules (not individual models), extractor extensions and renderer + formats from registries, platform infra tools, and live KPI stats. + """ + root = getRootInterface() + out: Dict[str, Any] = { + "aicoreModules": [], + "infraTools": [], + "extractorExtensions": [], + "extractorClasses": [], + "rendererFormats": [], + "rendererClasses": [], + "dataLayerItems": [], + "liveStats": {}, + "errors": [], } + + _PROVIDER_LABELS = { + "anthropic": "Anthropic (Claude)", + "openai": "OpenAI (GPT)", + "mistral": "Mistral (Le Chat)", + "perplexity": "Perplexity", + "tavily": "Tavily (Websuche)", + "privatellm": "Private LLM", + "internal": "Intern", + } + + # --- AICore: one entry per connector module + model counts --- + try: + from modules.aicore.aicoreModelRegistry import modelRegistry + + modelRegistry.ensureConnectorsRegistered() + modelRegistry.refreshModels(force=False) + counts = Counter() + for m in modelRegistry.getModels(): + if not getattr(m, "isAvailable", True): + continue + counts[str(getattr(m, "connectorType", "") or "")] += 1 + modules: List[Dict[str, Any]] = [] + for conn in modelRegistry.discoverConnectors(): + ct = conn.getConnectorType() + modules.append( + { + "connectorType": ct, + "label": _PROVIDER_LABELS.get(ct, ct), + "modelCount": int(counts.get(ct, 0)), + } + ) + out["aicoreModules"] = modules + except Exception as e: + logger.error(f"integrations-overview aicore: {e}") + out["errors"].append(f"aicore: {e}") + + # --- Extractors (registered extensions, unique + per-class rows) --- + try: + from modules.serviceCenter.services.serviceExtraction.mainServiceExtraction import ExtractionService + from modules.serviceCenter.services.serviceExtraction.subRegistry import ExtractorRegistry + + if ExtractionService._sharedExtractorRegistry is None: + ExtractionService._sharedExtractorRegistry = ExtractorRegistry() + reg = ExtractionService._sharedExtractorRegistry + ext_map = reg.getExtensionToMimeMap() + uniq = sorted({str(k).upper() for k in ext_map.keys() if k and "." not in str(k)}) + out["extractorExtensions"] = uniq + + seen_ext: Set[int] = set() + class_rows: List[Dict[str, Any]] = [] + for extractor in reg._map.values(): + eid = id(extractor) + if eid in seen_ext: + continue + seen_ext.add(eid) + if not hasattr(extractor, "getSupportedExtensions"): + continue + raw_exts = extractor.getSupportedExtensions() + if not raw_exts: + continue + norm = sorted({str(x).lstrip(".").lower() for x in raw_exts if x}) + if norm: + class_rows.append({"className": extractor.__class__.__name__, "extensions": norm}) + class_rows.sort(key=lambda r: r["className"]) + out["extractorClasses"] = class_rows + fb = getattr(reg, "_fallback", None) + if fb and hasattr(fb, "getSupportedExtensions") and id(fb) not in seen_ext: + raw_exts = fb.getSupportedExtensions() + if raw_exts: + norm = sorted({str(x).lstrip(".").lower() for x in raw_exts if x}) + if norm: + out["extractorClasses"].append({"className": fb.__class__.__name__, "extensions": norm}) + out["extractorClasses"].sort(key=lambda r: r["className"]) + except Exception as e: + logger.error(f"integrations-overview extractors: {e}") + out["errors"].append(f"extractors: {e}") + + # --- Renderers (registered output formats + per-class rows) --- + try: + from modules.serviceCenter.services.serviceGeneration.renderers.registry import getSupportedFormats, getRendererInfo + + out["rendererFormats"] = sorted(getSupportedFormats()) + + by_renderer_class: Dict[str, Dict[str, Any]] = {} + for composite_key, meta in getRendererInfo().items(): + cn = meta.get("class_name") or "" + if not cn: + continue + fmt = composite_key.split(":")[0] if ":" in composite_key else composite_key + if cn not in by_renderer_class: + by_renderer_class[cn] = {"className": cn, "formats": set()} + by_renderer_class[cn]["formats"].add(fmt) + renderer_rows = [ + {"className": d["className"], "formats": sorted(d["formats"])} + for _, d in sorted(by_renderer_class.items(), key=lambda x: x[0]) + ] + out["rendererClasses"] = renderer_rows + except Exception as e: + logger.error(f"integrations-overview renderers: {e}") + out["errors"].append(f"renderers: {e}") + + # --- Platform infra tools (only routes that exist in this deployment) --- + out["infraTools"] = [ + {"id": "voice", "label": "Voice / STT"}, + ] + + accessible_instance_ids: Set[str] = set() + try: + for access in root.getFeatureAccessesForUser(userId): + if not getattr(access, "enabled", True): + continue + accessible_instance_ids.add(str(access.featureInstanceId)) + except Exception as e: + logger.debug(f"integrations-overview feature accesses: {e}") + + # --- UserConnection (active only) --- + try: + from modules.datamodels.datamodelUam import ConnectionStatus + + for c in root.getUserConnections(userId): + st = c.status + st_val = st.value if hasattr(st, "value") else str(st) + if st_val != ConnectionStatus.ACTIVE.value: + continue + dumped = c.model_dump(mode="json") + dumped["kind"] = "userConnection" + out["dataLayerItems"].append(dumped) + except Exception as e: + logger.error(f"integrations-overview connections: {e}") + out["errors"].append(f"connections: {e}") + + # --- DataSource & FeatureDataSource --- + try: + from modules.datamodels.datamodelDataSource import DataSource + from modules.datamodels.datamodelFeatureDataSource import FeatureDataSource + + seen_ds: Set[str] = set() + + for row in root.db.getRecordset(DataSource, recordFilter={"userId": userId}) or []: + rid = str(row.get("id", "")) + if not rid or rid in seen_ds: + continue + seen_ds.add(rid) + out["dataLayerItems"].append( + { + "kind": "dataSource", + "id": rid, + "label": row.get("label") or row.get("displayPath") or rid, + "sourceType": row.get("sourceType") or "", + "featureInstanceId": row.get("featureInstanceId"), + "mandateId": row.get("mandateId"), + "connectionId": row.get("connectionId"), + } + ) + + for iid in accessible_instance_ids: + for row in root.db.getRecordset(DataSource, recordFilter={"featureInstanceId": iid}) or []: + rid = str(row.get("id", "")) + if not rid or rid in seen_ds: + continue + seen_ds.add(rid) + out["dataLayerItems"].append( + { + "kind": "dataSource", + "id": rid, + "label": row.get("label") or row.get("displayPath") or rid, + "sourceType": row.get("sourceType") or "", + "featureInstanceId": row.get("featureInstanceId"), + "mandateId": row.get("mandateId"), + "connectionId": row.get("connectionId"), + } + ) + + seen_fds: Set[str] = set() + for row in root.db.getRecordset(FeatureDataSource, recordFilter={"userId": userId}) or []: + rid = str(row.get("id", "")) + if not rid or rid in seen_fds: + continue + seen_fds.add(rid) + out["dataLayerItems"].append( + { + "kind": "featureDataSource", + "id": rid, + "label": row.get("label") or rid, + "featureCode": row.get("featureCode") or "", + "tableName": row.get("tableName") or "", + "featureInstanceId": row.get("featureInstanceId"), + "mandateId": row.get("mandateId"), + } + ) + + for iid in accessible_instance_ids: + for row in root.db.getRecordset(FeatureDataSource, recordFilter={"featureInstanceId": iid}) or []: + rid = str(row.get("id", "")) + if not rid or rid in seen_fds: + continue + seen_fds.add(rid) + out["dataLayerItems"].append( + { + "kind": "featureDataSource", + "id": rid, + "label": row.get("label") or rid, + "featureCode": row.get("featureCode") or "", + "tableName": row.get("tableName") or "", + "featureInstanceId": row.get("featureInstanceId"), + "mandateId": row.get("mandateId"), + } + ) + except Exception as e: + logger.error(f"integrations-overview datasources: {e}") + out["errors"].append(f"datasources: {e}") + + # --- Trustee accounting systems (configured integrations per instance) --- + try: + from modules.features.trustee.datamodelFeatureTrustee import TrusteeAccountingConfig + + fi = getFeatureInterface(root.db) + seen_acc: Set[str] = set() + for iid in accessible_instance_ids: + inst = fi.getFeatureInstance(iid) + if not inst or inst.featureCode != "trustee": + continue + for row in root.db.getRecordset( + TrusteeAccountingConfig, + recordFilter={"featureInstanceId": iid, "isActive": True}, + ) or []: + rid = str(row.get("id", "")) + if not rid or rid in seen_acc: + continue + seen_acc.add(rid) + out["dataLayerItems"].append( + { + "kind": "trusteeAccounting", + "id": rid, + "featureInstanceId": iid, + "instanceLabel": getattr(inst, "label", None) or "", + "mandateId": str(getattr(inst, "mandateId", "") or ""), + "connectorType": row.get("connectorType") or "", + "displayLabel": row.get("displayLabel") or row.get("connectorType") or rid, + } + ) + except Exception as e: + logger.error(f"integrations-overview trustee accounting: {e}") + out["errors"].append(f"trusteeAccounting: {e}") + + # --- Live stats (billing AI calls + workflow metrics) --- + liveStats: Dict[str, Any] = { + "aiCallCount": 0, + "aiCallPeriodDays": 30, + "totalWorkflows": 0, + "activeWorkflows": 0, + "totalRuns": 0, + "totalTokens": 0, + } + + # Billing: count AI transactions in the last 30 days + if user is not None: + try: + from modules.interfaces.interfaceDbBilling import getInterface as getBillingInterface + + mandateIds: List[str] = [] + for um in root.getUserMandates(userId): + mid = getattr(um, "mandateId", None) + if mid and getattr(um, "enabled", True): + mandateIds.append(str(mid)) + + if mandateIds: + bi = getBillingInterface(user, mandateIds[0]) + now = time.time() + startTs = now - 30 * 86400 + stats = bi.getTransactionStatisticsAggregated( + mandateIds=mandateIds, + scope="all", + userId=userId, + startTs=startTs, + endTs=now, + period="month", + ) + liveStats["aiCallCount"] = stats.get("transactionCount", 0) + except Exception as e: + logger.debug(f"integrations-overview billing stats: {e}") + + # Workflow metrics (same logic as routeWorkflowDashboard.get_workflow_metrics) + try: + from modules.shared.configuration import APP_CONFIG + from modules.connectors.connectorDbPostgre import DatabaseConnector + from modules.datamodels.datamodelPagination import PaginationParams + from modules.features.graphicalEditor.datamodelFeatureGraphicalEditor import ( + AutoWorkflow, AutoRun, + ) + + wfDb = DatabaseConnector( + dbHost=APP_CONFIG.get("DB_HOST", "localhost"), + dbDatabase="poweron_graphicaleditor", + dbUser=APP_CONFIG.get("DB_USER"), + dbPassword=APP_CONFIG.get("DB_PASSWORD_SECRET") or APP_CONFIG.get("DB_PASSWORD"), + dbPort=int(APP_CONFIG.get("DB_PORT", 5432)), + userId=None, + ) + + if wfDb._ensureTableExists(AutoWorkflow): + mandateIds_wf: List[str] = [] + for um in root.getUserMandates(userId): + mid = getattr(um, "mandateId", None) + if mid and getattr(um, "enabled", True): + mandateIds_wf.append(str(mid)) + + wfFilter: dict = {"isTemplate": False} + if mandateIds_wf: + wfFilter["mandateId"] = mandateIds_wf + else: + wfFilter["mandateId"] = "__impossible__" + + wfCount = wfDb.getRecordsetPaginated( + AutoWorkflow, + pagination=PaginationParams(page=1, pageSize=1), + recordFilter=wfFilter, + ) + liveStats["totalWorkflows"] = ( + wfCount.get("totalItems", 0) if isinstance(wfCount, dict) else wfCount.totalItems + ) + + activeFilter = dict(wfFilter) + activeFilter["active"] = True + activeCount = wfDb.getRecordsetPaginated( + AutoWorkflow, + pagination=PaginationParams(page=1, pageSize=1), + recordFilter=activeFilter, + ) + liveStats["activeWorkflows"] = ( + activeCount.get("totalItems", 0) if isinstance(activeCount, dict) else activeCount.totalItems + ) + + if wfDb._ensureTableExists(AutoRun): + runFilter: dict = {} + if mandateIds_wf: + runFilter["mandateId"] = mandateIds_wf + else: + runFilter["ownerId"] = userId + + runCount = wfDb.getRecordsetPaginated( + AutoRun, + pagination=PaginationParams(page=1, pageSize=1), + recordFilter=runFilter, + ) + liveStats["totalRuns"] = ( + runCount.get("totalItems", 0) if isinstance(runCount, dict) else runCount.totalItems + ) + + totalTokens = 0 + totalRuns = liveStats["totalRuns"] + if 0 < totalRuns <= 10000: + allRuns = wfDb.getRecordset( + AutoRun, recordFilter=runFilter, fieldFilter=["costTokens"], + ) or [] + for r in allRuns: + totalTokens += r.get("costTokens", 0) or 0 + liveStats["totalTokens"] = totalTokens + except Exception as e: + logger.debug(f"integrations-overview workflow stats: {e}") + + out["liveStats"] = liveStats + + return out + + +@router.get("/integrations-overview") +@limiter.limit("30/minute") +def get_integrations_overview( + request: Request, + reqContext: RequestContext = Depends(getRequestContext), +) -> Dict[str, Any]: + """Aggregated, non-fictitious data for the PORTA integrations diagram.""" + user_id = str(reqContext.user.id) + return _buildIntegrationsOverviewPayload(user_id, user=reqContext.user) + + +@router.get("/ai-models") +@limiter.limit("60/minute") +def get_ai_models_for_integrations( + request: Request, + reqContext: RequestContext = Depends(getRequestContext), +) -> Dict[str, Any]: + """ + Registered AI models for the Integrations architecture page. + Returns unique displayName entries with connector metadata (no callables). + """ + try: + from modules.aicore.aicoreModelRegistry import modelRegistry + + modelRegistry.ensureConnectorsRegistered() + modelRegistry.refreshModels(force=False) + models = modelRegistry.getModels() + out: List[Dict[str, Any]] = [] + seen: set = set() + for m in models: + if not getattr(m, "isAvailable", True): + continue + key = (m.displayName, m.connectorType) + if key in seen: + continue + seen.add(key) + dumped = m.model_dump( + exclude={"functionCall", "functionCallStream", "calculatepriceCHF"}, + mode="json", + ) + out.append(dumped) + return {"models": out} + except Exception as e: + logger.error(f"Error listing AI models: {e}") + return {"models": [], "error": str(e)} diff --git a/modules/routes/routeVoiceGoogle.py b/modules/routes/routeVoiceGoogle.py index 6c5d99e4..dfa1a15e 100644 --- a/modules/routes/routeVoiceGoogle.py +++ b/modules/routes/routeVoiceGoogle.py @@ -12,15 +12,11 @@ import json import base64 import secrets import time -from fastapi import APIRouter, File, Form, UploadFile, Depends, HTTPException, Body, Query, Request, WebSocket, WebSocketDisconnect -from fastapi.responses import Response +from fastapi import APIRouter, Depends, HTTPException, Query, Request, WebSocket, WebSocketDisconnect from typing import Optional, Dict, Any, List from modules.auth import getCurrentUser, getRequestContext, RequestContext, limiter from modules.datamodels.datamodelUam import User from modules.interfaces.interfaceVoiceObjects import getVoiceInterface, VoiceObjects -from modules.shared.i18nRegistry import apiRouteContext -routeApiMsg = apiRouteContext("routeVoiceGoogle") - logger = logging.getLogger(__name__) router = APIRouter(prefix="/voice-google", tags=["Voice Google"]) @@ -63,299 +59,6 @@ def _getVoiceInterface(currentUser: User) -> VoiceObjects: detail=f"Failed to initialize voice interface: {str(e)}" ) -@router.post("/speech-to-text") -async def speech_to_text( - audioFile: UploadFile = File(...), - language: str = Form("de-DE"), - currentUser: User = Depends(getCurrentUser) -): - """Convert speech to text using Google Cloud Speech-to-Text API.""" - try: - logger.info(f"🎤 Speech-to-text request: {audioFile.filename}, language: {language}") - - # Read audio file - audioContent = await audioFile.read() - logger.info(f"📊 Audio file size: {len(audioContent)} bytes") - - # Get voice interface - voiceInterface = _getVoiceInterface(currentUser) - - # Validate audio format - validation = voiceInterface.validateAudioFormat(audioContent) - - if not validation["valid"]: - raise HTTPException( - status_code=400, - detail=f"Invalid audio format: {validation.get('error', 'Unknown error')}" - ) - - # Perform speech recognition - result = await voiceInterface.speechToText( - audioContent=audioContent, - language=language - ) - - if result["success"]: - return { - "success": True, - "text": result["text"], - "confidence": result["confidence"], - "language": result["language"], - "audio_info": { - "size": len(audioContent), - "format": validation["format"], - "estimated_duration": validation.get("estimated_duration", 0) - } - } - else: - raise HTTPException( - status_code=400, - detail=f"Speech recognition failed: {result.get('error', 'Unknown error')}" - ) - - except HTTPException: - raise - except Exception as e: - logger.error(f"❌ Speech-to-text error: {e}") - raise HTTPException( - status_code=500, - detail=f"Speech-to-text processing failed: {str(e)}" - ) - -@router.post("/detect-language") -async def detect_language( - text: str = Form(...), - currentUser: User = Depends(getCurrentUser) -): - """Detect the language of text using Google Cloud Translation API.""" - try: - logger.info(f"🔍 Language detection request: '{text[:100]}...'") - - if not text.strip(): - raise HTTPException( - status_code=400, - detail=routeApiMsg("Empty text provided for language detection") - ) - - # Get voice interface - voiceInterface = _getVoiceInterface(currentUser) - - # Perform language detection - result = await voiceInterface.detectLanguage(text) - - if result["success"]: - return { - "success": True, - "language": result["language"], - "confidence": result.get("confidence", 1.0) - } - else: - raise HTTPException( - status_code=400, - detail=f"Language detection failed: {result.get('error', 'Unknown error')}" - ) - - except HTTPException: - raise - except Exception as e: - logger.error(f"❌ Language detection error: {e}") - raise HTTPException( - status_code=500, - detail=f"Language detection processing failed: {str(e)}" - ) - -@router.post("/translate") -async def translate_text( - text: str = Form(...), - sourceLanguage: str = Form("de"), - targetLanguage: str = Form("en"), - currentUser: User = Depends(getCurrentUser) -): - """Translate text using Google Cloud Translation API.""" - try: - logger.info(f"🌐 Translation request: '{text}' ({sourceLanguage} -> {targetLanguage})") - - if not text.strip(): - raise HTTPException( - status_code=400, - detail=routeApiMsg("Empty text provided for translation") - ) - - # Get voice interface - voiceInterface = _getVoiceInterface(currentUser) - - # Perform translation - result = await voiceInterface.translateText( - text=text, - sourceLanguage=sourceLanguage, - targetLanguage=targetLanguage - ) - - if result["success"]: - return { - "success": True, - "original_text": result["original_text"], - "translated_text": result["translated_text"], - "source_language": result["source_language"], - "target_language": result["target_language"] - } - else: - raise HTTPException( - status_code=400, - detail=f"Translation failed: {result.get('error', 'Unknown error')}" - ) - - except HTTPException: - raise - except Exception as e: - logger.error(f"❌ Translation error: {e}") - raise HTTPException( - status_code=500, - detail=f"Translation processing failed: {str(e)}" - ) - -@router.post("/realtime-interpreter") -async def realtime_interpreter( - audioFile: UploadFile = File(...), - fromLanguage: str = Form("de-DE"), - toLanguage: str = Form("en-US"), - connectionId: str = Form(None), - currentUser: User = Depends(getCurrentUser) -): - """Real-time interpreter: speech to translated text using Google Cloud APIs.""" - try: - logger.info(f"🔄 Real-time interpreter request: {audioFile.filename}") - logger.info(f" From: {fromLanguage} -> To: {toLanguage}") - logger.info(f" MIME type: {audioFile.content_type}") - - # Read audio file - audioContent = await audioFile.read() - logger.info(f"📊 Audio file size: {len(audioContent)} bytes") - - # Save audio file for debugging with correct extension - # file_extension = "webm" if audio_file.filename.endswith('.webm') else "wav" - # debug_filename = f"debug_audio/audio_google_{audio_file.filename.replace('.wav', '.webm')}" - # os.makedirs("debug_audio", exist_ok=True) - # with open(debug_filename, "wb") as f: - # f.write(audio_content) - # logger.info(f"💾 Saved audio file for debugging: {debug_filename}") - - # Get voice interface - voiceInterface = _getVoiceInterface(currentUser) - - # Validate audio format - validation = voiceInterface.validateAudioFormat(audioContent) - - if not validation["valid"]: - raise HTTPException( - status_code=400, - detail=f"Invalid audio format: {validation.get('error', 'Unknown error')}" - ) - - # Perform complete pipeline: Speech-to-Text + Translation - result = await voiceInterface.speechToTranslatedText( - audioContent=audioContent, - fromLanguage=fromLanguage, - toLanguage=toLanguage - ) - - if result["success"]: - logger.info(f"✅ Real-time interpreter successful:") - logger.info(f" Original: '{result['original_text']}'") - logger.info(f" Translated: '{result['translated_text']}'") - - return { - "success": True, - "original_text": result["original_text"], - "translated_text": result["translated_text"], - "confidence": result["confidence"], - "source_language": result["source_language"], - "target_language": result["target_language"], - "audio_info": { - "size": len(audioContent), - "format": validation["format"], - "estimated_duration": validation.get("estimated_duration", 0) - } - } - else: - raise HTTPException( - status_code=400, - detail=f"Real-time interpreter failed: {result.get('error', 'Unknown error')}" - ) - - except HTTPException: - raise - except Exception as e: - logger.error(f"❌ Real-time interpreter error: {e}") - raise HTTPException( - status_code=500, - detail=f"Real-time interpreter processing failed: {str(e)}" - ) - - -@router.post("/text-to-speech") -async def text_to_speech( - request: Request, - text: str = Form(...), - language: str = Form("de-DE"), - voice: str = Form(None), - context: RequestContext = Depends(getRequestContext), -): - """Convert text to speech using Google Cloud Text-to-Speech.""" - try: - logger.info(f"Text-to-Speech request: '{text[:50]}...' in {language}") - - if not text.strip(): - raise HTTPException( - status_code=400, - detail=routeApiMsg("Empty text provided for text-to-speech") - ) - - mandateId = str(getattr(context, "mandateId", "") or "") - voiceInterface = getVoiceInterface(context.user, mandateId) - try: - from modules.serviceCenter.services.serviceBilling.mainServiceBilling import getService as getBillingService - billingService = getBillingService(context.user, mandateId) - def _billingCb(data): - priceCHF = data.get("priceCHF", 0.0) - operation = data.get("operation", "voice") - if priceCHF > 0: - billingService.recordUsage(priceCHF=priceCHF, aicoreProvider="google-voice", aicoreModel=operation, description=f"Voice {operation}") - voiceInterface.billingCallback = _billingCb - except Exception as e: - logger.warning(f"TTS billing setup skipped: {e}") - - result = await voiceInterface.textToSpeech( - text=text, - languageCode=language, - voiceName=voice - ) - - if result["success"]: - return Response( - content=result["audioContent"], - media_type="audio/mpeg", - headers={ - "Content-Disposition": "attachment; filename=speech.mp3", - "X-Voice-Name": result.get("voiceName", ""), - "X-Language-Code": result.get("languageCode", language), - } - ) - else: - raise HTTPException( - status_code=400, - detail=f"Text-to-Speech failed: {result.get('error', 'Unknown error')}" - ) - - except HTTPException: - raise - except Exception as e: - logger.error(f"Text-to-Speech error: {e}") - raise HTTPException( - status_code=500, - detail=f"Text-to-Speech processing failed: {str(e)}" - ) - @router.get("/languages") async def get_available_languages(currentUser: User = Depends(getCurrentUser)): """Get available languages from Google Cloud Text-to-Speech.""" @@ -426,71 +129,6 @@ async def get_available_voices( detail=f"Failed to get available voices: {str(e)}" ) -@router.get("/health") -async def health_check(currentUser: User = Depends(getCurrentUser)): - """Health check for Google Cloud voice services.""" - try: - voiceInterface = _getVoiceInterface(currentUser) - test_result = await voiceInterface.healthCheck() - - return test_result - - except Exception as e: - logger.error(f"❌ Health check failed: {e}") - return { - "status": "unhealthy", - "error": str(e) - } - -@router.get("/settings") -async def get_voice_settings(currentUser: User = Depends(getCurrentUser)): - """Get voice settings for the current user (reads from UserVoicePreferences).""" - from modules.datamodels.datamodelUam import UserVoicePreferences - from modules.interfaces.interfaceDbApp import getRootInterface - rootInterface = getRootInterface() - userId = str(currentUser.id) - - prefs = rootInterface.db.getRecordset( - UserVoicePreferences, recordFilter={"userId": userId} - ) - if prefs: - data = prefs[0] if isinstance(prefs[0], dict) else prefs[0].model_dump() - return {"success": True, "data": {"user_settings": data}} - return {"success": True, "data": {"user_settings": UserVoicePreferences(userId=userId).model_dump()}} - - -@router.post("/settings") -async def save_voice_settings( - settings: Dict[str, Any] = Body(...), - currentUser: User = Depends(getCurrentUser) -): - """Save voice settings for the current user (writes to UserVoicePreferences).""" - from modules.datamodels.datamodelUam import UserVoicePreferences, _normalizeTtsVoiceMap - from modules.interfaces.interfaceDbApp import getRootInterface - rootInterface = getRootInterface() - userId = str(currentUser.id) - - allowedFields = { - "sttLanguage", "ttsLanguage", "ttsVoice", "ttsVoiceMap", - "translationSourceLanguage", "translationTargetLanguage", - } - updateData = {k: v for k, v in settings.items() if k in allowedFields} - if "ttsVoiceMap" in updateData: - updateData["ttsVoiceMap"] = _normalizeTtsVoiceMap(updateData["ttsVoiceMap"]) - - existing = rootInterface.db.getRecordset( - UserVoicePreferences, recordFilter={"userId": userId} - ) - if existing: - existingRecord = existing[0] - existingId = existingRecord.get("id") if isinstance(existingRecord, dict) else existingRecord.id - rootInterface.db.recordModify(UserVoicePreferences, existingId, updateData) - else: - newPrefs = UserVoicePreferences(userId=userId, **updateData) - rootInterface.db.recordCreate(UserVoicePreferences, newPrefs.model_dump()) - - return {"success": True, "message": "Voice settings saved successfully", "data": updateData} - # ========================================================================= # STT Streaming WebSocket — generic, used by all features # ========================================================================= diff --git a/modules/routes/routeWorkflowDashboard.py b/modules/routes/routeWorkflowDashboard.py index c0c46a13..6e045710 100644 --- a/modules/routes/routeWorkflowDashboard.py +++ b/modules/routes/routeWorkflowDashboard.py @@ -1,16 +1,17 @@ # Copyright (c) 2025 Patrick Motsch # All rights reserved. """ -System-level Workflow Runs Dashboard API. +System-level Workflow Dashboard API. -Provides cross-feature, cross-mandate access to workflow runs -with RBAC scoping: user sees own runs, mandate admin sees mandate runs, -sysadmin sees all runs. +Provides cross-feature, cross-mandate access to workflow runs AND workflows +with RBAC scoping: user sees own runs/workflows, mandate admin sees mandate +runs/workflows, sysadmin sees all. """ +import json import logging import math -from typing import Optional +from typing import Optional, List from fastapi import APIRouter, Depends, Request, Query, Path, HTTPException from slowapi import Limiter from slowapi.util import get_remote_address @@ -20,6 +21,8 @@ from modules.interfaces.interfaceDbApp import getRootInterface from modules.connectors.connectorDbPostgre import DatabaseConnector from modules.shared.configuration import APP_CONFIG from modules.datamodels.datamodelPagination import PaginationParams +from modules.datamodels.datamodelFeatures import FeatureInstance +from modules.datamodels.datamodelUam import Mandate from modules.features.graphicalEditor.datamodelFeatureGraphicalEditor import ( AutoRun, AutoStepLog, AutoWorkflow, AutoTask, ) @@ -91,6 +94,12 @@ def _getAdminMandateIds(userId: str, mandateIds: list) -> list: return [mid for mid in mandateIds if mid in adminMandates] +def _isUserMandateAdmin(userId: str, mandateId: str) -> bool: + """Check if user is admin for a specific mandate.""" + adminIds = _getAdminMandateIds(userId, [mandateId]) + return mandateId in adminIds + + def _scopedRunFilter(context: RequestContext) -> Optional[dict]: """ Build a DB filter dict based on RBAC: @@ -114,6 +123,38 @@ def _scopedRunFilter(context: RequestContext) -> Optional[dict]: return {"ownerId": userId} +def _scopedWorkflowFilter(context: RequestContext) -> Optional[dict]: + """ + Build a DB filter for AutoWorkflow based on RBAC: + - sysadmin: None (no filter, sees all) + - normal user: mandateId IN user's mandates + """ + if context.hasSysAdminRole: + return None + + userId = str(context.user.id) if context.user else None + if not userId: + return {"mandateId": "__impossible__"} + + mandateIds = _getUserMandateIds(userId) + if mandateIds: + return {"mandateId": mandateIds} + + return {"mandateId": "__impossible__"} + + +def _getManagementDb() -> DatabaseConnector: + """Get connector to the management DB for Mandate/FeatureInstance lookups.""" + return DatabaseConnector( + dbHost=APP_CONFIG.get("DB_HOST", "localhost"), + dbDatabase=APP_CONFIG.get("DB_NAME", "poweron_management"), + dbUser=APP_CONFIG.get("DB_USER"), + dbPassword=APP_CONFIG.get("DB_PASSWORD_SECRET") or APP_CONFIG.get("DB_PASSWORD"), + dbPort=int(APP_CONFIG.get("DB_PORT", 5432)), + userId=None, + ) + + @router.get("") @limiter.limit("60/minute") def get_workflow_runs( @@ -268,3 +309,114 @@ def get_run_steps( steps = [dict(r) for r in records] if records else [] steps.sort(key=lambda s: s.get("startedAt") or 0) return {"steps": steps} + + +# --------------------------------------------------------------------------- +# System-level Workflow listing (all workflows the user can see via RBAC) +# --------------------------------------------------------------------------- + +@router.get("/workflows") +@limiter.limit("60/minute") +def get_system_workflows( + request: Request, + active: Optional[bool] = Query(None, description="Filter by active status"), + mandateId: Optional[str] = Query(None, description="Filter by mandate"), + pagination: Optional[str] = Query(None, description="JSON-encoded PaginationParams"), + context: RequestContext = Depends(getRequestContext), +) -> dict: + """List all workflows the user has access to (RBAC-scoped, cross-instance).""" + db = _getDb() + if not db._ensureTableExists(AutoWorkflow): + return {"items": [], "pagination": {"currentPage": 1, "pageSize": 25, "totalItems": 0, "totalPages": 0}} + + baseFilter = _scopedWorkflowFilter(context) + recordFilter = dict(baseFilter) if baseFilter else {} + recordFilter["isTemplate"] = False + + if active is not None: + recordFilter["active"] = active + if mandateId: + recordFilter["mandateId"] = mandateId + + paginationParams = None + if pagination: + try: + paginationParams = PaginationParams(**json.loads(pagination)) + except Exception: + pass + + if not paginationParams: + paginationParams = PaginationParams( + page=1, + pageSize=25, + sort=[{"field": "sysCreatedAt", "direction": "desc"}], + ) + + result = db.getRecordsetPaginated( + AutoWorkflow, + pagination=paginationParams, + recordFilter=recordFilter if recordFilter else None, + ) + pageItems = result.get("items", []) if isinstance(result, dict) else result.items + totalItems = result.get("totalItems", 0) if isinstance(result, dict) else result.totalItems + totalPages = result.get("totalPages", 0) if isinstance(result, dict) else result.totalPages + + mandateIds = list({w.get("mandateId") for w in pageItems if w.get("mandateId")}) + instanceIds = list({w.get("featureInstanceId") for w in pageItems if w.get("featureInstanceId")}) + + mandateLabelMap: dict = {} + instanceLabelMap: dict = {} + try: + mgmtDb = _getManagementDb() + if mandateIds and mgmtDb._ensureTableExists(Mandate): + mandates = mgmtDb.getRecordset(Mandate, recordFilter={"id": mandateIds}) + for m in (mandates or []): + row = dict(m) + mandateLabelMap[row.get("id")] = row.get("label") or row.get("name") or row.get("id") + if instanceIds and mgmtDb._ensureTableExists(FeatureInstance): + instances = mgmtDb.getRecordset(FeatureInstance, recordFilter={"id": instanceIds}) + for fi in (instances or []): + row = dict(fi) + instanceLabelMap[row.get("id")] = row.get("label") or row.get("id") + except Exception as e: + logger.warning(f"Failed to enrich workflow labels: {e}") + + userId = str(context.user.id) if context.user else None + adminMandateIds = [] + if userId and not context.hasSysAdminRole: + userMandateIds = _getUserMandateIds(userId) + adminMandateIds = _getAdminMandateIds(userId, userMandateIds) + + items = [] + for w in pageItems: + row = dict(w) + wMandateId = row.get("mandateId") + row["mandateLabel"] = mandateLabelMap.get(wMandateId, wMandateId or "—") + row["instanceLabel"] = instanceLabelMap.get(row.get("featureInstanceId"), row.get("featureInstanceId") or "—") + + if context.hasSysAdminRole: + row["canEdit"] = True + row["canDelete"] = True + row["canExecute"] = True + elif wMandateId and wMandateId in adminMandateIds: + row["canEdit"] = True + row["canDelete"] = True + row["canExecute"] = True + else: + row["canEdit"] = False + row["canDelete"] = False + row["canExecute"] = False + + row.pop("graph", None) + + items.append(row) + + return { + "items": items, + "pagination": { + "currentPage": paginationParams.page, + "pageSize": paginationParams.pageSize, + "totalItems": totalItems, + "totalPages": totalPages, + }, + } diff --git a/modules/serviceCenter/services/serviceAgent/conversationManager.py b/modules/serviceCenter/services/serviceAgent/conversationManager.py index fe53a921..fffb2dc4 100644 --- a/modules/serviceCenter/services/serviceAgent/conversationManager.py +++ b/modules/serviceCenter/services/serviceAgent/conversationManager.py @@ -322,13 +322,6 @@ def _buildSummaryPrompt( return prompt -_LANGUAGE_NAMES = { - "de": "German", "en": "English", "fr": "French", "it": "Italian", - "es": "Spanish", "pt": "Portuguese", "nl": "Dutch", "ja": "Japanese", - "zh": "Chinese", "ko": "Korean", "ar": "Arabic", "ru": "Russian", -} - - def buildSystemPrompt( tools: List[ToolDefinition], toolsFormatted: str = None, @@ -339,16 +332,14 @@ def buildSystemPrompt( Args: tools: Available tool definitions. toolsFormatted: Pre-formatted tool descriptions for text-based fallback. - userLanguage: ISO 639-1 language code (e.g. "de", "en"). The agent will - respond in this language. + userLanguage: Kept for backwards compatibility, no longer used for language selection. """ - langName = _LANGUAGE_NAMES.get(userLanguage, "") langInstruction = ( - f"IMPORTANT: Always respond in {langName} ({userLanguage}). " - f"The user's language is {langName}. All your messages, explanations, " - f"and summaries MUST be in {langName}. " - f"Only use English for tool call arguments and technical identifiers.\n\n" - ) if langName else "" + "IMPORTANT: Always respond in the same language the user writes in. " + "If the user writes in German, respond in German. If in French, respond in French. " + "Generate documents and content in the user's language unless explicitly asked otherwise. " + "Only use English for tool call arguments and technical identifiers.\n\n" + ) prompt = ( f"{langInstruction}" diff --git a/modules/serviceCenter/services/serviceAgent/coreTools/_featureSubAgentTools.py b/modules/serviceCenter/services/serviceAgent/coreTools/_featureSubAgentTools.py index 714eab7e..6330b80b 100644 --- a/modules/serviceCenter/services/serviceAgent/coreTools/_featureSubAgentTools.py +++ b/modules/serviceCenter/services/serviceAgent/coreTools/_featureSubAgentTools.py @@ -123,11 +123,22 @@ def _registerFeatureSubAgentTools(registry: ToolRegistry, services): selectedTables = catalog.getDataObjects(featureCode) else: allObjs = {o["meta"]["table"]: o for o in catalog.getDataObjects(featureCode) if "meta" in o and "table" in o.get("meta", {})} - selectedTables = [allObjs[ds["tableName"]] for ds in featureDataSources if ds.get("tableName") in allObjs] + selectedTables = [] + _wildcardExpanded = False for ds in featureDataSources: - rf = ds.get("recordFilter") - if rf and isinstance(rf, dict) and ds.get("tableName"): - tableFilters[ds["tableName"]] = rf + tn = ds.get("tableName", "") + ok = ds.get("objectKey", "") + if ok.endswith(".*") or (not tn and ok): + selectedTables = list(allObjs.values()) + _wildcardExpanded = True + break + if tn in allObjs: + selectedTables.append(allObjs[tn]) + if not _wildcardExpanded: + for ds in featureDataSources: + rf = ds.get("recordFilter") + if rf and isinstance(rf, dict) and ds.get("tableName"): + tableFilters[ds["tableName"]] = rf if not selectedTables: return ToolResult( diff --git a/modules/serviceCenter/services/serviceAgent/mainServiceAgent.py b/modules/serviceCenter/services/serviceAgent/mainServiceAgent.py index 0d5f3178..08b56b3d 100644 --- a/modules/serviceCenter/services/serviceAgent/mainServiceAgent.py +++ b/modules/serviceCenter/services/serviceAgent/mainServiceAgent.py @@ -121,7 +121,7 @@ class AgentService: if workflowId is None: workflowId = getattr(self.services.workflow, "id", "unknown") if self.services.workflow else "unknown" - resolvedLanguage = userLanguage or getattr(self.services.user, "language", "") or "de" + resolvedLanguage = userLanguage or "" enrichedPrompt = await self._enrichPromptWithFiles(prompt, fileIds) @@ -365,15 +365,27 @@ class AgentService: toolCallId="", toolName=REQUEST_TOOLBOX_TOOL_NAME, success=False, error=f"Unknown toolbox: {toolboxId}", ) + activatedCount = 0 for toolName in tb.tools: - if not registry.isValidTool(toolName): - logger.info("requestToolbox: tool '%s' from toolbox '%s' not yet registered, skipping", toolName, toolboxId) + if registry.isValidTool(toolName): + activatedCount += 1 continue - logger.info("requestToolbox: activated toolbox '%s' (%d tools). Reason: %s", toolboxId, len(tb.tools), reason) + try: + from modules.serviceCenter.services.serviceAgent.actionToolAdapter import ActionToolAdapter + adapter = ActionToolAdapter(self._getService("actionExecutor")) + adapter.registerAll(registry) + if registry.isValidTool(toolName): + activatedCount += 1 + logger.info("requestToolbox: re-registered tool '%s' from toolbox '%s'", toolName, toolboxId) + else: + logger.warning("requestToolbox: tool '%s' from toolbox '%s' could not be registered", toolName, toolboxId) + except Exception as regErr: + logger.warning("requestToolbox: failed to register tool '%s': %s", toolName, regErr) + logger.info("requestToolbox: activated toolbox '%s' (%d/%d tools). Reason: %s", toolboxId, activatedCount, len(tb.tools), reason) return ToolResult( toolCallId="", toolName=REQUEST_TOOLBOX_TOOL_NAME, success=True, - data=f"Toolbox '{tb.label}' activated with {len(tb.tools)} tools. They are now available.", + data=f"Toolbox '{tb.label}' activated with {activatedCount} tools. They are now available.", ) registry.register( diff --git a/modules/system/mainSystem.py b/modules/system/mainSystem.py index ee3e0f84..059ee4e9 100644 --- a/modules/system/mainSystem.py +++ b/modules/system/mainSystem.py @@ -52,6 +52,15 @@ NAVIGATION_SECTIONS = [ "order": 10, "public": True, }, + { + "id": "integrations", + "objectKey": "ui.system.integrations", + "label": t("Integrationen"), + "icon": "FaProjectDiagram", + "path": "/integrations", + "order": 15, + "public": True, + }, ], "subgroups": [ # ── Basisdaten ── diff --git a/modules/workflows/methods/methodTrustee/actions/refreshAccountingData.py b/modules/workflows/methods/methodTrustee/actions/refreshAccountingData.py index 9e6276f5..80924c39 100644 --- a/modules/workflows/methods/methodTrustee/actions/refreshAccountingData.py +++ b/modules/workflows/methods/methodTrustee/actions/refreshAccountingData.py @@ -96,6 +96,13 @@ async def refreshAccountingData(self, parameters: Dict[str, Any]) -> ActionResul summary.pop("startedAt", None) summary.pop("finishedAt", None) + try: + from modules.serviceCenter.services.serviceAgent.coreTools._featureSubAgentTools import clearFeatureQueryCache + clearFeatureQueryCache(featureInstanceId) + logger.info("Cleared feature query cache for instance %s after accounting import", featureInstanceId) + except Exception as cacheErr: + logger.warning("Could not clear feature query cache: %s", cacheErr) + return ActionResult.isSuccess(documents=[ ActionDocument( documentName="refresh_result", diff --git a/scripts/function_imports_analysis.txt b/scripts/function_imports_analysis.txt deleted file mode 100644 index a3909ed4..00000000 --- a/scripts/function_imports_analysis.txt +++ /dev/null @@ -1,444 +0,0 @@ -================================================================================ -FUNCTION IMPORTS ANALYSIS -================================================================================ - -Total function imports (internal modules): 229 - - CIRCULAR (must stay): 4 - - REDUNDANT (can remove): 0 - - MOVABLE (can move): 225 - - -================================================================================ -MOVABLE TO HEADER (grouped by source module) -These imports could potentially be moved to the module header. -================================================================================ - -gateway.app ------------ - [lifespan] modules.shared.auditLogger - -gateway.modules.auth.authentication ------------------------------------ - [requireSysAdmin] modules.shared.auditLogger - -gateway.modules.auth.tokenManager ---------------------------------- - [getFreshToken] modules.interfaces.interfaceDbApp - [getFreshToken] modules.security.rootAccess - -gateway.modules.auth.tokenRefreshService ----------------------------------------- - [_refresh_google_token] modules.auth.tokenManager - [_refresh_microsoft_token] modules.auth.tokenManager - [proactive_refresh] modules.interfaces.interfaceDbApp - [refresh_expired_tokens] modules.interfaces.interfaceDbApp - [proactive_refresh] modules.security.rootAccess - [refresh_expired_tokens] modules.security.rootAccess - -gateway.modules.datamodels.datamodelChat ----------------------------------------- - [updateFromSelection] modules.datamodels.datamodelWorkflow - -gateway.modules.features.aichat.mainAiChat ------------------------------------------- - [onStart] modules.aicore.aicoreModelRegistry - -gateway.modules.features.automation.routeFeatureAutomation ----------------------------------------------------------- - [execute_automation] modules.services - -gateway.modules.features.chatbot.datamodelFeatureChatbot --------------------------------------------------------- - [updateFromSelection] modules.datamodels.datamodelWorkflow - -gateway.modules.features.chatbot.interfaceFeatureChatbot --------------------------------------------------------- - [createLog] modules.features.chatbot.eventManager - [createMessage] modules.features.chatbot.eventManager - [_enrichAutomationsWithUserAndMandate] modules.interfaces.interfaceDbApp - [storeDebugMessageAndDocuments] modules.interfaces.interfaceDbManagement - [setUserContext] modules.security.rootAccess - [_notifyAutomationChanged] modules.shared.callbackRegistry - [storeDebugMessageAndDocuments] modules.shared.debugLogger - [deleteAutomationDefinition] modules.shared.eventManagement - -gateway.modules.features.chatbot.mainChatbot --------------------------------------------- - [_convert_file_ids_to_document_references] modules.interfaces.interfaceRbac - -gateway.modules.features.neutralizer.mainNeutralizePlayground -------------------------------------------------------------- - [processSharepointFiles] modules.services.serviceSharepoint.mainServiceSharepoint - -gateway.modules.features.realestate.interfaceFeatureRealEstate --------------------------------------------------------------- - [setUserContext] modules.security.rootAccess - -gateway.modules.features.realestate.mainRealEstate --------------------------------------------------- - [executeIntentBasedOperation] modules.features.realestate.datamodelFeatureRealEstate - -gateway.modules.features.trustee.interfaceFeatureTrustee --------------------------------------------------------- - [setUserContext] modules.security.rootAccess - -gateway.modules.interfaces.interfaceBootstrap ---------------------------------------------- - [_applyDatabaseOptimizations] modules.shared.dbMultiTenantOptimizations - -gateway.modules.interfaces.interfaceDbApp ------------------------------------------ - [getRootInterface] modules.security.rootAccess - -gateway.modules.interfaces.interfaceDbChat ------------------------------------------- - [_enrichAutomationsWithUserAndMandate] modules.interfaces.interfaceDbApp - [storeDebugMessageAndDocuments] modules.interfaces.interfaceDbManagement - [setUserContext] modules.security.rootAccess - [_notifyAutomationChanged] modules.shared.callbackRegistry - [storeDebugMessageAndDocuments] modules.shared.debugLogger - -gateway.modules.interfaces.interfaceDbManagement ------------------------------------------------- - [_initializeStandardPrompts] modules.interfaces.interfaceDbApp - [_initializeStandardPrompts] modules.security.rootAccess - [setUserContext] modules.security.rootAccess - -gateway.modules.interfaces.interfaceFeatures --------------------------------------------- - [syncRolesFromTemplate] modules.datamodels.datamodelMembership - -gateway.modules.interfaces.interfaceRbac ----------------------------------------- - [getRecordsetWithRBAC] modules.connectors.connectorDbPostgre - -gateway.modules.interfaces.interfaceTicketObjects -------------------------------------------------- - [createTicketInterfaceByType] modules.connectors.connectorTicketsClickup - [createTicketInterfaceByType] modules.connectors.connectorTicketsJira - -gateway.modules.routes.routeAdminAutomationEvents -------------------------------------------------- - [sync_all_automation_events] modules.interfaces.interfaceDbApp - [sync_all_automation_events] modules.services - [get_all_automation_events] modules.shared.eventManagement - [remove_event] modules.shared.eventManagement - [sync_all_automation_events] modules.workflows.automation - -gateway.modules.routes.routeAdminFeatures ------------------------------------------ - [_getInstancePermissions] modules.datamodels.datamodelMembership - [_getUserRoleInInstance] modules.datamodels.datamodelMembership - [addUserToFeatureInstance] modules.datamodels.datamodelMembership - [listFeatureInstanceUsers] modules.datamodels.datamodelMembership - [removeUserFromFeatureInstance] modules.datamodels.datamodelMembership - [updateFeatureInstanceUserRoles] modules.datamodels.datamodelMembership - [_getInstancePermissions] modules.datamodels.datamodelRbac - [_getUserRoleInInstance] modules.datamodels.datamodelRbac - [_hasMandateAdminRole] modules.datamodels.datamodelRbac - [getFeatureInstanceAvailableRoles] modules.datamodels.datamodelRbac - [listFeatureInstanceUsers] modules.datamodels.datamodelRbac - -gateway.modules.routes.routeDataUsers -------------------------------------- - [delete_user] modules.datamodels.datamodelMembership - [get_user] modules.datamodels.datamodelMembership - [reset_user_password] modules.datamodels.datamodelMembership - [sendPasswordLink] modules.datamodels.datamodelMembership - [update_user] modules.datamodels.datamodelMembership - [sendPasswordLink] modules.services - [change_password] modules.shared.auditLogger - [reset_user_password] modules.shared.auditLogger - [sendPasswordLink] modules.shared.auditLogger - [sendPasswordLink] modules.shared.configuration - -gateway.modules.routes.routeDataWorkflows ------------------------------------------ - [get_action_schema] modules.services - [get_all_actions] modules.services - [get_method_actions] modules.services - [get_action_schema] modules.workflows.processing.shared.methodDiscovery - [get_all_actions] modules.workflows.processing.shared.methodDiscovery - [get_method_actions] modules.workflows.processing.shared.methodDiscovery - -gateway.modules.routes.routeGdpr --------------------------------- - [exportUserData] modules.datamodels.datamodelFeatures - [deleteAccount] modules.datamodels.datamodelInvitation - [exportUserData] modules.datamodels.datamodelInvitation - [deleteAccount] modules.datamodels.datamodelMembership - [exportPortableData] modules.datamodels.datamodelMembership - [exportUserData] modules.datamodels.datamodelMembership - [deleteAccount] modules.datamodels.datamodelSecurity - -gateway.modules.routes.routeInvitations ---------------------------------------- - [createInvitation] modules.datamodels.datamodelFeatures - [_hasMandateAdminRole] modules.datamodels.datamodelRbac - [_isInstanceRole] modules.datamodels.datamodelRbac - [createInvitation] modules.datamodels.datamodelRbac - [registerAndAcceptInvitation] modules.security.passwordUtils - [createInvitation] modules.shared.configuration - [listInvitations] modules.shared.configuration - -gateway.modules.routes.routeMessaging -------------------------------------- - [_hasTriggerPermission] modules.interfaces.interfaceDbApp - [triggerSubscription] modules.services - -gateway.modules.routes.routeSecurityAdmin ------------------------------------------ - [revoke_tokens_by_mandate] modules.datamodels.datamodelMembership - -gateway.modules.routes.routeSecurityGoogle ------------------------------------------- - [auth_callback] modules.datamodels.datamodelSecurity - [logout] modules.shared.auditLogger - -gateway.modules.routes.routeSecurityLocal ------------------------------------------ - [_sendAuthEmail] modules.datamodels.datamodelMessaging - [_sendAuthEmail] modules.interfaces.interfaceMessaging - [login] modules.shared.auditLogger - [logout] modules.shared.auditLogger - [passwordReset] modules.shared.auditLogger - -gateway.modules.routes.routeSecurityMsft ----------------------------------------- - [logout] modules.shared.auditLogger - -gateway.modules.security.rootAccess ------------------------------------ - [_ensureBootstrap] modules.interfaces.interfaceBootstrap - -gateway.modules.services.__init__ ---------------------------------- - [__init__] modules.interfaces.interfaceDbApp - [__init__] modules.interfaces.interfaceDbChat - [__init__] modules.interfaces.interfaceDbManagement - -gateway.modules.services.serviceAi.mainAiChat ---------------------------------------------- - [onStart] modules.aicore.aicoreModelRegistry - -gateway.modules.services.serviceAi.mainServiceAi ------------------------------------------------- - [renderResult] modules.services.serviceGeneration.mainServiceGeneration - [_handleCodeGeneration] modules.services.serviceGeneration.paths.codePath - [_handleDocumentGeneration] modules.services.serviceGeneration.paths.documentPath - [_handleImageGeneration] modules.services.serviceGeneration.paths.imagePath - -gateway.modules.services.serviceAi.subContentExtraction -------------------------------------------------------- - [extractTextFromImage] modules.datamodels.datamodelAi - [processTextContentWithAi] modules.datamodels.datamodelAi - -gateway.modules.services.serviceAi.subJsonResponseHandling ----------------------------------------------------------- - [mergeFragmentIntoSection] modules.shared.debugLogger - -gateway.modules.services.serviceAi.subStructureFilling ------------------------------------------------------- - [_getAcceptedSectionTypesForFormat] modules.datamodels.datamodelJson - [_getAcceptedSectionTypesForFormat] modules.services.serviceGeneration.renderers.registry - [buildSectionPromptWithContinuation] modules.shared.jsonContinuation - [_extractAndMergeMultipleJsonBlocks] modules.shared.jsonUtils - [_processAiResponseForSection] modules.shared.jsonUtils - [_processSingleSection] modules.shared.jsonUtils - -gateway.modules.services.serviceAi.subStructureGeneration ---------------------------------------------------------- - [generateStructure] modules.services.serviceGeneration.renderers.registry - [generateStructure] modules.shared - [generateStructure] modules.shared.jsonContinuation - -gateway.modules.services.serviceChat.mainServiceChat ----------------------------------------------------- - [getChatDocumentsFromDocumentList] modules.datamodels.datamodelDocref - -gateway.modules.services.serviceExtraction.mainServiceExtraction ----------------------------------------------------------------- - [extractContent] modules.interfaces.interfaceDbManagement - [extractContent] modules.shared.debugLogger - -gateway.modules.services.serviceExtraction.subPromptBuilderExtraction ---------------------------------------------------------------------- - [buildExtractionPrompt] modules.shared.debugLogger - -gateway.modules.services.serviceGeneration.mainServiceGeneration ----------------------------------------------------------------- - [getAdaptiveExtractionPrompt] modules.services.serviceExtraction.subPromptBuilderExtraction - [renderReport] modules.services.serviceGeneration.renderers.registry - [generateDocumentWithTwoPhases] modules.services.serviceGeneration.subContentGenerator - [generateDocumentWithTwoPhases] modules.services.serviceGeneration.subStructureGenerator - -gateway.modules.services.serviceGeneration.paths.codePath ---------------------------------------------------------- - [generateCode] modules.datamodels.datamodelDocument - [_getCodeRenderer] modules.services.serviceGeneration.renderers.registry - [_generateCodeStructure] modules.shared.jsonContinuation - [_generateSingleFileContent] modules.shared.jsonContinuation - -gateway.modules.services.serviceGeneration.renderers.rendererDocx ------------------------------------------------------------------ - [getAcceptedSectionTypes] modules.datamodels.datamodelJson - -gateway.modules.services.serviceGeneration.renderers.rendererHtml ------------------------------------------------------------------ - [getAcceptedSectionTypes] modules.datamodels.datamodelJson - -gateway.modules.services.serviceGeneration.renderers.rendererImage ------------------------------------------------------------------- - [_compressPromptWithAi] modules.datamodels.datamodelAi - [_generateAiImage] modules.datamodels.datamodelAi - -gateway.modules.services.serviceGeneration.renderers.rendererJson ------------------------------------------------------------------ - [getAcceptedSectionTypes] modules.datamodels.datamodelJson - -gateway.modules.services.serviceGeneration.renderers.rendererMarkdown ---------------------------------------------------------------------- - [getAcceptedSectionTypes] modules.datamodels.datamodelJson - -gateway.modules.services.serviceGeneration.renderers.rendererPdf ----------------------------------------------------------------- - [_getAiStylesWithPdfColors] modules.datamodels.datamodelAi - [getAcceptedSectionTypes] modules.datamodels.datamodelJson - -gateway.modules.services.serviceGeneration.renderers.rendererPptx ------------------------------------------------------------------ - [getAcceptedSectionTypes] modules.datamodels.datamodelJson - -gateway.modules.services.serviceGeneration.renderers.rendererText ------------------------------------------------------------------ - [getAcceptedSectionTypes] modules.datamodels.datamodelJson - -gateway.modules.services.serviceGeneration.renderers.rendererXlsx ------------------------------------------------------------------ - [_getAiStylesWithExcelColors] modules.datamodels.datamodelAi - [getAcceptedSectionTypes] modules.datamodels.datamodelJson - -gateway.modules.services.serviceGeneration.subContentGenerator --------------------------------------------------------------- - [_generateImageSection] modules.datamodels.datamodelAi - [_generateSimpleSection] modules.datamodels.datamodelAi - [_generateSimpleSection] modules.shared.jsonUtils - -gateway.modules.services.serviceGeneration.subStructureGenerator ----------------------------------------------------------------- - [generateStructure] modules.datamodels.datamodelAi - -gateway.modules.services.serviceUtils.mainServiceUtils ------------------------------------------------------- - [storeDebugMessageAndDocuments] modules.interfaces.interfaceDbChat - [debugLogToFile] modules.shared.debugLogger - [writeDebugArtifact] modules.shared.debugLogger - [writeDebugFile] modules.shared.debugLogger - -gateway.modules.shared.auditLogger ----------------------------------- - [_ensureInitialized] modules.datamodels.datamodelAudit - [cleanupOldEntries] modules.datamodels.datamodelAudit - [getAuditLogs] modules.datamodels.datamodelAudit - [logEvent] modules.datamodels.datamodelAudit - [registerAuditLogCleanupScheduler] modules.shared.eventManagement - -gateway.modules.shared.debugLogger ----------------------------------- - [debugLogToFile] modules.shared.timeUtils - -gateway.modules.shared.jsonUtils --------------------------------- - [buildContinuationContext] modules.shared.jsonContinuation - -gateway.modules.workflows.automation.subAutomationSchedule ----------------------------------------------------------- - [start] modules.shared.callbackRegistry - [start] modules.workflows.automation - -gateway.modules.workflows.methods.methodAi.actions.generateCode ---------------------------------------------------------------- - [generateCode] modules.datamodels.datamodelDocref - -gateway.modules.workflows.methods.methodAi.actions.generateDocument -------------------------------------------------------------------- - [generateDocument] modules.datamodels.datamodelDocref - -gateway.modules.workflows.methods.methodAi.actions.process ----------------------------------------------------------- - [process] modules.datamodels.datamodelDocref - [process] modules.datamodels.datamodelWorkflow - -gateway.modules.workflows.methods.methodChatbot.actions.queryDatabase ---------------------------------------------------------------------- - [queryDatabase] modules.datamodels.datamodelDocref - -gateway.modules.workflows.methods.methodOutlook.actions.composeAndDraftEmailWithContext ---------------------------------------------------------------------------------------- - [composeAndDraftEmailWithContext] modules.datamodels.datamodelDocref - -gateway.modules.workflows.methods.methodOutlook.actions.sendDraftEmail ----------------------------------------------------------------------- - [sendDraftEmail] modules.datamodels.datamodelDocref - -gateway.modules.workflows.methods.methodSharepoint.actions.copyFile -------------------------------------------------------------------- - [copyFile] modules.datamodels.datamodelDocref - -gateway.modules.workflows.methods.methodSharepoint.actions.downloadFileByPath ------------------------------------------------------------------------------ - [downloadFileByPath] modules.datamodels.datamodelDocref - -gateway.modules.workflows.methods.methodSharepoint.actions.uploadFile ---------------------------------------------------------------------- - [uploadFile] modules.datamodels.datamodelDocref - -gateway.modules.workflows.methods.methodSharepoint.helpers.documentParsing --------------------------------------------------------------------------- - [parseDocumentListForFolder] modules.datamodels.datamodelDocref - [parseDocumentListForFoundDocuments] modules.datamodels.datamodelDocref - -gateway.modules.workflows.processing.core.actionExecutor --------------------------------------------------------- - [_createActionCompletionMessage] modules.workflows.processing.core.messageCreator - -gateway.modules.workflows.processing.modes.modeDynamic ------------------------------------------------------- - [_actExecute] modules.datamodels.datamodelAi - [_planSelect] modules.datamodels.datamodelAi - [_refineDecide] modules.datamodels.datamodelAi - [_actExecute] modules.datamodels.datamodelDocref - [_planSelect] modules.datamodels.datamodelDocref - [_actExecute] modules.datamodels.datamodelWorkflow - [_planSelect] modules.datamodels.datamodelWorkflow - [_actExecute] modules.shared.jsonUtils - [_planSelect] modules.shared.jsonUtils - [_refineDecide] modules.shared.jsonUtils - [_actExecute] modules.workflows.processing.shared.methodDiscovery - -gateway.modules.workflows.processing.shared.placeholderFactory --------------------------------------------------------------- - [extractReviewContent] modules.datamodels.datamodelChat - [extractLatestRefinementFeedback] modules.interfaces.interfaceDbApp - [extractLatestRefinementFeedback] modules.interfaces.interfaceDbChat - -gateway.modules.workflows.workflowManager ------------------------------------------ - [_executeTasks] modules.datamodels.datamodelWorkflow - [workflowStart] modules.workflows.processing.shared.methodDiscovery - [_checkIfHistoryAvailable] modules.workflows.processing.shared.placeholderFactory - - -================================================================================ -CIRCULAR DEPENDENCY (must stay in function) -================================================================================ - -gateway.modules.shared.auditLogger ----------------------------------- - [_ensureInitialized] modules.connectors.connectorDbPostgre - -gateway.modules.shared.configuration ------------------------------------- - [decryptValue] modules.shared.auditLogger - [encryptValue] modules.shared.auditLogger - [get] modules.shared.auditLogger \ No newline at end of file diff --git a/scripts/import_analysis.csv b/scripts/import_analysis.csv deleted file mode 100644 index 5fbe59c0..00000000 --- a/scripts/import_analysis.csv +++ /dev/null @@ -1,2685 +0,0 @@ -module_name,imported_module_name,position,import_valid -gateway.app,contextlib,header,Yes -gateway.app,datetime,header,Yes -gateway.app,fastapi,header,Yes -gateway.app,fastapi.middleware.cors,header,Yes -gateway.app,fastapi.openapi.utils,function customOpenapi,Yes -gateway.app,fastapi.security,header,Yes -gateway.app,logging,header,Yes -gateway.app,logging.handlers,header,Yes -gateway.app,modules.auth,header,Yes -gateway.app,modules.auth,header,Yes -gateway.app,modules.features.featureRegistry,header,Yes -gateway.app,modules.features.featureRegistry,header,Yes -gateway.app,modules.interfaces.interfaceDbApp,header,Yes -gateway.app,modules.routes.routeAdmin,header,Yes -gateway.app,modules.routes.routeAdminAutomationEvents,header,Yes -gateway.app,modules.routes.routeAdminFeatures,header,Yes -gateway.app,modules.routes.routeAdminRbacExport,header,Yes -gateway.app,modules.routes.routeAdminRbacRules,header,Yes -gateway.app,modules.routes.routeAttributes,header,Yes -gateway.app,modules.routes.routeChat,header,Yes -gateway.app,modules.routes.routeDataConnections,header,Yes -gateway.app,modules.routes.routeDataFiles,header,Yes -gateway.app,modules.routes.routeDataMandates,header,Yes -gateway.app,modules.routes.routeDataPrompts,header,Yes -gateway.app,modules.routes.routeDataUsers,header,Yes -gateway.app,modules.routes.routeDataWorkflows,header,Yes -gateway.app,modules.routes.routeGdpr,header,Yes -gateway.app,modules.routes.routeInvitations,header,Yes -gateway.app,modules.routes.routeMessaging,header,Yes -gateway.app,modules.routes.routeSecurityAdmin,header,Yes -gateway.app,modules.routes.routeSecurityGoogle,header,Yes -gateway.app,modules.routes.routeSecurityLocal,header,Yes -gateway.app,modules.routes.routeSecurityMsft,header,Yes -gateway.app,modules.routes.routeSharepoint,header,Yes -gateway.app,modules.routes.routeVoiceGoogle,header,Yes -gateway.app,modules.shared.auditLogger,function lifespan,Yes -gateway.app,modules.shared.configuration,header,Yes -gateway.app,modules.shared.eventManagement,header,Yes -gateway.app,modules.workflows.automation,header,Yes -gateway.app,os,header,Yes -gateway.app,sys,header,Yes -gateway.app,unicodedata,header,Yes -gateway.app,urllib.parse,header,Yes -gateway.modules.aicore.aicoreBase,abc,header,Yes -gateway.modules.aicore.aicoreBase,modules.datamodels.datamodelAi,header,Yes -gateway.modules.aicore.aicoreBase,time,function getCachedModels,Yes -gateway.modules.aicore.aicoreBase,typing,header,Yes -gateway.modules.aicore.aicoreModelRegistry,(relative) .aicoreBase,header,Yes -gateway.modules.aicore.aicoreModelRegistry,importlib,header,Yes -gateway.modules.aicore.aicoreModelRegistry,logging,header,Yes -gateway.modules.aicore.aicoreModelRegistry,modules.connectors.connectorDbPostgre,header,Yes -gateway.modules.aicore.aicoreModelRegistry,modules.datamodels.datamodelAi,header,Yes -gateway.modules.aicore.aicoreModelRegistry,modules.datamodels.datamodelUam,header,Yes -gateway.modules.aicore.aicoreModelRegistry,modules.security.rbac,header,Yes -gateway.modules.aicore.aicoreModelRegistry,modules.security.rbacHelpers,header,Yes -gateway.modules.aicore.aicoreModelRegistry,os,header,Yes -gateway.modules.aicore.aicoreModelRegistry,time,function refreshModels,Yes -gateway.modules.aicore.aicoreModelRegistry,typing,header,Yes -gateway.modules.aicore.aicoreModelSelector,logging,header,Yes -gateway.modules.aicore.aicoreModelSelector,modules.datamodels.datamodelAi,header,Yes -gateway.modules.aicore.aicoreModelSelector,typing,header,Yes -gateway.modules.aicore.aicorePluginAnthropic,(relative) .aicoreBase,header,Yes -gateway.modules.aicore.aicorePluginAnthropic,base64,function callAiImage,Yes -gateway.modules.aicore.aicorePluginAnthropic,fastapi,header,Yes -gateway.modules.aicore.aicorePluginAnthropic,httpx,header,Yes -gateway.modules.aicore.aicorePluginAnthropic,logging,header,Yes -gateway.modules.aicore.aicorePluginAnthropic,modules.datamodels.datamodelAi,header,Yes -gateway.modules.aicore.aicorePluginAnthropic,modules.shared.configuration,header,Yes -gateway.modules.aicore.aicorePluginAnthropic,os,header,Yes -gateway.modules.aicore.aicorePluginAnthropic,time,function callAiImage,Yes -gateway.modules.aicore.aicorePluginAnthropic,typing,header,Yes -gateway.modules.aicore.aicorePluginInternal,(relative) .aicoreBase,header,Yes -gateway.modules.aicore.aicorePluginInternal,logging,header,Yes -gateway.modules.aicore.aicorePluginInternal,modules.datamodels.datamodelAi,header,Yes -gateway.modules.aicore.aicorePluginInternal,typing,header,Yes -gateway.modules.aicore.aicorePluginOpenai,(relative) .aicoreBase,header,Yes -gateway.modules.aicore.aicorePluginOpenai,fastapi,header,Yes -gateway.modules.aicore.aicorePluginOpenai,httpx,header,Yes -gateway.modules.aicore.aicorePluginOpenai,json,function generateImage,Yes -gateway.modules.aicore.aicorePluginOpenai,logging,header,Yes -gateway.modules.aicore.aicorePluginOpenai,modules.datamodels.datamodelAi,header,Yes -gateway.modules.aicore.aicorePluginOpenai,modules.shared.configuration,header,Yes -gateway.modules.aicore.aicorePluginOpenai,typing,header,Yes -gateway.modules.aicore.aicorePluginPerplexity,(relative) .aicoreBase,header,Yes -gateway.modules.aicore.aicorePluginPerplexity,fastapi,header,Yes -gateway.modules.aicore.aicorePluginPerplexity,httpx,header,Yes -gateway.modules.aicore.aicorePluginPerplexity,json,function webSearch,Yes -gateway.modules.aicore.aicorePluginPerplexity,json,function webCrawl,Yes -gateway.modules.aicore.aicorePluginPerplexity,json,function webCrawl,Yes -gateway.modules.aicore.aicorePluginPerplexity,logging,header,Yes -gateway.modules.aicore.aicorePluginPerplexity,modules.datamodels.datamodelAi,header,Yes -gateway.modules.aicore.aicorePluginPerplexity,modules.datamodels.datamodelTools,header,Yes -gateway.modules.aicore.aicorePluginPerplexity,modules.shared.configuration,header,Yes -gateway.modules.aicore.aicorePluginPerplexity,typing,header,Yes -gateway.modules.aicore.aicorePluginTavily,(relative) .aicoreBase,header,Yes -gateway.modules.aicore.aicorePluginTavily,asyncio,header,Yes -gateway.modules.aicore.aicorePluginTavily,dataclasses,header,Yes -gateway.modules.aicore.aicorePluginTavily,json,function webSearch,Yes -gateway.modules.aicore.aicorePluginTavily,json,function webSearch,Yes -gateway.modules.aicore.aicorePluginTavily,json,function webCrawl,Yes -gateway.modules.aicore.aicorePluginTavily,json,function webCrawl,Yes -gateway.modules.aicore.aicorePluginTavily,json,function webSearch,Yes -gateway.modules.aicore.aicorePluginTavily,json,function webCrawl,Yes -gateway.modules.aicore.aicorePluginTavily,logging,header,Yes -gateway.modules.aicore.aicorePluginTavily,modules.datamodels.datamodelAi,header,Yes -gateway.modules.aicore.aicorePluginTavily,modules.datamodels.datamodelTools,header,Yes -gateway.modules.aicore.aicorePluginTavily,modules.shared.configuration,header,Yes -gateway.modules.aicore.aicorePluginTavily,re,header,Yes -gateway.modules.aicore.aicorePluginTavily,re,function _cleanUrl,Yes -gateway.modules.aicore.aicorePluginTavily,tavily,header,Yes -gateway.modules.aicore.aicorePluginTavily,typing,header,Yes -gateway.modules.aicore.aicorePluginTavily,urllib.parse,function _normalizeUrl,Yes -gateway.modules.auth.__init__,(relative) .authentication,header,Yes -gateway.modules.auth.__init__,(relative) .csrf,header,Yes -gateway.modules.auth.__init__,(relative) .jwtService,header,Yes -gateway.modules.auth.__init__,(relative) .tokenManager,header,Yes -gateway.modules.auth.__init__,(relative) .tokenRefreshMiddleware,header,Yes -gateway.modules.auth.__init__,(relative) .tokenRefreshService,header,Yes -gateway.modules.auth.authentication,fastapi,header,Yes -gateway.modules.auth.authentication,fastapi.security,header,Yes -gateway.modules.auth.authentication,jose,header,Yes -gateway.modules.auth.authentication,logging,header,Yes -gateway.modules.auth.authentication,modules.datamodels.datamodelRbac,header,Yes -gateway.modules.auth.authentication,modules.datamodels.datamodelSecurity,header,Yes -gateway.modules.auth.authentication,modules.datamodels.datamodelUam,header,Yes -gateway.modules.auth.authentication,modules.interfaces.interfaceDbApp,header,Yes -gateway.modules.auth.authentication,modules.security.rootAccess,header,Yes -gateway.modules.auth.authentication,modules.shared.auditLogger,function requireSysAdmin,Yes -gateway.modules.auth.authentication,modules.shared.configuration,header,Yes -gateway.modules.auth.authentication,slowapi,header,Yes -gateway.modules.auth.authentication,slowapi.util,header,Yes -gateway.modules.auth.authentication,typing,header,Yes -gateway.modules.auth.csrf,fastapi,header,Yes -gateway.modules.auth.csrf,fastapi.responses,function dispatch,Yes -gateway.modules.auth.csrf,fastapi.responses,function dispatch,Yes -gateway.modules.auth.csrf,logging,header,Yes -gateway.modules.auth.csrf,starlette.middleware.base,header,Yes -gateway.modules.auth.csrf,typing,header,Yes -gateway.modules.auth.jwtService,datetime,header,Yes -gateway.modules.auth.jwtService,fastapi,header,Yes -gateway.modules.auth.jwtService,jose,header,Yes -gateway.modules.auth.jwtService,modules.shared.configuration,header,Yes -gateway.modules.auth.jwtService,modules.shared.timeUtils,header,Yes -gateway.modules.auth.jwtService,typing,header,Yes -gateway.modules.auth.jwtService,uuid,function createAccessToken,Yes -gateway.modules.auth.jwtService,uuid,function createRefreshToken,Yes -gateway.modules.auth.tokenManager,httpx,header,Yes -gateway.modules.auth.tokenManager,logging,header,Yes -gateway.modules.auth.tokenManager,modules.datamodels.datamodelSecurity,header,Yes -gateway.modules.auth.tokenManager,modules.datamodels.datamodelUam,header,Yes -gateway.modules.auth.tokenManager,modules.interfaces.interfaceDbApp,function getFreshToken,Yes -gateway.modules.auth.tokenManager,modules.security.rootAccess,function getFreshToken,Yes -gateway.modules.auth.tokenManager,modules.shared.configuration,header,Yes -gateway.modules.auth.tokenManager,modules.shared.timeUtils,header,Yes -gateway.modules.auth.tokenManager,typing,header,Yes -gateway.modules.auth.tokenRefreshMiddleware,asyncio,header,Yes -gateway.modules.auth.tokenRefreshMiddleware,fastapi,header,Yes -gateway.modules.auth.tokenRefreshMiddleware,logging,header,Yes -gateway.modules.auth.tokenRefreshMiddleware,modules.auth.tokenRefreshService,header,Yes -gateway.modules.auth.tokenRefreshMiddleware,modules.shared.timeUtils,header,Yes -gateway.modules.auth.tokenRefreshMiddleware,starlette.middleware.base,header,Yes -gateway.modules.auth.tokenRefreshMiddleware,typing,header,Yes -gateway.modules.auth.tokenRefreshService,logging,header,Yes -gateway.modules.auth.tokenRefreshService,modules.auth.tokenManager,function _refresh_google_token,Yes -gateway.modules.auth.tokenRefreshService,modules.auth.tokenManager,function _refresh_microsoft_token,Yes -gateway.modules.auth.tokenRefreshService,modules.datamodels.datamodelUam,header,Yes -gateway.modules.auth.tokenRefreshService,modules.interfaces.interfaceDbApp,function refresh_expired_tokens,Yes -gateway.modules.auth.tokenRefreshService,modules.interfaces.interfaceDbApp,function proactive_refresh,Yes -gateway.modules.auth.tokenRefreshService,modules.security.rootAccess,function refresh_expired_tokens,Yes -gateway.modules.auth.tokenRefreshService,modules.security.rootAccess,function proactive_refresh,Yes -gateway.modules.auth.tokenRefreshService,modules.shared.auditLogger,header,Yes -gateway.modules.auth.tokenRefreshService,modules.shared.timeUtils,header,Yes -gateway.modules.auth.tokenRefreshService,typing,header,Yes -gateway.modules.connectors.connectorDbPostgre,json,function _save_record,Yes -gateway.modules.connectors.connectorDbPostgre,json,function _loadRecord,Yes -gateway.modules.connectors.connectorDbPostgre,json,function _loadTable,Yes -gateway.modules.connectors.connectorDbPostgre,json,function getRecordset,Yes -gateway.modules.connectors.connectorDbPostgre,logging,header,Yes -gateway.modules.connectors.connectorDbPostgre,modules.datamodels.datamodelRbac,header,Yes -gateway.modules.connectors.connectorDbPostgre,modules.datamodels.datamodelUam,header,Yes -gateway.modules.connectors.connectorDbPostgre,modules.shared.configuration,header,Yes -gateway.modules.connectors.connectorDbPostgre,modules.shared.timeUtils,header,Yes -gateway.modules.connectors.connectorDbPostgre,psycopg2,header,Yes -gateway.modules.connectors.connectorDbPostgre,psycopg2.extras,header,Yes -gateway.modules.connectors.connectorDbPostgre,pydantic,header,Yes -gateway.modules.connectors.connectorDbPostgre,threading,header,Yes -gateway.modules.connectors.connectorDbPostgre,typing,header,Yes -gateway.modules.connectors.connectorDbPostgre,uuid,header,Yes -gateway.modules.connectors.connectorMessagingEmail,azure.communication.email,header,Yes -gateway.modules.connectors.connectorMessagingEmail,logging,header,Yes -gateway.modules.connectors.connectorMessagingEmail,modules.shared.configuration,header,Yes -gateway.modules.connectors.connectorMessagingEmail,typing,header,Yes -gateway.modules.connectors.connectorMessagingSms,logging,header,Yes -gateway.modules.connectors.connectorMessagingSms,modules.shared.configuration,header,Yes -gateway.modules.connectors.connectorMessagingSms,twilio.rest,function __init__,Yes -gateway.modules.connectors.connectorMessagingSms,typing,header,Yes -gateway.modules.connectors.connectorPreprocessor,httpx,header,Yes -gateway.modules.connectors.connectorPreprocessor,logging,header,Yes -gateway.modules.connectors.connectorPreprocessor,modules.shared.configuration,header,Yes -gateway.modules.connectors.connectorPreprocessor,typing,header,Yes -gateway.modules.connectors.connectorSwissTopoMapServer,aiohttp,header,Yes -gateway.modules.connectors.connectorSwissTopoMapServer,asyncio,header,Yes -gateway.modules.connectors.connectorSwissTopoMapServer,logging,header,Yes -gateway.modules.connectors.connectorSwissTopoMapServer,modules.shared.configuration,header,Yes -gateway.modules.connectors.connectorSwissTopoMapServer,re,header,Yes -gateway.modules.connectors.connectorSwissTopoMapServer,typing,header,Yes -gateway.modules.connectors.connectorTicketsClickup,aiohttp,header,Yes -gateway.modules.connectors.connectorTicketsClickup,logging,header,Yes -gateway.modules.connectors.connectorTicketsClickup,modules.datamodels.datamodelTickets,header,Yes -gateway.modules.connectors.connectorTicketsClickup,typing,header,Yes -gateway.modules.connectors.connectorTicketsJira,aiohttp,header,Yes -gateway.modules.connectors.connectorTicketsJira,asyncio,header,Yes -gateway.modules.connectors.connectorTicketsJira,json,header,Yes -gateway.modules.connectors.connectorTicketsJira,logging,header,Yes -gateway.modules.connectors.connectorTicketsJira,modules.datamodels.datamodelTickets,header,Yes -gateway.modules.connectors.connectorVoiceGoogle,google.cloud,header,Yes -gateway.modules.connectors.connectorVoiceGoogle,google.cloud,header,Yes -gateway.modules.connectors.connectorVoiceGoogle,google.cloud,header,Yes -gateway.modules.connectors.connectorVoiceGoogle,google.oauth2,function __init__,Yes -gateway.modules.connectors.connectorVoiceGoogle,html,header,Yes -gateway.modules.connectors.connectorVoiceGoogle,json,header,Yes -gateway.modules.connectors.connectorVoiceGoogle,logging,header,Yes -gateway.modules.connectors.connectorVoiceGoogle,modules.shared.configuration,header,Yes -gateway.modules.connectors.connectorVoiceGoogle,typing,header,Yes -gateway.modules.datamodels.__init__,(relative) .,header,Yes -gateway.modules.datamodels.__init__,(relative) .,header,Yes -gateway.modules.datamodels.__init__,(relative) .,header,Yes -gateway.modules.datamodels.__init__,(relative) .,header,Yes -gateway.modules.datamodels.__init__,(relative) .,header,Yes -gateway.modules.datamodels.__init__,(relative) .,header,Yes -gateway.modules.datamodels.__init__,(relative) .,header,Yes -gateway.modules.datamodels.__init__,(relative) .,header,Yes -gateway.modules.datamodels.datamodelAi,enum,header,Yes -gateway.modules.datamodels.datamodelAi,modules.datamodels.datamodelExtraction,header,Yes -gateway.modules.datamodels.datamodelAi,pydantic,header,Yes -gateway.modules.datamodels.datamodelAi,typing,header,Yes -gateway.modules.datamodels.datamodelAudit,enum,header,Yes -gateway.modules.datamodels.datamodelAudit,modules.shared.attributeUtils,header,Yes -gateway.modules.datamodels.datamodelAudit,modules.shared.timeUtils,header,Yes -gateway.modules.datamodels.datamodelAudit,pydantic,header,Yes -gateway.modules.datamodels.datamodelAudit,typing,header,Yes -gateway.modules.datamodels.datamodelAudit,uuid,header,Yes -gateway.modules.datamodels.datamodelChat,enum,header,Yes -gateway.modules.datamodels.datamodelChat,modules.datamodels.datamodelWorkflow,function updateFromSelection,Yes -gateway.modules.datamodels.datamodelChat,modules.shared.attributeUtils,header,Yes -gateway.modules.datamodels.datamodelChat,modules.shared.timeUtils,header,Yes -gateway.modules.datamodels.datamodelChat,pydantic,header,Yes -gateway.modules.datamodels.datamodelChat,typing,header,Yes -gateway.modules.datamodels.datamodelChat,uuid,header,Yes -gateway.modules.datamodels.datamodelDocref,modules.shared.attributeUtils,header,Yes -gateway.modules.datamodels.datamodelDocref,pydantic,header,Yes -gateway.modules.datamodels.datamodelDocref,typing,header,Yes -gateway.modules.datamodels.datamodelDocument,datetime,header,Yes -gateway.modules.datamodels.datamodelDocument,pydantic,header,Yes -gateway.modules.datamodels.datamodelDocument,typing,header,Yes -gateway.modules.datamodels.datamodelExtraction,pydantic,header,Yes -gateway.modules.datamodels.datamodelExtraction,typing,header,Yes -gateway.modules.datamodels.datamodelFeatures,modules.datamodels.datamodelUtils,header,Yes -gateway.modules.datamodels.datamodelFeatures,modules.shared.attributeUtils,header,Yes -gateway.modules.datamodels.datamodelFeatures,pydantic,header,Yes -gateway.modules.datamodels.datamodelFeatures,typing,header,Yes -gateway.modules.datamodels.datamodelFeatures,uuid,header,Yes -gateway.modules.datamodels.datamodelFiles,base64,header,Yes -gateway.modules.datamodels.datamodelFiles,modules.shared.attributeUtils,header,Yes -gateway.modules.datamodels.datamodelFiles,modules.shared.timeUtils,header,Yes -gateway.modules.datamodels.datamodelFiles,pydantic,header,Yes -gateway.modules.datamodels.datamodelFiles,typing,header,Yes -gateway.modules.datamodels.datamodelFiles,uuid,header,Yes -gateway.modules.datamodels.datamodelInvitation,modules.shared.attributeUtils,header,Yes -gateway.modules.datamodels.datamodelInvitation,modules.shared.timeUtils,header,Yes -gateway.modules.datamodels.datamodelInvitation,pydantic,header,Yes -gateway.modules.datamodels.datamodelInvitation,secrets,header,Yes -gateway.modules.datamodels.datamodelInvitation,typing,header,Yes -gateway.modules.datamodels.datamodelInvitation,uuid,header,Yes -gateway.modules.datamodels.datamodelJson,typing,header,Yes -gateway.modules.datamodels.datamodelMembership,modules.shared.attributeUtils,header,Yes -gateway.modules.datamodels.datamodelMembership,pydantic,header,Yes -gateway.modules.datamodels.datamodelMembership,uuid,header,Yes -gateway.modules.datamodels.datamodelMessaging,enum,header,Yes -gateway.modules.datamodels.datamodelMessaging,modules.shared.attributeUtils,header,Yes -gateway.modules.datamodels.datamodelMessaging,modules.shared.timeUtils,header,Yes -gateway.modules.datamodels.datamodelMessaging,pydantic,header,Yes -gateway.modules.datamodels.datamodelMessaging,typing,header,Yes -gateway.modules.datamodels.datamodelMessaging,uuid,header,Yes -gateway.modules.datamodels.datamodelPagination,math,header,Yes -gateway.modules.datamodels.datamodelPagination,pydantic,header,Yes -gateway.modules.datamodels.datamodelPagination,typing,header,Yes -gateway.modules.datamodels.datamodelRbac,enum,header,Yes -gateway.modules.datamodels.datamodelRbac,modules.datamodels.datamodelUam,header,Yes -gateway.modules.datamodels.datamodelRbac,modules.datamodels.datamodelUtils,header,Yes -gateway.modules.datamodels.datamodelRbac,modules.shared.attributeUtils,header,Yes -gateway.modules.datamodels.datamodelRbac,pydantic,header,Yes -gateway.modules.datamodels.datamodelRbac,typing,header,Yes -gateway.modules.datamodels.datamodelRbac,uuid,header,Yes -gateway.modules.datamodels.datamodelSecurity,(relative) .datamodelUam,header,Yes -gateway.modules.datamodels.datamodelSecurity,enum,header,Yes -gateway.modules.datamodels.datamodelSecurity,modules.shared.attributeUtils,header,Yes -gateway.modules.datamodels.datamodelSecurity,modules.shared.timeUtils,header,Yes -gateway.modules.datamodels.datamodelSecurity,pydantic,header,Yes -gateway.modules.datamodels.datamodelSecurity,typing,header,Yes -gateway.modules.datamodels.datamodelSecurity,uuid,header,Yes -gateway.modules.datamodels.datamodelTickets,abc,header,Yes -gateway.modules.datamodels.datamodelTickets,pydantic,header,Yes -gateway.modules.datamodels.datamodelTickets,typing,header,Yes -gateway.modules.datamodels.datamodelUam,enum,header,Yes -gateway.modules.datamodels.datamodelUam,modules.shared.attributeUtils,header,Yes -gateway.modules.datamodels.datamodelUam,modules.shared.timeUtils,header,Yes -gateway.modules.datamodels.datamodelUam,pydantic,header,Yes -gateway.modules.datamodels.datamodelUam,typing,header,Yes -gateway.modules.datamodels.datamodelUam,uuid,header,Yes -gateway.modules.datamodels.datamodelUtils,modules.shared.attributeUtils,header,Yes -gateway.modules.datamodels.datamodelUtils,pydantic,header,Yes -gateway.modules.datamodels.datamodelUtils,typing,header,Yes -gateway.modules.datamodels.datamodelUtils,uuid,header,Yes -gateway.modules.datamodels.datamodelVoice,modules.shared.attributeUtils,header,Yes -gateway.modules.datamodels.datamodelVoice,modules.shared.timeUtils,header,Yes -gateway.modules.datamodels.datamodelVoice,pydantic,header,Yes -gateway.modules.datamodels.datamodelVoice,uuid,header,Yes -gateway.modules.datamodels.datamodelWorkflow,modules.datamodels.datamodelDocref,header,Yes -gateway.modules.datamodels.datamodelWorkflow,modules.shared.attributeUtils,header,Yes -gateway.modules.datamodels.datamodelWorkflow,modules.shared.jsonUtils,header,Yes -gateway.modules.datamodels.datamodelWorkflow,pydantic,header,Yes -gateway.modules.datamodels.datamodelWorkflow,typing,header,Yes -gateway.modules.datamodels.datamodelWorkflowActions,modules.datamodels.datamodelChat,header,Yes -gateway.modules.datamodels.datamodelWorkflowActions,modules.shared.attributeUtils,header,Yes -gateway.modules.datamodels.datamodelWorkflowActions,modules.shared.frontendTypes,header,Yes -gateway.modules.datamodels.datamodelWorkflowActions,pydantic,header,Yes -gateway.modules.datamodels.datamodelWorkflowActions,typing,header,Yes -gateway.modules.features.aichat.mainAiChat,logging,header,Yes -gateway.modules.features.aichat.mainAiChat,modules.aicore.aicoreModelRegistry,function onStart,Yes -gateway.modules.features.aichat.mainAiChat,typing,header,Yes -gateway.modules.features.automation.datamodelFeatureAutomation,modules.shared.attributeUtils,header,Yes -gateway.modules.features.automation.datamodelFeatureAutomation,pydantic,header,Yes -gateway.modules.features.automation.datamodelFeatureAutomation,typing,header,Yes -gateway.modules.features.automation.datamodelFeatureAutomation,uuid,header,Yes -gateway.modules.features.automation.mainAutomation,logging,header,Yes -gateway.modules.features.automation.mainAutomation,typing,header,Yes -gateway.modules.features.automation.routeFeatureAutomation,(relative) .subAutomationTemplates,header,Yes -gateway.modules.features.automation.routeFeatureAutomation,fastapi,header,Yes -gateway.modules.features.automation.routeFeatureAutomation,fastapi,header,Yes -gateway.modules.features.automation.routeFeatureAutomation,fastapi.responses,header,Yes -gateway.modules.features.automation.routeFeatureAutomation,fastapi.responses,function get_automations,Yes -gateway.modules.features.automation.routeFeatureAutomation,json,header,Yes -gateway.modules.features.automation.routeFeatureAutomation,logging,header,Yes -gateway.modules.features.automation.routeFeatureAutomation,modules.auth,header,Yes -gateway.modules.features.automation.routeFeatureAutomation,modules.datamodels.datamodelChat,header,Yes -gateway.modules.features.automation.routeFeatureAutomation,modules.datamodels.datamodelPagination,header,Yes -gateway.modules.features.automation.routeFeatureAutomation,modules.features.automation.datamodelFeatureAutomation,header,Yes -gateway.modules.features.automation.routeFeatureAutomation,modules.interfaces.interfaceDbChat,header,Yes -gateway.modules.features.automation.routeFeatureAutomation,modules.services,function execute_automation,Yes -gateway.modules.features.automation.routeFeatureAutomation,modules.shared.attributeUtils,header,Yes -gateway.modules.features.automation.routeFeatureAutomation,modules.workflows.automation,header,Yes -gateway.modules.features.automation.routeFeatureAutomation,typing,header,Yes -gateway.modules.features.automation.subAutomationTemplates,typing,header,Yes -gateway.modules.features.automation.subAutomationUtils,datetime,header,Yes -gateway.modules.features.automation.subAutomationUtils,json,header,Yes -gateway.modules.features.automation.subAutomationUtils,typing,header,Yes -gateway.modules.features.chatbot.__init__,(relative) .mainChatbot,header,Yes -gateway.modules.features.chatbot.chatbotConstants,datetime,header,Yes -gateway.modules.features.chatbot.chatbotConstants,logging,header,Yes -gateway.modules.features.chatbot.chatbotConstants,modules.datamodels.datamodelAi,header,Yes -gateway.modules.features.chatbot.chatbotConstants,re,header,Yes -gateway.modules.features.chatbot.chatbotConstants,typing,header,Yes -gateway.modules.features.chatbot.datamodelFeatureChatbot,enum,header,Yes -gateway.modules.features.chatbot.datamodelFeatureChatbot,modules.datamodels.datamodelWorkflow,function updateFromSelection,Yes -gateway.modules.features.chatbot.datamodelFeatureChatbot,modules.shared.attributeUtils,header,Yes -gateway.modules.features.chatbot.datamodelFeatureChatbot,modules.shared.timeUtils,header,Yes -gateway.modules.features.chatbot.datamodelFeatureChatbot,pydantic,header,Yes -gateway.modules.features.chatbot.datamodelFeatureChatbot,typing,header,Yes -gateway.modules.features.chatbot.datamodelFeatureChatbot,uuid,header,Yes -gateway.modules.features.chatbot.eventManager,asyncio,header,Yes -gateway.modules.features.chatbot.eventManager,datetime,header,Yes -gateway.modules.features.chatbot.eventManager,logging,header,Yes -gateway.modules.features.chatbot.eventManager,typing,header,Yes -gateway.modules.features.chatbot.interfaceFeatureChatbot,(relative) .datamodelFeatureChatbot,header,Yes -gateway.modules.features.chatbot.interfaceFeatureChatbot,asyncio,header,Yes -gateway.modules.features.chatbot.interfaceFeatureChatbot,datetime,function storeDebugMessageAndDocuments,Yes -gateway.modules.features.chatbot.interfaceFeatureChatbot,json,header,Yes -gateway.modules.features.chatbot.interfaceFeatureChatbot,logging,header,Yes -gateway.modules.features.chatbot.interfaceFeatureChatbot,math,header,Yes -gateway.modules.features.chatbot.interfaceFeatureChatbot,modules.connectors.connectorDbPostgre,header,Yes -gateway.modules.features.chatbot.interfaceFeatureChatbot,modules.datamodels.datamodelPagination,header,Yes -gateway.modules.features.chatbot.interfaceFeatureChatbot,modules.datamodels.datamodelRbac,header,Yes -gateway.modules.features.chatbot.interfaceFeatureChatbot,modules.datamodels.datamodelUam,header,Yes -gateway.modules.features.chatbot.interfaceFeatureChatbot,modules.datamodels.datamodelUam,header,Yes -gateway.modules.features.chatbot.interfaceFeatureChatbot,modules.features.automation.datamodelFeatureAutomation,header,Yes -gateway.modules.features.chatbot.interfaceFeatureChatbot,modules.features.chatbot.eventManager,function createMessage,Yes -gateway.modules.features.chatbot.interfaceFeatureChatbot,modules.features.chatbot.eventManager,function createLog,Yes -gateway.modules.features.chatbot.interfaceFeatureChatbot,modules.interfaces.interfaceDbApp,function _enrichAutomationsWithUserAndMandate,Yes -gateway.modules.features.chatbot.interfaceFeatureChatbot,modules.interfaces.interfaceDbManagement,function storeDebugMessageAndDocuments,Yes -gateway.modules.features.chatbot.interfaceFeatureChatbot,modules.interfaces.interfaceRbac,header,Yes -gateway.modules.features.chatbot.interfaceFeatureChatbot,modules.security.rbac,header,Yes -gateway.modules.features.chatbot.interfaceFeatureChatbot,modules.security.rootAccess,function setUserContext,Yes -gateway.modules.features.chatbot.interfaceFeatureChatbot,modules.shared.callbackRegistry,function _notifyAutomationChanged,Yes -gateway.modules.features.chatbot.interfaceFeatureChatbot,modules.shared.configuration,header,Yes -gateway.modules.features.chatbot.interfaceFeatureChatbot,modules.shared.debugLogger,function storeDebugMessageAndDocuments,Yes -gateway.modules.features.chatbot.interfaceFeatureChatbot,modules.shared.eventManagement,function deleteAutomationDefinition,Yes -gateway.modules.features.chatbot.interfaceFeatureChatbot,modules.shared.timeUtils,header,Yes -gateway.modules.features.chatbot.interfaceFeatureChatbot,os,function storeDebugMessageAndDocuments,Yes -gateway.modules.features.chatbot.interfaceFeatureChatbot,typing,header,Yes -gateway.modules.features.chatbot.interfaceFeatureChatbot,uuid,header,Yes -gateway.modules.features.chatbot.mainChatbot,asyncio,header,Yes -gateway.modules.features.chatbot.mainChatbot,base64,header,Yes -gateway.modules.features.chatbot.mainChatbot,json,header,Yes -gateway.modules.features.chatbot.mainChatbot,logging,header,Yes -gateway.modules.features.chatbot.mainChatbot,modules.connectors.connectorPreprocessor,header,Yes -gateway.modules.features.chatbot.mainChatbot,modules.datamodels.datamodelAi,header,Yes -gateway.modules.features.chatbot.mainChatbot,modules.datamodels.datamodelDocref,header,Yes -gateway.modules.features.chatbot.mainChatbot,modules.datamodels.datamodelUam,header,Yes -gateway.modules.features.chatbot.mainChatbot,modules.features.chatbot.chatbotConstants,header,Yes -gateway.modules.features.chatbot.mainChatbot,modules.features.chatbot.datamodelFeatureChatbot,header,Yes -gateway.modules.features.chatbot.mainChatbot,modules.features.chatbot.eventManager,header,Yes -gateway.modules.features.chatbot.mainChatbot,modules.interfaces.interfaceRbac,function _convert_file_ids_to_document_references,Yes -gateway.modules.features.chatbot.mainChatbot,modules.services,header,Yes -gateway.modules.features.chatbot.mainChatbot,modules.shared.timeUtils,header,Yes -gateway.modules.features.chatbot.mainChatbot,modules.workflows.methods.methodAi.methodAi,header,Yes -gateway.modules.features.chatbot.mainChatbot,re,header,Yes -gateway.modules.features.chatbot.mainChatbot,typing,header,Yes -gateway.modules.features.chatbot.mainChatbot,uuid,header,Yes -gateway.modules.features.chatbot.routeFeatureChatbot,(relative) .,header,Yes -gateway.modules.features.chatbot.routeFeatureChatbot,(relative) .,header,Yes -gateway.modules.features.chatbot.routeFeatureChatbot,(relative) .datamodelFeatureChatbot,header,Yes -gateway.modules.features.chatbot.routeFeatureChatbot,(relative) .eventManager,header,Yes -gateway.modules.features.chatbot.routeFeatureChatbot,asyncio,header,Yes -gateway.modules.features.chatbot.routeFeatureChatbot,fastapi,header,Yes -gateway.modules.features.chatbot.routeFeatureChatbot,fastapi.responses,header,Yes -gateway.modules.features.chatbot.routeFeatureChatbot,json,header,Yes -gateway.modules.features.chatbot.routeFeatureChatbot,logging,header,Yes -gateway.modules.features.chatbot.routeFeatureChatbot,math,header,Yes -gateway.modules.features.chatbot.routeFeatureChatbot,modules.auth,header,Yes -gateway.modules.features.chatbot.routeFeatureChatbot,modules.datamodels.datamodelPagination,header,Yes -gateway.modules.features.chatbot.routeFeatureChatbot,modules.interfaces.interfaceRbac,header,Yes -gateway.modules.features.chatbot.routeFeatureChatbot,modules.shared.timeUtils,header,Yes -gateway.modules.features.chatbot.routeFeatureChatbot,modules.workflows.automation,header,Yes -gateway.modules.features.chatbot.routeFeatureChatbot,typing,header,Yes -gateway.modules.features.featureRegistry,fastapi,header,Yes -gateway.modules.features.featureRegistry,glob,header,Yes -gateway.modules.features.featureRegistry,importlib,header,Yes -gateway.modules.features.featureRegistry,logging,header,Yes -gateway.modules.features.featureRegistry,os,header,Yes -gateway.modules.features.featureRegistry,typing,header,Yes -gateway.modules.features.neutralizer.datamodelFeatureNeutralizer,modules.shared.attributeUtils,header,Yes -gateway.modules.features.neutralizer.datamodelFeatureNeutralizer,pydantic,header,Yes -gateway.modules.features.neutralizer.datamodelFeatureNeutralizer,typing,header,Yes -gateway.modules.features.neutralizer.datamodelFeatureNeutralizer,uuid,header,Yes -gateway.modules.features.neutralizer.interfaceFeatureNeutralizer,logging,header,Yes -gateway.modules.features.neutralizer.interfaceFeatureNeutralizer,modules.features.neutralizer.datamodelFeatureNeutralizer,header,Yes -gateway.modules.features.neutralizer.interfaceFeatureNeutralizer,modules.interfaces.interfaceRbac,header,Yes -gateway.modules.features.neutralizer.interfaceFeatureNeutralizer,modules.shared.timeUtils,header,Yes -gateway.modules.features.neutralizer.interfaceFeatureNeutralizer,typing,header,Yes -gateway.modules.features.neutralizer.mainNeutralizePlayground,(relative) .datamodelFeatureNeutralizer,header,Yes -gateway.modules.features.neutralizer.mainNeutralizePlayground,asyncio,header,Yes -gateway.modules.features.neutralizer.mainNeutralizePlayground,logging,header,Yes -gateway.modules.features.neutralizer.mainNeutralizePlayground,modules.datamodels.datamodelUam,header,Yes -gateway.modules.features.neutralizer.mainNeutralizePlayground,modules.services,header,Yes -gateway.modules.features.neutralizer.mainNeutralizePlayground,modules.services.serviceSharepoint.mainServiceSharepoint,function processSharepointFiles,Yes -gateway.modules.features.neutralizer.mainNeutralizePlayground,typing,header,Yes -gateway.modules.features.neutralizer.mainNeutralizePlayground,urllib.parse,header,Yes -gateway.modules.features.neutralizer.mainNeutralizer,logging,header,Yes -gateway.modules.features.neutralizer.mainNeutralizer,typing,header,Yes -gateway.modules.features.neutralizer.routeFeatureNeutralizer,(relative) .datamodelFeatureNeutralizer,header,Yes -gateway.modules.features.neutralizer.routeFeatureNeutralizer,(relative) .mainNeutralizePlayground,header,Yes -gateway.modules.features.neutralizer.routeFeatureNeutralizer,fastapi,header,Yes -gateway.modules.features.neutralizer.routeFeatureNeutralizer,logging,header,Yes -gateway.modules.features.neutralizer.routeFeatureNeutralizer,modules.auth,header,Yes -gateway.modules.features.neutralizer.routeFeatureNeutralizer,typing,header,Yes -gateway.modules.features.neutralizer.serviceNeutralization.mainServiceNeutralization,(relative) .subPatterns,header,Yes -gateway.modules.features.neutralizer.serviceNeutralization.mainServiceNeutralization,(relative) .subProcessBinary,header,Yes -gateway.modules.features.neutralizer.serviceNeutralization.mainServiceNeutralization,(relative) .subProcessCommon,header,Yes -gateway.modules.features.neutralizer.serviceNeutralization.mainServiceNeutralization,(relative) .subProcessList,header,Yes -gateway.modules.features.neutralizer.serviceNeutralization.mainServiceNeutralization,(relative) .subProcessText,header,Yes -gateway.modules.features.neutralizer.serviceNeutralization.mainServiceNeutralization,json,header,Yes -gateway.modules.features.neutralizer.serviceNeutralization.mainServiceNeutralization,logging,header,Yes -gateway.modules.features.neutralizer.serviceNeutralization.mainServiceNeutralization,modules.features.neutralizer.datamodelFeatureNeutralizer,header,Yes -gateway.modules.features.neutralizer.serviceNeutralization.mainServiceNeutralization,modules.features.neutralizer.interfaceFeatureNeutralizer,header,Yes -gateway.modules.features.neutralizer.serviceNeutralization.mainServiceNeutralization,re,header,Yes -gateway.modules.features.neutralizer.serviceNeutralization.mainServiceNeutralization,typing,header,Yes -gateway.modules.features.neutralizer.serviceNeutralization.subParseString,(relative) .subPatterns,header,Yes -gateway.modules.features.neutralizer.serviceNeutralization.subParseString,re,header,Yes -gateway.modules.features.neutralizer.serviceNeutralization.subParseString,typing,header,Yes -gateway.modules.features.neutralizer.serviceNeutralization.subParseString,uuid,header,Yes -gateway.modules.features.neutralizer.serviceNeutralization.subPatterns,dataclasses,header,Yes -gateway.modules.features.neutralizer.serviceNeutralization.subPatterns,re,header,Yes -gateway.modules.features.neutralizer.serviceNeutralization.subPatterns,typing,header,Yes -gateway.modules.features.neutralizer.serviceNeutralization.subProcessBinary,base64,header,Yes -gateway.modules.features.neutralizer.serviceNeutralization.subProcessBinary,dataclasses,header,Yes -gateway.modules.features.neutralizer.serviceNeutralization.subProcessBinary,re,header,Yes -gateway.modules.features.neutralizer.serviceNeutralization.subProcessBinary,typing,header,Yes -gateway.modules.features.neutralizer.serviceNeutralization.subProcessCommon,dataclasses,header,Yes -gateway.modules.features.neutralizer.serviceNeutralization.subProcessCommon,pydantic,header,Yes -gateway.modules.features.neutralizer.serviceNeutralization.subProcessCommon,re,header,Yes -gateway.modules.features.neutralizer.serviceNeutralization.subProcessCommon,typing,header,Yes -gateway.modules.features.neutralizer.serviceNeutralization.subProcessList,(relative) .subParseString,header,Yes -gateway.modules.features.neutralizer.serviceNeutralization.subProcessList,(relative) .subPatterns,header,Yes -gateway.modules.features.neutralizer.serviceNeutralization.subProcessList,(relative) .subPatterns,function _anonymizeXmlElement,Yes -gateway.modules.features.neutralizer.serviceNeutralization.subProcessList,(relative) .subPatterns,function _anonymizeXmlElement,Yes -gateway.modules.features.neutralizer.serviceNeutralization.subProcessList,dataclasses,header,Yes -gateway.modules.features.neutralizer.serviceNeutralization.subProcessList,io,header,Yes -gateway.modules.features.neutralizer.serviceNeutralization.subProcessList,json,header,Yes -gateway.modules.features.neutralizer.serviceNeutralization.subProcessList,pandas,header,Yes -gateway.modules.features.neutralizer.serviceNeutralization.subProcessList,typing,header,Yes -gateway.modules.features.neutralizer.serviceNeutralization.subProcessList,uuid,function _anonymizeXmlElement,Yes -gateway.modules.features.neutralizer.serviceNeutralization.subProcessList,uuid,function _anonymizeTable,Yes -gateway.modules.features.neutralizer.serviceNeutralization.subProcessList,uuid,function _anonymizeXmlElement,Yes -gateway.modules.features.neutralizer.serviceNeutralization.subProcessList,uuid,function _anonymizeXmlElement,Yes -gateway.modules.features.neutralizer.serviceNeutralization.subProcessList,uuid,function _anonymizeXmlElement,Yes -gateway.modules.features.neutralizer.serviceNeutralization.subProcessList,xml.etree.ElementTree,header,Yes -gateway.modules.features.neutralizer.serviceNeutralization.subProcessText,(relative) .subParseString,header,Yes -gateway.modules.features.neutralizer.serviceNeutralization.subProcessText,dataclasses,header,Yes -gateway.modules.features.neutralizer.serviceNeutralization.subProcessText,typing,header,Yes -gateway.modules.features.realestate.datamodelFeatureRealEstate,enum,header,Yes -gateway.modules.features.realestate.datamodelFeatureRealEstate,modules.shared.attributeUtils,header,Yes -gateway.modules.features.realestate.datamodelFeatureRealEstate,modules.shared.timeUtils,header,Yes -gateway.modules.features.realestate.datamodelFeatureRealEstate,pydantic,header,Yes -gateway.modules.features.realestate.datamodelFeatureRealEstate,typing,header,Yes -gateway.modules.features.realestate.datamodelFeatureRealEstate,uuid,header,Yes -gateway.modules.features.realestate.interfaceFeatureRealEstate,(relative) .datamodelFeatureRealEstate,header,Yes -gateway.modules.features.realestate.interfaceFeatureRealEstate,logging,header,Yes -gateway.modules.features.realestate.interfaceFeatureRealEstate,modules.connectors.connectorDbPostgre,header,Yes -gateway.modules.features.realestate.interfaceFeatureRealEstate,modules.datamodels.datamodelRbac,header,Yes -gateway.modules.features.realestate.interfaceFeatureRealEstate,modules.datamodels.datamodelUam,header,Yes -gateway.modules.features.realestate.interfaceFeatureRealEstate,modules.datamodels.datamodelUam,header,Yes -gateway.modules.features.realestate.interfaceFeatureRealEstate,modules.interfaces.interfaceRbac,header,Yes -gateway.modules.features.realestate.interfaceFeatureRealEstate,modules.security.rbac,header,Yes -gateway.modules.features.realestate.interfaceFeatureRealEstate,modules.security.rootAccess,function setUserContext,Yes -gateway.modules.features.realestate.interfaceFeatureRealEstate,modules.shared.configuration,header,Yes -gateway.modules.features.realestate.interfaceFeatureRealEstate,re,function _isUUID,Yes -gateway.modules.features.realestate.interfaceFeatureRealEstate,time,function executeQuery,Yes -gateway.modules.features.realestate.interfaceFeatureRealEstate,typing,header,Yes -gateway.modules.features.realestate.mainRealEstate,(relative) .datamodelFeatureRealEstate,header,Yes -gateway.modules.features.realestate.mainRealEstate,(relative) .interfaceFeatureRealEstate,header,Yes -gateway.modules.features.realestate.mainRealEstate,fastapi,header,Yes -gateway.modules.features.realestate.mainRealEstate,json,header,Yes -gateway.modules.features.realestate.mainRealEstate,logging,header,Yes -gateway.modules.features.realestate.mainRealEstate,modules.connectors.connectorSwissTopoMapServer,header,Yes -gateway.modules.features.realestate.mainRealEstate,modules.datamodels.datamodelUam,header,Yes -gateway.modules.features.realestate.mainRealEstate,modules.features.realestate.datamodelFeatureRealEstate,function executeIntentBasedOperation,Yes -gateway.modules.features.realestate.mainRealEstate,modules.features.realestate.datamodelFeatureRealEstate,function executeIntentBasedOperation,Yes -gateway.modules.features.realestate.mainRealEstate,modules.features.realestate.datamodelFeatureRealEstate,function executeIntentBasedOperation,Yes -gateway.modules.features.realestate.mainRealEstate,modules.features.realestate.datamodelFeatureRealEstate,function executeIntentBasedOperation,Yes -gateway.modules.features.realestate.mainRealEstate,modules.features.realestate.datamodelFeatureRealEstate,function executeIntentBasedOperation,Yes -gateway.modules.features.realestate.mainRealEstate,modules.features.realestate.datamodelFeatureRealEstate,function executeIntentBasedOperation,Yes -gateway.modules.features.realestate.mainRealEstate,modules.features.realestate.datamodelFeatureRealEstate,function executeIntentBasedOperation,Yes -gateway.modules.features.realestate.mainRealEstate,modules.features.realestate.datamodelFeatureRealEstate,function executeIntentBasedOperation,Yes -gateway.modules.features.realestate.mainRealEstate,modules.features.realestate.datamodelFeatureRealEstate,function executeIntentBasedOperation,Yes -gateway.modules.features.realestate.mainRealEstate,modules.features.realestate.datamodelFeatureRealEstate,function executeIntentBasedOperation,Yes -gateway.modules.features.realestate.mainRealEstate,modules.features.realestate.datamodelFeatureRealEstate,function executeIntentBasedOperation,Yes -gateway.modules.features.realestate.mainRealEstate,modules.features.realestate.datamodelFeatureRealEstate,function executeIntentBasedOperation,Yes -gateway.modules.features.realestate.mainRealEstate,modules.features.realestate.datamodelFeatureRealEstate,function executeIntentBasedOperation,Yes -gateway.modules.features.realestate.mainRealEstate,modules.features.realestate.datamodelFeatureRealEstate,function executeIntentBasedOperation,Yes -gateway.modules.features.realestate.mainRealEstate,modules.features.realestate.datamodelFeatureRealEstate,function executeIntentBasedOperation,Yes -gateway.modules.features.realestate.mainRealEstate,modules.features.realestate.datamodelFeatureRealEstate,function executeIntentBasedOperation,Yes -gateway.modules.features.realestate.mainRealEstate,modules.features.realestate.datamodelFeatureRealEstate,function executeIntentBasedOperation,Yes -gateway.modules.features.realestate.mainRealEstate,modules.services,header,Yes -gateway.modules.features.realestate.mainRealEstate,re,function executeIntentBasedOperation,Yes -gateway.modules.features.realestate.mainRealEstate,shapely.geometry,header,Yes -gateway.modules.features.realestate.mainRealEstate,shapely.ops,header,Yes -gateway.modules.features.realestate.mainRealEstate,typing,header,Yes -gateway.modules.features.realestate.routeFeatureRealEstate,(relative) .datamodelFeatureRealEstate,header,Yes -gateway.modules.features.realestate.routeFeatureRealEstate,(relative) .interfaceFeatureRealEstate,header,Yes -gateway.modules.features.realestate.routeFeatureRealEstate,(relative) .mainRealEstate,header,Yes -gateway.modules.features.realestate.routeFeatureRealEstate,fastapi,header,Yes -gateway.modules.features.realestate.routeFeatureRealEstate,json,header,Yes -gateway.modules.features.realestate.routeFeatureRealEstate,logging,header,Yes -gateway.modules.features.realestate.routeFeatureRealEstate,modules.auth,header,Yes -gateway.modules.features.realestate.routeFeatureRealEstate,modules.connectors.connectorSwissTopoMapServer,header,Yes -gateway.modules.features.realestate.routeFeatureRealEstate,modules.datamodels.datamodelPagination,header,Yes -gateway.modules.features.realestate.routeFeatureRealEstate,modules.shared.attributeUtils,header,Yes -gateway.modules.features.realestate.routeFeatureRealEstate,requests,header,Yes -gateway.modules.features.realestate.routeFeatureRealEstate,typing,header,Yes -gateway.modules.features.trustee.datamodelFeatureTrustee,modules.shared.attributeUtils,header,Yes -gateway.modules.features.trustee.datamodelFeatureTrustee,pydantic,header,Yes -gateway.modules.features.trustee.datamodelFeatureTrustee,typing,header,Yes -gateway.modules.features.trustee.datamodelFeatureTrustee,uuid,header,Yes -gateway.modules.features.trustee.interfaceFeatureTrustee,(relative) .datamodelFeatureTrustee,header,Yes -gateway.modules.features.trustee.interfaceFeatureTrustee,logging,header,Yes -gateway.modules.features.trustee.interfaceFeatureTrustee,math,header,Yes -gateway.modules.features.trustee.interfaceFeatureTrustee,modules.connectors.connectorDbPostgre,header,Yes -gateway.modules.features.trustee.interfaceFeatureTrustee,modules.datamodels.datamodelPagination,header,Yes -gateway.modules.features.trustee.interfaceFeatureTrustee,modules.datamodels.datamodelRbac,header,Yes -gateway.modules.features.trustee.interfaceFeatureTrustee,modules.datamodels.datamodelUam,header,Yes -gateway.modules.features.trustee.interfaceFeatureTrustee,modules.interfaces.interfaceRbac,header,Yes -gateway.modules.features.trustee.interfaceFeatureTrustee,modules.security.rbac,header,Yes -gateway.modules.features.trustee.interfaceFeatureTrustee,modules.security.rootAccess,function setUserContext,Yes -gateway.modules.features.trustee.interfaceFeatureTrustee,modules.shared.configuration,header,Yes -gateway.modules.features.trustee.interfaceFeatureTrustee,re,function createOrganisation,Yes -gateway.modules.features.trustee.interfaceFeatureTrustee,typing,header,Yes -gateway.modules.features.trustee.interfaceFeatureTrustee,uuid,header,Yes -gateway.modules.features.trustee.interfaceFeatureTrustee,uuid,function createAccess,Yes -gateway.modules.features.trustee.interfaceFeatureTrustee,uuid,function createContract,Yes -gateway.modules.features.trustee.interfaceFeatureTrustee,uuid,function createDocument,Yes -gateway.modules.features.trustee.interfaceFeatureTrustee,uuid,function createPosition,Yes -gateway.modules.features.trustee.interfaceFeatureTrustee,uuid,function createPositionDocument,Yes -gateway.modules.features.trustee.mainTrustee,logging,header,Yes -gateway.modules.features.trustee.mainTrustee,typing,header,Yes -gateway.modules.features.trustee.routeFeatureTrustee,(relative) .datamodelFeatureTrustee,header,Yes -gateway.modules.features.trustee.routeFeatureTrustee,(relative) .interfaceFeatureTrustee,header,Yes -gateway.modules.features.trustee.routeFeatureTrustee,fastapi,header,Yes -gateway.modules.features.trustee.routeFeatureTrustee,fastapi,header,Yes -gateway.modules.features.trustee.routeFeatureTrustee,fastapi.responses,header,Yes -gateway.modules.features.trustee.routeFeatureTrustee,io,header,Yes -gateway.modules.features.trustee.routeFeatureTrustee,json,header,Yes -gateway.modules.features.trustee.routeFeatureTrustee,logging,header,Yes -gateway.modules.features.trustee.routeFeatureTrustee,modules.auth,header,Yes -gateway.modules.features.trustee.routeFeatureTrustee,modules.datamodels.datamodelPagination,header,Yes -gateway.modules.features.trustee.routeFeatureTrustee,modules.interfaces.interfaceDbApp,header,Yes -gateway.modules.features.trustee.routeFeatureTrustee,modules.interfaces.interfaceFeatures,header,Yes -gateway.modules.features.trustee.routeFeatureTrustee,typing,header,Yes -gateway.modules.interfaces.interfaceAiObjects,asyncio,header,Yes -gateway.modules.interfaces.interfaceAiObjects,base64,header,Yes -gateway.modules.interfaces.interfaceAiObjects,dataclasses,header,Yes -gateway.modules.interfaces.interfaceAiObjects,logging,header,Yes -gateway.modules.interfaces.interfaceAiObjects,modules.aicore.aicoreModelRegistry,header,Yes -gateway.modules.interfaces.interfaceAiObjects,modules.aicore.aicoreModelSelector,header,Yes -gateway.modules.interfaces.interfaceAiObjects,modules.datamodels.datamodelAi,header,Yes -gateway.modules.interfaces.interfaceAiObjects,modules.datamodels.datamodelExtraction,header,Yes -gateway.modules.interfaces.interfaceAiObjects,time,header,Yes -gateway.modules.interfaces.interfaceAiObjects,typing,header,Yes -gateway.modules.interfaces.interfaceAiObjects,uuid,header,Yes -gateway.modules.interfaces.interfaceBootstrap,logging,header,Yes -gateway.modules.interfaces.interfaceBootstrap,modules.connectors.connectorDbPostgre,header,Yes -gateway.modules.interfaces.interfaceBootstrap,modules.datamodels.datamodelMembership,header,Yes -gateway.modules.interfaces.interfaceBootstrap,modules.datamodels.datamodelRbac,header,Yes -gateway.modules.interfaces.interfaceBootstrap,modules.datamodels.datamodelUam,header,Yes -gateway.modules.interfaces.interfaceBootstrap,modules.datamodels.datamodelUam,header,Yes -gateway.modules.interfaces.interfaceBootstrap,modules.shared.configuration,header,Yes -gateway.modules.interfaces.interfaceBootstrap,modules.shared.dbMultiTenantOptimizations,function _applyDatabaseOptimizations,Yes -gateway.modules.interfaces.interfaceBootstrap,passlib.context,header,Yes -gateway.modules.interfaces.interfaceBootstrap,typing,header,Yes -gateway.modules.interfaces.interfaceDbApp,logging,header,Yes -gateway.modules.interfaces.interfaceDbApp,math,header,Yes -gateway.modules.interfaces.interfaceDbApp,modules.connectors.connectorDbPostgre,header,Yes -gateway.modules.interfaces.interfaceDbApp,modules.datamodels.datamodelFeatures,header,Yes -gateway.modules.interfaces.interfaceDbApp,modules.datamodels.datamodelInvitation,header,Yes -gateway.modules.interfaces.interfaceDbApp,modules.datamodels.datamodelMembership,header,Yes -gateway.modules.interfaces.interfaceDbApp,modules.datamodels.datamodelPagination,header,Yes -gateway.modules.interfaces.interfaceDbApp,modules.datamodels.datamodelRbac,header,Yes -gateway.modules.interfaces.interfaceDbApp,modules.datamodels.datamodelSecurity,header,Yes -gateway.modules.interfaces.interfaceDbApp,modules.datamodels.datamodelUam,header,Yes -gateway.modules.interfaces.interfaceDbApp,modules.datamodels.datamodelUam,header,Yes -gateway.modules.interfaces.interfaceDbApp,modules.interfaces.interfaceBootstrap,header,Yes -gateway.modules.interfaces.interfaceDbApp,modules.interfaces.interfaceRbac,header,Yes -gateway.modules.interfaces.interfaceDbApp,modules.security.rbac,header,Yes -gateway.modules.interfaces.interfaceDbApp,modules.security.rootAccess,function getRootInterface,Yes -gateway.modules.interfaces.interfaceDbApp,modules.shared.configuration,header,Yes -gateway.modules.interfaces.interfaceDbApp,modules.shared.timeUtils,header,Yes -gateway.modules.interfaces.interfaceDbApp,passlib.context,header,Yes -gateway.modules.interfaces.interfaceDbApp,typing,header,Yes -gateway.modules.interfaces.interfaceDbApp,uuid,header,Yes -gateway.modules.interfaces.interfaceDbChat,asyncio,header,Yes -gateway.modules.interfaces.interfaceDbChat,datetime,function storeDebugMessageAndDocuments,Yes -gateway.modules.interfaces.interfaceDbChat,json,header,Yes -gateway.modules.interfaces.interfaceDbChat,logging,header,Yes -gateway.modules.interfaces.interfaceDbChat,math,header,Yes -gateway.modules.interfaces.interfaceDbChat,modules.connectors.connectorDbPostgre,header,Yes -gateway.modules.interfaces.interfaceDbChat,modules.datamodels.datamodelChat,header,Yes -gateway.modules.interfaces.interfaceDbChat,modules.datamodels.datamodelPagination,header,Yes -gateway.modules.interfaces.interfaceDbChat,modules.datamodels.datamodelRbac,header,Yes -gateway.modules.interfaces.interfaceDbChat,modules.datamodels.datamodelUam,header,Yes -gateway.modules.interfaces.interfaceDbChat,modules.datamodels.datamodelUam,header,Yes -gateway.modules.interfaces.interfaceDbChat,modules.features.automation.datamodelFeatureAutomation,header,Yes -gateway.modules.interfaces.interfaceDbChat,modules.interfaces.interfaceDbApp,function _enrichAutomationsWithUserAndMandate,Yes -gateway.modules.interfaces.interfaceDbChat,modules.interfaces.interfaceDbManagement,function storeDebugMessageAndDocuments,Yes -gateway.modules.interfaces.interfaceDbChat,modules.interfaces.interfaceRbac,header,Yes -gateway.modules.interfaces.interfaceDbChat,modules.security.rbac,header,Yes -gateway.modules.interfaces.interfaceDbChat,modules.security.rootAccess,function setUserContext,Yes -gateway.modules.interfaces.interfaceDbChat,modules.shared.callbackRegistry,function _notifyAutomationChanged,Yes -gateway.modules.interfaces.interfaceDbChat,modules.shared.configuration,header,Yes -gateway.modules.interfaces.interfaceDbChat,modules.shared.debugLogger,function storeDebugMessageAndDocuments,Yes -gateway.modules.interfaces.interfaceDbChat,modules.shared.timeUtils,header,Yes -gateway.modules.interfaces.interfaceDbChat,os,function storeDebugMessageAndDocuments,Yes -gateway.modules.interfaces.interfaceDbChat,typing,header,Yes -gateway.modules.interfaces.interfaceDbChat,uuid,header,Yes -gateway.modules.interfaces.interfaceDbManagement,base64,header,Yes -gateway.modules.interfaces.interfaceDbManagement,hashlib,header,Yes -gateway.modules.interfaces.interfaceDbManagement,logging,header,Yes -gateway.modules.interfaces.interfaceDbManagement,math,header,Yes -gateway.modules.interfaces.interfaceDbManagement,modules.connectors.connectorDbPostgre,header,Yes -gateway.modules.interfaces.interfaceDbManagement,modules.datamodels.datamodelFiles,header,Yes -gateway.modules.interfaces.interfaceDbManagement,modules.datamodels.datamodelMessaging,header,Yes -gateway.modules.interfaces.interfaceDbManagement,modules.datamodels.datamodelPagination,header,Yes -gateway.modules.interfaces.interfaceDbManagement,modules.datamodels.datamodelRbac,header,Yes -gateway.modules.interfaces.interfaceDbManagement,modules.datamodels.datamodelUam,header,Yes -gateway.modules.interfaces.interfaceDbManagement,modules.datamodels.datamodelUam,header,Yes -gateway.modules.interfaces.interfaceDbManagement,modules.datamodels.datamodelUtils,header,Yes -gateway.modules.interfaces.interfaceDbManagement,modules.datamodels.datamodelVoice,header,Yes -gateway.modules.interfaces.interfaceDbManagement,modules.interfaces.interfaceDbApp,function _initializeStandardPrompts,Yes -gateway.modules.interfaces.interfaceDbManagement,modules.interfaces.interfaceRbac,header,Yes -gateway.modules.interfaces.interfaceDbManagement,modules.security.rbac,header,Yes -gateway.modules.interfaces.interfaceDbManagement,modules.security.rootAccess,function setUserContext,Yes -gateway.modules.interfaces.interfaceDbManagement,modules.security.rootAccess,function _initializeStandardPrompts,Yes -gateway.modules.interfaces.interfaceDbManagement,modules.shared.configuration,header,Yes -gateway.modules.interfaces.interfaceDbManagement,modules.shared.timeUtils,header,Yes -gateway.modules.interfaces.interfaceDbManagement,os,header,Yes -gateway.modules.interfaces.interfaceDbManagement,re,function _parse_size_string,Yes -gateway.modules.interfaces.interfaceDbManagement,typing,header,Yes -gateway.modules.interfaces.interfaceFeatures,logging,header,Yes -gateway.modules.interfaces.interfaceFeatures,modules.connectors.connectorDbPostgre,header,Yes -gateway.modules.interfaces.interfaceFeatures,modules.datamodels.datamodelFeatures,header,Yes -gateway.modules.interfaces.interfaceFeatures,modules.datamodels.datamodelMembership,function syncRolesFromTemplate,Yes -gateway.modules.interfaces.interfaceFeatures,modules.datamodels.datamodelRbac,header,Yes -gateway.modules.interfaces.interfaceFeatures,typing,header,Yes -gateway.modules.interfaces.interfaceFeatures,uuid,header,Yes -gateway.modules.interfaces.interfaceMessaging,logging,header,Yes -gateway.modules.interfaces.interfaceMessaging,modules.connectors.connectorMessagingEmail,header,Yes -gateway.modules.interfaces.interfaceMessaging,modules.connectors.connectorMessagingSms,header,Yes -gateway.modules.interfaces.interfaceMessaging,modules.datamodels.datamodelMessaging,header,Yes -gateway.modules.interfaces.interfaceMessaging,typing,header,Yes -gateway.modules.interfaces.interfaceRbac,json,header,Yes -gateway.modules.interfaces.interfaceRbac,logging,header,Yes -gateway.modules.interfaces.interfaceRbac,modules.connectors.connectorDbPostgre,function getRecordsetWithRBAC,Yes -gateway.modules.interfaces.interfaceRbac,modules.datamodels.datamodelRbac,header,Yes -gateway.modules.interfaces.interfaceRbac,modules.datamodels.datamodelUam,header,Yes -gateway.modules.interfaces.interfaceRbac,modules.security.rbac,header,Yes -gateway.modules.interfaces.interfaceRbac,modules.security.rootAccess,header,Yes -gateway.modules.interfaces.interfaceRbac,pydantic,header,Yes -gateway.modules.interfaces.interfaceRbac,typing,header,Yes -gateway.modules.interfaces.interfaceTicketObjects,datetime,header,Yes -gateway.modules.interfaces.interfaceTicketObjects,modules.connectors.connectorTicketsClickup,function createTicketInterfaceByType,Yes -gateway.modules.interfaces.interfaceTicketObjects,modules.connectors.connectorTicketsJira,function createTicketInterfaceByType,Yes -gateway.modules.interfaces.interfaceTicketObjects,typing,header,Yes -gateway.modules.interfaces.interfaceVoiceObjects,logging,header,Yes -gateway.modules.interfaces.interfaceVoiceObjects,modules.connectors.connectorVoiceGoogle,header,Yes -gateway.modules.interfaces.interfaceVoiceObjects,modules.datamodels.datamodelUam,header,Yes -gateway.modules.interfaces.interfaceVoiceObjects,modules.datamodels.datamodelVoice,header,Yes -gateway.modules.interfaces.interfaceVoiceObjects,modules.shared.timeUtils,header,Yes -gateway.modules.interfaces.interfaceVoiceObjects,typing,header,Yes -gateway.modules.routes.routeAdmin,fastapi,header,Yes -gateway.modules.routes.routeAdmin,fastapi,header,Yes -gateway.modules.routes.routeAdmin,fastapi.responses,header,Yes -gateway.modules.routes.routeAdmin,fastapi.staticfiles,header,Yes -gateway.modules.routes.routeAdmin,logging,header,Yes -gateway.modules.routes.routeAdmin,modules.auth,header,Yes -gateway.modules.routes.routeAdmin,modules.datamodels.datamodelUam,header,Yes -gateway.modules.routes.routeAdmin,modules.interfaces.interfaceDbApp,header,Yes -gateway.modules.routes.routeAdmin,modules.shared.configuration,header,Yes -gateway.modules.routes.routeAdmin,os,header,Yes -gateway.modules.routes.routeAdmin,pathlib,header,Yes -gateway.modules.routes.routeAdmin,typing,header,Yes -gateway.modules.routes.routeAdminAutomationEvents,fastapi,header,Yes -gateway.modules.routes.routeAdminAutomationEvents,fastapi,header,Yes -gateway.modules.routes.routeAdminAutomationEvents,logging,header,Yes -gateway.modules.routes.routeAdminAutomationEvents,modules.auth,header,Yes -gateway.modules.routes.routeAdminAutomationEvents,modules.datamodels.datamodelUam,header,Yes -gateway.modules.routes.routeAdminAutomationEvents,modules.interfaces.interfaceDbApp,function sync_all_automation_events,Yes -gateway.modules.routes.routeAdminAutomationEvents,modules.interfaces.interfaceDbChat,header,Yes -gateway.modules.routes.routeAdminAutomationEvents,modules.services,function sync_all_automation_events,Yes -gateway.modules.routes.routeAdminAutomationEvents,modules.shared.eventManagement,function get_all_automation_events,Yes -gateway.modules.routes.routeAdminAutomationEvents,modules.shared.eventManagement,function remove_event,Yes -gateway.modules.routes.routeAdminAutomationEvents,modules.workflows.automation,function sync_all_automation_events,Yes -gateway.modules.routes.routeAdminAutomationEvents,typing,header,Yes -gateway.modules.routes.routeAdminFeatures,fastapi,header,Yes -gateway.modules.routes.routeAdminFeatures,fastapi,header,Yes -gateway.modules.routes.routeAdminFeatures,logging,header,Yes -gateway.modules.routes.routeAdminFeatures,modules.auth,header,Yes -gateway.modules.routes.routeAdminFeatures,modules.datamodels.datamodelFeatures,header,Yes -gateway.modules.routes.routeAdminFeatures,modules.datamodels.datamodelMembership,function _getUserRoleInInstance,Yes -gateway.modules.routes.routeAdminFeatures,modules.datamodels.datamodelMembership,function _getInstancePermissions,Yes -gateway.modules.routes.routeAdminFeatures,modules.datamodels.datamodelMembership,function listFeatureInstanceUsers,Yes -gateway.modules.routes.routeAdminFeatures,modules.datamodels.datamodelMembership,function addUserToFeatureInstance,Yes -gateway.modules.routes.routeAdminFeatures,modules.datamodels.datamodelMembership,function removeUserFromFeatureInstance,Yes -gateway.modules.routes.routeAdminFeatures,modules.datamodels.datamodelMembership,function updateFeatureInstanceUserRoles,Yes -gateway.modules.routes.routeAdminFeatures,modules.datamodels.datamodelRbac,function _getUserRoleInInstance,Yes -gateway.modules.routes.routeAdminFeatures,modules.datamodels.datamodelRbac,function _getInstancePermissions,Yes -gateway.modules.routes.routeAdminFeatures,modules.datamodels.datamodelRbac,function listFeatureInstanceUsers,Yes -gateway.modules.routes.routeAdminFeatures,modules.datamodels.datamodelRbac,function getFeatureInstanceAvailableRoles,Yes -gateway.modules.routes.routeAdminFeatures,modules.datamodels.datamodelRbac,function _hasMandateAdminRole,Yes -gateway.modules.routes.routeAdminFeatures,modules.datamodels.datamodelUam,header,Yes -gateway.modules.routes.routeAdminFeatures,modules.interfaces.interfaceDbApp,header,Yes -gateway.modules.routes.routeAdminFeatures,modules.interfaces.interfaceFeatures,header,Yes -gateway.modules.routes.routeAdminFeatures,pydantic,header,Yes -gateway.modules.routes.routeAdminFeatures,typing,header,Yes -gateway.modules.routes.routeAdminRbacExport,fastapi,header,Yes -gateway.modules.routes.routeAdminRbacExport,fastapi,header,Yes -gateway.modules.routes.routeAdminRbacExport,fastapi.responses,header,Yes -gateway.modules.routes.routeAdminRbacExport,json,header,Yes -gateway.modules.routes.routeAdminRbacExport,logging,header,Yes -gateway.modules.routes.routeAdminRbacExport,modules.auth,header,Yes -gateway.modules.routes.routeAdminRbacExport,modules.datamodels.datamodelRbac,header,Yes -gateway.modules.routes.routeAdminRbacExport,modules.datamodels.datamodelUam,header,Yes -gateway.modules.routes.routeAdminRbacExport,modules.interfaces.interfaceDbApp,header,Yes -gateway.modules.routes.routeAdminRbacExport,modules.shared.timeUtils,header,Yes -gateway.modules.routes.routeAdminRbacExport,pydantic,header,Yes -gateway.modules.routes.routeAdminRbacExport,typing,header,Yes -gateway.modules.routes.routeAdminRbacRoles,fastapi,header,Yes -gateway.modules.routes.routeAdminRbacRoles,logging,header,Yes -gateway.modules.routes.routeAdminRbacRoles,modules.auth,header,Yes -gateway.modules.routes.routeAdminRbacRoles,modules.datamodels.datamodelMembership,header,Yes -gateway.modules.routes.routeAdminRbacRoles,modules.datamodels.datamodelRbac,header,Yes -gateway.modules.routes.routeAdminRbacRoles,modules.datamodels.datamodelUam,header,Yes -gateway.modules.routes.routeAdminRbacRoles,modules.interfaces.interfaceDbApp,header,Yes -gateway.modules.routes.routeAdminRbacRoles,typing,header,Yes -gateway.modules.routes.routeAdminRbacRules,fastapi,header,Yes -gateway.modules.routes.routeAdminRbacRules,json,header,Yes -gateway.modules.routes.routeAdminRbacRules,logging,header,Yes -gateway.modules.routes.routeAdminRbacRules,math,header,Yes -gateway.modules.routes.routeAdminRbacRules,modules.auth,header,Yes -gateway.modules.routes.routeAdminRbacRules,modules.datamodels.datamodelPagination,header,Yes -gateway.modules.routes.routeAdminRbacRules,modules.datamodels.datamodelRbac,header,Yes -gateway.modules.routes.routeAdminRbacRules,modules.datamodels.datamodelUam,header,Yes -gateway.modules.routes.routeAdminRbacRules,modules.interfaces.interfaceDbApp,header,Yes -gateway.modules.routes.routeAdminRbacRules,typing,header,Yes -gateway.modules.routes.routeAttributes,fastapi,header,Yes -gateway.modules.routes.routeAttributes,fastapi,header,Yes -gateway.modules.routes.routeAttributes,logging,header,Yes -gateway.modules.routes.routeAttributes,modules.auth,header,Yes -gateway.modules.routes.routeAttributes,modules.shared.attributeUtils,header,Yes -gateway.modules.routes.routeChat,(relative) .,header,Yes -gateway.modules.routes.routeChat,fastapi,header,Yes -gateway.modules.routes.routeChat,logging,header,Yes -gateway.modules.routes.routeChat,modules.auth,header,Yes -gateway.modules.routes.routeChat,modules.datamodels.datamodelChat,header,Yes -gateway.modules.routes.routeChat,modules.workflows.automation,header,Yes -gateway.modules.routes.routeChat,typing,header,Yes -gateway.modules.routes.routeDataConnections,fastapi,header,Yes -gateway.modules.routes.routeDataConnections,fastapi,header,Yes -gateway.modules.routes.routeDataConnections,json,header,Yes -gateway.modules.routes.routeDataConnections,logging,header,Yes -gateway.modules.routes.routeDataConnections,math,header,Yes -gateway.modules.routes.routeDataConnections,modules.auth,header,Yes -gateway.modules.routes.routeDataConnections,modules.datamodels.datamodelPagination,header,Yes -gateway.modules.routes.routeDataConnections,modules.datamodels.datamodelSecurity,header,Yes -gateway.modules.routes.routeDataConnections,modules.datamodels.datamodelUam,header,Yes -gateway.modules.routes.routeDataConnections,modules.interfaces.interfaceDbApp,header,Yes -gateway.modules.routes.routeDataConnections,modules.interfaces.interfaceDbManagement,header,Yes -gateway.modules.routes.routeDataConnections,modules.shared.timeUtils,header,Yes -gateway.modules.routes.routeDataConnections,typing,header,Yes -gateway.modules.routes.routeDataFiles,fastapi,header,Yes -gateway.modules.routes.routeDataFiles,fastapi.responses,header,Yes -gateway.modules.routes.routeDataFiles,json,header,Yes -gateway.modules.routes.routeDataFiles,logging,header,Yes -gateway.modules.routes.routeDataFiles,modules.auth,header,Yes -gateway.modules.routes.routeDataFiles,modules.datamodels.datamodelFiles,header,Yes -gateway.modules.routes.routeDataFiles,modules.datamodels.datamodelPagination,header,Yes -gateway.modules.routes.routeDataFiles,modules.datamodels.datamodelUam,header,Yes -gateway.modules.routes.routeDataFiles,modules.interfaces.interfaceDbManagement,header,Yes -gateway.modules.routes.routeDataFiles,modules.shared.attributeUtils,header,Yes -gateway.modules.routes.routeDataFiles,typing,header,Yes -gateway.modules.routes.routeDataFiles,urllib.parse,function download_file,Yes -gateway.modules.routes.routeDataMandates,fastapi,header,Yes -gateway.modules.routes.routeDataMandates,fastapi,header,Yes -gateway.modules.routes.routeDataMandates,json,header,Yes -gateway.modules.routes.routeDataMandates,logging,header,Yes -gateway.modules.routes.routeDataMandates,modules.auth,header,Yes -gateway.modules.routes.routeDataMandates,modules.datamodels.datamodelMembership,header,Yes -gateway.modules.routes.routeDataMandates,modules.datamodels.datamodelPagination,header,Yes -gateway.modules.routes.routeDataMandates,modules.datamodels.datamodelRbac,header,Yes -gateway.modules.routes.routeDataMandates,modules.datamodels.datamodelUam,header,Yes -gateway.modules.routes.routeDataMandates,modules.interfaces.interfaceDbApp,header,Yes -gateway.modules.routes.routeDataMandates,modules.shared.attributeUtils,header,Yes -gateway.modules.routes.routeDataMandates,modules.shared.auditLogger,header,Yes -gateway.modules.routes.routeDataMandates,pydantic,header,Yes -gateway.modules.routes.routeDataMandates,typing,header,Yes -gateway.modules.routes.routeDataPrompts,fastapi,header,Yes -gateway.modules.routes.routeDataPrompts,fastapi,header,Yes -gateway.modules.routes.routeDataPrompts,json,header,Yes -gateway.modules.routes.routeDataPrompts,logging,header,Yes -gateway.modules.routes.routeDataPrompts,modules.auth,header,Yes -gateway.modules.routes.routeDataPrompts,modules.datamodels.datamodelPagination,header,Yes -gateway.modules.routes.routeDataPrompts,modules.datamodels.datamodelUam,header,Yes -gateway.modules.routes.routeDataPrompts,modules.datamodels.datamodelUtils,header,Yes -gateway.modules.routes.routeDataPrompts,modules.interfaces.interfaceDbManagement,header,Yes -gateway.modules.routes.routeDataPrompts,typing,header,Yes -gateway.modules.routes.routeDataUsers,fastapi,header,Yes -gateway.modules.routes.routeDataUsers,fastapi,header,Yes -gateway.modules.routes.routeDataUsers,json,header,Yes -gateway.modules.routes.routeDataUsers,logging,header,Yes -gateway.modules.routes.routeDataUsers,math,function get_users,Yes -gateway.modules.routes.routeDataUsers,modules.auth,header,Yes -gateway.modules.routes.routeDataUsers,modules.datamodels.datamodelMembership,function delete_user,Yes -gateway.modules.routes.routeDataUsers,modules.datamodels.datamodelMembership,function update_user,Yes -gateway.modules.routes.routeDataUsers,modules.datamodels.datamodelMembership,function delete_user,Yes -gateway.modules.routes.routeDataUsers,modules.datamodels.datamodelMembership,function get_user,Yes -gateway.modules.routes.routeDataUsers,modules.datamodels.datamodelMembership,function reset_user_password,Yes -gateway.modules.routes.routeDataUsers,modules.datamodels.datamodelMembership,function sendPasswordLink,Yes -gateway.modules.routes.routeDataUsers,modules.datamodels.datamodelPagination,header,Yes -gateway.modules.routes.routeDataUsers,modules.datamodels.datamodelUam,header,Yes -gateway.modules.routes.routeDataUsers,modules.interfaces.interfaceDbApp,header,Yes -gateway.modules.routes.routeDataUsers,modules.services,function sendPasswordLink,Yes -gateway.modules.routes.routeDataUsers,modules.shared.auditLogger,function reset_user_password,Yes -gateway.modules.routes.routeDataUsers,modules.shared.auditLogger,function change_password,Yes -gateway.modules.routes.routeDataUsers,modules.shared.auditLogger,function sendPasswordLink,Yes -gateway.modules.routes.routeDataUsers,modules.shared.configuration,function sendPasswordLink,Yes -gateway.modules.routes.routeDataUsers,pydantic,header,Yes -gateway.modules.routes.routeDataUsers,typing,header,Yes -gateway.modules.routes.routeDataWorkflows,fastapi,header,Yes -gateway.modules.routes.routeDataWorkflows,json,header,Yes -gateway.modules.routes.routeDataWorkflows,logging,header,Yes -gateway.modules.routes.routeDataWorkflows,modules.auth,header,Yes -gateway.modules.routes.routeDataWorkflows,modules.datamodels.datamodelChat,header,Yes -gateway.modules.routes.routeDataWorkflows,modules.datamodels.datamodelPagination,header,Yes -gateway.modules.routes.routeDataWorkflows,modules.datamodels.datamodelUam,header,Yes -gateway.modules.routes.routeDataWorkflows,modules.interfaces.interfaceDbChat,header,Yes -gateway.modules.routes.routeDataWorkflows,modules.interfaces.interfaceDbChat,header,Yes -gateway.modules.routes.routeDataWorkflows,modules.interfaces.interfaceRbac,header,Yes -gateway.modules.routes.routeDataWorkflows,modules.services,function get_all_actions,Yes -gateway.modules.routes.routeDataWorkflows,modules.services,function get_method_actions,Yes -gateway.modules.routes.routeDataWorkflows,modules.services,function get_action_schema,Yes -gateway.modules.routes.routeDataWorkflows,modules.shared.attributeUtils,header,Yes -gateway.modules.routes.routeDataWorkflows,modules.workflows.processing.shared.methodDiscovery,function get_all_actions,Yes -gateway.modules.routes.routeDataWorkflows,modules.workflows.processing.shared.methodDiscovery,function get_all_actions,Yes -gateway.modules.routes.routeDataWorkflows,modules.workflows.processing.shared.methodDiscovery,function get_method_actions,Yes -gateway.modules.routes.routeDataWorkflows,modules.workflows.processing.shared.methodDiscovery,function get_method_actions,Yes -gateway.modules.routes.routeDataWorkflows,modules.workflows.processing.shared.methodDiscovery,function get_action_schema,Yes -gateway.modules.routes.routeDataWorkflows,modules.workflows.processing.shared.methodDiscovery,function get_action_schema,Yes -gateway.modules.routes.routeDataWorkflows,typing,header,Yes -gateway.modules.routes.routeGdpr,datetime,function _timestampToIso,Yes -gateway.modules.routes.routeGdpr,fastapi,header,Yes -gateway.modules.routes.routeGdpr,fastapi,header,Yes -gateway.modules.routes.routeGdpr,fastapi.responses,header,Yes -gateway.modules.routes.routeGdpr,json,header,Yes -gateway.modules.routes.routeGdpr,logging,header,Yes -gateway.modules.routes.routeGdpr,modules.auth,header,Yes -gateway.modules.routes.routeGdpr,modules.datamodels.datamodelFeatures,function exportUserData,Yes -gateway.modules.routes.routeGdpr,modules.datamodels.datamodelInvitation,function exportUserData,Yes -gateway.modules.routes.routeGdpr,modules.datamodels.datamodelInvitation,function deleteAccount,Yes -gateway.modules.routes.routeGdpr,modules.datamodels.datamodelMembership,function exportUserData,Yes -gateway.modules.routes.routeGdpr,modules.datamodels.datamodelMembership,function exportUserData,Yes -gateway.modules.routes.routeGdpr,modules.datamodels.datamodelMembership,function exportPortableData,Yes -gateway.modules.routes.routeGdpr,modules.datamodels.datamodelMembership,function deleteAccount,Yes -gateway.modules.routes.routeGdpr,modules.datamodels.datamodelMembership,function deleteAccount,Yes -gateway.modules.routes.routeGdpr,modules.datamodels.datamodelSecurity,function deleteAccount,Yes -gateway.modules.routes.routeGdpr,modules.datamodels.datamodelUam,header,Yes -gateway.modules.routes.routeGdpr,modules.interfaces.interfaceDbApp,header,Yes -gateway.modules.routes.routeGdpr,modules.shared.auditLogger,header,Yes -gateway.modules.routes.routeGdpr,modules.shared.timeUtils,header,Yes -gateway.modules.routes.routeGdpr,pydantic,header,Yes -gateway.modules.routes.routeGdpr,typing,header,Yes -gateway.modules.routes.routeInvitations,fastapi,header,Yes -gateway.modules.routes.routeInvitations,fastapi,header,Yes -gateway.modules.routes.routeInvitations,logging,header,Yes -gateway.modules.routes.routeInvitations,modules.auth,header,Yes -gateway.modules.routes.routeInvitations,modules.datamodels.datamodelFeatures,function createInvitation,Yes -gateway.modules.routes.routeInvitations,modules.datamodels.datamodelInvitation,header,Yes -gateway.modules.routes.routeInvitations,modules.datamodels.datamodelRbac,function _hasMandateAdminRole,Yes -gateway.modules.routes.routeInvitations,modules.datamodels.datamodelRbac,function _isInstanceRole,Yes -gateway.modules.routes.routeInvitations,modules.datamodels.datamodelRbac,function createInvitation,Yes -gateway.modules.routes.routeInvitations,modules.datamodels.datamodelUam,header,Yes -gateway.modules.routes.routeInvitations,modules.interfaces.interfaceDbApp,header,Yes -gateway.modules.routes.routeInvitations,modules.security.passwordUtils,function registerAndAcceptInvitation,Yes -gateway.modules.routes.routeInvitations,modules.shared.configuration,function createInvitation,Yes -gateway.modules.routes.routeInvitations,modules.shared.configuration,function listInvitations,Yes -gateway.modules.routes.routeInvitations,modules.shared.timeUtils,header,Yes -gateway.modules.routes.routeInvitations,pydantic,header,Yes -gateway.modules.routes.routeInvitations,typing,header,Yes -gateway.modules.routes.routeMessaging,fastapi,header,Yes -gateway.modules.routes.routeMessaging,fastapi,header,Yes -gateway.modules.routes.routeMessaging,json,header,Yes -gateway.modules.routes.routeMessaging,logging,header,Yes -gateway.modules.routes.routeMessaging,modules.auth,header,Yes -gateway.modules.routes.routeMessaging,modules.datamodels.datamodelMessaging,header,Yes -gateway.modules.routes.routeMessaging,modules.datamodels.datamodelPagination,header,Yes -gateway.modules.routes.routeMessaging,modules.datamodels.datamodelRbac,header,Yes -gateway.modules.routes.routeMessaging,modules.datamodels.datamodelUam,header,Yes -gateway.modules.routes.routeMessaging,modules.interfaces.interfaceDbApp,function _hasTriggerPermission,Yes -gateway.modules.routes.routeMessaging,modules.interfaces.interfaceDbManagement,header,Yes -gateway.modules.routes.routeMessaging,modules.services,function triggerSubscription,Yes -gateway.modules.routes.routeMessaging,typing,header,Yes -gateway.modules.routes.routeSecurityAdmin,fastapi,header,Yes -gateway.modules.routes.routeSecurityAdmin,fastapi.responses,header,Yes -gateway.modules.routes.routeSecurityAdmin,logging,header,Yes -gateway.modules.routes.routeSecurityAdmin,modules.auth,header,Yes -gateway.modules.routes.routeSecurityAdmin,modules.connectors.connectorDbPostgre,header,Yes -gateway.modules.routes.routeSecurityAdmin,modules.datamodels.datamodelMembership,function revoke_tokens_by_mandate,Yes -gateway.modules.routes.routeSecurityAdmin,modules.datamodels.datamodelSecurity,header,Yes -gateway.modules.routes.routeSecurityAdmin,modules.datamodels.datamodelUam,header,Yes -gateway.modules.routes.routeSecurityAdmin,modules.interfaces.interfaceDbApp,header,Yes -gateway.modules.routes.routeSecurityAdmin,modules.shared.configuration,header,Yes -gateway.modules.routes.routeSecurityAdmin,os,header,Yes -gateway.modules.routes.routeSecurityAdmin,typing,header,Yes -gateway.modules.routes.routeSecurityGoogle,fastapi,header,Yes -gateway.modules.routes.routeSecurityGoogle,fastapi.responses,header,Yes -gateway.modules.routes.routeSecurityGoogle,httpx,header,Yes -gateway.modules.routes.routeSecurityGoogle,jose,function auth_callback,Yes -gateway.modules.routes.routeSecurityGoogle,json,header,Yes -gateway.modules.routes.routeSecurityGoogle,logging,header,Yes -gateway.modules.routes.routeSecurityGoogle,modules.auth,header,Yes -gateway.modules.routes.routeSecurityGoogle,modules.auth,header,Yes -gateway.modules.routes.routeSecurityGoogle,modules.datamodels.datamodelSecurity,function auth_callback,Yes -gateway.modules.routes.routeSecurityGoogle,modules.datamodels.datamodelUam,header,Yes -gateway.modules.routes.routeSecurityGoogle,modules.interfaces.interfaceDbApp,header,Yes -gateway.modules.routes.routeSecurityGoogle,modules.shared.auditLogger,function logout,Yes -gateway.modules.routes.routeSecurityGoogle,modules.shared.configuration,header,Yes -gateway.modules.routes.routeSecurityGoogle,modules.shared.timeUtils,header,Yes -gateway.modules.routes.routeSecurityGoogle,requests_oauthlib,header,Yes -gateway.modules.routes.routeSecurityGoogle,typing,header,Yes -gateway.modules.routes.routeSecurityLocal,datetime,header,Yes -gateway.modules.routes.routeSecurityLocal,fastapi,header,Yes -gateway.modules.routes.routeSecurityLocal,fastapi.responses,header,Yes -gateway.modules.routes.routeSecurityLocal,fastapi.security,header,Yes -gateway.modules.routes.routeSecurityLocal,html,function _sendAuthEmail,Yes -gateway.modules.routes.routeSecurityLocal,jose,header,Yes -gateway.modules.routes.routeSecurityLocal,logging,header,Yes -gateway.modules.routes.routeSecurityLocal,modules.auth,header,Yes -gateway.modules.routes.routeSecurityLocal,modules.auth,header,Yes -gateway.modules.routes.routeSecurityLocal,modules.datamodels.datamodelMessaging,function _sendAuthEmail,Yes -gateway.modules.routes.routeSecurityLocal,modules.datamodels.datamodelSecurity,header,Yes -gateway.modules.routes.routeSecurityLocal,modules.datamodels.datamodelUam,header,Yes -gateway.modules.routes.routeSecurityLocal,modules.interfaces.interfaceDbApp,header,Yes -gateway.modules.routes.routeSecurityLocal,modules.interfaces.interfaceMessaging,function _sendAuthEmail,Yes -gateway.modules.routes.routeSecurityLocal,modules.shared.auditLogger,function login,Yes -gateway.modules.routes.routeSecurityLocal,modules.shared.auditLogger,function logout,Yes -gateway.modules.routes.routeSecurityLocal,modules.shared.auditLogger,function passwordReset,Yes -gateway.modules.routes.routeSecurityLocal,modules.shared.auditLogger,function login,Yes -gateway.modules.routes.routeSecurityLocal,modules.shared.configuration,header,Yes -gateway.modules.routes.routeSecurityLocal,typing,header,Yes -gateway.modules.routes.routeSecurityLocal,uuid,header,Yes -gateway.modules.routes.routeSecurityMsft,fastapi,header,Yes -gateway.modules.routes.routeSecurityMsft,fastapi.responses,header,Yes -gateway.modules.routes.routeSecurityMsft,httpx,header,Yes -gateway.modules.routes.routeSecurityMsft,jose,function auth_callback,Yes -gateway.modules.routes.routeSecurityMsft,json,header,Yes -gateway.modules.routes.routeSecurityMsft,logging,header,Yes -gateway.modules.routes.routeSecurityMsft,modules.auth,header,Yes -gateway.modules.routes.routeSecurityMsft,modules.auth,header,Yes -gateway.modules.routes.routeSecurityMsft,modules.datamodels.datamodelSecurity,header,Yes -gateway.modules.routes.routeSecurityMsft,modules.datamodels.datamodelUam,header,Yes -gateway.modules.routes.routeSecurityMsft,modules.interfaces.interfaceDbApp,header,Yes -gateway.modules.routes.routeSecurityMsft,modules.shared.auditLogger,function logout,Yes -gateway.modules.routes.routeSecurityMsft,modules.shared.configuration,header,Yes -gateway.modules.routes.routeSecurityMsft,modules.shared.timeUtils,header,Yes -gateway.modules.routes.routeSecurityMsft,msal,header,Yes -gateway.modules.routes.routeSecurityMsft,typing,header,Yes -gateway.modules.routes.routeSharepoint,fastapi,header,Yes -gateway.modules.routes.routeSharepoint,logging,header,Yes -gateway.modules.routes.routeSharepoint,modules.auth,header,Yes -gateway.modules.routes.routeSharepoint,modules.datamodels.datamodelUam,header,Yes -gateway.modules.routes.routeSharepoint,modules.interfaces.interfaceDbApp,header,Yes -gateway.modules.routes.routeSharepoint,modules.services,header,Yes -gateway.modules.routes.routeSharepoint,typing,header,Yes -gateway.modules.routes.routeVoiceGoogle,base64,header,Yes -gateway.modules.routes.routeVoiceGoogle,fastapi,header,Yes -gateway.modules.routes.routeVoiceGoogle,fastapi.responses,header,Yes -gateway.modules.routes.routeVoiceGoogle,json,header,Yes -gateway.modules.routes.routeVoiceGoogle,logging,header,Yes -gateway.modules.routes.routeVoiceGoogle,modules.auth,header,Yes -gateway.modules.routes.routeVoiceGoogle,modules.datamodels.datamodelUam,header,Yes -gateway.modules.routes.routeVoiceGoogle,modules.interfaces.interfaceVoiceObjects,header,Yes -gateway.modules.routes.routeVoiceGoogle,typing,header,Yes -gateway.modules.security.__init__,(relative) .rbac,header,Yes -gateway.modules.security.__init__,(relative) .rbacHelpers,header,Yes -gateway.modules.security.__init__,(relative) .rootAccess,header,Yes -gateway.modules.security.passwordUtils,passlib.context,header,Yes -gateway.modules.security.passwordUtils,typing,header,Yes -gateway.modules.security.rbac,logging,header,Yes -gateway.modules.security.rbac,modules.connectors.connectorDbPostgre,header,Yes -gateway.modules.security.rbac,modules.datamodels.datamodelMembership,header,Yes -gateway.modules.security.rbac,modules.datamodels.datamodelRbac,header,Yes -gateway.modules.security.rbac,modules.datamodels.datamodelUam,header,Yes -gateway.modules.security.rbac,typing,header,Yes -gateway.modules.security.rbacCatalog,logging,header,Yes -gateway.modules.security.rbacCatalog,threading,header,Yes -gateway.modules.security.rbacCatalog,typing,header,Yes -gateway.modules.security.rbacHelpers,logging,header,Yes -gateway.modules.security.rbacHelpers,modules.datamodels.datamodelRbac,header,Yes -gateway.modules.security.rbacHelpers,modules.datamodels.datamodelUam,header,Yes -gateway.modules.security.rbacHelpers,modules.security.rbac,header,Yes -gateway.modules.security.rbacHelpers,typing,header,Yes -gateway.modules.security.rootAccess,logging,header,Yes -gateway.modules.security.rootAccess,modules.connectors.connectorDbPostgre,header,Yes -gateway.modules.security.rootAccess,modules.datamodels.datamodelUam,header,Yes -gateway.modules.security.rootAccess,modules.interfaces.interfaceBootstrap,function _ensureBootstrap,Yes -gateway.modules.security.rootAccess,modules.shared.configuration,header,Yes -gateway.modules.services.__init__,(relative) .serviceAi.mainServiceAi,function __init__,Yes -gateway.modules.services.__init__,(relative) .serviceChat.mainServiceChat,function __init__,Yes -gateway.modules.services.__init__,(relative) .serviceExtraction.mainServiceExtraction,function __init__,Yes -gateway.modules.services.__init__,(relative) .serviceGeneration.mainServiceGeneration,function __init__,Yes -gateway.modules.services.__init__,(relative) .serviceMessaging.mainServiceMessaging,function __init__,Yes -gateway.modules.services.__init__,(relative) .serviceSecurity.mainServiceSecurity,function __init__,Yes -gateway.modules.services.__init__,(relative) .serviceSharepoint.mainServiceSharepoint,function __init__,Yes -gateway.modules.services.__init__,(relative) .serviceTicket.mainServiceTicket,function __init__,Yes -gateway.modules.services.__init__,(relative) .serviceUtils.mainServiceUtils,function __init__,Yes -gateway.modules.services.__init__,(relative) .serviceWeb.mainServiceWeb,function __init__,Yes -gateway.modules.services.__init__,glob,header,Yes -gateway.modules.services.__init__,importlib,header,Yes -gateway.modules.services.__init__,logging,header,Yes -gateway.modules.services.__init__,modules.datamodels.datamodelChat,header,Yes -gateway.modules.services.__init__,modules.datamodels.datamodelUam,header,Yes -gateway.modules.services.__init__,modules.interfaces.interfaceDbApp,function __init__,Yes -gateway.modules.services.__init__,modules.interfaces.interfaceDbChat,function __init__,Yes -gateway.modules.services.__init__,modules.interfaces.interfaceDbManagement,function __init__,Yes -gateway.modules.services.__init__,os,header,Yes -gateway.modules.services.__init__,typing,header,Yes -gateway.modules.services.serviceAi.mainAiChat,logging,header,Yes -gateway.modules.services.serviceAi.mainAiChat,modules.aicore.aicoreModelRegistry,function onStart,Yes -gateway.modules.services.serviceAi.mainAiChat,typing,header,Yes -gateway.modules.services.serviceAi.mainServiceAi,(relative) .subAiCallLooping,function _initializeSubmodules,Yes -gateway.modules.services.serviceAi.mainServiceAi,(relative) .subContentExtraction,function _initializeSubmodules,Yes -gateway.modules.services.serviceAi.mainServiceAi,(relative) .subDocumentIntents,function _initializeSubmodules,Yes -gateway.modules.services.serviceAi.mainServiceAi,(relative) .subJsonResponseHandling,header,Yes -gateway.modules.services.serviceAi.mainServiceAi,(relative) .subResponseParsing,function _initializeSubmodules,Yes -gateway.modules.services.serviceAi.mainServiceAi,(relative) .subStructureFilling,function _initializeSubmodules,Yes -gateway.modules.services.serviceAi.mainServiceAi,(relative) .subStructureGeneration,function _initializeSubmodules,Yes -gateway.modules.services.serviceAi.mainServiceAi,base64,header,Yes -gateway.modules.services.serviceAi.mainServiceAi,json,header,Yes -gateway.modules.services.serviceAi.mainServiceAi,logging,header,Yes -gateway.modules.services.serviceAi.mainServiceAi,modules.datamodels.datamodelAi,header,Yes -gateway.modules.services.serviceAi.mainServiceAi,modules.datamodels.datamodelAi,header,Yes -gateway.modules.services.serviceAi.mainServiceAi,modules.datamodels.datamodelChat,header,Yes -gateway.modules.services.serviceAi.mainServiceAi,modules.datamodels.datamodelDocument,header,Yes -gateway.modules.services.serviceAi.mainServiceAi,modules.datamodels.datamodelExtraction,header,Yes -gateway.modules.services.serviceAi.mainServiceAi,modules.datamodels.datamodelWorkflow,header,Yes -gateway.modules.services.serviceAi.mainServiceAi,modules.interfaces.interfaceAiObjects,header,Yes -gateway.modules.services.serviceAi.mainServiceAi,modules.services.serviceExtraction.mainServiceExtraction,header,Yes -gateway.modules.services.serviceAi.mainServiceAi,modules.services.serviceGeneration.mainServiceGeneration,function renderResult,Yes -gateway.modules.services.serviceAi.mainServiceAi,modules.services.serviceGeneration.paths.codePath,function _handleCodeGeneration,Yes -gateway.modules.services.serviceAi.mainServiceAi,modules.services.serviceGeneration.paths.documentPath,function _handleDocumentGeneration,Yes -gateway.modules.services.serviceAi.mainServiceAi,modules.services.serviceGeneration.paths.imagePath,function _handleImageGeneration,Yes -gateway.modules.services.serviceAi.mainServiceAi,modules.shared.jsonUtils,header,Yes -gateway.modules.services.serviceAi.mainServiceAi,re,header,Yes -gateway.modules.services.serviceAi.mainServiceAi,time,header,Yes -gateway.modules.services.serviceAi.mainServiceAi,time,function _handleDataExtraction,Yes -gateway.modules.services.serviceAi.mainServiceAi,typing,header,Yes -gateway.modules.services.serviceAi.subAiCallLooping,(relative) .subJsonResponseHandling,header,Yes -gateway.modules.services.serviceAi.subAiCallLooping,(relative) .subLoopingUseCases,header,Yes -gateway.modules.services.serviceAi.subAiCallLooping,json,header,Yes -gateway.modules.services.serviceAi.subAiCallLooping,logging,header,Yes -gateway.modules.services.serviceAi.subAiCallLooping,modules.datamodels.datamodelAi,header,Yes -gateway.modules.services.serviceAi.subAiCallLooping,modules.datamodels.datamodelExtraction,header,Yes -gateway.modules.services.serviceAi.subAiCallLooping,modules.shared.jsonContinuation,header,Yes -gateway.modules.services.serviceAi.subAiCallLooping,modules.shared.jsonUtils,header,Yes -gateway.modules.services.serviceAi.subAiCallLooping,modules.shared.jsonUtils,header,Yes -gateway.modules.services.serviceAi.subAiCallLooping,modules.shared.jsonUtils,header,Yes -gateway.modules.services.serviceAi.subAiCallLooping,modules.shared.jsonUtils,header,Yes -gateway.modules.services.serviceAi.subAiCallLooping,modules.workflows.processing.shared.stateTools,header,Yes -gateway.modules.services.serviceAi.subAiCallLooping,typing,header,Yes -gateway.modules.services.serviceAi.subContentExtraction,base64,header,Yes -gateway.modules.services.serviceAi.subContentExtraction,json,header,Yes -gateway.modules.services.serviceAi.subContentExtraction,logging,header,Yes -gateway.modules.services.serviceAi.subContentExtraction,modules.datamodels.datamodelAi,function extractTextFromImage,Yes -gateway.modules.services.serviceAi.subContentExtraction,modules.datamodels.datamodelAi,function processTextContentWithAi,Yes -gateway.modules.services.serviceAi.subContentExtraction,modules.datamodels.datamodelChat,header,Yes -gateway.modules.services.serviceAi.subContentExtraction,modules.datamodels.datamodelExtraction,header,Yes -gateway.modules.services.serviceAi.subContentExtraction,modules.workflows.processing.shared.stateTools,header,Yes -gateway.modules.services.serviceAi.subContentExtraction,traceback,function extractTextFromImage,Yes -gateway.modules.services.serviceAi.subContentExtraction,traceback,function processTextContentWithAi,Yes -gateway.modules.services.serviceAi.subContentExtraction,typing,header,Yes -gateway.modules.services.serviceAi.subDocumentIntents,json,header,Yes -gateway.modules.services.serviceAi.subDocumentIntents,logging,header,Yes -gateway.modules.services.serviceAi.subDocumentIntents,modules.datamodels.datamodelChat,header,Yes -gateway.modules.services.serviceAi.subDocumentIntents,modules.datamodels.datamodelExtraction,header,Yes -gateway.modules.services.serviceAi.subDocumentIntents,modules.workflows.processing.shared.stateTools,header,Yes -gateway.modules.services.serviceAi.subDocumentIntents,traceback,function resolvePreExtractedDocument,Yes -gateway.modules.services.serviceAi.subDocumentIntents,typing,header,Yes -gateway.modules.services.serviceAi.subJsonMerger,datetime,header,Yes -gateway.modules.services.serviceAi.subJsonMerger,json,header,Yes -gateway.modules.services.serviceAi.subJsonMerger,logging,header,Yes -gateway.modules.services.serviceAi.subJsonMerger,modules.shared.jsonUtils,header,Yes -gateway.modules.services.serviceAi.subJsonMerger,os,header,Yes -gateway.modules.services.serviceAi.subJsonMerger,re,header,Yes -gateway.modules.services.serviceAi.subJsonMerger,typing,header,Yes -gateway.modules.services.serviceAi.subJsonResponseHandling,(relative) .subJsonMerger,function mergeJsonStringsWithOverlap,Yes -gateway.modules.services.serviceAi.subJsonResponseHandling,json,header,Yes -gateway.modules.services.serviceAi.subJsonResponseHandling,logging,header,Yes -gateway.modules.services.serviceAi.subJsonResponseHandling,modules.datamodels.datamodelAi,header,Yes -gateway.modules.services.serviceAi.subJsonResponseHandling,modules.shared.debugLogger,function mergeFragmentIntoSection,Yes -gateway.modules.services.serviceAi.subJsonResponseHandling,modules.shared.jsonUtils,header,Yes -gateway.modules.services.serviceAi.subJsonResponseHandling,re,header,Yes -gateway.modules.services.serviceAi.subJsonResponseHandling,re,function _extractRowsFromFragment,Yes -gateway.modules.services.serviceAi.subJsonResponseHandling,re,function _detectAndNormalizeFragment,Yes -gateway.modules.services.serviceAi.subJsonResponseHandling,traceback,function _mergeJsonStructuresGeneric,Yes -gateway.modules.services.serviceAi.subJsonResponseHandling,typing,header,Yes -gateway.modules.services.serviceAi.subLoopingUseCases,dataclasses,header,Yes -gateway.modules.services.serviceAi.subLoopingUseCases,json,function _handleChapterStructureFinalResult,Yes -gateway.modules.services.serviceAi.subLoopingUseCases,json,function _handleCodeStructureFinalResult,Yes -gateway.modules.services.serviceAi.subLoopingUseCases,json,function _handleCodeContentFinalResult,Yes -gateway.modules.services.serviceAi.subLoopingUseCases,logging,header,Yes -gateway.modules.services.serviceAi.subLoopingUseCases,typing,header,Yes -gateway.modules.services.serviceAi.subResponseParsing,(relative) .subJsonResponseHandling,header,Yes -gateway.modules.services.serviceAi.subResponseParsing,json,header,Yes -gateway.modules.services.serviceAi.subResponseParsing,logging,header,Yes -gateway.modules.services.serviceAi.subResponseParsing,modules.datamodels.datamodelAi,header,Yes -gateway.modules.services.serviceAi.subResponseParsing,modules.shared.jsonUtils,header,Yes -gateway.modules.services.serviceAi.subResponseParsing,typing,header,Yes -gateway.modules.services.serviceAi.subStructureFilling,asyncio,header,Yes -gateway.modules.services.serviceAi.subStructureFilling,base64,function _processAiResponseForSection,Yes -gateway.modules.services.serviceAi.subStructureFilling,copy,header,Yes -gateway.modules.services.serviceAi.subStructureFilling,json,header,Yes -gateway.modules.services.serviceAi.subStructureFilling,logging,header,Yes -gateway.modules.services.serviceAi.subStructureFilling,modules.datamodels.datamodelAi,header,Yes -gateway.modules.services.serviceAi.subStructureFilling,modules.datamodels.datamodelExtraction,header,Yes -gateway.modules.services.serviceAi.subStructureFilling,modules.datamodels.datamodelJson,function _getAcceptedSectionTypesForFormat,Yes -gateway.modules.services.serviceAi.subStructureFilling,modules.datamodels.datamodelJson,function _getAcceptedSectionTypesForFormat,Yes -gateway.modules.services.serviceAi.subStructureFilling,modules.services.serviceGeneration.renderers.registry,function _getAcceptedSectionTypesForFormat,Yes -gateway.modules.services.serviceAi.subStructureFilling,modules.shared.jsonContinuation,function buildSectionPromptWithContinuation,Yes -gateway.modules.services.serviceAi.subStructureFilling,modules.shared.jsonUtils,function _extractAndMergeMultipleJsonBlocks,Yes -gateway.modules.services.serviceAi.subStructureFilling,modules.shared.jsonUtils,function _processAiResponseForSection,Yes -gateway.modules.services.serviceAi.subStructureFilling,modules.shared.jsonUtils,function _processSingleSection,Yes -gateway.modules.services.serviceAi.subStructureFilling,modules.workflows.processing.shared.stateTools,header,Yes -gateway.modules.services.serviceAi.subStructureFilling,typing,header,Yes -gateway.modules.services.serviceAi.subStructureGeneration,json,header,Yes -gateway.modules.services.serviceAi.subStructureGeneration,logging,header,Yes -gateway.modules.services.serviceAi.subStructureGeneration,modules.datamodels.datamodelAi,header,Yes -gateway.modules.services.serviceAi.subStructureGeneration,modules.datamodels.datamodelExtraction,header,Yes -gateway.modules.services.serviceAi.subStructureGeneration,modules.services.serviceGeneration.renderers.registry,function generateStructure,Yes -gateway.modules.services.serviceAi.subStructureGeneration,modules.shared,function generateStructure,Yes -gateway.modules.services.serviceAi.subStructureGeneration,modules.shared.jsonContinuation,function generateStructure,Yes -gateway.modules.services.serviceAi.subStructureGeneration,modules.workflows.processing.shared.stateTools,header,Yes -gateway.modules.services.serviceAi.subStructureGeneration,typing,header,Yes -gateway.modules.services.serviceChat.mainServiceChat,json,function calculateObjectSize,Yes -gateway.modules.services.serviceChat.mainServiceChat,logging,header,Yes -gateway.modules.services.serviceChat.mainServiceChat,modules.datamodels.datamodelAi,header,Yes -gateway.modules.services.serviceChat.mainServiceChat,modules.datamodels.datamodelChat,header,Yes -gateway.modules.services.serviceChat.mainServiceChat,modules.datamodels.datamodelDocref,function getChatDocumentsFromDocumentList,Yes -gateway.modules.services.serviceChat.mainServiceChat,modules.datamodels.datamodelUam,header,Yes -gateway.modules.services.serviceChat.mainServiceChat,modules.shared.progressLogger,header,Yes -gateway.modules.services.serviceChat.mainServiceChat,sys,function calculateObjectSize,Yes -gateway.modules.services.serviceChat.mainServiceChat,typing,header,Yes -gateway.modules.services.serviceExtraction.__init__,(relative) .mainServiceExtraction,header,Yes -gateway.modules.services.serviceExtraction.chunking.chunkerImage,(relative) ..subRegistry,header,Yes -gateway.modules.services.serviceExtraction.chunking.chunkerImage,PIL,function chunk,Yes -gateway.modules.services.serviceExtraction.chunking.chunkerImage,base64,header,Yes -gateway.modules.services.serviceExtraction.chunking.chunkerImage,io,header,Yes -gateway.modules.services.serviceExtraction.chunking.chunkerImage,modules.datamodels.datamodelExtraction,header,Yes -gateway.modules.services.serviceExtraction.chunking.chunkerImage,typing,header,Yes -gateway.modules.services.serviceExtraction.chunking.chunkerStructure,(relative) ..subRegistry,header,Yes -gateway.modules.services.serviceExtraction.chunking.chunkerStructure,json,header,Yes -gateway.modules.services.serviceExtraction.chunking.chunkerStructure,modules.datamodels.datamodelExtraction,header,Yes -gateway.modules.services.serviceExtraction.chunking.chunkerStructure,typing,header,Yes -gateway.modules.services.serviceExtraction.chunking.chunkerTable,(relative) ..subRegistry,header,Yes -gateway.modules.services.serviceExtraction.chunking.chunkerTable,modules.datamodels.datamodelExtraction,header,Yes -gateway.modules.services.serviceExtraction.chunking.chunkerTable,typing,header,Yes -gateway.modules.services.serviceExtraction.chunking.chunkerText,(relative) ..subRegistry,header,Yes -gateway.modules.services.serviceExtraction.chunking.chunkerText,logging,header,Yes -gateway.modules.services.serviceExtraction.chunking.chunkerText,modules.datamodels.datamodelExtraction,header,Yes -gateway.modules.services.serviceExtraction.chunking.chunkerText,typing,header,Yes -gateway.modules.services.serviceExtraction.extractors.extractorBinary,(relative) ..subRegistry,header,Yes -gateway.modules.services.serviceExtraction.extractors.extractorBinary,(relative) ..subUtils,header,Yes -gateway.modules.services.serviceExtraction.extractors.extractorBinary,base64,header,Yes -gateway.modules.services.serviceExtraction.extractors.extractorBinary,modules.datamodels.datamodelExtraction,header,Yes -gateway.modules.services.serviceExtraction.extractors.extractorBinary,typing,header,Yes -gateway.modules.services.serviceExtraction.extractors.extractorCsv,(relative) ..subRegistry,header,Yes -gateway.modules.services.serviceExtraction.extractors.extractorCsv,(relative) ..subUtils,header,Yes -gateway.modules.services.serviceExtraction.extractors.extractorCsv,modules.datamodels.datamodelExtraction,header,Yes -gateway.modules.services.serviceExtraction.extractors.extractorCsv,typing,header,Yes -gateway.modules.services.serviceExtraction.extractors.extractorDocx,(relative) ..subRegistry,header,Yes -gateway.modules.services.serviceExtraction.extractors.extractorDocx,(relative) ..subUtils,header,Yes -gateway.modules.services.serviceExtraction.extractors.extractorDocx,docx,function _load,Yes -gateway.modules.services.serviceExtraction.extractors.extractorDocx,io,header,Yes -gateway.modules.services.serviceExtraction.extractors.extractorDocx,modules.datamodels.datamodelExtraction,header,Yes -gateway.modules.services.serviceExtraction.extractors.extractorDocx,typing,header,Yes -gateway.modules.services.serviceExtraction.extractors.extractorHtml,(relative) ..subRegistry,header,Yes -gateway.modules.services.serviceExtraction.extractors.extractorHtml,(relative) ..subUtils,header,Yes -gateway.modules.services.serviceExtraction.extractors.extractorHtml,bs4,header,Yes -gateway.modules.services.serviceExtraction.extractors.extractorHtml,modules.datamodels.datamodelExtraction,header,Yes -gateway.modules.services.serviceExtraction.extractors.extractorHtml,typing,header,Yes -gateway.modules.services.serviceExtraction.extractors.extractorImage,(relative) ..subRegistry,header,Yes -gateway.modules.services.serviceExtraction.extractors.extractorImage,(relative) ..subUtils,header,Yes -gateway.modules.services.serviceExtraction.extractors.extractorImage,PIL,function extract,Yes -gateway.modules.services.serviceExtraction.extractors.extractorImage,base64,header,Yes -gateway.modules.services.serviceExtraction.extractors.extractorImage,io,function extract,Yes -gateway.modules.services.serviceExtraction.extractors.extractorImage,logging,header,Yes -gateway.modules.services.serviceExtraction.extractors.extractorImage,modules.datamodels.datamodelExtraction,header,Yes -gateway.modules.services.serviceExtraction.extractors.extractorImage,typing,header,Yes -gateway.modules.services.serviceExtraction.extractors.extractorJson,(relative) ..subRegistry,header,Yes -gateway.modules.services.serviceExtraction.extractors.extractorJson,(relative) ..subUtils,header,Yes -gateway.modules.services.serviceExtraction.extractors.extractorJson,json,header,Yes -gateway.modules.services.serviceExtraction.extractors.extractorJson,modules.datamodels.datamodelExtraction,header,Yes -gateway.modules.services.serviceExtraction.extractors.extractorJson,typing,header,Yes -gateway.modules.services.serviceExtraction.extractors.extractorPdf,(relative) ..subRegistry,header,Yes -gateway.modules.services.serviceExtraction.extractors.extractorPdf,(relative) ..subUtils,header,Yes -gateway.modules.services.serviceExtraction.extractors.extractorPdf,PyPDF2,function _load,Yes -gateway.modules.services.serviceExtraction.extractors.extractorPdf,base64,header,Yes -gateway.modules.services.serviceExtraction.extractors.extractorPdf,fitz,function _load,Yes -gateway.modules.services.serviceExtraction.extractors.extractorPdf,io,header,Yes -gateway.modules.services.serviceExtraction.extractors.extractorPdf,modules.datamodels.datamodelExtraction,header,Yes -gateway.modules.services.serviceExtraction.extractors.extractorPdf,typing,header,Yes -gateway.modules.services.serviceExtraction.extractors.extractorPptx,(relative) ..subRegistry,header,Yes -gateway.modules.services.serviceExtraction.extractors.extractorPptx,base64,header,Yes -gateway.modules.services.serviceExtraction.extractors.extractorPptx,io,function extract,Yes -gateway.modules.services.serviceExtraction.extractors.extractorPptx,logging,header,Yes -gateway.modules.services.serviceExtraction.extractors.extractorPptx,modules.datamodels.datamodelExtraction,header,Yes -gateway.modules.services.serviceExtraction.extractors.extractorPptx,pptx,function _load,Yes -gateway.modules.services.serviceExtraction.extractors.extractorPptx,typing,header,Yes -gateway.modules.services.serviceExtraction.extractors.extractorSql,(relative) ..subRegistry,header,Yes -gateway.modules.services.serviceExtraction.extractors.extractorSql,(relative) ..subUtils,header,Yes -gateway.modules.services.serviceExtraction.extractors.extractorSql,modules.datamodels.datamodelExtraction,header,Yes -gateway.modules.services.serviceExtraction.extractors.extractorSql,typing,header,Yes -gateway.modules.services.serviceExtraction.extractors.extractorText,(relative) ..subRegistry,header,Yes -gateway.modules.services.serviceExtraction.extractors.extractorText,(relative) ..subUtils,header,Yes -gateway.modules.services.serviceExtraction.extractors.extractorText,modules.datamodels.datamodelExtraction,header,Yes -gateway.modules.services.serviceExtraction.extractors.extractorText,typing,header,Yes -gateway.modules.services.serviceExtraction.extractors.extractorXlsx,(relative) ..subRegistry,header,Yes -gateway.modules.services.serviceExtraction.extractors.extractorXlsx,(relative) ..subUtils,header,Yes -gateway.modules.services.serviceExtraction.extractors.extractorXlsx,datetime,header,Yes -gateway.modules.services.serviceExtraction.extractors.extractorXlsx,io,header,Yes -gateway.modules.services.serviceExtraction.extractors.extractorXlsx,modules.datamodels.datamodelExtraction,header,Yes -gateway.modules.services.serviceExtraction.extractors.extractorXlsx,openpyxl,function _load,Yes -gateway.modules.services.serviceExtraction.extractors.extractorXlsx,typing,header,Yes -gateway.modules.services.serviceExtraction.extractors.extractorXml,(relative) ..subRegistry,header,Yes -gateway.modules.services.serviceExtraction.extractors.extractorXml,(relative) ..subUtils,header,Yes -gateway.modules.services.serviceExtraction.extractors.extractorXml,modules.datamodels.datamodelExtraction,header,Yes -gateway.modules.services.serviceExtraction.extractors.extractorXml,typing,header,Yes -gateway.modules.services.serviceExtraction.extractors.extractorXml,xml.etree.ElementTree,header,Yes -gateway.modules.services.serviceExtraction.mainServiceExtraction,(relative) .merging.mergerDefault,function applyMerging,Yes -gateway.modules.services.serviceExtraction.mainServiceExtraction,(relative) .merging.mergerTable,function applyMerging,Yes -gateway.modules.services.serviceExtraction.mainServiceExtraction,(relative) .merging.mergerText,function applyMerging,Yes -gateway.modules.services.serviceExtraction.mainServiceExtraction,(relative) .subMerger,function applyMerging,Yes -gateway.modules.services.serviceExtraction.mainServiceExtraction,(relative) .subPipeline,header,Yes -gateway.modules.services.serviceExtraction.mainServiceExtraction,(relative) .subRegistry,header,Yes -gateway.modules.services.serviceExtraction.mainServiceExtraction,asyncio,header,Yes -gateway.modules.services.serviceExtraction.mainServiceExtraction,base64,header,Yes -gateway.modules.services.serviceExtraction.mainServiceExtraction,json,header,Yes -gateway.modules.services.serviceExtraction.mainServiceExtraction,logging,header,Yes -gateway.modules.services.serviceExtraction.mainServiceExtraction,modules.aicore.aicoreModelRegistry,header,Yes -gateway.modules.services.serviceExtraction.mainServiceExtraction,modules.aicore.aicoreModelSelector,header,Yes -gateway.modules.services.serviceExtraction.mainServiceExtraction,modules.datamodels.datamodelAi,header,Yes -gateway.modules.services.serviceExtraction.mainServiceExtraction,modules.datamodels.datamodelChat,header,Yes -gateway.modules.services.serviceExtraction.mainServiceExtraction,modules.datamodels.datamodelExtraction,header,Yes -gateway.modules.services.serviceExtraction.mainServiceExtraction,modules.interfaces.interfaceDbManagement,function extractContent,Yes -gateway.modules.services.serviceExtraction.mainServiceExtraction,modules.shared.debugLogger,function extractContent,Yes -gateway.modules.services.serviceExtraction.mainServiceExtraction,modules.shared.jsonUtils,header,Yes -gateway.modules.services.serviceExtraction.mainServiceExtraction,time,header,Yes -gateway.modules.services.serviceExtraction.mainServiceExtraction,typing,header,Yes -gateway.modules.services.serviceExtraction.mainServiceExtraction,uuid,header,Yes -gateway.modules.services.serviceExtraction.merging.mergerDefault,modules.datamodels.datamodelExtraction,header,Yes -gateway.modules.services.serviceExtraction.merging.mergerDefault,typing,header,Yes -gateway.modules.services.serviceExtraction.merging.mergerTable,(relative) ..subUtils,header,Yes -gateway.modules.services.serviceExtraction.merging.mergerTable,modules.datamodels.datamodelExtraction,header,Yes -gateway.modules.services.serviceExtraction.merging.mergerTable,typing,header,Yes -gateway.modules.services.serviceExtraction.merging.mergerText,(relative) ..subUtils,header,Yes -gateway.modules.services.serviceExtraction.merging.mergerText,modules.datamodels.datamodelExtraction,header,Yes -gateway.modules.services.serviceExtraction.merging.mergerText,typing,header,Yes -gateway.modules.services.serviceExtraction.subMerger,(relative) .subUtils,header,Yes -gateway.modules.services.serviceExtraction.subMerger,logging,header,Yes -gateway.modules.services.serviceExtraction.subMerger,modules.datamodels.datamodelExtraction,header,Yes -gateway.modules.services.serviceExtraction.subMerger,typing,header,Yes -gateway.modules.services.serviceExtraction.subPipeline,(relative) .mainServiceExtraction,function runExtraction,Yes -gateway.modules.services.serviceExtraction.subPipeline,(relative) .subRegistry,header,Yes -gateway.modules.services.serviceExtraction.subPipeline,(relative) .subUtils,header,Yes -gateway.modules.services.serviceExtraction.subPipeline,logging,header,Yes -gateway.modules.services.serviceExtraction.subPipeline,modules.datamodels.datamodelExtraction,header,Yes -gateway.modules.services.serviceExtraction.subPipeline,typing,header,Yes -gateway.modules.services.serviceExtraction.subPromptBuilderExtraction,json,header,Yes -gateway.modules.services.serviceExtraction.subPromptBuilderExtraction,logging,header,Yes -gateway.modules.services.serviceExtraction.subPromptBuilderExtraction,modules.datamodels.datamodelAi,header,Yes -gateway.modules.services.serviceExtraction.subPromptBuilderExtraction,modules.services.serviceGeneration.renderers.documentRendererBaseTemplate,header,Yes -gateway.modules.services.serviceExtraction.subPromptBuilderExtraction,modules.shared.debugLogger,function buildExtractionPrompt,Yes -gateway.modules.services.serviceExtraction.subPromptBuilderExtraction,typing,header,Yes -gateway.modules.services.serviceExtraction.subPromptBuilderExtraction,typing,header,Yes -gateway.modules.services.serviceExtraction.subRegistry,(relative) .chunking.chunkerImage,function __init__,Yes -gateway.modules.services.serviceExtraction.subRegistry,(relative) .chunking.chunkerStructure,function __init__,Yes -gateway.modules.services.serviceExtraction.subRegistry,(relative) .chunking.chunkerTable,function __init__,Yes -gateway.modules.services.serviceExtraction.subRegistry,(relative) .chunking.chunkerText,function __init__,Yes -gateway.modules.services.serviceExtraction.subRegistry,(relative) .extractors.extractorBinary,function _auto_discover_extractors,Yes -gateway.modules.services.serviceExtraction.subRegistry,importlib,function _auto_discover_extractors,Yes -gateway.modules.services.serviceExtraction.subRegistry,logging,header,Yes -gateway.modules.services.serviceExtraction.subRegistry,modules.datamodels.datamodelExtraction,header,Yes -gateway.modules.services.serviceExtraction.subRegistry,os,function _auto_discover_extractors,Yes -gateway.modules.services.serviceExtraction.subRegistry,pathlib,function _auto_discover_extractors,Yes -gateway.modules.services.serviceExtraction.subRegistry,traceback,function _auto_discover_extractors,Yes -gateway.modules.services.serviceExtraction.subRegistry,traceback,function __init__,Yes -gateway.modules.services.serviceExtraction.subRegistry,typing,header,Yes -gateway.modules.services.serviceExtraction.subUtils,uuid,header,Yes -gateway.modules.services.serviceGeneration.mainServiceGeneration,(relative) .renderers.registry,function _getFormatRenderer,Yes -gateway.modules.services.serviceGeneration.mainServiceGeneration,base64,header,Yes -gateway.modules.services.serviceGeneration.mainServiceGeneration,logging,header,Yes -gateway.modules.services.serviceGeneration.mainServiceGeneration,modules.datamodels.datamodelChat,header,Yes -gateway.modules.services.serviceGeneration.mainServiceGeneration,modules.datamodels.datamodelDocument,header,Yes -gateway.modules.services.serviceGeneration.mainServiceGeneration,modules.services.serviceExtraction.subPromptBuilderExtraction,function getAdaptiveExtractionPrompt,Yes -gateway.modules.services.serviceGeneration.mainServiceGeneration,modules.services.serviceGeneration.renderers.registry,function renderReport,Yes -gateway.modules.services.serviceGeneration.mainServiceGeneration,modules.services.serviceGeneration.subContentGenerator,function generateDocumentWithTwoPhases,Yes -gateway.modules.services.serviceGeneration.mainServiceGeneration,modules.services.serviceGeneration.subDocumentUtility,header,Yes -gateway.modules.services.serviceGeneration.mainServiceGeneration,modules.services.serviceGeneration.subStructureGenerator,function generateDocumentWithTwoPhases,Yes -gateway.modules.services.serviceGeneration.mainServiceGeneration,traceback,header,Yes -gateway.modules.services.serviceGeneration.mainServiceGeneration,typing,header,Yes -gateway.modules.services.serviceGeneration.mainServiceGeneration,uuid,header,Yes -gateway.modules.services.serviceGeneration.paths.codePath,json,header,Yes -gateway.modules.services.serviceGeneration.paths.codePath,logging,header,Yes -gateway.modules.services.serviceGeneration.paths.codePath,modules.datamodels.datamodelAi,header,Yes -gateway.modules.services.serviceGeneration.paths.codePath,modules.datamodels.datamodelDocument,function generateCode,Yes -gateway.modules.services.serviceGeneration.paths.codePath,modules.datamodels.datamodelExtraction,header,Yes -gateway.modules.services.serviceGeneration.paths.codePath,modules.datamodels.datamodelWorkflow,header,Yes -gateway.modules.services.serviceGeneration.paths.codePath,modules.services.serviceGeneration.renderers.registry,function _getCodeRenderer,Yes -gateway.modules.services.serviceGeneration.paths.codePath,modules.shared.jsonContinuation,function _generateCodeStructure,Yes -gateway.modules.services.serviceGeneration.paths.codePath,modules.shared.jsonContinuation,function _generateSingleFileContent,Yes -gateway.modules.services.serviceGeneration.paths.codePath,modules.shared.jsonUtils,header,Yes -gateway.modules.services.serviceGeneration.paths.codePath,re,header,Yes -gateway.modules.services.serviceGeneration.paths.codePath,time,header,Yes -gateway.modules.services.serviceGeneration.paths.codePath,typing,header,Yes -gateway.modules.services.serviceGeneration.paths.documentPath,copy,header,Yes -gateway.modules.services.serviceGeneration.paths.documentPath,json,header,Yes -gateway.modules.services.serviceGeneration.paths.documentPath,logging,header,Yes -gateway.modules.services.serviceGeneration.paths.documentPath,modules.datamodels.datamodelAi,header,Yes -gateway.modules.services.serviceGeneration.paths.documentPath,modules.datamodels.datamodelDocument,header,Yes -gateway.modules.services.serviceGeneration.paths.documentPath,modules.datamodels.datamodelExtraction,header,Yes -gateway.modules.services.serviceGeneration.paths.documentPath,modules.datamodels.datamodelWorkflow,header,Yes -gateway.modules.services.serviceGeneration.paths.documentPath,modules.workflows.processing.shared.stateTools,header,Yes -gateway.modules.services.serviceGeneration.paths.documentPath,time,header,Yes -gateway.modules.services.serviceGeneration.paths.documentPath,typing,header,Yes -gateway.modules.services.serviceGeneration.paths.imagePath,base64,function generateImages,Yes -gateway.modules.services.serviceGeneration.paths.imagePath,json,function generateImages,Yes -gateway.modules.services.serviceGeneration.paths.imagePath,logging,header,Yes -gateway.modules.services.serviceGeneration.paths.imagePath,modules.datamodels.datamodelAi,header,Yes -gateway.modules.services.serviceGeneration.paths.imagePath,modules.datamodels.datamodelWorkflow,header,Yes -gateway.modules.services.serviceGeneration.paths.imagePath,time,header,Yes -gateway.modules.services.serviceGeneration.paths.imagePath,typing,header,Yes -gateway.modules.services.serviceGeneration.renderers.codeRendererBaseTemplate,(relative) .documentRendererBaseTemplate,header,Yes -gateway.modules.services.serviceGeneration.renderers.codeRendererBaseTemplate,abc,header,Yes -gateway.modules.services.serviceGeneration.renderers.codeRendererBaseTemplate,logging,header,Yes -gateway.modules.services.serviceGeneration.renderers.codeRendererBaseTemplate,modules.datamodels.datamodelDocument,header,Yes -gateway.modules.services.serviceGeneration.renderers.codeRendererBaseTemplate,typing,header,Yes -gateway.modules.services.serviceGeneration.renderers.documentRendererBaseTemplate,PIL,header,Yes -gateway.modules.services.serviceGeneration.renderers.documentRendererBaseTemplate,abc,header,Yes -gateway.modules.services.serviceGeneration.renderers.documentRendererBaseTemplate,base64,header,Yes -gateway.modules.services.serviceGeneration.renderers.documentRendererBaseTemplate,datetime,header,Yes -gateway.modules.services.serviceGeneration.renderers.documentRendererBaseTemplate,io,header,Yes -gateway.modules.services.serviceGeneration.renderers.documentRendererBaseTemplate,json,header,Yes -gateway.modules.services.serviceGeneration.renderers.documentRendererBaseTemplate,logging,header,Yes -gateway.modules.services.serviceGeneration.renderers.documentRendererBaseTemplate,modules.datamodels.datamodelAi,header,Yes -gateway.modules.services.serviceGeneration.renderers.documentRendererBaseTemplate,modules.datamodels.datamodelDocument,header,Yes -gateway.modules.services.serviceGeneration.renderers.documentRendererBaseTemplate,modules.datamodels.datamodelJson,header,Yes -gateway.modules.services.serviceGeneration.renderers.documentRendererBaseTemplate,re,header,Yes -gateway.modules.services.serviceGeneration.renderers.documentRendererBaseTemplate,re,function _determineFilename,Yes -gateway.modules.services.serviceGeneration.renderers.documentRendererBaseTemplate,threading,function _getAiStyles,Yes -gateway.modules.services.serviceGeneration.renderers.documentRendererBaseTemplate,typing,header,Yes -gateway.modules.services.serviceGeneration.renderers.registry,(relative) .documentRendererBaseTemplate,header,Yes -gateway.modules.services.serviceGeneration.renderers.registry,importlib,header,Yes -gateway.modules.services.serviceGeneration.renderers.registry,logging,header,Yes -gateway.modules.services.serviceGeneration.renderers.registry,os,function discoverRenderers,Yes -gateway.modules.services.serviceGeneration.renderers.registry,pathlib,function discoverRenderers,Yes -gateway.modules.services.serviceGeneration.renderers.registry,sys,function discoverRenderers,Yes -gateway.modules.services.serviceGeneration.renderers.registry,typing,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererCodeCsv,(relative) .codeRendererBaseTemplate,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererCodeCsv,(relative) .rendererCsv,function render,Yes -gateway.modules.services.serviceGeneration.renderers.rendererCodeCsv,csv,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererCodeCsv,io,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererCodeCsv,modules.datamodels.datamodelDocument,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererCodeCsv,typing,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererCodeJson,(relative) .codeRendererBaseTemplate,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererCodeJson,(relative) .rendererJson,function render,Yes -gateway.modules.services.serviceGeneration.renderers.rendererCodeJson,json,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererCodeJson,modules.datamodels.datamodelDocument,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererCodeJson,typing,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererCodeXml,(relative) .codeRendererBaseTemplate,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererCodeXml,modules.datamodels.datamodelDocument,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererCodeXml,typing,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererCodeXml,xml.dom,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererCodeXml,xml.etree.ElementTree,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererCsv,(relative) .documentRendererBaseTemplate,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererCsv,csv,function _convertRowsToCsv,Yes -gateway.modules.services.serviceGeneration.renderers.rendererCsv,io,function _convertRowsToCsv,Yes -gateway.modules.services.serviceGeneration.renderers.rendererCsv,modules.datamodels.datamodelDocument,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererCsv,typing,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererDocx,(relative) .documentRendererBaseTemplate,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererDocx,(relative) .rendererHtml,function render,Yes -gateway.modules.services.serviceGeneration.renderers.rendererDocx,PIL,function _renderJsonImage,Yes -gateway.modules.services.serviceGeneration.renderers.rendererDocx,base64,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererDocx,csv,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererDocx,docx,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererDocx,docx.enum.style,function _setupDocumentStyles,Yes -gateway.modules.services.serviceGeneration.renderers.rendererDocx,docx.enum.style,function _createStyle,Yes -gateway.modules.services.serviceGeneration.renderers.rendererDocx,docx.enum.table,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererDocx,docx.enum.text,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererDocx,docx.oxml.ns,function _renderTableFastXml,Yes -gateway.modules.services.serviceGeneration.renderers.rendererDocx,docx.oxml.shared,function _renderTableFastXml,Yes -gateway.modules.services.serviceGeneration.renderers.rendererDocx,docx.oxml.shared,function _createTableBordersXml,Yes -gateway.modules.services.serviceGeneration.renderers.rendererDocx,docx.oxml.shared,function _createTableRowXml,Yes -gateway.modules.services.serviceGeneration.renderers.rendererDocx,docx.oxml.shared,function _applyHorizontalBordersOnly,Yes -gateway.modules.services.serviceGeneration.renderers.rendererDocx,docx.oxml.shared,function _setCellBackground,Yes -gateway.modules.services.serviceGeneration.renderers.rendererDocx,docx.oxml.shared,function _setCellBackgroundFast,Yes -gateway.modules.services.serviceGeneration.renderers.rendererDocx,docx.shared,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererDocx,io,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererDocx,lxml,function _renderTableFastXml,Yes -gateway.modules.services.serviceGeneration.renderers.rendererDocx,modules.datamodels.datamodelDocument,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererDocx,modules.datamodels.datamodelJson,function getAcceptedSectionTypes,Yes -gateway.modules.services.serviceGeneration.renderers.rendererDocx,re,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererDocx,time,function _generateDocxFromJson,Yes -gateway.modules.services.serviceGeneration.renderers.rendererDocx,time,function _renderJsonTable,Yes -gateway.modules.services.serviceGeneration.renderers.rendererDocx,time,function _renderTableFastXml,Yes -gateway.modules.services.serviceGeneration.renderers.rendererDocx,typing,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererHtml,(relative) .documentRendererBaseTemplate,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererHtml,base64,function render,Yes -gateway.modules.services.serviceGeneration.renderers.rendererHtml,base64,function _replaceImageDataUris,Yes -gateway.modules.services.serviceGeneration.renderers.rendererHtml,html,function _renderJsonImage,Yes -gateway.modules.services.serviceGeneration.renderers.rendererHtml,html,function _replaceImageDataUris,Yes -gateway.modules.services.serviceGeneration.renderers.rendererHtml,modules.datamodels.datamodelDocument,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererHtml,modules.datamodels.datamodelJson,function getAcceptedSectionTypes,Yes -gateway.modules.services.serviceGeneration.renderers.rendererHtml,re,function _replaceImageDataUris,Yes -gateway.modules.services.serviceGeneration.renderers.rendererHtml,re,function _extractImages,Yes -gateway.modules.services.serviceGeneration.renderers.rendererHtml,typing,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererImage,(relative) .documentRendererBaseTemplate,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererImage,base64,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererImage,json,function _generateAiImage,Yes -gateway.modules.services.serviceGeneration.renderers.rendererImage,logging,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererImage,modules.datamodels.datamodelAi,function _generateAiImage,Yes -gateway.modules.services.serviceGeneration.renderers.rendererImage,modules.datamodels.datamodelAi,function _compressPromptWithAi,Yes -gateway.modules.services.serviceGeneration.renderers.rendererImage,modules.datamodels.datamodelDocument,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererImage,typing,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererJson,(relative) .documentRendererBaseTemplate,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererJson,json,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererJson,modules.datamodels.datamodelDocument,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererJson,modules.datamodels.datamodelJson,function getAcceptedSectionTypes,Yes -gateway.modules.services.serviceGeneration.renderers.rendererJson,typing,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererMarkdown,(relative) .documentRendererBaseTemplate,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererMarkdown,modules.datamodels.datamodelDocument,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererMarkdown,modules.datamodels.datamodelJson,function getAcceptedSectionTypes,Yes -gateway.modules.services.serviceGeneration.renderers.rendererMarkdown,typing,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPdf,(relative) .documentRendererBaseTemplate,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPdf,(relative) .rendererHtml,function render,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPdf,PIL,function _renderJsonImage,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPdf,base64,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPdf,base64,function _renderJsonImage,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPdf,io,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPdf,io,function _renderJsonImage,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPdf,json,function _getAiStylesWithPdfColors,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPdf,modules.datamodels.datamodelAi,function _getAiStylesWithPdfColors,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPdf,modules.datamodels.datamodelDocument,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPdf,modules.datamodels.datamodelJson,function getAcceptedSectionTypes,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPdf,re,function _getAiStylesWithPdfColors,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPdf,re,function _renderJsonImage,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPdf,reportlab.lib,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPdf,reportlab.lib.enums,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPdf,reportlab.lib.pagesizes,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPdf,reportlab.lib.pagesizes,function _renderJsonImage,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPdf,reportlab.lib.styles,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPdf,reportlab.lib.units,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPdf,reportlab.lib.units,function _renderJsonImage,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPdf,reportlab.platypus,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPdf,reportlab.platypus,function _renderJsonImage,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPdf,typing,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPptx,(relative) .documentRendererBaseTemplate,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPptx,PIL,function _addImagesToSlide,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPptx,PIL,function _addImagesToSlideInFrame,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPptx,PIL,function _addImagesToSlideInFrame,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPptx,base64,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPptx,base64,function _addImagesToSlide,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPptx,base64,function _addImagesToSlideInFrame,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPptx,datetime,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPptx,io,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPptx,io,function _addImagesToSlide,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPptx,io,function _addImagesToSlideInFrame,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPptx,json,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPptx,logging,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPptx,modules.datamodels.datamodelDocument,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPptx,modules.datamodels.datamodelJson,function getAcceptedSectionTypes,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx,function render,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.dml.color,function render,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.dml.color,function _addImagesToSlide,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.dml.color,function _addTableToSlide,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.dml.color,function _addBulletListToSlide,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.dml.color,function _addHeadingToSlide,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.dml.color,function _addParagraphToSlide,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.dml.color,function _addCodeBlockToSlide,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.dml.color,function _renderSlideContentWithFrames,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.dml.color,function _renderTextSectionsInFrame,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.dml.color,function _renderSectionToTextFrame,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.enum.text,function render,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.enum.text,function _addImagesToSlide,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.enum.text,function _addTableToSlide,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.enum.text,function _addBulletListToSlide,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.enum.text,function _addParagraphToSlide,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.enum.text,function _renderSlideContentWithFrames,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.enum.text,function _renderTextSectionsInFrame,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.enum.text,function _renderSectionToTextFrame,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.enum.text,function _addImagesToSlideInFrame,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.util,function render,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.util,function _addImagesToSlide,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.util,function _addTableToSlide,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.util,function _addBulletListToSlide,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.util,function _addHeadingToSlide,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.util,function _addParagraphToSlide,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.util,function _addCodeBlockToSlide,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.util,function _renderSlideContentWithFrames,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.util,function _renderTextSectionsInFrame,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.util,function _renderSectionToTextFrame,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.util,function _addImagesToSlideInFrame,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.util,function render,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.util,function render,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.util,function _renderSlideContentWithFrames,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.util,function _addBulletListToSlide,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPptx,re,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPptx,re,function render,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPptx,traceback,function _addImagesToSlide,Yes -gateway.modules.services.serviceGeneration.renderers.rendererPptx,typing,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererText,(relative) .documentRendererBaseTemplate,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererText,modules.datamodels.datamodelDocument,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererText,modules.datamodels.datamodelJson,function getAcceptedSectionTypes,Yes -gateway.modules.services.serviceGeneration.renderers.rendererText,typing,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererXlsx,(relative) .documentRendererBaseTemplate,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererXlsx,(relative) .rendererCsv,function render,Yes -gateway.modules.services.serviceGeneration.renderers.rendererXlsx,base64,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererXlsx,base64,function _addImageToExcel,Yes -gateway.modules.services.serviceGeneration.renderers.rendererXlsx,datetime,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererXlsx,dateutil,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererXlsx,io,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererXlsx,io,function _addImageToExcel,Yes -gateway.modules.services.serviceGeneration.renderers.rendererXlsx,json,function _getAiStylesWithExcelColors,Yes -gateway.modules.services.serviceGeneration.renderers.rendererXlsx,modules.datamodels.datamodelAi,function _getAiStylesWithExcelColors,Yes -gateway.modules.services.serviceGeneration.renderers.rendererXlsx,modules.datamodels.datamodelDocument,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererXlsx,modules.datamodels.datamodelJson,function getAcceptedSectionTypes,Yes -gateway.modules.services.serviceGeneration.renderers.rendererXlsx,openpyxl,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererXlsx,openpyxl.drawing.image,function _addImageToExcel,Yes -gateway.modules.services.serviceGeneration.renderers.rendererXlsx,openpyxl.styles,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererXlsx,openpyxl.utils,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererXlsx,openpyxl.worksheet.table,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererXlsx,re,header,Yes -gateway.modules.services.serviceGeneration.renderers.rendererXlsx,re,function _getAiStylesWithExcelColors,Yes -gateway.modules.services.serviceGeneration.renderers.rendererXlsx,typing,header,Yes -gateway.modules.services.serviceGeneration.subContentGenerator,asyncio,header,Yes -gateway.modules.services.serviceGeneration.subContentGenerator,base64,header,Yes -gateway.modules.services.serviceGeneration.subContentGenerator,base64,function _generateImageSection,Yes -gateway.modules.services.serviceGeneration.subContentGenerator,json,header,Yes -gateway.modules.services.serviceGeneration.subContentGenerator,logging,header,Yes -gateway.modules.services.serviceGeneration.subContentGenerator,modules.datamodels.datamodelAi,function _generateSimpleSection,Yes -gateway.modules.services.serviceGeneration.subContentGenerator,modules.datamodels.datamodelAi,function _generateImageSection,Yes -gateway.modules.services.serviceGeneration.subContentGenerator,modules.services.serviceGeneration.subContentIntegrator,header,Yes -gateway.modules.services.serviceGeneration.subContentGenerator,modules.shared.jsonUtils,function _generateSimpleSection,Yes -gateway.modules.services.serviceGeneration.subContentGenerator,modules.workflows.processing.shared.stateTools,header,Yes -gateway.modules.services.serviceGeneration.subContentGenerator,re,header,Yes -gateway.modules.services.serviceGeneration.subContentGenerator,traceback,header,Yes -gateway.modules.services.serviceGeneration.subContentGenerator,typing,header,Yes -gateway.modules.services.serviceGeneration.subContentIntegrator,json,function integrateContent,Yes -gateway.modules.services.serviceGeneration.subContentIntegrator,logging,header,Yes -gateway.modules.services.serviceGeneration.subContentIntegrator,typing,header,Yes -gateway.modules.services.serviceGeneration.subDocumentUtility,csv,function convertDocumentDataToString,Yes -gateway.modules.services.serviceGeneration.subDocumentUtility,csv,function convertDocumentDataToString,Yes -gateway.modules.services.serviceGeneration.subDocumentUtility,io,function convertDocumentDataToString,Yes -gateway.modules.services.serviceGeneration.subDocumentUtility,io,function convertDocumentDataToString,Yes -gateway.modules.services.serviceGeneration.subDocumentUtility,json,header,Yes -gateway.modules.services.serviceGeneration.subDocumentUtility,logging,header,Yes -gateway.modules.services.serviceGeneration.subDocumentUtility,os,header,Yes -gateway.modules.services.serviceGeneration.subDocumentUtility,typing,header,Yes -gateway.modules.services.serviceGeneration.subJsonSchema,typing,header,Yes -gateway.modules.services.serviceGeneration.subPromptBuilderGeneration,logging,header,Yes -gateway.modules.services.serviceGeneration.subPromptBuilderGeneration,modules.datamodels.datamodelJson,header,Yes -gateway.modules.services.serviceGeneration.subPromptBuilderGeneration,typing,header,Yes -gateway.modules.services.serviceGeneration.subStructureGenerator,json,header,Yes -gateway.modules.services.serviceGeneration.subStructureGenerator,json,function _createStructurePrompt,Yes -gateway.modules.services.serviceGeneration.subStructureGenerator,logging,header,Yes -gateway.modules.services.serviceGeneration.subStructureGenerator,modules.datamodels.datamodelAi,function generateStructure,Yes -gateway.modules.services.serviceGeneration.subStructureGenerator,modules.datamodels.datamodelJson,header,Yes -gateway.modules.services.serviceGeneration.subStructureGenerator,typing,header,Yes -gateway.modules.services.serviceMessaging.mainServiceMessaging,html,function _textToHtml,Yes -gateway.modules.services.serviceMessaging.mainServiceMessaging,importlib,function _loadSubscriptionFunction,Yes -gateway.modules.services.serviceMessaging.mainServiceMessaging,logging,header,Yes -gateway.modules.services.serviceMessaging.mainServiceMessaging,modules.datamodels.datamodelMessaging,header,Yes -gateway.modules.services.serviceMessaging.mainServiceMessaging,modules.interfaces.interfaceMessaging,header,Yes -gateway.modules.services.serviceMessaging.mainServiceMessaging,modules.shared.timeUtils,header,Yes -gateway.modules.services.serviceMessaging.mainServiceMessaging,re,header,Yes -gateway.modules.services.serviceMessaging.mainServiceMessaging,typing,header,Yes -gateway.modules.services.serviceMessaging.subscriptions.subSubscriptionSystemErrors,modules.datamodels.datamodelMessaging,header,Yes -gateway.modules.services.serviceMessaging.subscriptions.subSubscriptionSystemErrors,typing,header,Yes -gateway.modules.services.serviceNormalization.mainServiceNormalization,json,header,Yes -gateway.modules.services.serviceNormalization.mainServiceNormalization,os,header,Yes -gateway.modules.services.serviceNormalization.mainServiceNormalization,typing,header,Yes -gateway.modules.services.serviceSecurity.mainServiceSecurity,logging,header,Yes -gateway.modules.services.serviceSecurity.mainServiceSecurity,modules.auth,header,Yes -gateway.modules.services.serviceSecurity.mainServiceSecurity,modules.datamodels.datamodelSecurity,header,Yes -gateway.modules.services.serviceSecurity.mainServiceSecurity,typing,header,Yes -gateway.modules.services.serviceSharepoint.mainServiceSharepoint,aiohttp,header,Yes -gateway.modules.services.serviceSharepoint.mainServiceSharepoint,asyncio,header,Yes -gateway.modules.services.serviceSharepoint.mainServiceSharepoint,datetime,function getFolderUsageAnalytics,Yes -gateway.modules.services.serviceSharepoint.mainServiceSharepoint,logging,header,Yes -gateway.modules.services.serviceSharepoint.mainServiceSharepoint,typing,header,Yes -gateway.modules.services.serviceSharepoint.mainServiceSharepoint,urllib.parse,function findSiteByWebUrl,Yes -gateway.modules.services.serviceSharepoint.mainServiceSharepoint,urllib.parse,function getSiteByStandardPath,Yes -gateway.modules.services.serviceTicket.mainServiceTicket,logging,header,Yes -gateway.modules.services.serviceTicket.mainServiceTicket,modules.interfaces.interfaceTicketObjects,header,Yes -gateway.modules.services.serviceTicket.mainServiceTicket,typing,header,Yes -gateway.modules.services.serviceUtils.mainServiceUtils,json,function writeDebugArtifact,Yes -gateway.modules.services.serviceUtils.mainServiceUtils,logging,header,Yes -gateway.modules.services.serviceUtils.mainServiceUtils,modules.interfaces.interfaceDbChat,function storeDebugMessageAndDocuments,Yes -gateway.modules.services.serviceUtils.mainServiceUtils,modules.shared,header,Yes -gateway.modules.services.serviceUtils.mainServiceUtils,modules.shared.configuration,header,Yes -gateway.modules.services.serviceUtils.mainServiceUtils,modules.shared.debugLogger,function writeDebugFile,Yes -gateway.modules.services.serviceUtils.mainServiceUtils,modules.shared.debugLogger,function debugLogToFile,Yes -gateway.modules.services.serviceUtils.mainServiceUtils,modules.shared.debugLogger,function writeDebugArtifact,Yes -gateway.modules.services.serviceUtils.mainServiceUtils,modules.shared.eventManagement,header,Yes -gateway.modules.services.serviceUtils.mainServiceUtils,modules.shared.timeUtils,header,Yes -gateway.modules.services.serviceUtils.mainServiceUtils,re,function sanitizePromptContent,Yes -gateway.modules.services.serviceUtils.mainServiceUtils,typing,header,Yes -gateway.modules.services.serviceWeb.mainServiceWeb,asyncio,header,Yes -gateway.modules.services.serviceWeb.mainServiceWeb,json,header,Yes -gateway.modules.services.serviceWeb.mainServiceWeb,logging,header,Yes -gateway.modules.services.serviceWeb.mainServiceWeb,modules.datamodels.datamodelAi,header,Yes -gateway.modules.services.serviceWeb.mainServiceWeb,time,header,Yes -gateway.modules.services.serviceWeb.mainServiceWeb,time,function _processCrawlResultsWithHierarchy,Yes -gateway.modules.services.serviceWeb.mainServiceWeb,typing,header,Yes -gateway.modules.services.serviceWeb.mainServiceWeb,urllib.parse,header,Yes -gateway.modules.shared.__init__,(relative) .,header,Yes -gateway.modules.shared.__init__,(relative) .,header,Yes -gateway.modules.shared.__init__,(relative) .,header,Yes -gateway.modules.shared.__init__,(relative) .,header,Yes -gateway.modules.shared.__init__,(relative) .,header,Yes -gateway.modules.shared.__init__,(relative) .,header,Yes -gateway.modules.shared.__init__,(relative) .,header,Yes -gateway.modules.shared.__init__,(relative) .,header,Yes -gateway.modules.shared.__init__,(relative) .,header,Yes -gateway.modules.shared.__init__,(relative) .,header,Yes -gateway.modules.shared.__init__,(relative) .,header,Yes -gateway.modules.shared.__init__,(relative) .,header,Yes -gateway.modules.shared.attributeUtils,importlib,header,Yes -gateway.modules.shared.attributeUtils,inspect,header,Yes -gateway.modules.shared.attributeUtils,logging,header,Yes -gateway.modules.shared.attributeUtils,os,header,Yes -gateway.modules.shared.attributeUtils,pydantic,header,Yes -gateway.modules.shared.attributeUtils,typing,header,Yes -gateway.modules.shared.auditLogger,datetime,header,Yes -gateway.modules.shared.auditLogger,logging,header,Yes -gateway.modules.shared.auditLogger,modules.connectors.connectorDbPostgre,function _ensureInitialized,Yes -gateway.modules.shared.auditLogger,modules.datamodels.datamodelAudit,function _ensureInitialized,Yes -gateway.modules.shared.auditLogger,modules.datamodels.datamodelAudit,function getAuditLogs,Yes -gateway.modules.shared.auditLogger,modules.datamodels.datamodelAudit,function cleanupOldEntries,Yes -gateway.modules.shared.auditLogger,modules.datamodels.datamodelAudit,function logEvent,Yes -gateway.modules.shared.auditLogger,modules.shared.configuration,header,Yes -gateway.modules.shared.auditLogger,modules.shared.eventManagement,function registerAuditLogCleanupScheduler,Yes -gateway.modules.shared.auditLogger,modules.shared.timeUtils,header,Yes -gateway.modules.shared.auditLogger,time,function cleanupOldEntries,Yes -gateway.modules.shared.auditLogger,typing,header,Yes -gateway.modules.shared.callbackRegistry,asyncio,header,Yes -gateway.modules.shared.callbackRegistry,logging,header,Yes -gateway.modules.shared.callbackRegistry,typing,header,Yes -gateway.modules.shared.configuration,base64,header,Yes -gateway.modules.shared.configuration,cryptography.fernet,header,Yes -gateway.modules.shared.configuration,cryptography.hazmat.primitives,header,Yes -gateway.modules.shared.configuration,cryptography.hazmat.primitives.kdf.pbkdf2,header,Yes -gateway.modules.shared.configuration,json,header,Yes -gateway.modules.shared.configuration,logging,header,Yes -gateway.modules.shared.configuration,modules.shared.auditLogger,function encryptValue,Yes -gateway.modules.shared.configuration,modules.shared.auditLogger,function decryptValue,Yes -gateway.modules.shared.configuration,modules.shared.auditLogger,function get,Yes -gateway.modules.shared.configuration,os,header,Yes -gateway.modules.shared.configuration,pathlib,header,Yes -gateway.modules.shared.configuration,time,header,Yes -gateway.modules.shared.configuration,typing,header,Yes -gateway.modules.shared.dbMultiTenantOptimizations,logging,header,Yes -gateway.modules.shared.dbMultiTenantOptimizations,typing,header,Yes -gateway.modules.shared.debugLogger,datetime,header,Yes -gateway.modules.shared.debugLogger,modules.shared.configuration,header,Yes -gateway.modules.shared.debugLogger,modules.shared.timeUtils,function debugLogToFile,Yes -gateway.modules.shared.debugLogger,os,header,Yes -gateway.modules.shared.debugLogger,typing,header,Yes -gateway.modules.shared.eventManagement,apscheduler.schedulers.asyncio,header,Yes -gateway.modules.shared.eventManagement,apscheduler.triggers.cron,header,Yes -gateway.modules.shared.eventManagement,apscheduler.triggers.interval,header,Yes -gateway.modules.shared.eventManagement,logging,header,Yes -gateway.modules.shared.eventManagement,typing,header,Yes -gateway.modules.shared.eventManagement,zoneinfo,header,Yes -gateway.modules.shared.frontendTypes,enum,header,Yes -gateway.modules.shared.frontendTypes,typing,header,Yes -gateway.modules.shared.jsonContinuation,dataclasses,header,Yes -gateway.modules.shared.jsonContinuation,enum,header,Yes -gateway.modules.shared.jsonContinuation,json,header,Yes -gateway.modules.shared.jsonContinuation,logging,header,Yes -gateway.modules.shared.jsonContinuation,modules.datamodels.datamodelAi,header,Yes -gateway.modules.shared.jsonContinuation,re,header,Yes -gateway.modules.shared.jsonContinuation,typing,header,Yes -gateway.modules.shared.jsonUtils,json,header,Yes -gateway.modules.shared.jsonUtils,logging,header,Yes -gateway.modules.shared.jsonUtils,modules.datamodels.datamodelAi,header,Yes -gateway.modules.shared.jsonUtils,modules.shared.jsonContinuation,function buildContinuationContext,Yes -gateway.modules.shared.jsonUtils,pydantic,header,Yes -gateway.modules.shared.jsonUtils,re,header,Yes -gateway.modules.shared.jsonUtils,typing,header,Yes -gateway.modules.shared.progressLogger,logging,header,Yes -gateway.modules.shared.progressLogger,time,header,Yes -gateway.modules.shared.progressLogger,typing,header,Yes -gateway.modules.shared.timeUtils,datetime,header,Yes -gateway.modules.shared.timeUtils,logging,header,Yes -gateway.modules.shared.timeUtils,time,header,Yes -gateway.modules.shared.timeUtils,typing,header,Yes -gateway.modules.workflows.automation.__init__,(relative) .mainWorkflow,header,Yes -gateway.modules.workflows.automation.mainWorkflow,(relative) .subAutomationUtils,header,Yes -gateway.modules.workflows.automation.mainWorkflow,json,header,Yes -gateway.modules.workflows.automation.mainWorkflow,logging,header,Yes -gateway.modules.workflows.automation.mainWorkflow,modules.datamodels.datamodelChat,header,Yes -gateway.modules.workflows.automation.mainWorkflow,modules.datamodels.datamodelUam,header,Yes -gateway.modules.workflows.automation.mainWorkflow,modules.features.automation.datamodelFeatureAutomation,header,Yes -gateway.modules.workflows.automation.mainWorkflow,modules.services,header,Yes -gateway.modules.workflows.automation.mainWorkflow,modules.shared.eventManagement,header,Yes -gateway.modules.workflows.automation.mainWorkflow,modules.shared.timeUtils,header,Yes -gateway.modules.workflows.automation.mainWorkflow,modules.workflows.workflowManager,header,Yes -gateway.modules.workflows.automation.mainWorkflow,typing,header,Yes -gateway.modules.workflows.automation.subAutomationSchedule,logging,header,Yes -gateway.modules.workflows.automation.subAutomationSchedule,modules.services,header,Yes -gateway.modules.workflows.automation.subAutomationSchedule,modules.shared.callbackRegistry,function start,Yes -gateway.modules.workflows.automation.subAutomationSchedule,modules.workflows.automation,function start,Yes -gateway.modules.workflows.automation.subAutomationTemplates,typing,header,Yes -gateway.modules.workflows.automation.subAutomationUtils,datetime,header,Yes -gateway.modules.workflows.automation.subAutomationUtils,json,header,Yes -gateway.modules.workflows.automation.subAutomationUtils,typing,header,Yes -gateway.modules.workflows.methods.methodAi.__init__,(relative) .methodAi,header,Yes -gateway.modules.workflows.methods.methodAi.actions.__init__,(relative) .convertDocument,header,Yes -gateway.modules.workflows.methods.methodAi.actions.__init__,(relative) .generateCode,header,Yes -gateway.modules.workflows.methods.methodAi.actions.__init__,(relative) .generateDocument,header,Yes -gateway.modules.workflows.methods.methodAi.actions.__init__,(relative) .process,header,Yes -gateway.modules.workflows.methods.methodAi.actions.__init__,(relative) .summarizeDocument,header,Yes -gateway.modules.workflows.methods.methodAi.actions.__init__,(relative) .translateDocument,header,Yes -gateway.modules.workflows.methods.methodAi.actions.__init__,(relative) .webResearch,header,Yes -gateway.modules.workflows.methods.methodAi.actions.convertDocument,logging,header,Yes -gateway.modules.workflows.methods.methodAi.actions.convertDocument,modules.datamodels.datamodelChat,header,Yes -gateway.modules.workflows.methods.methodAi.actions.convertDocument,typing,header,Yes -gateway.modules.workflows.methods.methodAi.actions.generateCode,logging,header,Yes -gateway.modules.workflows.methods.methodAi.actions.generateCode,modules.datamodels.datamodelAi,header,Yes -gateway.modules.workflows.methods.methodAi.actions.generateCode,modules.datamodels.datamodelChat,header,Yes -gateway.modules.workflows.methods.methodAi.actions.generateCode,modules.datamodels.datamodelDocref,function generateCode,Yes -gateway.modules.workflows.methods.methodAi.actions.generateCode,modules.datamodels.datamodelExtraction,header,Yes -gateway.modules.workflows.methods.methodAi.actions.generateCode,modules.datamodels.datamodelWorkflow,header,Yes -gateway.modules.workflows.methods.methodAi.actions.generateCode,re,function generateCode,Yes -gateway.modules.workflows.methods.methodAi.actions.generateCode,time,header,Yes -gateway.modules.workflows.methods.methodAi.actions.generateCode,typing,header,Yes -gateway.modules.workflows.methods.methodAi.actions.generateDocument,logging,header,Yes -gateway.modules.workflows.methods.methodAi.actions.generateDocument,modules.datamodels.datamodelAi,header,Yes -gateway.modules.workflows.methods.methodAi.actions.generateDocument,modules.datamodels.datamodelChat,header,Yes -gateway.modules.workflows.methods.methodAi.actions.generateDocument,modules.datamodels.datamodelDocref,function generateDocument,Yes -gateway.modules.workflows.methods.methodAi.actions.generateDocument,modules.datamodels.datamodelExtraction,header,Yes -gateway.modules.workflows.methods.methodAi.actions.generateDocument,modules.datamodels.datamodelWorkflow,header,Yes -gateway.modules.workflows.methods.methodAi.actions.generateDocument,re,function generateDocument,Yes -gateway.modules.workflows.methods.methodAi.actions.generateDocument,time,header,Yes -gateway.modules.workflows.methods.methodAi.actions.generateDocument,typing,header,Yes -gateway.modules.workflows.methods.methodAi.actions.process,json,header,Yes -gateway.modules.workflows.methods.methodAi.actions.process,logging,header,Yes -gateway.modules.workflows.methods.methodAi.actions.process,modules.datamodels.datamodelAi,header,Yes -gateway.modules.workflows.methods.methodAi.actions.process,modules.datamodels.datamodelChat,header,Yes -gateway.modules.workflows.methods.methodAi.actions.process,modules.datamodels.datamodelDocref,function process,Yes -gateway.modules.workflows.methods.methodAi.actions.process,modules.datamodels.datamodelDocref,function process,Yes -gateway.modules.workflows.methods.methodAi.actions.process,modules.datamodels.datamodelExtraction,header,Yes -gateway.modules.workflows.methods.methodAi.actions.process,modules.datamodels.datamodelWorkflow,function process,Yes -gateway.modules.workflows.methods.methodAi.actions.process,time,header,Yes -gateway.modules.workflows.methods.methodAi.actions.process,typing,header,Yes -gateway.modules.workflows.methods.methodAi.actions.summarizeDocument,logging,header,Yes -gateway.modules.workflows.methods.methodAi.actions.summarizeDocument,modules.datamodels.datamodelChat,header,Yes -gateway.modules.workflows.methods.methodAi.actions.summarizeDocument,typing,header,Yes -gateway.modules.workflows.methods.methodAi.actions.translateDocument,logging,header,Yes -gateway.modules.workflows.methods.methodAi.actions.translateDocument,modules.datamodels.datamodelChat,header,Yes -gateway.modules.workflows.methods.methodAi.actions.translateDocument,typing,header,Yes -gateway.modules.workflows.methods.methodAi.actions.webResearch,logging,header,Yes -gateway.modules.workflows.methods.methodAi.actions.webResearch,modules.datamodels.datamodelChat,header,Yes -gateway.modules.workflows.methods.methodAi.actions.webResearch,re,header,Yes -gateway.modules.workflows.methods.methodAi.actions.webResearch,time,header,Yes -gateway.modules.workflows.methods.methodAi.actions.webResearch,typing,header,Yes -gateway.modules.workflows.methods.methodAi.helpers.csvProcessing,logging,header,Yes -gateway.modules.workflows.methods.methodAi.helpers.csvProcessing,typing,header,Yes -gateway.modules.workflows.methods.methodAi.methodAi,(relative) .actions.convertDocument,header,Yes -gateway.modules.workflows.methods.methodAi.methodAi,(relative) .actions.generateCode,header,Yes -gateway.modules.workflows.methods.methodAi.methodAi,(relative) .actions.generateDocument,header,Yes -gateway.modules.workflows.methods.methodAi.methodAi,(relative) .actions.process,header,Yes -gateway.modules.workflows.methods.methodAi.methodAi,(relative) .actions.summarizeDocument,header,Yes -gateway.modules.workflows.methods.methodAi.methodAi,(relative) .actions.translateDocument,header,Yes -gateway.modules.workflows.methods.methodAi.methodAi,(relative) .actions.webResearch,header,Yes -gateway.modules.workflows.methods.methodAi.methodAi,(relative) .helpers.csvProcessing,header,Yes -gateway.modules.workflows.methods.methodAi.methodAi,datetime,header,Yes -gateway.modules.workflows.methods.methodAi.methodAi,logging,header,Yes -gateway.modules.workflows.methods.methodAi.methodAi,modules.datamodels.datamodelWorkflowActions,header,Yes -gateway.modules.workflows.methods.methodAi.methodAi,modules.shared.frontendTypes,header,Yes -gateway.modules.workflows.methods.methodAi.methodAi,modules.workflows.methods.methodBase,header,Yes -gateway.modules.workflows.methods.methodBase,datetime,header,Yes -gateway.modules.workflows.methods.methodBase,functools,header,Yes -gateway.modules.workflows.methods.methodBase,inspect,header,Yes -gateway.modules.workflows.methods.methodBase,logging,header,Yes -gateway.modules.workflows.methods.methodBase,modules.datamodels.datamodelRbac,header,Yes -gateway.modules.workflows.methods.methodBase,modules.datamodels.datamodelWorkflowActions,header,Yes -gateway.modules.workflows.methods.methodBase,re,function _applyValidationRules,Yes -gateway.modules.workflows.methods.methodBase,re,function _generateMeaningfulFileName,Yes -gateway.modules.workflows.methods.methodBase,typing,header,Yes -gateway.modules.workflows.methods.methodChatbot.__init__,(relative) .methodChatbot,header,Yes -gateway.modules.workflows.methods.methodChatbot.actions.queryDatabase,json,header,Yes -gateway.modules.workflows.methods.methodChatbot.actions.queryDatabase,logging,header,Yes -gateway.modules.workflows.methods.methodChatbot.actions.queryDatabase,modules.connectors.connectorPreprocessor,header,Yes -gateway.modules.workflows.methods.methodChatbot.actions.queryDatabase,modules.datamodels.datamodelChat,header,Yes -gateway.modules.workflows.methods.methodChatbot.actions.queryDatabase,modules.datamodels.datamodelDocref,function queryDatabase,Yes -gateway.modules.workflows.methods.methodChatbot.actions.queryDatabase,modules.workflows.methods.methodBase,header,Yes -gateway.modules.workflows.methods.methodChatbot.actions.queryDatabase,time,header,Yes -gateway.modules.workflows.methods.methodChatbot.actions.queryDatabase,typing,header,Yes -gateway.modules.workflows.methods.methodChatbot.methodChatbot,(relative) .actions.queryDatabase,header,Yes -gateway.modules.workflows.methods.methodChatbot.methodChatbot,logging,header,Yes -gateway.modules.workflows.methods.methodChatbot.methodChatbot,modules.datamodels.datamodelWorkflowActions,header,Yes -gateway.modules.workflows.methods.methodChatbot.methodChatbot,modules.shared.frontendTypes,header,Yes -gateway.modules.workflows.methods.methodChatbot.methodChatbot,modules.workflows.methods.methodBase,header,Yes -gateway.modules.workflows.methods.methodContext.__init__,(relative) .methodContext,header,Yes -gateway.modules.workflows.methods.methodContext.actions.__init__,(relative) .extractContent,header,Yes -gateway.modules.workflows.methods.methodContext.actions.__init__,(relative) .getDocumentIndex,header,Yes -gateway.modules.workflows.methods.methodContext.actions.__init__,(relative) .neutralizeData,header,Yes -gateway.modules.workflows.methods.methodContext.actions.__init__,(relative) .triggerPreprocessingServer,header,Yes -gateway.modules.workflows.methods.methodContext.actions.extractContent,logging,header,Yes -gateway.modules.workflows.methods.methodContext.actions.extractContent,modules.datamodels.datamodelChat,header,Yes -gateway.modules.workflows.methods.methodContext.actions.extractContent,modules.datamodels.datamodelDocref,header,Yes -gateway.modules.workflows.methods.methodContext.actions.extractContent,modules.datamodels.datamodelExtraction,header,Yes -gateway.modules.workflows.methods.methodContext.actions.extractContent,time,header,Yes -gateway.modules.workflows.methods.methodContext.actions.extractContent,typing,header,Yes -gateway.modules.workflows.methods.methodContext.actions.getDocumentIndex,json,header,Yes -gateway.modules.workflows.methods.methodContext.actions.getDocumentIndex,logging,header,Yes -gateway.modules.workflows.methods.methodContext.actions.getDocumentIndex,modules.datamodels.datamodelChat,header,Yes -gateway.modules.workflows.methods.methodContext.actions.getDocumentIndex,typing,header,Yes -gateway.modules.workflows.methods.methodContext.actions.neutralizeData,logging,header,Yes -gateway.modules.workflows.methods.methodContext.actions.neutralizeData,modules.datamodels.datamodelChat,header,Yes -gateway.modules.workflows.methods.methodContext.actions.neutralizeData,modules.datamodels.datamodelDocref,header,Yes -gateway.modules.workflows.methods.methodContext.actions.neutralizeData,modules.datamodels.datamodelExtraction,header,Yes -gateway.modules.workflows.methods.methodContext.actions.neutralizeData,time,header,Yes -gateway.modules.workflows.methods.methodContext.actions.neutralizeData,typing,header,Yes -gateway.modules.workflows.methods.methodContext.actions.triggerPreprocessingServer,aiohttp,header,Yes -gateway.modules.workflows.methods.methodContext.actions.triggerPreprocessingServer,json,header,Yes -gateway.modules.workflows.methods.methodContext.actions.triggerPreprocessingServer,logging,header,Yes -gateway.modules.workflows.methods.methodContext.actions.triggerPreprocessingServer,modules.datamodels.datamodelChat,header,Yes -gateway.modules.workflows.methods.methodContext.actions.triggerPreprocessingServer,modules.shared.configuration,header,Yes -gateway.modules.workflows.methods.methodContext.actions.triggerPreprocessingServer,typing,header,Yes -gateway.modules.workflows.methods.methodContext.helpers.documentIndex,datetime,header,Yes -gateway.modules.workflows.methods.methodContext.helpers.documentIndex,logging,header,Yes -gateway.modules.workflows.methods.methodContext.helpers.documentIndex,typing,header,Yes -gateway.modules.workflows.methods.methodContext.helpers.formatting,logging,header,Yes -gateway.modules.workflows.methods.methodContext.helpers.formatting,typing,header,Yes -gateway.modules.workflows.methods.methodContext.methodContext,(relative) .actions.extractContent,header,Yes -gateway.modules.workflows.methods.methodContext.methodContext,(relative) .actions.getDocumentIndex,header,Yes -gateway.modules.workflows.methods.methodContext.methodContext,(relative) .actions.neutralizeData,header,Yes -gateway.modules.workflows.methods.methodContext.methodContext,(relative) .actions.triggerPreprocessingServer,header,Yes -gateway.modules.workflows.methods.methodContext.methodContext,(relative) .helpers.documentIndex,header,Yes -gateway.modules.workflows.methods.methodContext.methodContext,(relative) .helpers.formatting,header,Yes -gateway.modules.workflows.methods.methodContext.methodContext,logging,header,Yes -gateway.modules.workflows.methods.methodContext.methodContext,modules.datamodels.datamodelWorkflowActions,header,Yes -gateway.modules.workflows.methods.methodContext.methodContext,modules.shared.frontendTypes,header,Yes -gateway.modules.workflows.methods.methodContext.methodContext,modules.workflows.methods.methodBase,header,Yes -gateway.modules.workflows.methods.methodJira.__init__,(relative) .methodJira,header,Yes -gateway.modules.workflows.methods.methodJira.actions.__init__,(relative) .connectJira,header,Yes -gateway.modules.workflows.methods.methodJira.actions.__init__,(relative) .createCsvContent,header,Yes -gateway.modules.workflows.methods.methodJira.actions.__init__,(relative) .createExcelContent,header,Yes -gateway.modules.workflows.methods.methodJira.actions.__init__,(relative) .exportTicketsAsJson,header,Yes -gateway.modules.workflows.methods.methodJira.actions.__init__,(relative) .importTicketsFromJson,header,Yes -gateway.modules.workflows.methods.methodJira.actions.__init__,(relative) .mergeTicketData,header,Yes -gateway.modules.workflows.methods.methodJira.actions.__init__,(relative) .parseCsvContent,header,Yes -gateway.modules.workflows.methods.methodJira.actions.__init__,(relative) .parseExcelContent,header,Yes -gateway.modules.workflows.methods.methodJira.actions.connectJira,json,header,Yes -gateway.modules.workflows.methods.methodJira.actions.connectJira,logging,header,Yes -gateway.modules.workflows.methods.methodJira.actions.connectJira,modules.datamodels.datamodelChat,header,Yes -gateway.modules.workflows.methods.methodJira.actions.connectJira,modules.shared.configuration,header,Yes -gateway.modules.workflows.methods.methodJira.actions.connectJira,typing,header,Yes -gateway.modules.workflows.methods.methodJira.actions.connectJira,uuid,header,Yes -gateway.modules.workflows.methods.methodJira.actions.createCsvContent,base64,header,Yes -gateway.modules.workflows.methods.methodJira.actions.createCsvContent,csv,header,Yes -gateway.modules.workflows.methods.methodJira.actions.createCsvContent,datetime,header,Yes -gateway.modules.workflows.methods.methodJira.actions.createCsvContent,io,header,Yes -gateway.modules.workflows.methods.methodJira.actions.createCsvContent,json,header,Yes -gateway.modules.workflows.methods.methodJira.actions.createCsvContent,logging,header,Yes -gateway.modules.workflows.methods.methodJira.actions.createCsvContent,modules.datamodels.datamodelChat,header,Yes -gateway.modules.workflows.methods.methodJira.actions.createCsvContent,pandas,header,Yes -gateway.modules.workflows.methods.methodJira.actions.createCsvContent,typing,header,Yes -gateway.modules.workflows.methods.methodJira.actions.createExcelContent,base64,header,Yes -gateway.modules.workflows.methods.methodJira.actions.createExcelContent,csv,header,Yes -gateway.modules.workflows.methods.methodJira.actions.createExcelContent,datetime,header,Yes -gateway.modules.workflows.methods.methodJira.actions.createExcelContent,io,header,Yes -gateway.modules.workflows.methods.methodJira.actions.createExcelContent,json,header,Yes -gateway.modules.workflows.methods.methodJira.actions.createExcelContent,logging,header,Yes -gateway.modules.workflows.methods.methodJira.actions.createExcelContent,modules.datamodels.datamodelChat,header,Yes -gateway.modules.workflows.methods.methodJira.actions.createExcelContent,pandas,header,Yes -gateway.modules.workflows.methods.methodJira.actions.createExcelContent,typing,header,Yes -gateway.modules.workflows.methods.methodJira.actions.exportTicketsAsJson,json,header,Yes -gateway.modules.workflows.methods.methodJira.actions.exportTicketsAsJson,logging,header,Yes -gateway.modules.workflows.methods.methodJira.actions.exportTicketsAsJson,modules.datamodels.datamodelChat,header,Yes -gateway.modules.workflows.methods.methodJira.actions.exportTicketsAsJson,typing,header,Yes -gateway.modules.workflows.methods.methodJira.actions.importTicketsFromJson,json,header,Yes -gateway.modules.workflows.methods.methodJira.actions.importTicketsFromJson,logging,header,Yes -gateway.modules.workflows.methods.methodJira.actions.importTicketsFromJson,modules.datamodels.datamodelChat,header,Yes -gateway.modules.workflows.methods.methodJira.actions.importTicketsFromJson,typing,header,Yes -gateway.modules.workflows.methods.methodJira.actions.mergeTicketData,json,header,Yes -gateway.modules.workflows.methods.methodJira.actions.mergeTicketData,logging,header,Yes -gateway.modules.workflows.methods.methodJira.actions.mergeTicketData,modules.datamodels.datamodelChat,header,Yes -gateway.modules.workflows.methods.methodJira.actions.mergeTicketData,typing,header,Yes -gateway.modules.workflows.methods.methodJira.actions.parseCsvContent,io,header,Yes -gateway.modules.workflows.methods.methodJira.actions.parseCsvContent,json,header,Yes -gateway.modules.workflows.methods.methodJira.actions.parseCsvContent,logging,header,Yes -gateway.modules.workflows.methods.methodJira.actions.parseCsvContent,modules.datamodels.datamodelChat,header,Yes -gateway.modules.workflows.methods.methodJira.actions.parseCsvContent,pandas,header,Yes -gateway.modules.workflows.methods.methodJira.actions.parseCsvContent,typing,header,Yes -gateway.modules.workflows.methods.methodJira.actions.parseExcelContent,io,header,Yes -gateway.modules.workflows.methods.methodJira.actions.parseExcelContent,json,header,Yes -gateway.modules.workflows.methods.methodJira.actions.parseExcelContent,logging,header,Yes -gateway.modules.workflows.methods.methodJira.actions.parseExcelContent,modules.datamodels.datamodelChat,header,Yes -gateway.modules.workflows.methods.methodJira.actions.parseExcelContent,pandas,header,Yes -gateway.modules.workflows.methods.methodJira.actions.parseExcelContent,typing,header,Yes -gateway.modules.workflows.methods.methodJira.helpers.adfConverter,logging,header,Yes -gateway.modules.workflows.methods.methodJira.helpers.adfConverter,typing,header,Yes -gateway.modules.workflows.methods.methodJira.helpers.documentParsing,json,header,Yes -gateway.modules.workflows.methods.methodJira.helpers.documentParsing,logging,header,Yes -gateway.modules.workflows.methods.methodJira.helpers.documentParsing,modules.datamodels.datamodelDocref,header,Yes -gateway.modules.workflows.methods.methodJira.helpers.documentParsing,typing,header,Yes -gateway.modules.workflows.methods.methodJira.methodJira,(relative) .actions.connectJira,header,Yes -gateway.modules.workflows.methods.methodJira.methodJira,(relative) .actions.createCsvContent,header,Yes -gateway.modules.workflows.methods.methodJira.methodJira,(relative) .actions.createExcelContent,header,Yes -gateway.modules.workflows.methods.methodJira.methodJira,(relative) .actions.exportTicketsAsJson,header,Yes -gateway.modules.workflows.methods.methodJira.methodJira,(relative) .actions.importTicketsFromJson,header,Yes -gateway.modules.workflows.methods.methodJira.methodJira,(relative) .actions.mergeTicketData,header,Yes -gateway.modules.workflows.methods.methodJira.methodJira,(relative) .actions.parseCsvContent,header,Yes -gateway.modules.workflows.methods.methodJira.methodJira,(relative) .actions.parseExcelContent,header,Yes -gateway.modules.workflows.methods.methodJira.methodJira,(relative) .helpers.adfConverter,header,Yes -gateway.modules.workflows.methods.methodJira.methodJira,(relative) .helpers.documentParsing,header,Yes -gateway.modules.workflows.methods.methodJira.methodJira,logging,header,Yes -gateway.modules.workflows.methods.methodJira.methodJira,modules.datamodels.datamodelWorkflowActions,header,Yes -gateway.modules.workflows.methods.methodJira.methodJira,modules.shared.frontendTypes,header,Yes -gateway.modules.workflows.methods.methodJira.methodJira,modules.workflows.methods.methodBase,header,Yes -gateway.modules.workflows.methods.methodJira.methodJira,typing,header,Yes -gateway.modules.workflows.methods.methodOutlook.__init__,(relative) .methodOutlook,header,Yes -gateway.modules.workflows.methods.methodOutlook.actions.__init__,(relative) .composeAndDraftEmailWithContext,header,Yes -gateway.modules.workflows.methods.methodOutlook.actions.__init__,(relative) .readEmails,header,Yes -gateway.modules.workflows.methods.methodOutlook.actions.__init__,(relative) .searchEmails,header,Yes -gateway.modules.workflows.methods.methodOutlook.actions.__init__,(relative) .sendDraftEmail,header,Yes -gateway.modules.workflows.methods.methodOutlook.actions.composeAndDraftEmailWithContext,base64,header,Yes -gateway.modules.workflows.methods.methodOutlook.actions.composeAndDraftEmailWithContext,json,header,Yes -gateway.modules.workflows.methods.methodOutlook.actions.composeAndDraftEmailWithContext,logging,header,Yes -gateway.modules.workflows.methods.methodOutlook.actions.composeAndDraftEmailWithContext,modules.datamodels.datamodelChat,header,Yes -gateway.modules.workflows.methods.methodOutlook.actions.composeAndDraftEmailWithContext,modules.datamodels.datamodelDocref,function composeAndDraftEmailWithContext,Yes -gateway.modules.workflows.methods.methodOutlook.actions.composeAndDraftEmailWithContext,modules.datamodels.datamodelDocref,function composeAndDraftEmailWithContext,Yes -gateway.modules.workflows.methods.methodOutlook.actions.composeAndDraftEmailWithContext,modules.datamodels.datamodelDocref,function composeAndDraftEmailWithContext,Yes -gateway.modules.workflows.methods.methodOutlook.actions.composeAndDraftEmailWithContext,modules.datamodels.datamodelDocref,function composeAndDraftEmailWithContext,Yes -gateway.modules.workflows.methods.methodOutlook.actions.composeAndDraftEmailWithContext,modules.datamodels.datamodelDocref,function composeAndDraftEmailWithContext,Yes -gateway.modules.workflows.methods.methodOutlook.actions.composeAndDraftEmailWithContext,modules.datamodels.datamodelDocref,function composeAndDraftEmailWithContext,Yes -gateway.modules.workflows.methods.methodOutlook.actions.composeAndDraftEmailWithContext,requests,header,Yes -gateway.modules.workflows.methods.methodOutlook.actions.composeAndDraftEmailWithContext,typing,header,Yes -gateway.modules.workflows.methods.methodOutlook.actions.readEmails,json,header,Yes -gateway.modules.workflows.methods.methodOutlook.actions.readEmails,logging,header,Yes -gateway.modules.workflows.methods.methodOutlook.actions.readEmails,modules.datamodels.datamodelChat,header,Yes -gateway.modules.workflows.methods.methodOutlook.actions.readEmails,requests,header,Yes -gateway.modules.workflows.methods.methodOutlook.actions.readEmails,time,header,Yes -gateway.modules.workflows.methods.methodOutlook.actions.readEmails,typing,header,Yes -gateway.modules.workflows.methods.methodOutlook.actions.searchEmails,json,header,Yes -gateway.modules.workflows.methods.methodOutlook.actions.searchEmails,logging,header,Yes -gateway.modules.workflows.methods.methodOutlook.actions.searchEmails,modules.datamodels.datamodelChat,header,Yes -gateway.modules.workflows.methods.methodOutlook.actions.searchEmails,requests,header,Yes -gateway.modules.workflows.methods.methodOutlook.actions.searchEmails,typing,header,Yes -gateway.modules.workflows.methods.methodOutlook.actions.sendDraftEmail,json,header,Yes -gateway.modules.workflows.methods.methodOutlook.actions.sendDraftEmail,logging,header,Yes -gateway.modules.workflows.methods.methodOutlook.actions.sendDraftEmail,modules.datamodels.datamodelChat,header,Yes -gateway.modules.workflows.methods.methodOutlook.actions.sendDraftEmail,modules.datamodels.datamodelDocref,function sendDraftEmail,Yes -gateway.modules.workflows.methods.methodOutlook.actions.sendDraftEmail,requests,header,Yes -gateway.modules.workflows.methods.methodOutlook.actions.sendDraftEmail,time,header,Yes -gateway.modules.workflows.methods.methodOutlook.actions.sendDraftEmail,typing,header,Yes -gateway.modules.workflows.methods.methodOutlook.helpers.connection,logging,header,Yes -gateway.modules.workflows.methods.methodOutlook.helpers.connection,requests,header,Yes -gateway.modules.workflows.methods.methodOutlook.helpers.connection,typing,header,Yes -gateway.modules.workflows.methods.methodOutlook.helpers.emailProcessing,logging,header,Yes -gateway.modules.workflows.methods.methodOutlook.helpers.emailProcessing,re,header,Yes -gateway.modules.workflows.methods.methodOutlook.helpers.emailProcessing,typing,header,Yes -gateway.modules.workflows.methods.methodOutlook.helpers.folderManagement,logging,header,Yes -gateway.modules.workflows.methods.methodOutlook.helpers.folderManagement,requests,header,Yes -gateway.modules.workflows.methods.methodOutlook.helpers.folderManagement,typing,header,Yes -gateway.modules.workflows.methods.methodOutlook.methodOutlook,(relative) .actions.composeAndDraftEmailWithContext,header,Yes -gateway.modules.workflows.methods.methodOutlook.methodOutlook,(relative) .actions.readEmails,header,Yes -gateway.modules.workflows.methods.methodOutlook.methodOutlook,(relative) .actions.searchEmails,header,Yes -gateway.modules.workflows.methods.methodOutlook.methodOutlook,(relative) .actions.sendDraftEmail,header,Yes -gateway.modules.workflows.methods.methodOutlook.methodOutlook,(relative) .helpers.connection,header,Yes -gateway.modules.workflows.methods.methodOutlook.methodOutlook,(relative) .helpers.emailProcessing,header,Yes -gateway.modules.workflows.methods.methodOutlook.methodOutlook,(relative) .helpers.folderManagement,header,Yes -gateway.modules.workflows.methods.methodOutlook.methodOutlook,datetime,header,Yes -gateway.modules.workflows.methods.methodOutlook.methodOutlook,logging,header,Yes -gateway.modules.workflows.methods.methodOutlook.methodOutlook,modules.datamodels.datamodelWorkflowActions,header,Yes -gateway.modules.workflows.methods.methodOutlook.methodOutlook,modules.shared.frontendTypes,header,Yes -gateway.modules.workflows.methods.methodOutlook.methodOutlook,modules.workflows.methods.methodBase,header,Yes -gateway.modules.workflows.methods.methodSharepoint.__init__,(relative) .methodSharepoint,header,Yes -gateway.modules.workflows.methods.methodSharepoint.actions.__init__,(relative) .analyzeFolderUsage,header,Yes -gateway.modules.workflows.methods.methodSharepoint.actions.__init__,(relative) .copyFile,header,Yes -gateway.modules.workflows.methods.methodSharepoint.actions.__init__,(relative) .downloadFileByPath,header,Yes -gateway.modules.workflows.methods.methodSharepoint.actions.__init__,(relative) .findDocumentPath,header,Yes -gateway.modules.workflows.methods.methodSharepoint.actions.__init__,(relative) .findSiteByUrl,header,Yes -gateway.modules.workflows.methods.methodSharepoint.actions.__init__,(relative) .listDocuments,header,Yes -gateway.modules.workflows.methods.methodSharepoint.actions.__init__,(relative) .readDocuments,header,Yes -gateway.modules.workflows.methods.methodSharepoint.actions.__init__,(relative) .uploadDocument,header,Yes -gateway.modules.workflows.methods.methodSharepoint.actions.__init__,(relative) .uploadFile,header,Yes -gateway.modules.workflows.methods.methodSharepoint.actions.analyzeFolderUsage,datetime,header,Yes -gateway.modules.workflows.methods.methodSharepoint.actions.analyzeFolderUsage,json,header,Yes -gateway.modules.workflows.methods.methodSharepoint.actions.analyzeFolderUsage,logging,header,Yes -gateway.modules.workflows.methods.methodSharepoint.actions.analyzeFolderUsage,modules.datamodels.datamodelChat,header,Yes -gateway.modules.workflows.methods.methodSharepoint.actions.analyzeFolderUsage,time,header,Yes -gateway.modules.workflows.methods.methodSharepoint.actions.analyzeFolderUsage,typing,header,Yes -gateway.modules.workflows.methods.methodSharepoint.actions.copyFile,json,header,Yes -gateway.modules.workflows.methods.methodSharepoint.actions.copyFile,logging,header,Yes -gateway.modules.workflows.methods.methodSharepoint.actions.copyFile,modules.datamodels.datamodelChat,header,Yes -gateway.modules.workflows.methods.methodSharepoint.actions.copyFile,modules.datamodels.datamodelDocref,function copyFile,Yes -gateway.modules.workflows.methods.methodSharepoint.actions.copyFile,typing,header,Yes -gateway.modules.workflows.methods.methodSharepoint.actions.downloadFileByPath,base64,header,Yes -gateway.modules.workflows.methods.methodSharepoint.actions.downloadFileByPath,json,header,Yes -gateway.modules.workflows.methods.methodSharepoint.actions.downloadFileByPath,logging,header,Yes -gateway.modules.workflows.methods.methodSharepoint.actions.downloadFileByPath,modules.datamodels.datamodelChat,header,Yes -gateway.modules.workflows.methods.methodSharepoint.actions.downloadFileByPath,modules.datamodels.datamodelDocref,function downloadFileByPath,Yes -gateway.modules.workflows.methods.methodSharepoint.actions.downloadFileByPath,os,header,Yes -gateway.modules.workflows.methods.methodSharepoint.actions.downloadFileByPath,typing,header,Yes -gateway.modules.workflows.methods.methodSharepoint.actions.findDocumentPath,json,header,Yes -gateway.modules.workflows.methods.methodSharepoint.actions.findDocumentPath,logging,header,Yes -gateway.modules.workflows.methods.methodSharepoint.actions.findDocumentPath,modules.datamodels.datamodelChat,header,Yes -gateway.modules.workflows.methods.methodSharepoint.actions.findDocumentPath,time,header,Yes -gateway.modules.workflows.methods.methodSharepoint.actions.findDocumentPath,typing,header,Yes -gateway.modules.workflows.methods.methodSharepoint.actions.findDocumentPath,urllib.parse,header,Yes -gateway.modules.workflows.methods.methodSharepoint.actions.findSiteByUrl,json,header,Yes -gateway.modules.workflows.methods.methodSharepoint.actions.findSiteByUrl,logging,header,Yes -gateway.modules.workflows.methods.methodSharepoint.actions.findSiteByUrl,modules.datamodels.datamodelChat,header,Yes -gateway.modules.workflows.methods.methodSharepoint.actions.findSiteByUrl,typing,header,Yes -gateway.modules.workflows.methods.methodSharepoint.actions.listDocuments,json,header,Yes -gateway.modules.workflows.methods.methodSharepoint.actions.listDocuments,logging,header,Yes -gateway.modules.workflows.methods.methodSharepoint.actions.listDocuments,modules.datamodels.datamodelChat,header,Yes -gateway.modules.workflows.methods.methodSharepoint.actions.listDocuments,time,header,Yes -gateway.modules.workflows.methods.methodSharepoint.actions.listDocuments,typing,header,Yes -gateway.modules.workflows.methods.methodSharepoint.actions.listDocuments,urllib.parse,header,Yes -gateway.modules.workflows.methods.methodSharepoint.actions.readDocuments,base64,header,Yes -gateway.modules.workflows.methods.methodSharepoint.actions.readDocuments,json,header,Yes -gateway.modules.workflows.methods.methodSharepoint.actions.readDocuments,logging,header,Yes -gateway.modules.workflows.methods.methodSharepoint.actions.readDocuments,modules.datamodels.datamodelChat,header,Yes -gateway.modules.workflows.methods.methodSharepoint.actions.readDocuments,time,header,Yes -gateway.modules.workflows.methods.methodSharepoint.actions.readDocuments,typing,header,Yes -gateway.modules.workflows.methods.methodSharepoint.actions.uploadDocument,json,header,Yes -gateway.modules.workflows.methods.methodSharepoint.actions.uploadDocument,logging,header,Yes -gateway.modules.workflows.methods.methodSharepoint.actions.uploadDocument,modules.datamodels.datamodelChat,header,Yes -gateway.modules.workflows.methods.methodSharepoint.actions.uploadDocument,time,header,Yes -gateway.modules.workflows.methods.methodSharepoint.actions.uploadDocument,typing,header,Yes -gateway.modules.workflows.methods.methodSharepoint.actions.uploadDocument,urllib.parse,header,Yes -gateway.modules.workflows.methods.methodSharepoint.actions.uploadFile,base64,header,Yes -gateway.modules.workflows.methods.methodSharepoint.actions.uploadFile,json,header,Yes -gateway.modules.workflows.methods.methodSharepoint.actions.uploadFile,logging,header,Yes -gateway.modules.workflows.methods.methodSharepoint.actions.uploadFile,modules.datamodels.datamodelChat,header,Yes -gateway.modules.workflows.methods.methodSharepoint.actions.uploadFile,modules.datamodels.datamodelDocref,function uploadFile,Yes -gateway.modules.workflows.methods.methodSharepoint.actions.uploadFile,modules.datamodels.datamodelDocref,function uploadFile,Yes -gateway.modules.workflows.methods.methodSharepoint.actions.uploadFile,typing,header,Yes -gateway.modules.workflows.methods.methodSharepoint.helpers.apiClient,aiohttp,header,Yes -gateway.modules.workflows.methods.methodSharepoint.helpers.apiClient,asyncio,header,Yes -gateway.modules.workflows.methods.methodSharepoint.helpers.apiClient,logging,header,Yes -gateway.modules.workflows.methods.methodSharepoint.helpers.apiClient,typing,header,Yes -gateway.modules.workflows.methods.methodSharepoint.helpers.connection,logging,header,Yes -gateway.modules.workflows.methods.methodSharepoint.helpers.connection,typing,header,Yes -gateway.modules.workflows.methods.methodSharepoint.helpers.documentParsing,json,header,Yes -gateway.modules.workflows.methods.methodSharepoint.helpers.documentParsing,logging,header,Yes -gateway.modules.workflows.methods.methodSharepoint.helpers.documentParsing,modules.datamodels.datamodelDocref,function parseDocumentListForFoundDocuments,Yes -gateway.modules.workflows.methods.methodSharepoint.helpers.documentParsing,modules.datamodels.datamodelDocref,function parseDocumentListForFolder,Yes -gateway.modules.workflows.methods.methodSharepoint.helpers.documentParsing,typing,header,Yes -gateway.modules.workflows.methods.methodSharepoint.helpers.pathProcessing,logging,header,Yes -gateway.modules.workflows.methods.methodSharepoint.helpers.pathProcessing,re,header,Yes -gateway.modules.workflows.methods.methodSharepoint.helpers.pathProcessing,typing,header,Yes -gateway.modules.workflows.methods.methodSharepoint.helpers.siteDiscovery,logging,header,Yes -gateway.modules.workflows.methods.methodSharepoint.helpers.siteDiscovery,typing,header,Yes -gateway.modules.workflows.methods.methodSharepoint.helpers.siteDiscovery,urllib.parse,header,Yes -gateway.modules.workflows.methods.methodSharepoint.methodSharepoint,(relative) .actions.analyzeFolderUsage,header,Yes -gateway.modules.workflows.methods.methodSharepoint.methodSharepoint,(relative) .actions.copyFile,header,Yes -gateway.modules.workflows.methods.methodSharepoint.methodSharepoint,(relative) .actions.downloadFileByPath,header,Yes -gateway.modules.workflows.methods.methodSharepoint.methodSharepoint,(relative) .actions.findDocumentPath,header,Yes -gateway.modules.workflows.methods.methodSharepoint.methodSharepoint,(relative) .actions.findSiteByUrl,header,Yes -gateway.modules.workflows.methods.methodSharepoint.methodSharepoint,(relative) .actions.listDocuments,header,Yes -gateway.modules.workflows.methods.methodSharepoint.methodSharepoint,(relative) .actions.readDocuments,header,Yes -gateway.modules.workflows.methods.methodSharepoint.methodSharepoint,(relative) .actions.uploadDocument,header,Yes -gateway.modules.workflows.methods.methodSharepoint.methodSharepoint,(relative) .actions.uploadFile,header,Yes -gateway.modules.workflows.methods.methodSharepoint.methodSharepoint,(relative) .helpers.apiClient,header,Yes -gateway.modules.workflows.methods.methodSharepoint.methodSharepoint,(relative) .helpers.connection,header,Yes -gateway.modules.workflows.methods.methodSharepoint.methodSharepoint,(relative) .helpers.documentParsing,header,Yes -gateway.modules.workflows.methods.methodSharepoint.methodSharepoint,(relative) .helpers.pathProcessing,header,Yes -gateway.modules.workflows.methods.methodSharepoint.methodSharepoint,(relative) .helpers.siteDiscovery,header,Yes -gateway.modules.workflows.methods.methodSharepoint.methodSharepoint,logging,header,Yes -gateway.modules.workflows.methods.methodSharepoint.methodSharepoint,modules.datamodels.datamodelWorkflowActions,header,Yes -gateway.modules.workflows.methods.methodSharepoint.methodSharepoint,modules.shared.frontendTypes,header,Yes -gateway.modules.workflows.methods.methodSharepoint.methodSharepoint,modules.workflows.methods.methodBase,header,Yes -gateway.modules.workflows.processing.adaptive.__init__,(relative) .contentValidator,header,Yes -gateway.modules.workflows.processing.adaptive.__init__,(relative) .learningEngine,header,Yes -gateway.modules.workflows.processing.adaptive.__init__,(relative) .progressTracker,header,Yes -gateway.modules.workflows.processing.adaptive.adaptiveLearningEngine,collections,header,Yes -gateway.modules.workflows.processing.adaptive.adaptiveLearningEngine,datetime,header,Yes -gateway.modules.workflows.processing.adaptive.adaptiveLearningEngine,logging,header,Yes -gateway.modules.workflows.processing.adaptive.adaptiveLearningEngine,typing,header,Yes -gateway.modules.workflows.processing.adaptive.contentValidator,base64,header,Yes -gateway.modules.workflows.processing.adaptive.contentValidator,csv,function _extractCodeFileStatistics,Yes -gateway.modules.workflows.processing.adaptive.contentValidator,io,function _extractCodeFileStatistics,Yes -gateway.modules.workflows.processing.adaptive.contentValidator,json,header,Yes -gateway.modules.workflows.processing.adaptive.contentValidator,logging,header,Yes -gateway.modules.workflows.processing.adaptive.contentValidator,re,header,Yes -gateway.modules.workflows.processing.adaptive.contentValidator,typing,header,Yes -gateway.modules.workflows.processing.adaptive.contentValidator,xml.etree.ElementTree,function _extractCodeFileStatistics,Yes -gateway.modules.workflows.processing.adaptive.learningEngine,datetime,header,Yes -gateway.modules.workflows.processing.adaptive.learningEngine,logging,header,Yes -gateway.modules.workflows.processing.adaptive.learningEngine,typing,header,Yes -gateway.modules.workflows.processing.adaptive.progressTracker,datetime,header,Yes -gateway.modules.workflows.processing.adaptive.progressTracker,logging,header,Yes -gateway.modules.workflows.processing.adaptive.progressTracker,typing,header,Yes -gateway.modules.workflows.processing.core.actionExecutor,logging,header,Yes -gateway.modules.workflows.processing.core.actionExecutor,modules.datamodels.datamodelChat,header,Yes -gateway.modules.workflows.processing.core.actionExecutor,modules.datamodels.datamodelChat,header,Yes -gateway.modules.workflows.processing.core.actionExecutor,modules.workflows.processing.core.messageCreator,function _createActionCompletionMessage,Yes -gateway.modules.workflows.processing.core.actionExecutor,modules.workflows.processing.shared.methodDiscovery,header,Yes -gateway.modules.workflows.processing.core.actionExecutor,modules.workflows.processing.shared.stateTools,header,Yes -gateway.modules.workflows.processing.core.actionExecutor,time,function executeSingleAction,Yes -gateway.modules.workflows.processing.core.actionExecutor,typing,header,Yes -gateway.modules.workflows.processing.core.messageCreator,logging,header,Yes -gateway.modules.workflows.processing.core.messageCreator,modules.datamodels.datamodelChat,header,Yes -gateway.modules.workflows.processing.core.messageCreator,modules.datamodels.datamodelChat,header,Yes -gateway.modules.workflows.processing.core.messageCreator,modules.workflows.processing.shared.stateTools,header,Yes -gateway.modules.workflows.processing.core.messageCreator,typing,header,Yes -gateway.modules.workflows.processing.core.taskPlanner,json,header,Yes -gateway.modules.workflows.processing.core.taskPlanner,logging,header,Yes -gateway.modules.workflows.processing.core.taskPlanner,modules.datamodels.datamodelAi,header,Yes -gateway.modules.workflows.processing.core.taskPlanner,modules.datamodels.datamodelChat,header,Yes -gateway.modules.workflows.processing.core.taskPlanner,modules.workflows.processing.shared.promptGenerationTaskplan,header,Yes -gateway.modules.workflows.processing.core.taskPlanner,modules.workflows.processing.shared.stateTools,header,Yes -gateway.modules.workflows.processing.core.taskPlanner,typing,header,Yes -gateway.modules.workflows.processing.core.validator,logging,header,Yes -gateway.modules.workflows.processing.core.validator,typing,header,Yes -gateway.modules.workflows.processing.modes.modeAutomation,datetime,function _createActionItem,Yes -gateway.modules.workflows.processing.modes.modeAutomation,json,header,Yes -gateway.modules.workflows.processing.modes.modeAutomation,logging,header,Yes -gateway.modules.workflows.processing.modes.modeAutomation,modules.datamodels.datamodelChat,header,Yes -gateway.modules.workflows.processing.modes.modeAutomation,modules.datamodels.datamodelChat,header,Yes -gateway.modules.workflows.processing.modes.modeAutomation,modules.shared.timeUtils,header,Yes -gateway.modules.workflows.processing.modes.modeAutomation,modules.workflows.processing.modes.modeBase,header,Yes -gateway.modules.workflows.processing.modes.modeAutomation,modules.workflows.processing.shared.stateTools,header,Yes -gateway.modules.workflows.processing.modes.modeAutomation,typing,header,Yes -gateway.modules.workflows.processing.modes.modeAutomation,uuid,header,Yes -gateway.modules.workflows.processing.modes.modeAutomation,uuid,function _createActionItem,Yes -gateway.modules.workflows.processing.modes.modeBase,abc,header,Yes -gateway.modules.workflows.processing.modes.modeBase,logging,header,Yes -gateway.modules.workflows.processing.modes.modeBase,modules.datamodels.datamodelChat,header,Yes -gateway.modules.workflows.processing.modes.modeBase,modules.datamodels.datamodelChat,header,Yes -gateway.modules.workflows.processing.modes.modeBase,modules.workflows.processing.core.actionExecutor,header,Yes -gateway.modules.workflows.processing.modes.modeBase,modules.workflows.processing.core.messageCreator,header,Yes -gateway.modules.workflows.processing.modes.modeBase,modules.workflows.processing.core.taskPlanner,header,Yes -gateway.modules.workflows.processing.modes.modeBase,modules.workflows.processing.core.validator,header,Yes -gateway.modules.workflows.processing.modes.modeBase,typing,header,Yes -gateway.modules.workflows.processing.modes.modeDynamic,datetime,header,Yes -gateway.modules.workflows.processing.modes.modeDynamic,json,header,Yes -gateway.modules.workflows.processing.modes.modeDynamic,logging,header,Yes -gateway.modules.workflows.processing.modes.modeDynamic,modules.datamodels.datamodelAi,function _planSelect,Yes -gateway.modules.workflows.processing.modes.modeDynamic,modules.datamodels.datamodelAi,function _actExecute,Yes -gateway.modules.workflows.processing.modes.modeDynamic,modules.datamodels.datamodelAi,function _refineDecide,Yes -gateway.modules.workflows.processing.modes.modeDynamic,modules.datamodels.datamodelChat,header,Yes -gateway.modules.workflows.processing.modes.modeDynamic,modules.datamodels.datamodelChat,header,Yes -gateway.modules.workflows.processing.modes.modeDynamic,modules.datamodels.datamodelDocref,function _actExecute,Yes -gateway.modules.workflows.processing.modes.modeDynamic,modules.datamodels.datamodelDocref,function _planSelect,Yes -gateway.modules.workflows.processing.modes.modeDynamic,modules.datamodels.datamodelDocref,function _planSelect,Yes -gateway.modules.workflows.processing.modes.modeDynamic,modules.datamodels.datamodelWorkflow,function _planSelect,Yes -gateway.modules.workflows.processing.modes.modeDynamic,modules.datamodels.datamodelWorkflow,function _actExecute,Yes -gateway.modules.workflows.processing.modes.modeDynamic,modules.shared.jsonUtils,function _planSelect,Yes -gateway.modules.workflows.processing.modes.modeDynamic,modules.shared.jsonUtils,function _actExecute,Yes -gateway.modules.workflows.processing.modes.modeDynamic,modules.shared.jsonUtils,function _refineDecide,Yes -gateway.modules.workflows.processing.modes.modeDynamic,modules.shared.timeUtils,header,Yes -gateway.modules.workflows.processing.modes.modeDynamic,modules.workflows.processing.adaptive,header,Yes -gateway.modules.workflows.processing.modes.modeDynamic,modules.workflows.processing.adaptive.adaptiveLearningEngine,header,Yes -gateway.modules.workflows.processing.modes.modeDynamic,modules.workflows.processing.modes.modeBase,header,Yes -gateway.modules.workflows.processing.modes.modeDynamic,modules.workflows.processing.shared.executionState,header,Yes -gateway.modules.workflows.processing.modes.modeDynamic,modules.workflows.processing.shared.methodDiscovery,function _actExecute,Yes -gateway.modules.workflows.processing.modes.modeDynamic,modules.workflows.processing.shared.methodDiscovery,function _actExecute,Yes -gateway.modules.workflows.processing.modes.modeDynamic,modules.workflows.processing.shared.placeholderFactory,header,Yes -gateway.modules.workflows.processing.modes.modeDynamic,modules.workflows.processing.shared.promptGenerationActionsDynamic,header,Yes -gateway.modules.workflows.processing.modes.modeDynamic,modules.workflows.processing.shared.stateTools,header,Yes -gateway.modules.workflows.processing.modes.modeDynamic,re,header,Yes -gateway.modules.workflows.processing.modes.modeDynamic,time,header,Yes -gateway.modules.workflows.processing.modes.modeDynamic,typing,header,Yes -gateway.modules.workflows.processing.modes.modeDynamic,uuid,function _createActionItem,Yes -gateway.modules.workflows.processing.modes.modeDynamic,uuid,function _createActionItem,Yes -gateway.modules.workflows.processing.shared.executionState,logging,header,Yes -gateway.modules.workflows.processing.shared.executionState,modules.datamodels.datamodelChat,header,Yes -gateway.modules.workflows.processing.shared.executionState,typing,header,Yes -gateway.modules.workflows.processing.shared.methodDiscovery,importlib,header,Yes -gateway.modules.workflows.processing.shared.methodDiscovery,inspect,header,Yes -gateway.modules.workflows.processing.shared.methodDiscovery,logging,header,Yes -gateway.modules.workflows.processing.shared.methodDiscovery,modules.workflows.methods.methodBase,header,Yes -gateway.modules.workflows.processing.shared.methodDiscovery,pkgutil,header,Yes -gateway.modules.workflows.processing.shared.methodDiscovery,typing,header,Yes -gateway.modules.workflows.processing.shared.placeholderFactory,json,header,Yes -gateway.modules.workflows.processing.shared.placeholderFactory,logging,header,Yes -gateway.modules.workflows.processing.shared.placeholderFactory,modules.datamodels.datamodelChat,function extractReviewContent,Yes -gateway.modules.workflows.processing.shared.placeholderFactory,modules.datamodels.datamodelChat,function extractReviewContent,Yes -gateway.modules.workflows.processing.shared.placeholderFactory,modules.interfaces.interfaceDbApp,function extractLatestRefinementFeedback,Yes -gateway.modules.workflows.processing.shared.placeholderFactory,modules.interfaces.interfaceDbChat,function extractLatestRefinementFeedback,Yes -gateway.modules.workflows.processing.shared.placeholderFactory,modules.workflows.processing.shared.methodDiscovery,header,Yes -gateway.modules.workflows.processing.shared.placeholderFactory,typing,header,Yes -gateway.modules.workflows.processing.shared.promptGenerationActionsDynamic,json,header,Yes -gateway.modules.workflows.processing.shared.promptGenerationActionsDynamic,modules.datamodels.datamodelChat,header,Yes -gateway.modules.workflows.processing.shared.promptGenerationActionsDynamic,modules.workflows.processing.shared.methodDiscovery,header,Yes -gateway.modules.workflows.processing.shared.promptGenerationActionsDynamic,modules.workflows.processing.shared.placeholderFactory,header,Yes -gateway.modules.workflows.processing.shared.promptGenerationActionsDynamic,typing,header,Yes -gateway.modules.workflows.processing.shared.promptGenerationTaskplan,logging,header,Yes -gateway.modules.workflows.processing.shared.promptGenerationTaskplan,modules.datamodels.datamodelChat,header,Yes -gateway.modules.workflows.processing.shared.promptGenerationTaskplan,modules.workflows.processing.shared.placeholderFactory,header,Yes -gateway.modules.workflows.processing.shared.promptGenerationTaskplan,typing,header,Yes -gateway.modules.workflows.processing.shared.stateTools,logging,header,Yes -gateway.modules.workflows.processing.shared.stateTools,typing,header,Yes -gateway.modules.workflows.processing.workflowProcessor,json,header,Yes -gateway.modules.workflows.processing.workflowProcessor,logging,header,Yes -gateway.modules.workflows.processing.workflowProcessor,modules.datamodels,header,Yes -gateway.modules.workflows.processing.workflowProcessor,modules.datamodels.datamodelAi,header,Yes -gateway.modules.workflows.processing.workflowProcessor,modules.datamodels.datamodelChat,header,Yes -gateway.modules.workflows.processing.workflowProcessor,modules.datamodels.datamodelChat,header,Yes -gateway.modules.workflows.processing.workflowProcessor,modules.datamodels.datamodelWorkflow,header,Yes -gateway.modules.workflows.processing.workflowProcessor,modules.shared.jsonUtils,header,Yes -gateway.modules.workflows.processing.workflowProcessor,modules.workflows.processing.modes.modeAutomation,header,Yes -gateway.modules.workflows.processing.workflowProcessor,modules.workflows.processing.modes.modeBase,header,Yes -gateway.modules.workflows.processing.workflowProcessor,modules.workflows.processing.modes.modeDynamic,header,Yes -gateway.modules.workflows.processing.workflowProcessor,modules.workflows.processing.shared.stateTools,header,Yes -gateway.modules.workflows.processing.workflowProcessor,time,function generateTaskPlan,Yes -gateway.modules.workflows.processing.workflowProcessor,time,function executeTask,Yes -gateway.modules.workflows.processing.workflowProcessor,traceback,function fastPathExecute,Yes -gateway.modules.workflows.processing.workflowProcessor,typing,header,Yes -gateway.modules.workflows.workflowManager,asyncio,header,Yes -gateway.modules.workflows.workflowManager,json,header,Yes -gateway.modules.workflows.workflowManager,logging,header,Yes -gateway.modules.workflows.workflowManager,modules.datamodels.datamodelChat,header,Yes -gateway.modules.workflows.workflowManager,modules.datamodels.datamodelChat,header,Yes -gateway.modules.workflows.workflowManager,modules.datamodels.datamodelWorkflow,function _executeTasks,Yes -gateway.modules.workflows.workflowManager,modules.workflows.processing.shared.methodDiscovery,function workflowStart,Yes -gateway.modules.workflows.workflowManager,modules.workflows.processing.shared.methodDiscovery,function workflowStart,Yes -gateway.modules.workflows.workflowManager,modules.workflows.processing.shared.placeholderFactory,function _checkIfHistoryAvailable,Yes -gateway.modules.workflows.workflowManager,modules.workflows.processing.shared.stateTools,header,Yes -gateway.modules.workflows.workflowManager,modules.workflows.processing.workflowProcessor,header,Yes -gateway.modules.workflows.workflowManager,typing,header,Yes -gateway.modules.workflows.workflowManager,uuid,header,Yes -gateway.scripts.script_analyze_function_imports,collections,header,Yes -gateway.scripts.script_analyze_function_imports,csv,header,Yes -gateway.scripts.script_analyze_function_imports,pathlib,header,Yes -gateway.scripts.script_analyze_function_imports,typing,header,Yes -gateway.scripts.script_analyze_imports,ast,header,Yes -gateway.scripts.script_analyze_imports,csv,header,Yes -gateway.scripts.script_analyze_imports,os,header,Yes -gateway.scripts.script_analyze_imports,pathlib,header,Yes -gateway.scripts.script_analyze_imports,sys,header,Yes -gateway.scripts.script_analyze_imports,typing,header,Yes -gateway.scripts.script_db_adapt_to_models,argparse,header,Yes -gateway.scripts.script_db_adapt_to_models,ast,function _parsePydanticModels,Yes -gateway.scripts.script_db_adapt_to_models,ast,function _extractType,Yes -gateway.scripts.script_db_adapt_to_models,json,header,Yes -gateway.scripts.script_db_adapt_to_models,logging,header,Yes -gateway.scripts.script_db_adapt_to_models,modules.shared.configuration,header,Yes -gateway.scripts.script_db_adapt_to_models,os,header,Yes -gateway.scripts.script_db_adapt_to_models,pathlib,header,Yes -gateway.scripts.script_db_adapt_to_models,psycopg2,header,Yes -gateway.scripts.script_db_adapt_to_models,psycopg2.extras,header,Yes -gateway.scripts.script_db_adapt_to_models,sys,header,Yes -gateway.scripts.script_db_adapt_to_models,typing,header,Yes -gateway.scripts.script_db_cleanup_duplicate_roles,argparse,header,Yes -gateway.scripts.script_db_cleanup_duplicate_roles,dotenv,header,Yes -gateway.scripts.script_db_cleanup_duplicate_roles,logging,header,Yes -gateway.scripts.script_db_cleanup_duplicate_roles,modules.datamodels.datamodelRbac,header,Yes -gateway.scripts.script_db_cleanup_duplicate_roles,modules.security.rootAccess,header,Yes -gateway.scripts.script_db_cleanup_duplicate_roles,os,header,Yes -gateway.scripts.script_db_cleanup_duplicate_roles,sys,header,Yes -gateway.scripts.script_db_export_migration,argparse,header,Yes -gateway.scripts.script_db_export_migration,datetime,header,Yes -gateway.scripts.script_db_export_migration,json,header,Yes -gateway.scripts.script_db_export_migration,logging,header,Yes -gateway.scripts.script_db_export_migration,modules.shared.configuration,header,Yes -gateway.scripts.script_db_export_migration,os,header,Yes -gateway.scripts.script_db_export_migration,pathlib,header,Yes -gateway.scripts.script_db_export_migration,psycopg2,header,Yes -gateway.scripts.script_db_export_migration,psycopg2.extras,header,Yes -gateway.scripts.script_db_export_migration,sys,header,Yes -gateway.scripts.script_db_export_migration,typing,header,Yes -gateway.scripts.script_generate_container_diagram,collections,header,Yes -gateway.scripts.script_generate_container_diagram,csv,header,Yes -gateway.scripts.script_generate_container_diagram,html,header,Yes -gateway.scripts.script_generate_container_diagram,math,header,Yes -gateway.scripts.script_generate_container_diagram,pathlib,header,Yes -gateway.scripts.script_generate_container_diagram,typing,header,Yes -gateway.scripts.script_generate_import_diagram,collections,header,Yes -gateway.scripts.script_generate_import_diagram,csv,header,Yes -gateway.scripts.script_generate_import_diagram,html,header,Yes -gateway.scripts.script_generate_import_diagram,pathlib,header,Yes -gateway.scripts.script_generate_import_diagram,typing,header,Yes -gateway.scripts.script_generate_import_diagram,xml.etree.ElementTree,header,Yes -gateway.scripts.script_remove_redundant_imports,ast,header,Yes -gateway.scripts.script_remove_redundant_imports,collections,header,Yes -gateway.scripts.script_remove_redundant_imports,csv,header,Yes -gateway.scripts.script_remove_redundant_imports,pathlib,header,Yes -gateway.scripts.script_remove_redundant_imports,re,header,Yes -gateway.scripts.script_remove_redundant_imports,typing,header,Yes -gateway.scripts.script_security_encrypt_all_env_files,argparse,header,Yes -gateway.scripts.script_security_encrypt_all_env_files,datetime,header,Yes -gateway.scripts.script_security_encrypt_all_env_files,modules.shared.configuration,header,Yes -gateway.scripts.script_security_encrypt_all_env_files,pathlib,header,Yes -gateway.scripts.script_security_encrypt_all_env_files,shutil,header,Yes -gateway.scripts.script_security_encrypt_all_env_files,sys,header,Yes -gateway.scripts.script_security_encrypt_all_env_files,typing,header,Yes -gateway.scripts.script_security_encrypt_config_value,argparse,header,Yes -gateway.scripts.script_security_encrypt_config_value,datetime,header,Yes -gateway.scripts.script_security_encrypt_config_value,json,header,Yes -gateway.scripts.script_security_encrypt_config_value,modules.shared.configuration,header,Yes -gateway.scripts.script_security_encrypt_config_value,modules.shared.configuration,function main,Yes -gateway.scripts.script_security_encrypt_config_value,os,header,Yes -gateway.scripts.script_security_encrypt_config_value,pathlib,header,Yes -gateway.scripts.script_security_encrypt_config_value,shutil,header,Yes -gateway.scripts.script_security_encrypt_config_value,sys,header,Yes -gateway.scripts.script_security_generate_master_keys,argparse,header,Yes -gateway.scripts.script_security_generate_master_keys,base64,header,Yes -gateway.scripts.script_security_generate_master_keys,os,header,Yes -gateway.scripts.script_security_generate_master_keys,pathlib,header,Yes -gateway.scripts.script_security_generate_master_keys,secrets,header,Yes -gateway.scripts.script_security_generate_master_keys,sys,header,Yes -gateway.scripts.script_stats_durations_from_log,argparse,header,Yes -gateway.scripts.script_stats_durations_from_log,csv,header,Yes -gateway.scripts.script_stats_durations_from_log,datetime,header,Yes -gateway.scripts.script_stats_durations_from_log,re,header,Yes -gateway.scripts.script_stats_durations_from_log,typing,header,Yes -gateway.scripts.script_stats_get_codelines,argparse,header,Yes -gateway.scripts.script_stats_get_codelines,os,header,Yes -gateway.scripts.script_stats_get_codelines,pathlib,header,Yes -gateway.scripts.script_stats_get_codelines,typing,header,Yes -gateway.scripts.script_stats_showUnusedFunctions,ast,header,Yes -gateway.scripts.script_stats_showUnusedFunctions,logging,header,Yes -gateway.scripts.script_stats_showUnusedFunctions,os,header,Yes -gateway.scripts.script_stats_showUnusedFunctions,pathlib,header,Yes -gateway.scripts.script_stats_showUnusedFunctions,re,header,Yes -gateway.scripts.script_stats_showUnusedFunctions,typing,header,Yes -gateway.tests.conftest,os,header,Yes -gateway.tests.conftest,pathlib,header,Yes -gateway.tests.conftest,sys,header,Yes -gateway.tests.functional.test01_ai_model_selection,asyncio,header,Yes -gateway.tests.functional.test01_ai_model_selection,base64,header,Yes -gateway.tests.functional.test01_ai_model_selection,modules.aicore.aicoreModelRegistry,header,Yes -gateway.tests.functional.test01_ai_model_selection,modules.aicore.aicoreModelSelector,header,Yes -gateway.tests.functional.test01_ai_model_selection,modules.datamodels.datamodelAi,header,Yes -gateway.tests.functional.test01_ai_model_selection,modules.datamodels.datamodelUam,header,Yes -gateway.tests.functional.test01_ai_model_selection,modules.interfaces.interfaceAiObjects,function initialize,Yes -gateway.tests.functional.test01_ai_model_selection,modules.services,header,Yes -gateway.tests.functional.test01_ai_model_selection,modules.services.serviceAi.mainServiceAi,function initialize,Yes -gateway.tests.functional.test01_ai_model_selection,os,header,Yes -gateway.tests.functional.test01_ai_model_selection,sys,header,Yes -gateway.tests.functional.test02_ai_models,asyncio,header,Yes -gateway.tests.functional.test02_ai_models,base64,header,Yes -gateway.tests.functional.test02_ai_models,base64,function _createTestImage,Yes -gateway.tests.functional.test02_ai_models,base64,function _saveImageResponse,Yes -gateway.tests.functional.test02_ai_models,base64,function testModelOperation,Yes -gateway.tests.functional.test02_ai_models,collections,function printTestSummary,Yes -gateway.tests.functional.test02_ai_models,datetime,header,Yes -gateway.tests.functional.test02_ai_models,json,header,Yes -gateway.tests.functional.test02_ai_models,json,function testModelOperation,Yes -gateway.tests.functional.test02_ai_models,json,function testModelOperation,Yes -gateway.tests.functional.test02_ai_models,logging,function initialize,Yes -gateway.tests.functional.test02_ai_models,modules.aicore.aicoreModelRegistry,function initialize,Yes -gateway.tests.functional.test02_ai_models,modules.aicore.aicoreModelRegistry,function testModel,Yes -gateway.tests.functional.test02_ai_models,modules.aicore.aicoreModelRegistry,function getAllAvailableModels,Yes -gateway.tests.functional.test02_ai_models,modules.aicore.aicorePluginPerplexity,function initialize,Yes -gateway.tests.functional.test02_ai_models,modules.aicore.aicorePluginTavily,function initialize,Yes -gateway.tests.functional.test02_ai_models,modules.datamodels.datamodelAi,header,Yes -gateway.tests.functional.test02_ai_models,modules.datamodels.datamodelAi,function _getTestPromptForOperation,Yes -gateway.tests.functional.test02_ai_models,modules.datamodels.datamodelAi,function getAllAvailableModels,Yes -gateway.tests.functional.test02_ai_models,modules.datamodels.datamodelAi,function testModelOperation,Yes -gateway.tests.functional.test02_ai_models,modules.datamodels.datamodelAi,function testModelOperation,Yes -gateway.tests.functional.test02_ai_models,modules.datamodels.datamodelChat,function initialize,Yes -gateway.tests.functional.test02_ai_models,modules.datamodels.datamodelUam,header,Yes -gateway.tests.functional.test02_ai_models,modules.services,header,Yes -gateway.tests.functional.test02_ai_models,modules.services.serviceAi.mainServiceAi,function initialize,Yes -gateway.tests.functional.test02_ai_models,modules.services.serviceExtraction.mainServiceExtraction,function initialize,Yes -gateway.tests.functional.test02_ai_models,modules.shared.configuration,function _testTavilyDirect,Yes -gateway.tests.functional.test02_ai_models,os,header,Yes -gateway.tests.functional.test02_ai_models,sys,header,Yes -gateway.tests.functional.test02_ai_models,tavily,function _testTavilyDirect,Yes -gateway.tests.functional.test02_ai_models,typing,header,Yes -gateway.tests.functional.test02_ai_models,uuid,function initialize,Yes -gateway.tests.functional.test03_ai_operations,asyncio,header,Yes -gateway.tests.functional.test03_ai_operations,datetime,header,Yes -gateway.tests.functional.test03_ai_operations,json,function printSummary,Yes -gateway.tests.functional.test03_ai_operations,json,function testOperation,Yes -gateway.tests.functional.test03_ai_operations,logging,function initialize,Yes -gateway.tests.functional.test03_ai_operations,modules.datamodels.datamodelAi,header,Yes -gateway.tests.functional.test03_ai_operations,modules.datamodels.datamodelChat,header,Yes -gateway.tests.functional.test03_ai_operations,modules.datamodels.datamodelChat,function _prepareTestImageDocument,Yes -gateway.tests.functional.test03_ai_operations,modules.datamodels.datamodelChat,function _prepareTestImageDocument,Yes -gateway.tests.functional.test03_ai_operations,modules.datamodels.datamodelUam,header,Yes -gateway.tests.functional.test03_ai_operations,modules.interfaces.interfaceDbApp,function __init__,Yes -gateway.tests.functional.test03_ai_operations,modules.interfaces.interfaceDbChat,function initialize,Yes -gateway.tests.functional.test03_ai_operations,modules.interfaces.interfaceDbChat,function _prepareTestImageDocument,Yes -gateway.tests.functional.test03_ai_operations,modules.interfaces.interfaceDbChat,function testOperation,Yes -gateway.tests.functional.test03_ai_operations,modules.services,function initialize,Yes -gateway.tests.functional.test03_ai_operations,modules.workflows.methods.methodAi,function initialize,Yes -gateway.tests.functional.test03_ai_operations,os,header,Yes -gateway.tests.functional.test03_ai_operations,sys,header,Yes -gateway.tests.functional.test03_ai_operations,time,function initialize,Yes -gateway.tests.functional.test03_ai_operations,time,function _prepareTestImageDocument,Yes -gateway.tests.functional.test03_ai_operations,time,function testOperation,Yes -gateway.tests.functional.test03_ai_operations,typing,header,Yes -gateway.tests.functional.test03_ai_operations,uuid,function initialize,Yes -gateway.tests.functional.test03_ai_operations,uuid,function _prepareTestImageDocument,Yes -gateway.tests.functional.test03_ai_operations,uuid,function testOperation,Yes -gateway.tests.functional.test04_ai_behavior,asyncio,header,Yes -gateway.tests.functional.test04_ai_behavior,glob,function _getLatestDebugResponse,Yes -gateway.tests.functional.test04_ai_behavior,json,header,Yes -gateway.tests.functional.test04_ai_behavior,logging,function initialize,Yes -gateway.tests.functional.test04_ai_behavior,modules.datamodels.datamodelAi,header,Yes -gateway.tests.functional.test04_ai_behavior,modules.datamodels.datamodelChat,function initialize,Yes -gateway.tests.functional.test04_ai_behavior,modules.datamodels.datamodelUam,header,Yes -gateway.tests.functional.test04_ai_behavior,modules.datamodels.datamodelWorkflow,header,Yes -gateway.tests.functional.test04_ai_behavior,modules.interfaces.interfaceDbApp,function __init__,Yes -gateway.tests.functional.test04_ai_behavior,modules.interfaces.interfaceDbChat,function initialize,Yes -gateway.tests.functional.test04_ai_behavior,modules.services,header,Yes -gateway.tests.functional.test04_ai_behavior,os,header,Yes -gateway.tests.functional.test04_ai_behavior,sys,header,Yes -gateway.tests.functional.test04_ai_behavior,time,function initialize,Yes -gateway.tests.functional.test04_ai_behavior,traceback,function testPromptBehavior,Yes -gateway.tests.functional.test04_ai_behavior,typing,header,Yes -gateway.tests.functional.test04_ai_behavior,uuid,function initialize,Yes -gateway.tests.functional.test05_workflow_with_documents,asyncio,header,Yes -gateway.tests.functional.test05_workflow_with_documents,json,header,Yes -gateway.tests.functional.test05_workflow_with_documents,logging,function initialize,Yes -gateway.tests.functional.test05_workflow_with_documents,modules.datamodels.datamodelChat,header,Yes -gateway.tests.functional.test05_workflow_with_documents,modules.datamodels.datamodelUam,header,Yes -gateway.tests.functional.test05_workflow_with_documents,modules.interfaces.interfaceDbApp,function __init__,Yes -gateway.tests.functional.test05_workflow_with_documents,modules.interfaces.interfaceDbChat,header,Yes -gateway.tests.functional.test05_workflow_with_documents,modules.services,header,Yes -gateway.tests.functional.test05_workflow_with_documents,modules.workflows.automation,header,Yes -gateway.tests.functional.test05_workflow_with_documents,os,header,Yes -gateway.tests.functional.test05_workflow_with_documents,sys,header,Yes -gateway.tests.functional.test05_workflow_with_documents,time,header,Yes -gateway.tests.functional.test05_workflow_with_documents,traceback,function runTest,Yes -gateway.tests.functional.test05_workflow_with_documents,typing,header,Yes -gateway.tests.functional.test06_workflow_prompt_variations,asyncio,header,Yes -gateway.tests.functional.test06_workflow_prompt_variations,json,header,Yes -gateway.tests.functional.test06_workflow_prompt_variations,logging,function initialize,Yes -gateway.tests.functional.test06_workflow_prompt_variations,modules.datamodels.datamodelChat,header,Yes -gateway.tests.functional.test06_workflow_prompt_variations,modules.datamodels.datamodelUam,header,Yes -gateway.tests.functional.test06_workflow_prompt_variations,modules.interfaces.interfaceDbApp,function __init__,Yes -gateway.tests.functional.test06_workflow_prompt_variations,modules.interfaces.interfaceDbChat,header,Yes -gateway.tests.functional.test06_workflow_prompt_variations,modules.services,header,Yes -gateway.tests.functional.test06_workflow_prompt_variations,modules.workflows.automation,header,Yes -gateway.tests.functional.test06_workflow_prompt_variations,os,header,Yes -gateway.tests.functional.test06_workflow_prompt_variations,sys,header,Yes -gateway.tests.functional.test06_workflow_prompt_variations,time,header,Yes -gateway.tests.functional.test06_workflow_prompt_variations,traceback,function testSimplePrompt,Yes -gateway.tests.functional.test06_workflow_prompt_variations,traceback,function testMergeDocumentsToWord,Yes -gateway.tests.functional.test06_workflow_prompt_variations,traceback,function testStructuredDataToExcel,Yes -gateway.tests.functional.test06_workflow_prompt_variations,traceback,function runAllTests,Yes -gateway.tests.functional.test06_workflow_prompt_variations,typing,header,Yes -gateway.tests.functional.test07_json_merge,json,header,Yes -gateway.tests.functional.test07_json_merge,modules.services.serviceAi.subJsonResponseHandling,header,Yes -gateway.tests.functional.test07_json_merge,modules.shared.jsonUtils,header,Yes -gateway.tests.functional.test07_json_merge,os,header,Yes -gateway.tests.functional.test07_json_merge,sys,header,Yes -gateway.tests.functional.test07_json_merge,traceback,header,Yes -gateway.tests.functional.test08_json_finalization,json,header,Yes -gateway.tests.functional.test08_json_finalization,modules.services.serviceAi.subJsonResponseHandling,header,Yes -gateway.tests.functional.test08_json_finalization,modules.shared.jsonUtils,header,Yes -gateway.tests.functional.test08_json_finalization,os,header,Yes -gateway.tests.functional.test08_json_finalization,sys,header,Yes -gateway.tests.functional.test08_json_finalization,traceback,function testEndToEndFinalizationWithCorruption,Yes -gateway.tests.functional.test08_json_finalization,traceback,header,Yes -gateway.tests.functional.test09_document_generation_formats,asyncio,header,Yes -gateway.tests.functional.test09_document_generation_formats,base64,header,Yes -gateway.tests.functional.test09_document_generation_formats,json,header,Yes -gateway.tests.functional.test09_document_generation_formats,logging,function initialize,Yes -gateway.tests.functional.test09_document_generation_formats,modules.datamodels.datamodelChat,header,Yes -gateway.tests.functional.test09_document_generation_formats,modules.datamodels.datamodelUam,header,Yes -gateway.tests.functional.test09_document_generation_formats,modules.interfaces.interfaceDbApp,function __init__,Yes -gateway.tests.functional.test09_document_generation_formats,modules.interfaces.interfaceDbChat,header,Yes -gateway.tests.functional.test09_document_generation_formats,modules.services,header,Yes -gateway.tests.functional.test09_document_generation_formats,modules.shared.configuration,function initialize,Yes -gateway.tests.functional.test09_document_generation_formats,modules.workflows.automation,header,Yes -gateway.tests.functional.test09_document_generation_formats,os,header,Yes -gateway.tests.functional.test09_document_generation_formats,sys,header,Yes -gateway.tests.functional.test09_document_generation_formats,time,header,Yes -gateway.tests.functional.test09_document_generation_formats,traceback,function uploadPdfFile,Yes -gateway.tests.functional.test09_document_generation_formats,traceback,function runTest,Yes -gateway.tests.functional.test09_document_generation_formats,traceback,function testRefactoringFeatures,Yes -gateway.tests.functional.test09_document_generation_formats,traceback,function testAllFormats,Yes -gateway.tests.functional.test09_document_generation_formats,typing,header,Yes -gateway.tests.functional.test10_document_generation_formats,asyncio,header,Yes -gateway.tests.functional.test10_document_generation_formats,base64,header,Yes -gateway.tests.functional.test10_document_generation_formats,json,header,Yes -gateway.tests.functional.test10_document_generation_formats,logging,function initialize,Yes -gateway.tests.functional.test10_document_generation_formats,modules.datamodels.datamodelChat,header,Yes -gateway.tests.functional.test10_document_generation_formats,modules.datamodels.datamodelUam,header,Yes -gateway.tests.functional.test10_document_generation_formats,modules.interfaces.interfaceDbApp,function __init__,Yes -gateway.tests.functional.test10_document_generation_formats,modules.interfaces.interfaceDbChat,header,Yes -gateway.tests.functional.test10_document_generation_formats,modules.services,header,Yes -gateway.tests.functional.test10_document_generation_formats,modules.shared.configuration,function initialize,Yes -gateway.tests.functional.test10_document_generation_formats,modules.workflows.automation,header,Yes -gateway.tests.functional.test10_document_generation_formats,os,header,Yes -gateway.tests.functional.test10_document_generation_formats,sys,header,Yes -gateway.tests.functional.test10_document_generation_formats,time,header,Yes -gateway.tests.functional.test10_document_generation_formats,traceback,function uploadPdfFile,Yes -gateway.tests.functional.test10_document_generation_formats,traceback,function runTest,Yes -gateway.tests.functional.test10_document_generation_formats,traceback,function testAllFormats,Yes -gateway.tests.functional.test10_document_generation_formats,typing,header,Yes -gateway.tests.functional.test11_code_generation_formats,asyncio,header,Yes -gateway.tests.functional.test11_code_generation_formats,csv,header,Yes -gateway.tests.functional.test11_code_generation_formats,io,header,Yes -gateway.tests.functional.test11_code_generation_formats,json,header,Yes -gateway.tests.functional.test11_code_generation_formats,logging,function initialize,Yes -gateway.tests.functional.test11_code_generation_formats,modules.datamodels.datamodelChat,header,Yes -gateway.tests.functional.test11_code_generation_formats,modules.datamodels.datamodelUam,header,Yes -gateway.tests.functional.test11_code_generation_formats,modules.interfaces.interfaceDbApp,function __init__,Yes -gateway.tests.functional.test11_code_generation_formats,modules.interfaces.interfaceDbChat,header,Yes -gateway.tests.functional.test11_code_generation_formats,modules.services,header,Yes -gateway.tests.functional.test11_code_generation_formats,modules.shared.configuration,function initialize,Yes -gateway.tests.functional.test11_code_generation_formats,modules.workflows.automation,header,Yes -gateway.tests.functional.test11_code_generation_formats,os,header,Yes -gateway.tests.functional.test11_code_generation_formats,sys,header,Yes -gateway.tests.functional.test11_code_generation_formats,time,header,Yes -gateway.tests.functional.test11_code_generation_formats,traceback,function runTest,Yes -gateway.tests.functional.test11_code_generation_formats,traceback,function testAllFormats,Yes -gateway.tests.functional.test11_code_generation_formats,typing,header,Yes -gateway.tests.functional.test11_code_generation_formats,xml.etree.ElementTree,header,Yes -gateway.tests.functional.test12_json_split_merge,asyncio,header,Yes -gateway.tests.functional.test12_json_split_merge,json,header,Yes -gateway.tests.functional.test12_json_split_merge,modules.services.serviceAi.subJsonMerger,header,Yes -gateway.tests.functional.test12_json_split_merge,modules.shared.jsonContinuation,header,Yes -gateway.tests.functional.test12_json_split_merge,modules.shared.jsonUtils,function _loadTableJsonExample,Yes -gateway.tests.functional.test12_json_split_merge,modules.shared.jsonUtils,function testJsonSplitMerge,Yes -gateway.tests.functional.test12_json_split_merge,modules.shared.jsonUtils,function normalizeJson,Yes -gateway.tests.functional.test12_json_split_merge,os,header,Yes -gateway.tests.functional.test12_json_split_merge,random,header,Yes -gateway.tests.functional.test12_json_split_merge,random,function testJsonSplitMerge,Yes -gateway.tests.functional.test12_json_split_merge,sys,header,Yes -gateway.tests.functional.test12_json_split_merge,time,header,Yes -gateway.tests.functional.test12_json_split_merge,traceback,function runTest,Yes -gateway.tests.functional.test12_json_split_merge,traceback,function testAllJsonFiles,Yes -gateway.tests.functional.test12_json_split_merge,typing,header,Yes -gateway.tests.functional.test13_json_completion_cuts,asyncio,header,Yes -gateway.tests.functional.test13_json_completion_cuts,json,header,Yes -gateway.tests.functional.test13_json_completion_cuts,modules.shared.jsonContinuation,header,Yes -gateway.tests.functional.test13_json_completion_cuts,os,header,Yes -gateway.tests.functional.test13_json_completion_cuts,sys,header,Yes -gateway.tests.functional.test13_json_completion_cuts,traceback,function runTest,Yes -gateway.tests.functional.test13_json_completion_cuts,typing,header,Yes -gateway.tests.functional.test14_json_continuation_context,asyncio,header,Yes -gateway.tests.functional.test14_json_continuation_context,json,header,Yes -gateway.tests.functional.test14_json_continuation_context,modules.shared.jsonContinuation,header,Yes -gateway.tests.functional.test14_json_continuation_context,os,header,Yes -gateway.tests.functional.test14_json_continuation_context,sys,header,Yes -gateway.tests.functional.test14_json_continuation_context,traceback,function testSpecificCutJson,Yes -gateway.tests.functional.test14_json_continuation_context,traceback,function runTest,Yes -gateway.tests.functional.test14_json_continuation_context,typing,header,Yes -gateway.tests.functional.test_kpi_full,json,header,Yes -gateway.tests.functional.test_kpi_full,modules.datamodels.datamodelAi,header,Yes -gateway.tests.functional.test_kpi_full,modules.services.serviceAi.subJsonResponseHandling,header,Yes -gateway.tests.functional.test_kpi_full,modules.shared.jsonUtils,header,Yes -gateway.tests.functional.test_kpi_full,os,header,Yes -gateway.tests.functional.test_kpi_full,pytest,header,Yes -gateway.tests.functional.test_kpi_full,sys,header,Yes -gateway.tests.functional.test_kpi_incomplete,json,header,Yes -gateway.tests.functional.test_kpi_incomplete,modules.datamodels.datamodelAi,header,Yes -gateway.tests.functional.test_kpi_incomplete,modules.services.serviceAi.subJsonResponseHandling,header,Yes -gateway.tests.functional.test_kpi_incomplete,modules.shared.jsonUtils,header,Yes -gateway.tests.functional.test_kpi_incomplete,os,header,Yes -gateway.tests.functional.test_kpi_incomplete,pytest,header,Yes -gateway.tests.functional.test_kpi_incomplete,sys,header,Yes -gateway.tests.functional.test_kpi_incomplete,traceback,header,Yes -gateway.tests.functional.test_kpi_path,json,header,Yes -gateway.tests.functional.test_kpi_path,modules.services.serviceAi.subJsonResponseHandling,header,Yes -gateway.tests.functional.test_kpi_path,os,header,Yes -gateway.tests.functional.test_kpi_path,sys,header,Yes -gateway.tests.functional.test_kpi_path,traceback,header,Yes -gateway.tests.integration.rbac.test_rbac_database,modules.connectors.connectorDbPostgre,header,Yes -gateway.tests.integration.rbac.test_rbac_database,modules.datamodels.datamodelUam,header,Yes -gateway.tests.integration.rbac.test_rbac_database,modules.datamodels.datamodelUam,function testBuildRbacWhereClauseUserConnectionTable,Yes -gateway.tests.integration.rbac.test_rbac_database,modules.shared.configuration,header,Yes -gateway.tests.integration.rbac.test_rbac_database,pytest,header,Yes -gateway.tests.integration.workflows.test_workflow_execution,modules.datamodels.datamodelChat,header,Yes -gateway.tests.integration.workflows.test_workflow_execution,modules.datamodels.datamodelDocref,header,Yes -gateway.tests.integration.workflows.test_workflow_execution,modules.datamodels.datamodelWorkflow,header,Yes -gateway.tests.integration.workflows.test_workflow_execution,modules.datamodels.datamodelWorkflow,function test_extractContentParameters_structure,Yes -gateway.tests.integration.workflows.test_workflow_execution,modules.shared.jsonUtils,function test_parseJsonWithModel_with_code_fences,Yes -gateway.tests.integration.workflows.test_workflow_execution,modules.shared.jsonUtils,function test_parseJsonWithModel_with_extra_text,Yes -gateway.tests.integration.workflows.test_workflow_execution,pytest,header,Yes -gateway.tests.integration.workflows.test_workflow_execution,unittest.mock,header,Yes -gateway.tests.integration.workflows.test_workflow_execution,uuid,header,Yes -gateway.tests.unit.datamodels.test_docref,modules.datamodels.datamodelDocref,header,Yes -gateway.tests.unit.datamodels.test_docref,pytest,header,Yes -gateway.tests.unit.datamodels.test_workflow_models,json,header,Yes -gateway.tests.unit.datamodels.test_workflow_models,modules.datamodels.datamodelAi,header,Yes -gateway.tests.unit.datamodels.test_workflow_models,modules.datamodels.datamodelDocref,header,Yes -gateway.tests.unit.datamodels.test_workflow_models,modules.datamodels.datamodelExtraction,header,Yes -gateway.tests.unit.datamodels.test_workflow_models,modules.datamodels.datamodelWorkflow,header,Yes -gateway.tests.unit.datamodels.test_workflow_models,pytest,header,Yes -gateway.tests.unit.datamodels.test_workflow_models,typing,header,Yes -gateway.tests.unit.rbac.test_rbac_bootstrap,modules.datamodels.datamodelRbac,header,Yes -gateway.tests.unit.rbac.test_rbac_bootstrap,modules.datamodels.datamodelUam,header,Yes -gateway.tests.unit.rbac.test_rbac_bootstrap,modules.datamodels.datamodelUam,header,Yes -gateway.tests.unit.rbac.test_rbac_bootstrap,modules.interfaces.interfaceBootstrap,header,Yes -gateway.tests.unit.rbac.test_rbac_bootstrap,pytest,header,Yes -gateway.tests.unit.rbac.test_rbac_bootstrap,unittest.mock,header,Yes -gateway.tests.unit.rbac.test_rbac_permissions,modules.connectors.connectorDbPostgre,header,Yes -gateway.tests.unit.rbac.test_rbac_permissions,modules.datamodels.datamodelRbac,header,Yes -gateway.tests.unit.rbac.test_rbac_permissions,modules.datamodels.datamodelUam,header,Yes -gateway.tests.unit.rbac.test_rbac_permissions,modules.security.rbac,header,Yes -gateway.tests.unit.rbac.test_rbac_permissions,pytest,header,Yes -gateway.tests.unit.rbac.test_rbac_permissions,unittest.mock,header,Yes -gateway.tests.unit.services.test_json_extraction_merging,json,header,Yes -gateway.tests.unit.services.test_json_extraction_merging,modules.datamodels.datamodelExtraction,header,Yes -gateway.tests.unit.services.test_json_extraction_merging,modules.services.serviceExtraction.mainServiceExtraction,header,Yes -gateway.tests.unit.services.test_json_extraction_merging,os,header,Yes -gateway.tests.unit.services.test_json_extraction_merging,sys,header,Yes -gateway.tests.unit.services.test_json_extraction_merging,traceback,function main,Yes -gateway.tests.unit.utils.test_json_utils,json,header,Yes -gateway.tests.unit.utils.test_json_utils,modules.datamodels.datamodelWorkflow,header,Yes -gateway.tests.unit.utils.test_json_utils,modules.shared.jsonUtils,header,Yes -gateway.tests.unit.utils.test_json_utils,pytest,header,Yes -gateway.tests.unit.workflows.test_state_management,modules.datamodels.datamodelChat,header,Yes -gateway.tests.unit.workflows.test_state_management,modules.datamodels.datamodelWorkflow,header,Yes -gateway.tests.unit.workflows.test_state_management,pytest,header,Yes -gateway.tests.unit.workflows.test_state_management,uuid,header,Yes -gateway.tests.validation.test_architecture_validation,modules.datamodels.datamodelChat,header,Yes -gateway.tests.validation.test_architecture_validation,modules.datamodels.datamodelDocref,header,Yes -gateway.tests.validation.test_architecture_validation,modules.datamodels.datamodelWorkflow,header,Yes -gateway.tests.validation.test_architecture_validation,modules.shared.jsonUtils,header,Yes -gateway.tests.validation.test_architecture_validation,os,header,Yes -gateway.tests.validation.test_architecture_validation,pytest,header,Yes -gateway.tests.validation.test_architecture_validation,sys,header,Yes diff --git a/scripts/migrate_async_to_sync.py b/scripts/migrate_async_to_sync.py index 433fd513..8b5626df 100644 --- a/scripts/migrate_async_to_sync.py +++ b/scripts/migrate_async_to_sync.py @@ -39,10 +39,6 @@ AUTH_DIR = GATEWAY_DIR / "modules" / "auth" # Value: set of function names that must remain async def _MUST_STAY_ASYNC: Dict[str, Set[str]] = { # --- routes/ --- - "modules/routes/routeAdminRbacExport.py": { - "import_global_rbac", # await file.read() - "import_mandate_rbac", # await file.read() - }, "modules/routes/routeDataConnections.py": { "get_connections", # await token_refresh_service.refresh_expired_tokens(...) },