iatoolkit 2.36.2__tar.gz → 2.40.0__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 (251) hide show
  1. {iatoolkit-2.36.2/src/iatoolkit.egg-info → iatoolkit-2.40.0}/PKG-INFO +1 -1
  2. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/__init__.py +1 -1
  3. iatoolkit-2.40.0/src/iatoolkit/common/bridge_validation.py +39 -0
  4. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/locales/en.yaml +129 -1
  5. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/locales/es.yaml +134 -1
  6. iatoolkit-2.40.0/src/iatoolkit/repositories/bridge_repo.py +77 -0
  7. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/repositories/models.py +76 -0
  8. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/auth_service.py +4 -0
  9. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/llm_client_service.py +29 -0
  10. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/profile_service.py +80 -1
  11. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/sql_service.py +7 -2
  12. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/sql_source_service.py +10 -0
  13. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/tool_service.py +24 -11
  14. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/templates/_login_widget.html +5 -1
  15. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/templates/account.html +13 -0
  16. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/views/login_view.py +26 -1
  17. {iatoolkit-2.36.2 → iatoolkit-2.40.0/src/iatoolkit.egg-info}/PKG-INFO +1 -1
  18. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit.egg-info/SOURCES.txt +2 -0
  19. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/LICENSE +0 -0
  20. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/LICENSE_COMMUNITY.md +0 -0
  21. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/pyproject.toml +0 -0
  22. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/readme.md +0 -0
  23. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/requirements.txt +0 -0
  24. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/setup.cfg +0 -0
  25. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/base_company.py +0 -0
  26. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/cli_commands.py +0 -0
  27. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/common/__init__.py +0 -0
  28. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/common/exceptions.py +0 -0
  29. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/common/interfaces/__init__.py +0 -0
  30. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/common/interfaces/asset_storage.py +0 -0
  31. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/common/interfaces/database_provider.py +0 -0
  32. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/common/interfaces/memory_compilation_trigger.py +0 -0
  33. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/common/interfaces/memory_lint_trigger.py +0 -0
  34. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/common/interfaces/secret_provider.py +0 -0
  35. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/common/interfaces/signup_policy_resolver.py +0 -0
  36. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/common/interfaces/web_search_provider.py +0 -0
  37. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/common/model_registry.py +0 -0
  38. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/common/routes.py +0 -0
  39. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/common/secret_resolver.py +0 -0
  40. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/common/session_manager.py +0 -0
  41. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/common/util.py +0 -0
  42. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/company_registry.py +0 -0
  43. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/config/__init__.py +0 -0
  44. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/config/llm_capabilities.yaml +0 -0
  45. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/config/system_prompts/channel_business_identity.prompt +0 -0
  46. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/config/system_prompts/channel_conversation_continuity.prompt +0 -0
  47. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/config/system_prompts/channel_response_style.prompt +0 -0
  48. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/config/system_prompts/chat_state_rules.prompt +0 -0
  49. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/config/system_prompts/chat_user_profile.prompt +0 -0
  50. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/config/system_prompts/core_identity.prompt +0 -0
  51. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/config/system_prompts/email_output.prompt +0 -0
  52. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/config/system_prompts/file_download_output.prompt +0 -0
  53. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/config/system_prompts/format_styles.prompt +0 -0
  54. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/config/system_prompts/html_structures.prompt +0 -0
  55. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/config/system_prompts/links_documents.prompt +0 -0
  56. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/config/system_prompts/memory_usage.prompt +0 -0
  57. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/config/system_prompts/multimodal_basics.prompt +0 -0
  58. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/config/system_prompts/output_basics.prompt +0 -0
  59. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/config/system_prompts/presentation_formatting.prompt +0 -0
  60. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/config/system_prompts/query_main.prompt +0 -0
  61. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/config/system_prompts/sql_aggregation_scope.prompt +0 -0
  62. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/config/system_prompts/sql_casting.prompt +0 -0
  63. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/config/system_prompts/sql_core.prompt +0 -0
  64. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/config/system_prompts/sql_jsonb.prompt +0 -0
  65. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/config/system_prompts/sql_mysql_casting.prompt +0 -0
  66. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/config/system_prompts/sql_mysql_json.prompt +0 -0
  67. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/config/system_prompts/sql_redshift_basics.prompt +0 -0
  68. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/config/system_prompts/sql_redshift_types.prompt +0 -0
  69. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/config/system_prompts/sql_rules.prompt +0 -0
  70. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/config/system_prompts/tool_html_passthrough.prompt +0 -0
  71. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/config/system_prompts_pack.yaml +0 -0
  72. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/config/system_tools_pack.yaml +0 -0
  73. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/core.py +0 -0
  74. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/infra/__init__.py +0 -0
  75. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/infra/brevo_mail_app.py +0 -0
  76. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/infra/call_service.py +0 -0
  77. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/infra/connectors/__init__.py +0 -0
  78. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/infra/connectors/file_connector.py +0 -0
  79. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/infra/connectors/file_connector_factory.py +0 -0
  80. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/infra/connectors/google_cloud_storage_connector.py +0 -0
  81. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/infra/connectors/google_drive_connector.py +0 -0
  82. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/infra/connectors/local_file_connector.py +0 -0
  83. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/infra/connectors/s3_connector.py +0 -0
  84. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/infra/google_auth_client.py +0 -0
  85. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/infra/google_chat_app.py +0 -0
  86. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/infra/inference_embeddings_client.py +0 -0
  87. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/infra/inference_handler.py +0 -0
  88. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/infra/jina_embeddings_client.py +0 -0
  89. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/infra/llm_gateway_resolver.py +0 -0
  90. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/infra/llm_providers/__init__.py +0 -0
  91. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/infra/llm_providers/anthropic_adapter.py +0 -0
  92. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/infra/llm_providers/deepseek_adapter.py +0 -0
  93. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/infra/llm_providers/gemini_adapter.py +0 -0
  94. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/infra/llm_providers/openai_adapter.py +0 -0
  95. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/infra/llm_providers/openai_compatible_chat_adapter.py +0 -0
  96. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/infra/llm_providers/openrouter_adapter.py +0 -0
  97. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/infra/llm_proxy.py +0 -0
  98. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/infra/llm_response.py +0 -0
  99. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/infra/redis_session_manager.py +0 -0
  100. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/repositories/__init__.py +0 -0
  101. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/repositories/api_key_repo.py +0 -0
  102. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/repositories/database_manager.py +0 -0
  103. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/repositories/document_repo.py +0 -0
  104. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/repositories/env_secret_provider.py +0 -0
  105. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/repositories/filesystem_asset_repository.py +0 -0
  106. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/repositories/knowledge_wiki_repo.py +0 -0
  107. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/repositories/llm_query_repo.py +0 -0
  108. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/repositories/mcp_token_repo.py +0 -0
  109. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/repositories/memory_repo.py +0 -0
  110. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/repositories/profile_repo.py +0 -0
  111. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/repositories/prompt_resource_repo.py +0 -0
  112. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/repositories/sql_dataset_repo.py +0 -0
  113. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/repositories/sql_source_repo.py +0 -0
  114. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/repositories/vs_repo.py +0 -0
  115. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/runtime_logging.py +0 -0
  116. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/__init__.py +0 -0
  117. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/api_key_service.py +0 -0
  118. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/attachment_policy_service.py +0 -0
  119. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/benchmark_service.py +0 -0
  120. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/branding_service.py +0 -0
  121. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/company_context_service.py +0 -0
  122. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/configuration_service.py +0 -0
  123. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/context_builder_service.py +0 -0
  124. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/dispatcher_service.py +0 -0
  125. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/embedding_service.py +0 -0
  126. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/excel_service.py +0 -0
  127. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/file_processor_service.py +0 -0
  128. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/history_manager_service.py +0 -0
  129. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/http_tool_service.py +0 -0
  130. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/i18n_service.py +0 -0
  131. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/inference_service.py +0 -0
  132. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/jwt_service.py +0 -0
  133. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/knowledge_base_service.py +0 -0
  134. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/language_service.py +0 -0
  135. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/license_service.py +0 -0
  136. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/mail_service.py +0 -0
  137. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/markdown_wiki_service.py +0 -0
  138. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/mcp_token_service.py +0 -0
  139. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/memory_compiler_service.py +0 -0
  140. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/memory_lint_service.py +0 -0
  141. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/memory_lookup_policy_service.py +0 -0
  142. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/memory_service.py +0 -0
  143. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/memory_wiki_service.py +0 -0
  144. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/noop_memory_compilation_trigger.py +0 -0
  145. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/noop_memory_lint_trigger.py +0 -0
  146. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/parsers/__init__.py +0 -0
  147. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/parsers/contracts.py +0 -0
  148. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/parsers/image_normalizer.py +0 -0
  149. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/parsers/parsing_service.py +0 -0
  150. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/parsers/pdf_ocr_detection.py +0 -0
  151. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/parsers/provider_factory.py +0 -0
  152. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/parsers/provider_resolver.py +0 -0
  153. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/parsers/providers/__init__.py +0 -0
  154. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/parsers/providers/basic_provider.py +0 -0
  155. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/parsers/providers/docling_provider.py +0 -0
  156. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/parsers/validator.py +0 -0
  157. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/pdf_service.py +0 -0
  158. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/prompt_resource_service.py +0 -0
  159. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/prompt_service.py +0 -0
  160. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/query_service.py +0 -0
  161. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/signup_policy_resolver.py +0 -0
  162. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/sql_dataset_service.py +0 -0
  163. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/storage_service.py +0 -0
  164. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/structured_output_service.py +0 -0
  165. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/system_prompt_catalog.py +0 -0
  166. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/system_tools.py +0 -0
  167. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/telemetry_service.py +0 -0
  168. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/tenant_wiki_service.py +0 -0
  169. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/tool_output_contract.py +0 -0
  170. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/user_feedback_service.py +0 -0
  171. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/user_session_context_service.py +0 -0
  172. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/visual_kb_service.py +0 -0
  173. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/visual_tool_service.py +0 -0
  174. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/warmup_service.py +0 -0
  175. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/web_search/__init__.py +0 -0
  176. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/web_search/provider_factory.py +0 -0
  177. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/web_search/providers/__init__.py +0 -0
  178. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/web_search/providers/brave_provider.py +0 -0
  179. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/services/web_search_service.py +0 -0
  180. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/static/images/fernando.jpeg +0 -0
  181. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/static/images/iatoolkit_core.png +0 -0
  182. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/static/images/iatoolkit_logo.png +0 -0
  183. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/static/js/chat_feedback_button.js +0 -0
  184. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/static/js/chat_filepond.js +0 -0
  185. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/static/js/chat_help_content.js +0 -0
  186. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/static/js/chat_history_button.js +0 -0
  187. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/static/js/chat_logout_button.js +0 -0
  188. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/static/js/chat_main.js +0 -0
  189. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/static/js/chat_memory_button.js +0 -0
  190. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/static/js/chat_model_selector.js +0 -0
  191. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/static/js/chat_onboarding_button.js +0 -0
  192. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/static/js/chat_prompt_manager.js +0 -0
  193. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/static/js/chat_reload_button.js +0 -0
  194. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/static/styles/chat_iatoolkit.css +0 -0
  195. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/static/styles/chat_modal.css +0 -0
  196. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/static/styles/chat_public.css +0 -0
  197. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/static/styles/documents.css +0 -0
  198. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/static/styles/landing_page.css +0 -0
  199. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/static/styles/llm_output.css +0 -0
  200. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/static/styles/onboarding.css +0 -0
  201. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/templates/_company_header.html +0 -0
  202. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/templates/base.html +0 -0
  203. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/templates/change_password.html +0 -0
  204. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/templates/chat.html +0 -0
  205. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/templates/chat_memory_modal.html +0 -0
  206. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/templates/chat_modals.html +0 -0
  207. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/templates/error.html +0 -0
  208. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/templates/forgot_password.html +0 -0
  209. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/templates/home_hosted_default.html +0 -0
  210. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/templates/memory/wiki_schema.md +0 -0
  211. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/templates/onboarding_shell.html +0 -0
  212. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/templates/pdf/base.html +0 -0
  213. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/templates/pdf/letter.html +0 -0
  214. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/templates/pdf/report.html +0 -0
  215. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/templates/pdf/simple.html +0 -0
  216. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/templates/signup.html +0 -0
  217. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/views/__init__.py +0 -0
  218. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/views/account_view.py +0 -0
  219. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/views/api_key_api_view.py +0 -0
  220. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/views/base_login_view.py +0 -0
  221. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/views/categories_api_view.py +0 -0
  222. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/views/change_password_view.py +0 -0
  223. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/views/chat_context_preview_api_view.py +0 -0
  224. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/views/chat_view.py +0 -0
  225. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/views/configuration_api_view.py +0 -0
  226. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/views/connectors_api_view.py +0 -0
  227. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/views/embedding_api_view.py +0 -0
  228. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/views/forgot_password_view.py +0 -0
  229. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/views/help_content_api_view.py +0 -0
  230. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/views/history_api_view.py +0 -0
  231. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/views/home_view.py +0 -0
  232. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/views/init_context_api_view.py +0 -0
  233. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/views/llmquery_api_view.py +0 -0
  234. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/views/load_document_api_view.py +0 -0
  235. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/views/logout_api_view.py +0 -0
  236. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/views/memory_api_view.py +0 -0
  237. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/views/profile_api_view.py +0 -0
  238. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/views/prompt_api_view.py +0 -0
  239. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/views/prompt_context_preview_api_view.py +0 -0
  240. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/views/prompt_resource_api_view.py +0 -0
  241. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/views/rag_api_view.py +0 -0
  242. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/views/root_redirect_view.py +0 -0
  243. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/views/signup_view.py +0 -0
  244. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/views/static_page_view.py +0 -0
  245. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/views/tool_api_view.py +0 -0
  246. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/views/user_feedback_api_view.py +0 -0
  247. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/views/users_api_view.py +0 -0
  248. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit/views/verify_user_view.py +0 -0
  249. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit.egg-info/dependency_links.txt +0 -0
  250. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/src/iatoolkit.egg-info/requires.txt +0 -0
  251. {iatoolkit-2.36.2 → iatoolkit-2.40.0}/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.36.2
3
+ Version: 2.40.0
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.36.2"
6
+ __version__ = "2.40.0"
7
7
 
8
8
  # Expose main classes and functions at the top level of the package
9
9
 
@@ -0,0 +1,39 @@
1
+ # Copyright (c) 2024 Fernando Libedinsky
2
+ # Product: IAToolkit
3
+ #
4
+ # Shared validation for the `bridge_id` that SQL sources and HTTP tools point
5
+ # at. Lives here rather than in either service because both reference the same
6
+ # registry and must reject the same way — a check that drifts between the two
7
+ # is worse than no check, since the GUI would accept in one screen what it
8
+ # refuses in the other.
9
+
10
+ from iatoolkit.common.exceptions import IAToolkitException
11
+ from iatoolkit.repositories.bridge_repo import BridgeRepo
12
+ from iatoolkit.repositories.models import Company
13
+
14
+
15
+ def validate_bridge_is_registered(bridge_repo: BridgeRepo, company: Company, bridge_id: str) -> None:
16
+ """
17
+ Rejects a bridge_id with no registered bridge behind it.
18
+
19
+ Worth the extra check because the failure it prevents is genuinely
20
+ confusing: an unregistered bridge_id used to surface only at runtime, as
21
+ "Bridge '<id>' is not connected" — the exact same message as a bridge that
22
+ is simply down. Catching it at save time separates "you typed it wrong"
23
+ from "your agent is offline".
24
+
25
+ Skipped entirely for companies that have no bridges registered yet: those
26
+ still reference bridges by API key name (the pre-registry rule), and
27
+ refusing to save would break configurations that work today. The check
28
+ turns itself on once the company is backfilled.
29
+ """
30
+ registered = bridge_repo.get_by_company(company)
31
+ if not registered:
32
+ return
33
+
34
+ if not any(b.bridge_id == bridge_id for b in registered):
35
+ known = ", ".join(sorted(b.bridge_id for b in registered))
36
+ raise IAToolkitException(
37
+ IAToolkitException.ErrorType.INVALID_PARAMETER,
38
+ f"Unknown bridge_id '{bridge_id}'. Registered bridges for this company: {known}",
39
+ )
@@ -1,4 +1,15 @@
1
1
  # Language: English
2
+ emails:
3
+ google_welcome:
4
+ subject: "Welcome to IAToolkit"
5
+ title: "Your IAToolkit account is ready"
6
+ greeting: "Hello {name},"
7
+ intro: "We created your account successfully using your Google identity."
8
+ account: "Sign-in account: {email}"
9
+ password_note: "You do not need an IAToolkit password. To sign in again, choose Sign up or continue with Google."
10
+ cta: "Continue to IAToolkit"
11
+ security_note: "If you did not create this account, contact IAToolkit support."
12
+
2
13
  ui:
3
14
  common:
4
15
  actions: "Actions"
@@ -318,6 +329,7 @@ ui:
318
329
  account:
319
330
  title: "My Account"
320
331
  back_to_chat: "Back to chat"
332
+ menu_getting_started: "Getting Started"
321
333
  menu_general: "General"
322
334
  menu_mcp_tokens: "MCP Tokens"
323
335
  general_title: "Personal settings"
@@ -566,6 +578,44 @@ ui:
566
578
  last_message_label: "Last message: {value}"
567
579
  first_reply_label: "First reply: {value}"
568
580
 
581
+ support:
582
+ title: "Support"
583
+ new_case: "Report an issue"
584
+ my_cases: "Your requests"
585
+ field_title: "Summary"
586
+ field_category: "Area"
587
+ field_impact: "What is happening?"
588
+ field_description: "What happened"
589
+ impact_question: "A question, nothing is broken"
590
+ impact_degraded: "Something fails, we can still work"
591
+ impact_blocked: "We cannot work"
592
+ category_general: "General"
593
+ category_connectivity: "Connectivity"
594
+ category_onboarding: "Setup"
595
+ category_billing: "Billing"
596
+ category_product: "Product"
597
+ credentials_warning: "Do not paste passwords, API keys or connection strings here."
598
+ submit: "Send request"
599
+ sending: "Sending…"
600
+ sent: "Request sent."
601
+ required: "Summary and description are required."
602
+ send_failed: "Could not send the request."
603
+ load_failed: "Could not load your requests."
604
+ loading: "Loading…"
605
+ empty: "You have not opened any requests yet."
606
+ col_case: "Request"
607
+ col_status: "Status"
608
+ col_opened: "Opened"
609
+ due: "Response by"
610
+ entitlement_committed_title: "Production Support active"
611
+ entitlement_committed_text: "Your requests carry a committed response time."
612
+ entitlement_standard_title: "Standard support"
613
+ entitlement_standard_text: "We work every request. Production Support adds a committed response time."
614
+ status_open: "Open"
615
+ status_in_progress: "In progress"
616
+ status_waiting_customer: "Waiting for you"
617
+ status_resolved: "Resolved"
618
+ status_closed: "Closed"
569
619
  admin:
570
620
  workspace: "Workspace"
571
621
  configuration: "Configuration"
@@ -608,6 +658,7 @@ ui:
608
658
  load_configuration_hint: "Applies configuration and refreshes runtime clients"
609
659
  load_configuration_short: "Apply"
610
660
  select_company: "Select company"
661
+ documentation: "Documentation"
611
662
  goto_chat: "Go to chat"
612
663
  logout: "Close session"
613
664
  error_loading: "Error loading file content"
@@ -1429,6 +1480,25 @@ ui:
1429
1480
  include_inactive: "Include Inactive"
1430
1481
  new_contract: "New Contract"
1431
1482
  col_cycle: "Cycle"
1483
+ included_amount: "Included"
1484
+ billable_amount: "Billable"
1485
+ plan_title: "Your plan"
1486
+ plan_platform: "Platform"
1487
+ plan_platform_note: "{seats} users included"
1488
+ plan_seats: "Users"
1489
+ plan_seats_note: "{active} active this period · {amount}"
1490
+ seat_alert_over_title: "{active} people are using {contracted} contracted seats"
1491
+ seat_alert_over_text: "Contact us to adjust your plan."
1492
+ seat_alert_near_title: "{remaining} seats left"
1493
+ seat_alert_near_text: "Contact us before your team outgrows the plan."
1494
+ plan_support: "Support"
1495
+ plan_support_standard: "Standard"
1496
+ plan_support_production: "Production support"
1497
+ plan_support_included: "Included in the plan"
1498
+ plan_credits: "Runtime credits this period"
1499
+ plan_credits_remaining: "{amount} of included execution left"
1500
+ plan_credits_exhausted: "Allowance used; further execution is billed"
1501
+ plan_recurring_total: "Monthly recurring"
1432
1502
  col_included: "Included"
1433
1503
  col_grace: "Grace"
1434
1504
  col_markup_pct: "Markup %"
@@ -1472,6 +1542,7 @@ ui:
1472
1542
  sql_sources_form_connection_type: "Connection Type"
1473
1543
  sql_sources_form_connection_env: "Connection String Env"
1474
1544
  sql_sources_form_bridge_id: "Bridge ID"
1545
+ sql_sources_form_bridge_none: "This company has no registered bridges yet. Create them in the Bridges section."
1475
1546
  sql_sources_form_description: "Description"
1476
1547
  sql_sources_form_active: "Active"
1477
1548
  sql_context_scope_title: "SQL Context"
@@ -1856,6 +1927,64 @@ ui:
1856
1927
  save_error: "Error saving API key."
1857
1928
  delete_error: "Error deleting API key."
1858
1929
 
1930
+ bridges:
1931
+ menu_label: "Bridges"
1932
+ title: "Bridges"
1933
+ subtitle: "On-premise agents connecting the company's private databases and APIs."
1934
+ new_btn: "New Bridge"
1935
+ search_placeholder: "Filter bridges..."
1936
+ empty_state: "No bridges registered yet."
1937
+ bridge_id: "Bridge ID"
1938
+ bridge_id_placeholder: "e.g. docker-bridge"
1939
+ bridge_id_required: "Bridge ID is required."
1940
+ bridge_id_help: "Lowercase letters, digits and hyphens (3-64). Cannot be changed later: SQL sources and tools reference it."
1941
+ display_name: "Name"
1942
+ display_name_placeholder: "e.g. Production"
1943
+ description: "Description"
1944
+ api_key: "API Key"
1945
+ api_key_masked: "••••••••••••"
1946
+ api_key_help: "Set this value as IAT_BRIDGE_KEY in the bridge's .env file."
1947
+ copy_tooltip: "Copy API key"
1948
+ copy_success: "API key copied to clipboard."
1949
+ copy_error: "Could not copy the API key."
1950
+ status: "Status"
1951
+ status_connected: "Connected"
1952
+ status_disconnected: "Disconnected"
1953
+ diagnose_action: "Test"
1954
+ diagnose_title: "Connection test"
1955
+ diagnose_intro: "Verify that the Bridge connects, reaches its database and resolves HTTP calls. Each link is reported separately."
1956
+ diagnose_cta: "Test the connection"
1957
+ diagnose_running: "Testing…"
1958
+ diagnose_check_socket: "Bridge connected"
1959
+ diagnose_check_database: "Sample database reachable"
1960
+ diagnose_check_http: "HTTP channel working"
1961
+ diagnose_error: "Could not run the check."
1962
+ status_never_connected: "Never connected"
1963
+ active: "Active"
1964
+ inactive: "Inactive"
1965
+ last_seen_at: "Last seen"
1966
+ origin: "Origin"
1967
+ agent_version: "Version"
1968
+ capabilities: "Capabilities"
1969
+ resources: "Exposed resources"
1970
+ actions: "Actions"
1971
+ create_modal_title: "Create Bridge"
1972
+ edit_modal_title: "Edit Bridge"
1973
+ create_success: "Bridge created. Copy the API key and configure it on the bridge."
1974
+ update_success: "Bridge updated successfully."
1975
+ delete_confirmation: "Delete Bridge?"
1976
+ delete_message: "SQL sources and tools referencing it will stop working. Its API key is deleted too."
1977
+ delete_success: "Bridge deleted successfully."
1978
+ rotate_tooltip: "Rotate API key"
1979
+ rotate_confirmation: "Rotate the API key?"
1980
+ rotate_message: "A new key is issued and the old one is deleted. The bridge stays down until you update IAT_BRIDGE_KEY in its .env."
1981
+ rotate_action: "Rotate key"
1982
+ rotate_success: "API key rotated. Update IAT_BRIDGE_KEY on the bridge."
1983
+ load_error: "Error loading bridges."
1984
+ save_error: "Error saving the bridge."
1985
+ delete_error: "Error deleting the bridge."
1986
+ rotate_error: "Error rotating the API key."
1987
+
1859
1988
  mcp_service_tokens:
1860
1989
  menu_label: "MCP Tokens"
1861
1990
  title: "MCP Tokens"
@@ -1911,7 +2040,6 @@ ui:
1911
2040
  tab_settings: "Settings"
1912
2041
  tab_access: "Access"
1913
2042
  tab_observability: "Observability"
1914
- tab_usage: "Usage"
1915
2043
  save_success: "MCP configuration saved successfully."
1916
2044
  save_error: "Could not save MCP configuration."
1917
2045
  preview_error: "Could not build the MCP preview."
@@ -1,4 +1,15 @@
1
1
  # locales/es.yaml
2
+ emails:
3
+ google_welcome:
4
+ subject: "Bienvenido a IAToolkit"
5
+ title: "Tu cuenta IAToolkit está lista"
6
+ greeting: "Hola {name},"
7
+ intro: "Creamos tu cuenta correctamente usando tu identidad de Google."
8
+ account: "Cuenta de acceso: {email}"
9
+ password_note: "No necesitas una contraseña de IAToolkit. Para volver a entrar, elige Registrarse o continuar con Google."
10
+ cta: "Continuar en IAToolkit"
11
+ security_note: "Si no realizaste este registro, contacta al soporte de IAToolkit."
12
+
2
13
  ui:
3
14
  common:
4
15
  actions: "Acciones"
@@ -269,6 +280,7 @@ ui:
269
280
  title: "Iniciar Sesión"
270
281
  welcome_message: "Ingresa tus credenciales o registrate para acceder a la plataforma."
271
282
  email_placeholder: "Correo electrónico"
283
+ password_placeholder: "Contraseña"
272
284
  login_button: "Acceder"
273
285
  google_button: "Continuar con Google"
274
286
  continue_with_google_button: "Continuar con Google"
@@ -319,6 +331,7 @@ ui:
319
331
  account:
320
332
  title: "Mi cuenta"
321
333
  back_to_chat: "Volver al chat"
334
+ menu_getting_started: "Primeros pasos"
322
335
  menu_general: "General"
323
336
  menu_mcp_tokens: "Tokens MCP"
324
337
  general_title: "Configuración personal"
@@ -567,6 +580,44 @@ ui:
567
580
  last_message_label: "Último mensaje: {value}"
568
581
  first_reply_label: "Primera respuesta: {value}"
569
582
 
583
+ support:
584
+ title: "Soporte"
585
+ new_case: "Reportar un problema"
586
+ my_cases: "Tus solicitudes"
587
+ field_title: "Resumen"
588
+ field_category: "Área"
589
+ field_impact: "¿Qué está pasando?"
590
+ field_description: "Qué ocurrió"
591
+ impact_question: "Una consulta, no hay nada roto"
592
+ impact_degraded: "Algo falla, podemos seguir trabajando"
593
+ impact_blocked: "No podemos trabajar"
594
+ category_general: "General"
595
+ category_connectivity: "Conectividad"
596
+ category_onboarding: "Puesta en marcha"
597
+ category_billing: "Facturación"
598
+ category_product: "Producto"
599
+ credentials_warning: "No pegues contraseñas, API keys ni cadenas de conexión aquí."
600
+ submit: "Enviar solicitud"
601
+ sending: "Enviando…"
602
+ sent: "Solicitud enviada."
603
+ required: "El resumen y la descripción son obligatorios."
604
+ send_failed: "No se pudo enviar la solicitud."
605
+ load_failed: "No se pudieron cargar tus solicitudes."
606
+ loading: "Cargando…"
607
+ empty: "Todavía no abriste ninguna solicitud."
608
+ col_case: "Solicitud"
609
+ col_status: "Estado"
610
+ col_opened: "Abierta"
611
+ due: "Respuesta antes de"
612
+ entitlement_committed_title: "Soporte Producción activo"
613
+ entitlement_committed_text: "Tus solicitudes tienen tiempo de respuesta comprometido."
614
+ entitlement_standard_title: "Soporte estándar"
615
+ entitlement_standard_text: "Trabajamos todas las solicitudes. Soporte Producción agrega un tiempo de respuesta comprometido."
616
+ status_open: "Abierta"
617
+ status_in_progress: "En curso"
618
+ status_waiting_customer: "Esperando tu respuesta"
619
+ status_resolved: "Resuelta"
620
+ status_closed: "Cerrada"
570
621
  admin:
571
622
  workspace: "Recursos"
572
623
  configuration: "Configuración"
@@ -609,8 +660,10 @@ ui:
609
660
  load_configuration_hint: "Aplica configuración y refresca clientes en runtime"
610
661
  load_configuration_short: "Aplicar"
611
662
  select_company: "Seleccionar empresa"
663
+ documentation: "Documentación"
612
664
  goto_chat: "Ir al chat"
613
665
  logout: "Cerrar sesión"
666
+ error_loading: "Error al cargar el contenido del archivo"
614
667
  add: "Agregar"
615
668
  create: "Crear"
616
669
  delete: "Borrar"
@@ -1430,6 +1483,25 @@ ui:
1430
1483
  include_inactive: "Incluir Inactivos"
1431
1484
  new_contract: "Nuevo Contrato"
1432
1485
  col_cycle: "Ciclo"
1486
+ included_amount: "Incluido"
1487
+ billable_amount: "Facturable"
1488
+ plan_title: "Tu plan"
1489
+ plan_platform: "Plataforma"
1490
+ plan_platform_note: "{seats} usuarios incluidos"
1491
+ plan_seats: "Usuarios"
1492
+ plan_seats_note: "{active} activos en el período · {amount}"
1493
+ seat_alert_over_title: "{active} personas están usando {contracted} asientos contratados"
1494
+ seat_alert_over_text: "Escríbenos para ajustar tu plan."
1495
+ seat_alert_near_title: "Te quedan {remaining} asientos"
1496
+ seat_alert_near_text: "Escríbenos antes de que tu equipo supere el plan."
1497
+ plan_support: "Soporte"
1498
+ plan_support_standard: "Estándar"
1499
+ plan_support_production: "Soporte Producción"
1500
+ plan_support_included: "Incluido en el plan"
1501
+ plan_credits: "Créditos de Runtime del período"
1502
+ plan_credits_remaining: "Quedan {amount} de ejecución incluida"
1503
+ plan_credits_exhausted: "Cupo consumido; la ejecución adicional se factura"
1504
+ plan_recurring_total: "Recurrente mensual"
1433
1505
  col_included: "Incluidos"
1434
1506
  col_grace: "Gracia"
1435
1507
  col_markup_pct: "Recargo %"
@@ -1474,6 +1546,7 @@ ui:
1474
1546
  sql_sources_form_connection_type: "Tipo de conexión"
1475
1547
  sql_sources_form_connection_env: "Variable de entorno de conexión"
1476
1548
  sql_sources_form_bridge_id: "Bridge ID"
1549
+ sql_sources_form_bridge_none: "Esta empresa aún no tiene bridges registrados. Créalos en la sección Bridges."
1477
1550
  sql_sources_form_description: "Descripción"
1478
1551
  sql_sources_form_active: "Activa"
1479
1552
  sql_context_scope_title: "Contexto SQL"
@@ -1860,6 +1933,64 @@ ui:
1860
1933
  save_error: "Error al guardar la API key."
1861
1934
  delete_error: "Error al eliminar la API key."
1862
1935
 
1936
+ bridges:
1937
+ menu_label: "Bridges"
1938
+ title: "Bridges"
1939
+ subtitle: "Agentes on-premise que conectan las bases de datos y APIs privadas de la empresa."
1940
+ new_btn: "Nuevo Bridge"
1941
+ search_placeholder: "Filtrar bridges..."
1942
+ empty_state: "Todavía no hay bridges registrados."
1943
+ bridge_id: "Bridge ID"
1944
+ bridge_id_placeholder: "ej. docker-bridge"
1945
+ bridge_id_required: "El Bridge ID es obligatorio."
1946
+ bridge_id_help: "Minúsculas, dígitos y guiones (3-64). No se puede cambiar después: las fuentes SQL y las tools lo referencian."
1947
+ display_name: "Nombre"
1948
+ display_name_placeholder: "ej. Producción"
1949
+ description: "Descripción"
1950
+ api_key: "API Key"
1951
+ api_key_masked: "••••••••••••"
1952
+ api_key_help: "Configura este valor como IAT_BRIDGE_KEY en el .env del bridge."
1953
+ copy_tooltip: "Copiar API key"
1954
+ copy_success: "API key copiada al portapapeles."
1955
+ copy_error: "No se pudo copiar la API key."
1956
+ status: "Estado"
1957
+ status_connected: "Conectado"
1958
+ status_disconnected: "Desconectado"
1959
+ diagnose_action: "Probar"
1960
+ diagnose_title: "Prueba de conexión"
1961
+ diagnose_intro: "Verifica que el Bridge conecta, alcanza su base y resuelve llamadas HTTP. Cada eslabón se reporta por separado."
1962
+ diagnose_cta: "Probar la conexión"
1963
+ diagnose_running: "Probando…"
1964
+ diagnose_check_socket: "Bridge conectado"
1965
+ diagnose_check_database: "Base de ejemplo alcanzable"
1966
+ diagnose_check_http: "Canal HTTP operativo"
1967
+ diagnose_error: "No se pudo ejecutar la prueba."
1968
+ status_never_connected: "Nunca conectó"
1969
+ active: "Activo"
1970
+ inactive: "Inactivo"
1971
+ last_seen_at: "Último contacto"
1972
+ origin: "Origen"
1973
+ agent_version: "Versión"
1974
+ capabilities: "Capacidades"
1975
+ resources: "Recursos expuestos"
1976
+ actions: "Acciones"
1977
+ create_modal_title: "Crear Bridge"
1978
+ edit_modal_title: "Editar Bridge"
1979
+ create_success: "Bridge creado. Copia la API key y configúrala en el bridge."
1980
+ update_success: "Bridge actualizado correctamente."
1981
+ delete_confirmation: "¿Eliminar Bridge?"
1982
+ delete_message: "Las fuentes SQL y tools que lo referencien dejarán de funcionar. Su API key también se elimina."
1983
+ delete_success: "Bridge eliminado correctamente."
1984
+ rotate_tooltip: "Rotar API key"
1985
+ rotate_confirmation: "¿Rotar la API key?"
1986
+ rotate_message: "Se emite una key nueva y la anterior se elimina. El bridge queda caído hasta que actualices IAT_BRIDGE_KEY en su .env."
1987
+ rotate_action: "Rotar key"
1988
+ rotate_success: "API key rotada. Actualiza IAT_BRIDGE_KEY en el bridge."
1989
+ load_error: "Error al cargar los bridges."
1990
+ save_error: "Error al guardar el bridge."
1991
+ delete_error: "Error al eliminar el bridge."
1992
+ rotate_error: "Error al rotar la API key."
1993
+
1863
1994
  mcp_service_tokens:
1864
1995
  menu_label: "Tokens MCP"
1865
1996
  title: "Tokens MCP"
@@ -1915,7 +2046,6 @@ ui:
1915
2046
  tab_settings: "Configuración"
1916
2047
  tab_access: "Acceso"
1917
2048
  tab_observability: "Observabilidad"
1918
- tab_usage: "Uso"
1919
2049
  save_success: "Configuración MCP guardada correctamente."
1920
2050
  save_error: "No se pudo guardar la configuración MCP."
1921
2051
  preview_error: "No se pudo generar la vista previa MCP."
@@ -2198,6 +2328,8 @@ ui:
2198
2328
  use_prompt_assistant: "Usar Asistente de Prompts"
2199
2329
  attach_files: "Adjuntar archivos"
2200
2330
  view_attached_files: "Ver archivos adjuntos"
2331
+ send: "Enviar"
2332
+ stop: "Detener"
2201
2333
  modals:
2202
2334
  files_title: "Archivos Cargados"
2203
2335
  feedback_title: "Tu Opinión es Importante"
@@ -2338,6 +2470,7 @@ rag:
2338
2470
 
2339
2471
  flash_messages:
2340
2472
  password_changed_success: "Tu contraseña ha sido restablecida exitosamente. Ahora puedes iniciar sesión."
2473
+ login_required: "Por favor, inicia sesión para continuar."
2341
2474
  signup_success: "Registro exitoso. Por favor, revisa tu correo para verificar tu cuenta."
2342
2475
  signup_success_no_verification: "Registro exitoso."
2343
2476
  user_associated_success: "Usuario existente asociado exitosamente a la nueva empresa."
@@ -0,0 +1,77 @@
1
+ # Copyright (c) 2024 Fernando Libedinsky
2
+ # Product: IAToolkit
3
+ #
4
+ # IAToolkit is open source software.
5
+
6
+ from injector import inject
7
+
8
+ from iatoolkit.repositories.database_manager import DatabaseManager
9
+ from iatoolkit.repositories.models import Bridge, Company
10
+
11
+
12
+ class BridgeRepo:
13
+ @inject
14
+ def __init__(self, db_manager: DatabaseManager):
15
+ self.db_manager = db_manager
16
+ self.session = db_manager.get_session()
17
+
18
+ def create(self, bridge: Bridge) -> Bridge:
19
+ self.session.add(bridge)
20
+ self.session.commit()
21
+ return bridge
22
+
23
+ def update(self, bridge: Bridge) -> Bridge:
24
+ self.session.add(bridge)
25
+ self.session.commit()
26
+ return bridge
27
+
28
+ def delete(self, bridge: Bridge):
29
+ self.session.delete(bridge)
30
+ self.session.commit()
31
+
32
+ def get_by_company(self, company: Company) -> list[Bridge]:
33
+ return (
34
+ self.session.query(Bridge)
35
+ .filter(Bridge.company_id == company.id)
36
+ .order_by(Bridge.bridge_id.asc())
37
+ .all()
38
+ )
39
+
40
+ def get_by_id(self, company: Company, bridge_pk: int) -> Bridge | None:
41
+ return (
42
+ self.session.query(Bridge)
43
+ .filter(Bridge.company_id == company.id, Bridge.id == bridge_pk)
44
+ .first()
45
+ )
46
+
47
+ def get_by_bridge_id(self, company: Company, bridge_id: str) -> Bridge | None:
48
+ return (
49
+ self.session.query(Bridge)
50
+ .filter(Bridge.company_id == company.id, Bridge.bridge_id == bridge_id)
51
+ .first()
52
+ )
53
+
54
+ def get_by_api_key_id(self, api_key_id: int) -> Bridge | None:
55
+ """
56
+ Resolves the bridge a connecting agent belongs to from the API key it
57
+ authenticated with. This is what replaces deriving the bridge identity
58
+ from the key's name.
59
+ """
60
+ return (
61
+ self.session.query(Bridge)
62
+ .filter(Bridge.api_key_id == api_key_id)
63
+ .first()
64
+ )
65
+
66
+ def list_all(self) -> list[tuple[Bridge, Company]]:
67
+ """
68
+ Every bridge across every company, joined with its company. Powers the
69
+ cross-tenant monitoring view in the hosting control center, which is
70
+ the one place that legitimately looks past a single company.
71
+ """
72
+ return (
73
+ self.session.query(Bridge, Company)
74
+ .join(Company, Bridge.company_id == Company.id)
75
+ .order_by(Company.short_name.asc(), Bridge.bridge_id.asc())
76
+ .all()
77
+ )
@@ -174,6 +174,11 @@ class Company(Base):
174
174
  back_populates="company",
175
175
  cascade="all, delete-orphan",
176
176
  )
177
+ bridges = relationship(
178
+ "Bridge",
179
+ back_populates="company",
180
+ cascade="all, delete-orphan",
181
+ )
177
182
  sql_datasets = relationship(
178
183
  "SqlDataset",
179
184
  back_populates="company",
@@ -881,6 +886,77 @@ class SqlSource(Base):
881
886
  return {column.key: getattr(self, column.key) for column in class_mapper(self.__class__).columns}
882
887
 
883
888
 
889
+ class Bridge(Base):
890
+ """
891
+ An on-premise IAToolkit Bridge agent registered for a company.
892
+
893
+ Before this table, `bridge_id` was just the `key_name` of an API key,
894
+ referenced as free text from SQL sources and HTTP tools with nothing
895
+ linking the three. That had two costs worth remembering:
896
+
897
+ * `key_name` has no uniqueness constraint, so two companies could pick
898
+ the same bridge name and collide (see BridgeService's Redis key
899
+ helpers in iatoolkit-enterprise for how that is scoped now).
900
+ * A typo in a SQL source's `bridge_id` was indistinguishable at runtime
901
+ from a bridge that was simply down — both surfaced as
902
+ "Bridge '<id>' is not connected".
903
+
904
+ Identity now lives here, and the API key is a satellite pointed at by
905
+ `api_key_id`. That means the key can be rotated without touching
906
+ `bridge_id`, and renaming a key no longer breaks routing.
907
+
908
+ Columns below the identity block are runtime state, written by the
909
+ server as bridges connect and report in. They are denormalized here on
910
+ purpose: live status lives in Redis (cheap, high frequency) and is
911
+ flushed to this table on transitions and periodically, so that status
912
+ survives a worker restart and can be queried across companies for the
913
+ hosting control center.
914
+ """
915
+ __tablename__ = "iat_bridges"
916
+
917
+ STATUS_CONNECTED = "connected"
918
+ STATUS_DISCONNECTED = "disconnected"
919
+ STATUS_NEVER_CONNECTED = "never_connected"
920
+
921
+ id = Column(Integer, primary_key=True, autoincrement=True)
922
+ company_id = Column(Integer, ForeignKey(f"{ORM_SCHEMA}.iat_companies.id", ondelete="CASCADE"), nullable=False)
923
+
924
+ # Identity
925
+ bridge_id = Column(String, nullable=False)
926
+ display_name = Column(String, nullable=True)
927
+ description = Column(Text, nullable=True)
928
+ api_key_id = Column(Integer, ForeignKey(f"{ORM_SCHEMA}.iat_api_keys.id", ondelete="SET NULL"), nullable=True)
929
+ is_active = Column(Boolean, nullable=False, default=True)
930
+
931
+ # Runtime state
932
+ status = Column(String(32), nullable=False, default=STATUS_NEVER_CONNECTED)
933
+ last_connected_at = Column(DateTime, nullable=True)
934
+ last_seen_at = Column(DateTime, nullable=True)
935
+ last_disconnected_at = Column(DateTime, nullable=True)
936
+ last_disconnect_reason = Column(String, nullable=True)
937
+
938
+ # Telemetry reported by the agent
939
+ agent_version = Column(String, nullable=True)
940
+ capabilities = Column(JSON_NATIVE, nullable=False, default=list)
941
+ exposed_resources = Column(JSON_NATIVE, nullable=False, default=dict)
942
+ last_remote_addr = Column(String, nullable=True)
943
+
944
+ created_at = Column(DateTime, default=datetime.now)
945
+ updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now)
946
+
947
+ __table_args__ = (
948
+ # bridge_id is chosen by the customer, so names like "prod" are
949
+ # expected — unique per company, not globally.
950
+ UniqueConstraint("company_id", "bridge_id", name="uix_company_bridge_id"),
951
+ )
952
+
953
+ company = relationship("Company", back_populates="bridges")
954
+ api_key = relationship("ApiKey")
955
+
956
+ def to_dict(self):
957
+ return {column.key: getattr(self, column.key) for column in class_mapper(self.__class__).columns}
958
+
959
+
884
960
  class SqlDataset(Base):
885
961
  """
886
962
  Reusable SQL dataset definitions for pipelines and other batch features.
@@ -107,6 +107,8 @@ class AuthService:
107
107
  state: str,
108
108
  nonce: str,
109
109
  redirect_uri: str,
110
+ lang: str | None = None,
111
+ welcome_url: str | None = None,
110
112
  ) -> dict:
111
113
  try:
112
114
  google_identity = self.google_auth_client.exchange_code_for_identity(
@@ -156,6 +158,8 @@ class AuthService:
156
158
  auth_response = self.profile_service.login_with_google(
157
159
  company_short_name=company_short_name,
158
160
  google_identity=google_identity,
161
+ lang=lang,
162
+ welcome_url=welcome_url,
159
163
  )
160
164
 
161
165
  if not auth_response.get('success'):
@@ -84,6 +84,33 @@ class llmClient:
84
84
  return self._telemetry_service
85
85
 
86
86
 
87
+ @staticmethod
88
+ def _assert_runtime_not_suspended(company: Company) -> None:
89
+ """Refuse execution when a company's runtime spend guard is tripped.
90
+
91
+ The flag is written by whoever meters the company's consumption; this
92
+ layer only honours it, so nothing here knows about plans or invoices. A
93
+ suspended company keeps full read access — data queries and document
94
+ retrieval never reach a model and cost nothing — only execution stops.
95
+
96
+ This runs on the hot path of every execution, so it reads the company
97
+ object already in hand and never queries. It also fails open on purpose:
98
+ a problem reading the flag must never take a customer's operation down.
99
+ """
100
+ try:
101
+ parameters = getattr(company, "parameters", None) or {}
102
+ guard = parameters.get("runtime_guard") or {}
103
+ if not guard.get("suspended"):
104
+ return
105
+ except Exception:
106
+ return
107
+
108
+ raise IAToolkitException(
109
+ IAToolkitException.ErrorType.INVALID_STATE,
110
+ "Runtime execution is paused for this company because the monthly "
111
+ "spend limit was reached. Data access is unaffected.",
112
+ )
113
+
87
114
  def invoke(self,
88
115
  company: Company,
89
116
  user_identifier: str,
@@ -106,6 +133,8 @@ class llmClient:
106
133
  response_contract: Optional[Dict[str, Any]] = None
107
134
  ) -> dict:
108
135
 
136
+ self._assert_runtime_not_suspended(company)
137
+
109
138
  images = images or []
110
139
  attachments = attachments or []
111
140
  active_attachments = list(attachments)