iatoolkit 2.15.4__tar.gz → 2.16.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (245) hide show
  1. {iatoolkit-2.15.4/src/iatoolkit.egg-info → iatoolkit-2.16.1}/PKG-INFO +1 -1
  2. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/__init__.py +1 -1
  3. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/core.py +4 -4
  4. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/locales/en.yaml +57 -5
  5. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/locales/es.yaml +57 -5
  6. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/repositories/llm_query_repo.py +6 -8
  7. iatoolkit-2.16.1/src/iatoolkit/repositories/mcp_token_repo.py +110 -0
  8. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/repositories/models.py +20 -7
  9. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/company_context_service.py +10 -9
  10. iatoolkit-2.16.1/src/iatoolkit/services/mcp_token_service.py +359 -0
  11. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/prompt_service.py +22 -0
  12. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/views/account_view.py +13 -29
  13. {iatoolkit-2.15.4 → iatoolkit-2.16.1/src/iatoolkit.egg-info}/PKG-INFO +1 -1
  14. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit.egg-info/SOURCES.txt +2 -2
  15. iatoolkit-2.15.4/src/iatoolkit/repositories/mcp_personal_access_token_repo.py +0 -63
  16. iatoolkit-2.15.4/src/iatoolkit/services/mcp_personal_access_token_service.py +0 -166
  17. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/LICENSE +0 -0
  18. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/LICENSE_COMMUNITY.md +0 -0
  19. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/pyproject.toml +0 -0
  20. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/readme.md +0 -0
  21. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/requirements.txt +0 -0
  22. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/setup.cfg +0 -0
  23. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/base_company.py +0 -0
  24. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/cli_commands.py +0 -0
  25. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/common/__init__.py +0 -0
  26. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/common/exceptions.py +0 -0
  27. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/common/interfaces/__init__.py +0 -0
  28. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/common/interfaces/asset_storage.py +0 -0
  29. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/common/interfaces/database_provider.py +0 -0
  30. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/common/interfaces/memory_compilation_trigger.py +0 -0
  31. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/common/interfaces/memory_lint_trigger.py +0 -0
  32. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/common/interfaces/secret_provider.py +0 -0
  33. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/common/interfaces/signup_policy_resolver.py +0 -0
  34. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/common/interfaces/web_search_provider.py +0 -0
  35. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/common/model_registry.py +0 -0
  36. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/common/routes.py +0 -0
  37. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/common/secret_resolver.py +0 -0
  38. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/common/session_manager.py +0 -0
  39. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/common/util.py +0 -0
  40. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/company_registry.py +0 -0
  41. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/config/__init__.py +0 -0
  42. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/config/llm_capabilities.yaml +0 -0
  43. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/config/system_prompts/channel_business_identity.prompt +0 -0
  44. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/config/system_prompts/channel_conversation_continuity.prompt +0 -0
  45. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/config/system_prompts/channel_response_style.prompt +0 -0
  46. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/config/system_prompts/chat_state_rules.prompt +0 -0
  47. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/config/system_prompts/chat_user_profile.prompt +0 -0
  48. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/config/system_prompts/core_identity.prompt +0 -0
  49. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/config/system_prompts/email_output.prompt +0 -0
  50. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/config/system_prompts/file_download_output.prompt +0 -0
  51. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/config/system_prompts/format_styles.prompt +0 -0
  52. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/config/system_prompts/html_structures.prompt +0 -0
  53. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/config/system_prompts/links_documents.prompt +0 -0
  54. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/config/system_prompts/memory_usage.prompt +0 -0
  55. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/config/system_prompts/multimodal_basics.prompt +0 -0
  56. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/config/system_prompts/output_basics.prompt +0 -0
  57. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/config/system_prompts/presentation_formatting.prompt +0 -0
  58. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/config/system_prompts/query_main.prompt +0 -0
  59. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/config/system_prompts/sql_aggregation_scope.prompt +0 -0
  60. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/config/system_prompts/sql_casting.prompt +0 -0
  61. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/config/system_prompts/sql_core.prompt +0 -0
  62. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/config/system_prompts/sql_jsonb.prompt +0 -0
  63. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/config/system_prompts/sql_mysql_casting.prompt +0 -0
  64. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/config/system_prompts/sql_mysql_json.prompt +0 -0
  65. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/config/system_prompts/sql_redshift_basics.prompt +0 -0
  66. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/config/system_prompts/sql_redshift_types.prompt +0 -0
  67. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/config/system_prompts/sql_rules.prompt +0 -0
  68. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/config/system_prompts/tool_html_passthrough.prompt +0 -0
  69. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/config/system_prompts_pack.yaml +0 -0
  70. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/config/system_tools_pack.yaml +0 -0
  71. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/infra/__init__.py +0 -0
  72. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/infra/brevo_mail_app.py +0 -0
  73. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/infra/call_service.py +0 -0
  74. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/infra/connectors/__init__.py +0 -0
  75. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/infra/connectors/file_connector.py +0 -0
  76. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/infra/connectors/file_connector_factory.py +0 -0
  77. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/infra/connectors/google_cloud_storage_connector.py +0 -0
  78. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/infra/connectors/google_drive_connector.py +0 -0
  79. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/infra/connectors/local_file_connector.py +0 -0
  80. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/infra/connectors/s3_connector.py +0 -0
  81. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/infra/google_auth_client.py +0 -0
  82. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/infra/google_chat_app.py +0 -0
  83. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/infra/inference_embeddings_client.py +0 -0
  84. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/infra/inference_handler.py +0 -0
  85. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/infra/jina_embeddings_client.py +0 -0
  86. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/infra/llm_providers/__init__.py +0 -0
  87. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/infra/llm_providers/anthropic_adapter.py +0 -0
  88. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/infra/llm_providers/deepseek_adapter.py +0 -0
  89. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/infra/llm_providers/gemini_adapter.py +0 -0
  90. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/infra/llm_providers/openai_adapter.py +0 -0
  91. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/infra/llm_providers/openai_compatible_chat_adapter.py +0 -0
  92. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/infra/llm_providers/openrouter_adapter.py +0 -0
  93. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/infra/llm_proxy.py +0 -0
  94. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/infra/llm_response.py +0 -0
  95. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/infra/redis_session_manager.py +0 -0
  96. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/repositories/__init__.py +0 -0
  97. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/repositories/api_key_repo.py +0 -0
  98. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/repositories/database_manager.py +0 -0
  99. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/repositories/document_repo.py +0 -0
  100. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/repositories/env_secret_provider.py +0 -0
  101. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/repositories/filesystem_asset_repository.py +0 -0
  102. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/repositories/memory_repo.py +0 -0
  103. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/repositories/profile_repo.py +0 -0
  104. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/repositories/prompt_resource_repo.py +0 -0
  105. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/repositories/sql_dataset_repo.py +0 -0
  106. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/repositories/sql_source_repo.py +0 -0
  107. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/repositories/vs_repo.py +0 -0
  108. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/__init__.py +0 -0
  109. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/api_key_service.py +0 -0
  110. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/attachment_policy_service.py +0 -0
  111. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/auth_service.py +0 -0
  112. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/benchmark_service.py +0 -0
  113. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/branding_service.py +0 -0
  114. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/configuration_service.py +0 -0
  115. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/context_builder_service.py +0 -0
  116. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/dispatcher_service.py +0 -0
  117. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/embedding_service.py +0 -0
  118. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/excel_service.py +0 -0
  119. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/file_processor_service.py +0 -0
  120. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/history_manager_service.py +0 -0
  121. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/http_tool_service.py +0 -0
  122. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/i18n_service.py +0 -0
  123. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/inference_service.py +0 -0
  124. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/jwt_service.py +0 -0
  125. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/knowledge_base_service.py +0 -0
  126. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/language_service.py +0 -0
  127. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/license_service.py +0 -0
  128. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/llm_client_service.py +0 -0
  129. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/mail_service.py +0 -0
  130. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/memory_compiler_service.py +0 -0
  131. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/memory_lint_service.py +0 -0
  132. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/memory_lookup_policy_service.py +0 -0
  133. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/memory_service.py +0 -0
  134. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/memory_wiki_service.py +0 -0
  135. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/noop_memory_compilation_trigger.py +0 -0
  136. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/noop_memory_lint_trigger.py +0 -0
  137. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/parsers/__init__.py +0 -0
  138. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/parsers/contracts.py +0 -0
  139. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/parsers/image_normalizer.py +0 -0
  140. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/parsers/parsing_service.py +0 -0
  141. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/parsers/pdf_ocr_detection.py +0 -0
  142. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/parsers/provider_factory.py +0 -0
  143. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/parsers/provider_resolver.py +0 -0
  144. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/parsers/providers/__init__.py +0 -0
  145. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/parsers/providers/basic_provider.py +0 -0
  146. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/parsers/providers/docling_provider.py +0 -0
  147. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/parsers/validator.py +0 -0
  148. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/pdf_service.py +0 -0
  149. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/profile_service.py +0 -0
  150. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/prompt_resource_service.py +0 -0
  151. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/query_service.py +0 -0
  152. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/signup_policy_resolver.py +0 -0
  153. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/sql_dataset_service.py +0 -0
  154. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/sql_service.py +0 -0
  155. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/sql_source_service.py +0 -0
  156. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/storage_service.py +0 -0
  157. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/structured_output_service.py +0 -0
  158. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/system_prompt_catalog.py +0 -0
  159. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/system_tools.py +0 -0
  160. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/telemetry_service.py +0 -0
  161. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/tool_service.py +0 -0
  162. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/user_feedback_service.py +0 -0
  163. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/user_session_context_service.py +0 -0
  164. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/visual_kb_service.py +0 -0
  165. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/visual_tool_service.py +0 -0
  166. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/warmup_service.py +0 -0
  167. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/web_search/__init__.py +0 -0
  168. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/web_search/provider_factory.py +0 -0
  169. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/web_search/providers/__init__.py +0 -0
  170. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/web_search/providers/brave_provider.py +0 -0
  171. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/services/web_search_service.py +0 -0
  172. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/static/images/fernando.jpeg +0 -0
  173. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/static/images/iatoolkit_core.png +0 -0
  174. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/static/images/iatoolkit_logo.png +0 -0
  175. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/static/js/chat_feedback_button.js +0 -0
  176. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/static/js/chat_filepond.js +0 -0
  177. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/static/js/chat_help_content.js +0 -0
  178. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/static/js/chat_history_button.js +0 -0
  179. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/static/js/chat_logout_button.js +0 -0
  180. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/static/js/chat_main.js +0 -0
  181. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/static/js/chat_memory_button.js +0 -0
  182. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/static/js/chat_model_selector.js +0 -0
  183. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/static/js/chat_onboarding_button.js +0 -0
  184. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/static/js/chat_prompt_manager.js +0 -0
  185. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/static/js/chat_reload_button.js +0 -0
  186. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/static/styles/chat_iatoolkit.css +0 -0
  187. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/static/styles/chat_modal.css +0 -0
  188. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/static/styles/chat_public.css +0 -0
  189. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/static/styles/documents.css +0 -0
  190. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/static/styles/landing_page.css +0 -0
  191. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/static/styles/llm_output.css +0 -0
  192. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/static/styles/onboarding.css +0 -0
  193. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/templates/_company_header.html +0 -0
  194. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/templates/_login_widget.html +0 -0
  195. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/templates/account.html +0 -0
  196. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/templates/base.html +0 -0
  197. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/templates/change_password.html +0 -0
  198. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/templates/chat.html +0 -0
  199. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/templates/chat_memory_modal.html +0 -0
  200. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/templates/chat_modals.html +0 -0
  201. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/templates/error.html +0 -0
  202. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/templates/forgot_password.html +0 -0
  203. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/templates/home_hosted_default.html +0 -0
  204. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/templates/memory/wiki_schema.md +0 -0
  205. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/templates/onboarding_shell.html +0 -0
  206. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/templates/pdf/base.html +0 -0
  207. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/templates/pdf/letter.html +0 -0
  208. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/templates/pdf/report.html +0 -0
  209. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/templates/pdf/simple.html +0 -0
  210. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/templates/signup.html +0 -0
  211. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/views/__init__.py +0 -0
  212. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/views/api_key_api_view.py +0 -0
  213. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/views/base_login_view.py +0 -0
  214. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/views/categories_api_view.py +0 -0
  215. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/views/change_password_view.py +0 -0
  216. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/views/chat_context_preview_api_view.py +0 -0
  217. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/views/chat_view.py +0 -0
  218. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/views/configuration_api_view.py +0 -0
  219. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/views/connectors_api_view.py +0 -0
  220. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/views/embedding_api_view.py +0 -0
  221. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/views/forgot_password_view.py +0 -0
  222. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/views/help_content_api_view.py +0 -0
  223. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/views/history_api_view.py +0 -0
  224. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/views/home_view.py +0 -0
  225. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/views/init_context_api_view.py +0 -0
  226. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/views/llmquery_api_view.py +0 -0
  227. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/views/load_document_api_view.py +0 -0
  228. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/views/login_view.py +0 -0
  229. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/views/logout_api_view.py +0 -0
  230. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/views/memory_api_view.py +0 -0
  231. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/views/profile_api_view.py +0 -0
  232. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/views/prompt_api_view.py +0 -0
  233. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/views/prompt_context_preview_api_view.py +0 -0
  234. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/views/prompt_resource_api_view.py +0 -0
  235. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/views/rag_api_view.py +0 -0
  236. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/views/root_redirect_view.py +0 -0
  237. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/views/signup_view.py +0 -0
  238. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/views/static_page_view.py +0 -0
  239. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/views/tool_api_view.py +0 -0
  240. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/views/user_feedback_api_view.py +0 -0
  241. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/views/users_api_view.py +0 -0
  242. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit/views/verify_user_view.py +0 -0
  243. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit.egg-info/dependency_links.txt +0 -0
  244. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit.egg-info/requires.txt +0 -0
  245. {iatoolkit-2.15.4 → iatoolkit-2.16.1}/src/iatoolkit.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: iatoolkit
3
- Version: 2.15.4
3
+ Version: 2.16.1
4
4
  Summary: IAToolkit
5
5
  Author: Fernando Libedinsky
6
6
  License-Expression: MIT
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # IAToolkit is open source software.
5
5
 
6
- __version__ = "2.15.4"
6
+ __version__ = "2.16.1"
7
7
 
8
8
  # Expose main classes and functions at the top level of the package
9
9
 
@@ -355,7 +355,7 @@ class IAToolkit:
355
355
  from iatoolkit.repositories.profile_repo import ProfileRepo
356
356
  from iatoolkit.repositories.llm_query_repo import LLMQueryRepo
357
357
  from iatoolkit.repositories.memory_repo import MemoryRepo
358
- from iatoolkit.repositories.mcp_personal_access_token_repo import McpPersonalAccessTokenRepo
358
+ from iatoolkit.repositories.mcp_token_repo import McpTokenRepo
359
359
  from iatoolkit.repositories.sql_dataset_repo import SqlDatasetRepo
360
360
  from iatoolkit.repositories.sql_source_repo import SqlSourceRepo
361
361
  from iatoolkit.repositories.vs_repo import VSRepo
@@ -372,7 +372,7 @@ class IAToolkit:
372
372
  binder.bind(ProfileRepo, to=ProfileRepo)
373
373
  binder.bind(LLMQueryRepo, to=LLMQueryRepo)
374
374
  binder.bind(MemoryRepo, to=MemoryRepo)
375
- binder.bind(McpPersonalAccessTokenRepo, to=McpPersonalAccessTokenRepo)
375
+ binder.bind(McpTokenRepo, to=McpTokenRepo)
376
376
  binder.bind(SqlDatasetRepo, to=SqlDatasetRepo)
377
377
  binder.bind(SqlSourceRepo, to=SqlSourceRepo)
378
378
  binder.bind(VSRepo, to=VSRepo)
@@ -405,7 +405,7 @@ class IAToolkit:
405
405
  from iatoolkit.services.mail_service import MailService
406
406
  from iatoolkit.services.memory_compiler_service import MemoryCompilerService
407
407
  from iatoolkit.services.memory_service import MemoryService
408
- from iatoolkit.services.mcp_personal_access_token_service import McpPersonalAccessTokenService
408
+ from iatoolkit.services.mcp_token_service import McpTokenService
409
409
  from iatoolkit.services.memory_wiki_service import MemoryWikiService
410
410
  from iatoolkit.services.profile_service import ProfileService
411
411
  from iatoolkit.services.jwt_service import JWTService
@@ -449,7 +449,7 @@ class IAToolkit:
449
449
  binder.bind(MemoryWikiService, to=MemoryWikiService)
450
450
  binder.bind(MemoryCompilerService, to=MemoryCompilerService)
451
451
  binder.bind(MemoryService, to=MemoryService)
452
- binder.bind(McpPersonalAccessTokenService, to=McpPersonalAccessTokenService)
452
+ binder.bind(McpTokenService, to=McpTokenService)
453
453
  binder.bind(ProfileService, to=ProfileService)
454
454
  binder.bind(JWTService, to=JWTService)
455
455
  binder.bind(SqlDatasetService, to=SqlDatasetService)
@@ -314,15 +314,15 @@ ui:
314
314
  general_profile_label: "Profile"
315
315
  general_tokens_label: "Integrations"
316
316
  general_tokens_title: "MCP access tokens"
317
- general_tokens_description: "Create and manage bearer tokens for MCP clients that do not complete the OAuth flow directly."
317
+ general_tokens_description: "Create and manage your personal bearer tokens for MCP clients that do not complete the OAuth flow directly."
318
318
  general_tokens_action: "Open MCP tokens"
319
319
  mcp_tokens_create_title: "Create MCP token"
320
- mcp_tokens_create_description: "Generate a personal access token for MCP clients that require a bearer token."
320
+ mcp_tokens_create_description: "Generate personal MCP tokens. The bearer token and full JSON config are shown only when the token is created."
321
321
  mcp_tokens_list_title: "MCP access tokens"
322
322
  mcp_tokens_count_suffix: "tokens"
323
323
  mcp_tokens_empty: "You have not created any MCP tokens yet."
324
- mcp_connection_title: "Connection snippets"
325
- mcp_connection_description: "Use these snippets with MCP clients that connect through a fixed bearer token instead of completing OAuth in-app."
324
+ mcp_connection_title: "Connection snippet"
325
+ mcp_connection_description: "The full snippet is shown when a personal MCP token is created."
326
326
  mcp_connection_tag: "Ready to paste"
327
327
  mcp_connection_server_url: "Server URL"
328
328
  mcp_connection_json_label: "JSON config"
@@ -331,7 +331,7 @@ ui:
331
331
  mcp_connection_url_copy_success: "Server URL copied."
332
332
  mcp_connection_json_copy_success: "JSON config copied."
333
333
  mcp_connection_copy_error: "Could not copy the MCP connection snippet."
334
- mcp_connection_placeholder_help: "Replace <YOUR_MCP_TOKEN> with one of your active MCP personal access tokens."
334
+ mcp_connection_placeholder_help: "The bearer token cannot be recovered later; create a new token if you need to generate the JSON again."
335
335
  mcp_token_name: "Token name"
336
336
  mcp_token_name_placeholder: "Claude Desktop, PyCharm, Codex..."
337
337
  mcp_token_expiry_days: "Expires in (days)"
@@ -1412,6 +1412,10 @@ ui:
1412
1412
  execution_mode_label: "Execution Mode"
1413
1413
  agent_profile_label: "Agent profile"
1414
1414
  agent_profile_help: "Mark this agent to govern persistent conversations such as WhatsApp, campaigns, or collections."
1415
+ queue_tier_label: "Queue Priority"
1416
+ queue_tier_default: "Default"
1417
+ queue_tier_low: "Low priority"
1418
+ queue_tier_help: "Low priority agents run only after the normal agents queue is empty."
1415
1419
  active_label: "Active"
1416
1420
  output_type_label: "Output Type"
1417
1421
  output_type_free_text: "Free text"
@@ -1612,6 +1616,50 @@ ui:
1612
1616
  save_error: "Error saving API key."
1613
1617
  delete_error: "Error deleting API key."
1614
1618
 
1619
+ mcp_service_tokens:
1620
+ menu_label: "MCP Tokens"
1621
+ title: "MCP Tokens"
1622
+ subtitle: "Manage tenant-level MCP bearer tokens for services and users."
1623
+ new_btn: "New MCP Token"
1624
+ search_placeholder: "Filter MCP tokens..."
1625
+ empty_state: "No MCP tokens registered yet."
1626
+ name: "Name"
1627
+ name_placeholder: "e.g. claude_prod"
1628
+ name_required: "Token name is required."
1629
+ subject_type: "Type"
1630
+ subject_type_service: "Service"
1631
+ subject_type_user: "User"
1632
+ subject_identifier: "Subject"
1633
+ subject_identifier_placeholder: "e.g. service:mcp or user@company.com"
1634
+ created_by_identifier: "Created by"
1635
+ service_subject_placeholder: "e.g. service:mcp"
1636
+ user_subject_placeholder: "e.g. user@company.com"
1637
+ service_subject_help: "Use a service subject with the service: prefix."
1638
+ user_subject_help: "Use an existing user_identifier in this tenant."
1639
+ subject_required: "Token subject is required."
1640
+ key_value: "Token"
1641
+ key_value_masked: "••••••••••••"
1642
+ copy_tooltip: "Copy token"
1643
+ copy_success: "MCP token copied to clipboard."
1644
+ copy_error: "Could not copy MCP token."
1645
+ status: "Status"
1646
+ active: "Active"
1647
+ inactive: "Inactive"
1648
+ created_at: "Created"
1649
+ expires_at: "Expires"
1650
+ last_used_at: "Last Used"
1651
+ create_modal_title: "Create MCP Token"
1652
+ delete_confirmation: "Delete MCP Token?"
1653
+ delete_message: "This action cannot be undone. The MCP token will be permanently revoked."
1654
+ create_success: "MCP token created successfully."
1655
+ delete_success: "MCP token revoked successfully."
1656
+ load_error: "Error loading MCP tokens."
1657
+ save_error: "Error saving MCP token."
1658
+ delete_error: "Error deleting MCP token."
1659
+ connection_title: "Connection snippet"
1660
+ connection_description: "Use this bearer token to connect an MCP client directly to the tenant endpoint."
1661
+ server_url: "Server URL"
1662
+
1615
1663
  secrets:
1616
1664
  title: "Secrets"
1617
1665
  subtitle: "Manage company secrets used by integrations and services."
@@ -1833,6 +1881,10 @@ errors:
1833
1881
  mcp_pat_expiry_invalid: "Invalid expiration value."
1834
1882
  mcp_pat_invalid: "Invalid, expired, or revoked MCP token."
1835
1883
  mcp_pat_not_found: "MCP token not found."
1884
+ mcp_pat_subject_required: "Token subject is required."
1885
+ mcp_pat_created_by_required: "The identifier of the user creating the token is required."
1886
+ mcp_pat_service_subject_invalid: "Service token subjects must start with 'service:'."
1887
+ mcp_pat_token_unavailable: "The bearer token is not available to view. Create or rotate the token to store it encrypted."
1836
1888
  no_company_permissions: "Do not have permissions to admin this company."
1837
1889
  templates:
1838
1890
  company_not_found: "Company not found."
@@ -315,15 +315,15 @@ ui:
315
315
  general_profile_label: "Perfil"
316
316
  general_tokens_label: "Integraciones"
317
317
  general_tokens_title: "Tokens de acceso MCP"
318
- general_tokens_description: "Crea y administra bearer tokens para clientes MCP que no completan el flujo OAuth directamente."
318
+ general_tokens_description: "Crea y administra tus bearer tokens personales para clientes MCP que no completan el flujo OAuth directamente."
319
319
  general_tokens_action: "Abrir tokens MCP"
320
320
  mcp_tokens_create_title: "Crear token MCP"
321
- mcp_tokens_create_description: "Genera un token de acceso personal para clientes MCP que requieren un bearer token."
321
+ mcp_tokens_create_description: "Genera tokens MCP personales. El bearer token y el JSON completo se muestran sólo al crearlo."
322
322
  mcp_tokens_list_title: "Tokens de acceso MCP"
323
323
  mcp_tokens_count_suffix: "tokens"
324
324
  mcp_tokens_empty: "Todavía no has creado tokens MCP."
325
- mcp_connection_title: "Snippets de conexión"
326
- mcp_connection_description: "Usa estos snippets con clientes MCP que se conectan con un bearer token fijo en vez de completar OAuth dentro de la app."
325
+ mcp_connection_title: "Snippet de conexión"
326
+ mcp_connection_description: "El snippet completo se muestra al crear un token MCP personal."
327
327
  mcp_connection_tag: "Listo para pegar"
328
328
  mcp_connection_server_url: "URL del servidor"
329
329
  mcp_connection_json_label: "Configuración JSON"
@@ -332,7 +332,7 @@ ui:
332
332
  mcp_connection_url_copy_success: "URL del servidor copiada."
333
333
  mcp_connection_json_copy_success: "Configuración JSON copiada."
334
334
  mcp_connection_copy_error: "No se pudo copiar el snippet de conexión MCP."
335
- mcp_connection_placeholder_help: "Reemplaza <YOUR_MCP_TOKEN> por uno de tus tokens MCP activos."
335
+ mcp_connection_placeholder_help: "El bearer token no se puede recuperar después; crea uno nuevo si necesitas volver a generar el JSON."
336
336
  mcp_token_name: "Nombre del token"
337
337
  mcp_token_name_placeholder: "Claude Desktop, PyCharm, Codex..."
338
338
  mcp_token_expiry_days: "Expira en (días)"
@@ -1415,6 +1415,10 @@ ui:
1415
1415
  execution_mode_label: "Modo de ejecución"
1416
1416
  agent_profile_label: "Agent profile"
1417
1417
  agent_profile_help: "Marca este agente para gobernar conversaciones persistentes como WhatsApp, campañas o cobranza."
1418
+ queue_tier_label: "Prioridad de Cola"
1419
+ queue_tier_default: "Por defecto"
1420
+ queue_tier_low: "Baja prioridad"
1421
+ queue_tier_help: "Los agentes de baja prioridad solo se ejecutan cuando la cola normal de agentes está vacía."
1418
1422
  active_label: "Activo"
1419
1423
  output_type_label: "Tipo de Salida"
1420
1424
  output_type_free_text: "Texto libre"
@@ -1616,6 +1620,50 @@ ui:
1616
1620
  save_error: "Error al guardar la API key."
1617
1621
  delete_error: "Error al eliminar la API key."
1618
1622
 
1623
+ mcp_service_tokens:
1624
+ menu_label: "Tokens MCP"
1625
+ title: "Tokens MCP"
1626
+ subtitle: "Administra tokens bearer MCP a nivel de tenant para servicios y usuarios."
1627
+ new_btn: "Nuevo token MCP"
1628
+ search_placeholder: "Filtrar tokens MCP..."
1629
+ empty_state: "Todavía no hay tokens MCP registrados."
1630
+ name: "Nombre"
1631
+ name_placeholder: "ej. claude_prod"
1632
+ name_required: "El nombre del token es obligatorio."
1633
+ subject_type: "Tipo"
1634
+ subject_type_service: "Servicio"
1635
+ subject_type_user: "Usuario"
1636
+ subject_identifier: "Subject"
1637
+ subject_identifier_placeholder: "ej. service:mcp o usuario@empresa.com"
1638
+ created_by_identifier: "Creado por"
1639
+ service_subject_placeholder: "ej. service:mcp"
1640
+ user_subject_placeholder: "ej. usuario@empresa.com"
1641
+ service_subject_help: "Usa un subject de servicio con prefijo service:."
1642
+ user_subject_help: "Usa un user_identifier existente en este tenant."
1643
+ subject_required: "El subject del token es obligatorio."
1644
+ key_value: "Token"
1645
+ key_value_masked: "••••••••••••"
1646
+ copy_tooltip: "Copiar token"
1647
+ copy_success: "Token MCP copiado al portapapeles."
1648
+ copy_error: "No se pudo copiar el token MCP."
1649
+ status: "Estado"
1650
+ active: "Activo"
1651
+ inactive: "Inactivo"
1652
+ created_at: "Creado"
1653
+ expires_at: "Expira"
1654
+ last_used_at: "Último uso"
1655
+ create_modal_title: "Crear token MCP"
1656
+ delete_confirmation: "¿Eliminar token MCP?"
1657
+ delete_message: "Esta acción no se puede deshacer. El token MCP será revocado permanentemente."
1658
+ create_success: "Token MCP creado correctamente."
1659
+ delete_success: "Token MCP revocado correctamente."
1660
+ load_error: "Error al cargar los tokens MCP."
1661
+ save_error: "Error al guardar el token MCP."
1662
+ delete_error: "Error al eliminar el token MCP."
1663
+ connection_title: "Snippet de conexión"
1664
+ connection_description: "Usa este bearer token para conectar un cliente MCP directamente al endpoint del tenant."
1665
+ server_url: "URL del servidor"
1666
+
1619
1667
  secrets:
1620
1668
  title: "Secrets"
1621
1669
  subtitle: "Administra los secrets de la empresa usados por integraciones y servicios."
@@ -1835,6 +1883,10 @@ errors:
1835
1883
  mcp_pat_expiry_invalid: "El valor de expiración es inválido."
1836
1884
  mcp_pat_invalid: "Token MCP inválido, expirado o revocado."
1837
1885
  mcp_pat_not_found: "Token MCP no encontrado."
1886
+ mcp_pat_subject_required: "El subject del token es obligatorio."
1887
+ mcp_pat_created_by_required: "El identificador del usuario que crea el token es obligatorio."
1888
+ mcp_pat_service_subject_invalid: "Los subjects de tokens de servicio deben comenzar con 'service:'."
1889
+ mcp_pat_token_unavailable: "El bearer token no está disponible para visualizar. Crea o rota el token para guardarlo cifrado."
1838
1890
 
1839
1891
  templates:
1840
1892
  company_not_found: "Empresa no encontrada."
@@ -37,14 +37,9 @@ class LLMQueryRepo:
37
37
 
38
38
  # get user query history
39
39
  def get_history(self, company: Company, user_identifier: str, limit: int = 100) -> list[LLMQuery]:
40
- return (
41
- self.session.query(LLMQuery)
42
- .filter(LLMQuery.user_identifier == user_identifier)
43
- .filter_by(company_id=company.id)
44
- .order_by(LLMQuery.created_at.desc())
45
- .limit(limit)
46
- .all()
47
- )
40
+ return self.session.query(LLMQuery).filter(
41
+ LLMQuery.user_identifier == user_identifier,
42
+ ).filter_by(company_id=company.id).order_by(LLMQuery.created_at.desc()).limit(limit).all()
48
43
 
49
44
 
50
45
  ## --- Tools related methods
@@ -195,6 +190,7 @@ class LLMQueryRepo:
195
190
  )
196
191
  prompt.attachment_fallback = new_prompt.attachment_fallback or prompt.attachment_fallback or "extract"
197
192
  prompt.llm_model = new_prompt.llm_model
193
+ prompt.queue_tier = getattr(new_prompt, "queue_tier", None) or prompt.queue_tier or "default"
198
194
  prompt.llm_request_options = dict(new_prompt.llm_request_options or {})
199
195
  prompt.tool_policy = dict(new_prompt.tool_policy or {})
200
196
  else:
@@ -218,6 +214,8 @@ class LLMQueryRepo:
218
214
  new_prompt.attachment_parser_provider = "basic"
219
215
  if not new_prompt.attachment_fallback:
220
216
  new_prompt.attachment_fallback = "extract"
217
+ if not getattr(new_prompt, "queue_tier", None):
218
+ new_prompt.queue_tier = "default"
221
219
  if new_prompt.llm_request_options is None:
222
220
  new_prompt.llm_request_options = {}
223
221
  if new_prompt.tool_policy is None:
@@ -0,0 +1,110 @@
1
+ from __future__ import annotations
2
+
3
+ from datetime import datetime
4
+
5
+ from injector import inject
6
+
7
+ from iatoolkit.repositories.database_manager import DatabaseManager
8
+ from iatoolkit.repositories.models import McpToken
9
+
10
+
11
+ class McpTokenRepo:
12
+ @inject
13
+ def __init__(self, db_manager: DatabaseManager):
14
+ self.db_manager = db_manager
15
+ self.session = db_manager.get_session()
16
+
17
+ def create_token(self, token: McpToken) -> McpToken:
18
+ self.session.add(token)
19
+ self.session.commit()
20
+ return token
21
+
22
+ def save_token(self, token: McpToken) -> McpToken:
23
+ self.session.add(token)
24
+ self.session.commit()
25
+ return token
26
+
27
+ def rollback(self) -> None:
28
+ self.session.rollback()
29
+
30
+ def list_tokens(
31
+ self,
32
+ company_id: int,
33
+ *,
34
+ subject_type: str | None = None,
35
+ subject_identifier: str | None = None,
36
+ ) -> list[McpToken]:
37
+ query = self.session.query(McpToken).filter_by(company_id=company_id)
38
+ if subject_type:
39
+ query = query.filter_by(subject_type=subject_type)
40
+ if subject_identifier:
41
+ query = query.filter_by(subject_identifier=subject_identifier)
42
+ return query.order_by(McpToken.created_at.desc()).all()
43
+
44
+ def list_tokens_for_user(self, company_id: int, user_identifier: str) -> list[McpToken]:
45
+ return self.list_tokens(
46
+ company_id,
47
+ subject_type=McpToken.SUBJECT_TYPE_USER,
48
+ subject_identifier=user_identifier,
49
+ )
50
+
51
+ def list_service_tokens(self, company_id: int) -> list[McpToken]:
52
+ return self.list_tokens(company_id, subject_type=McpToken.SUBJECT_TYPE_SERVICE)
53
+
54
+ def get_token_by_id(
55
+ self,
56
+ company_id: int,
57
+ token_id: int,
58
+ *,
59
+ subject_type: str | None = None,
60
+ subject_identifier: str | None = None,
61
+ ) -> McpToken | None:
62
+ query = self.session.query(McpToken).filter_by(company_id=company_id, id=token_id)
63
+ if subject_type:
64
+ query = query.filter_by(subject_type=subject_type)
65
+ if subject_identifier:
66
+ query = query.filter_by(subject_identifier=subject_identifier)
67
+ return query.first()
68
+
69
+ def get_token_for_user(self, company_id: int, user_identifier: str, token_id: int) -> McpToken | None:
70
+ return self.get_token_by_id(
71
+ company_id,
72
+ token_id,
73
+ subject_type=McpToken.SUBJECT_TYPE_USER,
74
+ subject_identifier=user_identifier,
75
+ )
76
+
77
+ def get_service_token_by_id(self, company_id: int, token_id: int) -> McpToken | None:
78
+ return self.get_token_by_id(company_id, token_id, subject_type=McpToken.SUBJECT_TYPE_SERVICE)
79
+
80
+ def get_token_by_name(
81
+ self,
82
+ company_id: int,
83
+ name: str,
84
+ *,
85
+ subject_type: str,
86
+ subject_identifier: str,
87
+ ) -> McpToken | None:
88
+ return (
89
+ self.session.query(McpToken)
90
+ .filter_by(
91
+ company_id=company_id,
92
+ subject_type=subject_type,
93
+ subject_identifier=subject_identifier,
94
+ name=name,
95
+ )
96
+ .first()
97
+ )
98
+
99
+ def get_active_token_by_hash(self, company_id: int, token_hash: str) -> McpToken | None:
100
+ now = datetime.now()
101
+ return (
102
+ self.session.query(McpToken)
103
+ .filter(
104
+ McpToken.company_id == company_id,
105
+ McpToken.token_hash == token_hash,
106
+ McpToken.revoked_at.is_(None),
107
+ McpToken.expires_at > now,
108
+ )
109
+ .first()
110
+ )
@@ -160,8 +160,8 @@ class Company(Base):
160
160
  back_populates="company",
161
161
  cascade="all, delete-orphan",
162
162
  )
163
- mcp_personal_access_tokens = relationship(
164
- "McpPersonalAccessToken",
163
+ mcp_tokens = relationship(
164
+ "McpToken",
165
165
  back_populates="company",
166
166
  cascade="all, delete-orphan",
167
167
  )
@@ -576,6 +576,7 @@ class Prompt(Base):
576
576
  attachment_parser_provider = Column(String, nullable=False, default="basic")
577
577
  attachment_fallback = Column(String, nullable=False, default="extract")
578
578
  llm_model = Column(String, nullable=True, default=None)
579
+ queue_tier = Column(String, nullable=False, default="default")
579
580
  llm_request_options = Column(JSON_NATIVE, nullable=False, default=dict)
580
581
  tool_policy = Column(JSON_NATIVE, nullable=False, default=dict)
581
582
  created_at = Column(DateTime, default=datetime.now)
@@ -712,24 +713,36 @@ class SqlDataset(Base):
712
713
  return {column.key: getattr(self, column.key) for column in class_mapper(self.__class__).columns}
713
714
 
714
715
 
715
- class McpPersonalAccessToken(Base):
716
- __tablename__ = "iat_mcp_personal_access_tokens"
716
+ class McpToken(Base):
717
+ SUBJECT_TYPE_USER = "user"
718
+ SUBJECT_TYPE_SERVICE = "service"
719
+
720
+ __tablename__ = "iat_mcp_tokens"
717
721
 
718
722
  id = Column(Integer, primary_key=True, autoincrement=True)
719
723
  company_id = Column(Integer, ForeignKey(f"{ORM_SCHEMA}.iat_companies.id", ondelete="CASCADE"), nullable=False, index=True)
720
- user_identifier = Column(String, nullable=False, index=True)
724
+ subject_type = Column(String, nullable=False, index=True, default=SUBJECT_TYPE_USER)
725
+ subject_identifier = Column(String, nullable=False, index=True)
726
+ created_by_identifier = Column(String, nullable=False, index=True)
721
727
  name = Column(String, nullable=False)
722
728
  token_hash = Column(String(64), nullable=False, unique=True, index=True)
729
+ token_encrypted = Column(Text, nullable=True)
723
730
  created_at = Column(DateTime, default=datetime.now, nullable=False)
724
731
  expires_at = Column(DateTime, nullable=False)
725
732
  revoked_at = Column(DateTime, nullable=True)
726
733
  last_used_at = Column(DateTime, nullable=True)
727
734
 
728
735
  __table_args__ = (
729
- UniqueConstraint("company_id", "user_identifier", "name", name="uix_mcp_pat_company_user_name"),
736
+ UniqueConstraint(
737
+ "company_id",
738
+ "subject_type",
739
+ "subject_identifier",
740
+ "name",
741
+ name="uix_mcp_token_company_subject_name",
742
+ ),
730
743
  )
731
744
 
732
- company = relationship("Company", back_populates="mcp_personal_access_tokens")
745
+ company = relationship("Company", back_populates="mcp_tokens")
733
746
 
734
747
  def to_dict(self):
735
748
  return {column.key: getattr(self, column.key) for column in class_mapper(self.__class__).columns}
@@ -42,7 +42,7 @@ class CompanyContextService:
42
42
  if section
43
43
  )
44
44
 
45
- def get_company_context_blocks(self, company_short_name: str) -> dict[str, str]:
45
+ def get_company_context_blocks(self, company_short_name: str, *, include_sql_context: bool = True) -> dict[str, str]:
46
46
  """
47
47
  Builds the full context by aggregating three sources:
48
48
  1. Static context files (Markdown).
@@ -61,14 +61,15 @@ class CompanyContextService:
61
61
  except Exception as e:
62
62
  logging.warning(f"Could not load Markdown context for '{company_short_name}': {e}")
63
63
 
64
- # 2. Resolve company-specific SQL databases. We collect them first so YAML
65
- # context can avoid duplicating table definitions already covered by SQL.
66
- try:
67
- sql_context, db_tables = self._get_sql_enriched_context(company_short_name)
68
- sql_context = sql_context.strip()
69
- sql_source_table_scopes = self._get_sql_source_table_scopes(company_short_name)
70
- except Exception as e:
71
- logging.warning(f"Could not generate SQL context for '{company_short_name}': {e}")
64
+ # 2. Resolve company-specific SQL databases. MCP can skip this expensive
65
+ # schema expansion and expose SQL through dedicated schema/query tools.
66
+ if include_sql_context:
67
+ try:
68
+ sql_context, db_tables = self._get_sql_enriched_context(company_short_name)
69
+ sql_context = sql_context.strip()
70
+ sql_source_table_scopes = self._get_sql_source_table_scopes(company_short_name)
71
+ except Exception as e:
72
+ logging.warning(f"Could not generate SQL context for '{company_short_name}': {e}")
72
73
 
73
74
  # 4. Context from residual yaml (schema/*.yaml) files
74
75
  try: