iatoolkit 2.71.1__tar.gz → 2.72.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 (279) hide show
  1. {iatoolkit-2.71.1/src/iatoolkit.egg-info → iatoolkit-2.72.1}/PKG-INFO +1 -1
  2. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/__init__.py +1 -1
  3. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/common/access.py +16 -0
  4. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/locales/en.yaml +104 -1
  5. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/locales/es.yaml +104 -1
  6. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/company_context_service.py +4 -1
  7. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/context_builder_service.py +33 -4
  8. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/dispatcher_service.py +20 -0
  9. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/query_service.py +9 -4
  10. iatoolkit-2.72.1/src/iatoolkit/services/resource_access_scope.py +161 -0
  11. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/tool_service.py +7 -1
  12. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/base_login_view.py +3 -0
  13. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/chat_view.py +3 -0
  14. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/login_view.py +3 -0
  15. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/wiki_page_view.py +6 -1
  16. {iatoolkit-2.71.1 → iatoolkit-2.72.1/src/iatoolkit.egg-info}/PKG-INFO +1 -1
  17. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit.egg-info/SOURCES.txt +1 -0
  18. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/LICENSE +0 -0
  19. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/LICENSE_COMMUNITY.md +0 -0
  20. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/pyproject.toml +0 -0
  21. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/readme.md +0 -0
  22. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/setup.cfg +0 -0
  23. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/base_company.py +0 -0
  24. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/cli_commands.py +0 -0
  25. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/common/__init__.py +0 -0
  26. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/common/bridge_validation.py +0 -0
  27. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/common/company_paths.py +0 -0
  28. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/common/exceptions.py +0 -0
  29. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/common/interfaces/__init__.py +0 -0
  30. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/common/interfaces/asset_storage.py +0 -0
  31. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/common/interfaces/database_provider.py +0 -0
  32. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/common/interfaces/memory_compilation_trigger.py +0 -0
  33. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/common/interfaces/secret_provider.py +0 -0
  34. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/common/interfaces/signup_policy_resolver.py +0 -0
  35. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/common/interfaces/web_search_provider.py +0 -0
  36. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/common/memory_tools.py +0 -0
  37. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/common/model_registry.py +0 -0
  38. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/common/routes.py +0 -0
  39. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/common/search_terms.py +0 -0
  40. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/common/secret_resolver.py +0 -0
  41. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/common/session_manager.py +0 -0
  42. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/common/text_splitter.py +0 -0
  43. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/common/url_safety.py +0 -0
  44. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/common/util.py +0 -0
  45. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/company_registry.py +0 -0
  46. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/__init__.py +0 -0
  47. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/llm_capabilities.yaml +0 -0
  48. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_agents/memory_compiler.prompt +0 -0
  49. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_agents/memory_correction.prompt +0 -0
  50. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_agents/memory_document_ingest.prompt +0 -0
  51. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_agents/memory_image_ingest.prompt +0 -0
  52. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_agents/memory_meeting_ingest.prompt +0 -0
  53. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_agents/memory_question_review.prompt +0 -0
  54. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_agents_pack.yaml +0 -0
  55. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_prompts/channel_business_identity.prompt +0 -0
  56. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_prompts/channel_conversation_continuity.prompt +0 -0
  57. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_prompts/channel_response_style.prompt +0 -0
  58. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_prompts/chat_state_rules.prompt +0 -0
  59. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_prompts/chat_user_profile.prompt +0 -0
  60. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_prompts/core_identity.prompt +0 -0
  61. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_prompts/email_output.prompt +0 -0
  62. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_prompts/file_download_output.prompt +0 -0
  63. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_prompts/format_styles.prompt +0 -0
  64. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_prompts/html_structures.prompt +0 -0
  65. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_prompts/links_documents.prompt +0 -0
  66. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_prompts/memory_usage.prompt +0 -0
  67. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_prompts/multimodal_basics.prompt +0 -0
  68. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_prompts/output_basics.prompt +0 -0
  69. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_prompts/presentation_formatting.prompt +0 -0
  70. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_prompts/query_main.prompt +0 -0
  71. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_prompts/sql_aggregation_scope.prompt +0 -0
  72. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_prompts/sql_casting.prompt +0 -0
  73. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_prompts/sql_core.prompt +0 -0
  74. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_prompts/sql_jsonb.prompt +0 -0
  75. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_prompts/sql_mysql_casting.prompt +0 -0
  76. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_prompts/sql_mysql_json.prompt +0 -0
  77. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_prompts/sql_redshift_basics.prompt +0 -0
  78. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_prompts/sql_redshift_types.prompt +0 -0
  79. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_prompts/sql_rules.prompt +0 -0
  80. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_prompts/tool_html_passthrough.prompt +0 -0
  81. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_prompts_pack.yaml +0 -0
  82. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_tools_pack.yaml +0 -0
  83. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/core.py +0 -0
  84. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/infra/__init__.py +0 -0
  85. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/infra/brevo_mail_app.py +0 -0
  86. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/infra/call_service.py +0 -0
  87. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/infra/connectors/__init__.py +0 -0
  88. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/infra/connectors/file_connector.py +0 -0
  89. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/infra/connectors/file_connector_factory.py +0 -0
  90. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/infra/connectors/google_cloud_storage_connector.py +0 -0
  91. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/infra/connectors/google_drive_connector.py +0 -0
  92. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/infra/connectors/local_file_connector.py +0 -0
  93. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/infra/connectors/s3_connector.py +0 -0
  94. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/infra/google_auth_client.py +0 -0
  95. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/infra/google_chat_app.py +0 -0
  96. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/infra/inference_embeddings_client.py +0 -0
  97. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/infra/inference_handler.py +0 -0
  98. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/infra/jina_embeddings_client.py +0 -0
  99. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/infra/llm_gateway_resolver.py +0 -0
  100. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/infra/llm_providers/__init__.py +0 -0
  101. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/infra/llm_providers/anthropic_adapter.py +0 -0
  102. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/infra/llm_providers/deepseek_adapter.py +0 -0
  103. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/infra/llm_providers/gemini_adapter.py +0 -0
  104. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/infra/llm_providers/openai_adapter.py +0 -0
  105. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/infra/llm_providers/openai_compatible_chat_adapter.py +0 -0
  106. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/infra/llm_providers/openrouter_adapter.py +0 -0
  107. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/infra/llm_proxy.py +0 -0
  108. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/infra/llm_response.py +0 -0
  109. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/infra/redis_session_manager.py +0 -0
  110. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/repositories/__init__.py +0 -0
  111. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/repositories/advisory_lock.py +0 -0
  112. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/repositories/api_key_repo.py +0 -0
  113. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/repositories/bridge_repo.py +0 -0
  114. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/repositories/database_manager.py +0 -0
  115. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/repositories/document_repo.py +0 -0
  116. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/repositories/env_secret_provider.py +0 -0
  117. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/repositories/filesystem_asset_repository.py +0 -0
  118. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/repositories/knowledge_wiki_repo.py +0 -0
  119. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/repositories/llm_query_repo.py +0 -0
  120. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/repositories/mcp_token_repo.py +0 -0
  121. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/repositories/memory_question_repo.py +0 -0
  122. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/repositories/memory_repo.py +0 -0
  123. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/repositories/memory_usage_repo.py +0 -0
  124. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/repositories/models.py +0 -0
  125. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/repositories/profile_repo.py +0 -0
  126. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/repositories/prompt_resource_repo.py +0 -0
  127. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/repositories/sql_dataset_repo.py +0 -0
  128. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/repositories/sql_source_repo.py +0 -0
  129. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/repositories/vs_repo.py +0 -0
  130. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/runtime_logging.py +0 -0
  131. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/__init__.py +0 -0
  132. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/api_key_service.py +0 -0
  133. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/attachment_policy_service.py +0 -0
  134. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/auth_service.py +0 -0
  135. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/branding_service.py +0 -0
  136. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/configuration_service.py +0 -0
  137. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/embedding_service.py +0 -0
  138. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/excel_service.py +0 -0
  139. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/file_processor_service.py +0 -0
  140. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/history_manager_service.py +0 -0
  141. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/http_tool_service.py +0 -0
  142. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/i18n_service.py +0 -0
  143. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/inference_service.py +0 -0
  144. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/jwt_service.py +0 -0
  145. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/knowledge_base_service.py +0 -0
  146. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/language_service.py +0 -0
  147. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/license_service.py +0 -0
  148. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/llm_client_service.py +0 -0
  149. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/mail_service.py +0 -0
  150. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/markdown_wiki_service.py +0 -0
  151. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/mcp_token_service.py +0 -0
  152. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/memory_compiler_service.py +0 -0
  153. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/memory_lookup_policy_service.py +0 -0
  154. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/memory_question_service.py +0 -0
  155. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/memory_service.py +0 -0
  156. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/memory_sources.py +0 -0
  157. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/memory_usage_service.py +0 -0
  158. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/memory_wiki_service.py +0 -0
  159. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/noop_memory_compilation_trigger.py +0 -0
  160. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/operator_identity_service.py +0 -0
  161. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/parsers/__init__.py +0 -0
  162. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/parsers/contracts.py +0 -0
  163. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/parsers/image_normalizer.py +0 -0
  164. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/parsers/parsing_service.py +0 -0
  165. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/parsers/pdf_ocr_detection.py +0 -0
  166. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/parsers/provider_factory.py +0 -0
  167. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/parsers/provider_resolver.py +0 -0
  168. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/parsers/providers/__init__.py +0 -0
  169. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/parsers/providers/basic_provider.py +0 -0
  170. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/parsers/providers/docling_provider.py +0 -0
  171. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/parsers/validator.py +0 -0
  172. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/pdf_service.py +0 -0
  173. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/profile_service.py +0 -0
  174. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/prompt_resource_service.py +0 -0
  175. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/prompt_service.py +0 -0
  176. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/signup_policy_resolver.py +0 -0
  177. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/sql_dataset_service.py +0 -0
  178. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/sql_service.py +0 -0
  179. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/sql_source_service.py +0 -0
  180. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/storage_service.py +0 -0
  181. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/structured_output_service.py +0 -0
  182. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/system_agent_catalog.py +0 -0
  183. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/system_agent_runner.py +0 -0
  184. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/system_prompt_catalog.py +0 -0
  185. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/system_tools.py +0 -0
  186. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/telemetry_service.py +0 -0
  187. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/tenant_wiki_service.py +0 -0
  188. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/tool_output_contract.py +0 -0
  189. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/user_feedback_service.py +0 -0
  190. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/user_session_context_service.py +0 -0
  191. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/visual_kb_service.py +0 -0
  192. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/visual_tool_service.py +0 -0
  193. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/warmup_service.py +0 -0
  194. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/web_search/__init__.py +0 -0
  195. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/web_search/provider_factory.py +0 -0
  196. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/web_search/providers/__init__.py +0 -0
  197. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/web_search/providers/brave_provider.py +0 -0
  198. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/web_search_service.py +0 -0
  199. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/wiki_page_index_service.py +0 -0
  200. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/static/images/favicon.ico +0 -0
  201. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/static/images/favicon.png +0 -0
  202. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/static/images/fernando.jpeg +0 -0
  203. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/static/images/iatoolkit_core.png +0 -0
  204. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/static/images/iatoolkit_logo.png +0 -0
  205. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/static/js/chat_feedback_button.js +0 -0
  206. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/static/js/chat_filepond.js +0 -0
  207. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/static/js/chat_header_navigation.js +0 -0
  208. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/static/js/chat_help_content.js +0 -0
  209. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/static/js/chat_history_button.js +0 -0
  210. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/static/js/chat_logout_button.js +0 -0
  211. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/static/js/chat_main.js +0 -0
  212. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/static/js/chat_memory_button.js +0 -0
  213. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/static/js/chat_model_selector.js +0 -0
  214. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/static/js/chat_onboarding_button.js +0 -0
  215. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/static/js/chat_prompt_manager.js +0 -0
  216. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/static/js/chat_reload_button.js +0 -0
  217. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/static/styles/account.css +0 -0
  218. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/static/styles/chat_iatoolkit.css +0 -0
  219. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/static/styles/chat_modal.css +0 -0
  220. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/static/styles/chat_public.css +0 -0
  221. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/static/styles/documents.css +0 -0
  222. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/static/styles/landing_page.css +0 -0
  223. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/static/styles/llm_output.css +0 -0
  224. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/static/styles/onboarding.css +0 -0
  225. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/static/styles/wiki_page.css +0 -0
  226. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/templates/_chat_header.html +0 -0
  227. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/templates/_company_header.html +0 -0
  228. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/templates/_login_widget.html +0 -0
  229. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/templates/account.html +0 -0
  230. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/templates/base.html +0 -0
  231. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/templates/change_password.html +0 -0
  232. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/templates/chat.html +0 -0
  233. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/templates/chat_memory_modal.html +0 -0
  234. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/templates/chat_modals.html +0 -0
  235. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/templates/error.html +0 -0
  236. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/templates/forgot_password.html +0 -0
  237. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/templates/home_hosted_default.html +0 -0
  238. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/templates/login_global.html +0 -0
  239. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/templates/memory/wiki_schema.md +0 -0
  240. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/templates/onboarding_shell.html +0 -0
  241. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/templates/pdf/base.html +0 -0
  242. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/templates/pdf/letter.html +0 -0
  243. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/templates/pdf/report.html +0 -0
  244. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/templates/pdf/simple.html +0 -0
  245. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/templates/signup.html +0 -0
  246. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/templates/wiki_page.html +0 -0
  247. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/__init__.py +0 -0
  248. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/account_view.py +0 -0
  249. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/api_key_api_view.py +0 -0
  250. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/categories_api_view.py +0 -0
  251. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/change_password_view.py +0 -0
  252. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/chat_context_preview_api_view.py +0 -0
  253. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/configuration_api_view.py +0 -0
  254. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/connectors_api_view.py +0 -0
  255. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/embedding_api_view.py +0 -0
  256. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/forgot_password_view.py +0 -0
  257. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/help_content_api_view.py +0 -0
  258. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/history_api_view.py +0 -0
  259. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/home_view.py +0 -0
  260. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/init_context_api_view.py +0 -0
  261. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/llmquery_api_view.py +0 -0
  262. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/load_document_api_view.py +0 -0
  263. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/logout_api_view.py +0 -0
  264. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/memory_api_view.py +0 -0
  265. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/profile_api_view.py +0 -0
  266. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/prompt_api_view.py +0 -0
  267. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/prompt_context_preview_api_view.py +0 -0
  268. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/prompt_resource_api_view.py +0 -0
  269. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/rag_api_view.py +0 -0
  270. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/root_redirect_view.py +0 -0
  271. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/signup_view.py +0 -0
  272. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/static_page_view.py +0 -0
  273. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/tool_api_view.py +0 -0
  274. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/user_feedback_api_view.py +0 -0
  275. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/users_api_view.py +0 -0
  276. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/verify_user_view.py +0 -0
  277. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit.egg-info/dependency_links.txt +0 -0
  278. {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit.egg-info/requires.txt +0 -0
  279. {iatoolkit-2.71.1 → iatoolkit-2.72.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.71.1
3
+ Version: 2.72.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.71.1"
6
+ __version__ = "2.72.1"
7
7
 
8
8
  # Expose main classes and functions at the top level of the package
9
9
 
@@ -176,6 +176,22 @@ def role_assigned(company_short_name: str, user_identifier: str, role: str) -> N
176
176
  company_short_name, exc)
177
177
 
178
178
 
179
+ def filter_llm_models(company_short_name: str, user_identifier: str | None, default_model: str | None,
180
+ models: list[dict]) -> tuple[str | None, list[dict]]:
181
+ """The chat's model choice limited to the models this person may use (BL-010, Fase 2).
182
+
183
+ When the company's default is not among them, the first one they may use becomes
184
+ their default."""
185
+ if not user_identifier or not Access.registered():
186
+ return default_model, models
187
+ allowed = [m for m in models or [] if can(company_short_name, user_identifier, USE, "model",
188
+ str((m or {}).get("id") or ""))]
189
+ allowed_ids = [str(m.get("id")) for m in allowed]
190
+ if default_model and default_model not in allowed_ids:
191
+ default_model = allowed_ids[0] if allowed_ids else None
192
+ return default_model, allowed
193
+
194
+
179
195
  def person_can(company_short_name: str, auth_result: dict | None, level: int, resource_type: str = "company",
180
196
  resource_key: str | None = None) -> bool:
181
197
  """A signed-in person's access, from an AuthService result.
@@ -695,6 +695,61 @@ ui:
695
695
  access_all_resources: "every resource"
696
696
  access_company: "the company"
697
697
  access_title: "Access"
698
+ access_usage: "Usage"
699
+ access_usage_calls: "calls in recent days"
700
+ access_usage_people: "people who used it"
701
+ access_usage_agents: "agents bound to it"
702
+ access_usage_agents_title: "Agents that use it"
703
+ access_usage_no_agents: "No agent is bound to it."
704
+ access_usage_window: "Calls in the last {days} days."
705
+ access_person_title: "What this person sees"
706
+ access_group_title: "What this group can do"
707
+ access_person_company: "Over the company"
708
+ access_person_none: "No resource has its own access yet: they use what the whole company uses."
709
+ access_group_none: "Not listed in any resource's access."
710
+ access_no_access: "no access"
711
+ access_role_owner: "Owner"
712
+ access_role_admin: "Administers"
713
+ access_role_editor: "Edits"
714
+ access_role_user: "Uses"
715
+ access_simulator: "Simulate access"
716
+ access_simulator_hint: "Pick a person and a resource: it tells you whether they can, and why."
717
+ access_sim_person: "Person"
718
+ access_sim_type: "Resource type"
719
+ access_sim_key: "Resource (name or key)"
720
+ access_sim_run: "Simulate"
721
+ access_sim_allowed: "Can"
722
+ access_sim_denied: "Cannot"
723
+ access_sim_groups: "Their groups"
724
+ access_reason_owner: "Owns the company: can do everything."
725
+ access_reason_company_admin: "Administers the company: administers every resource."
726
+ access_reason_company: "By their level over the company."
727
+ access_reason_own_access_list: "The resource has its own list: it depends on whether one of their groups is in it."
728
+ access_reason_type_default: "The resource uses the company's access for its type."
729
+ access_export: "Export"
730
+ access_import: "Import permissions"
731
+ access_import_hint: "Paste an exported YAML. Check what would change first, then apply it."
732
+ access_import_check: "Check changes"
733
+ access_import_apply: "Apply"
734
+ access_import_groups_created: "New groups"
735
+ access_import_groups_updated: "Changed groups"
736
+ access_import_members_added: "Members added"
737
+ access_import_members_removed: "Members removed"
738
+ access_import_resources_set: "Resources with their access"
739
+ access_import_errors: "Errors"
740
+ access_import_nothing: "Nothing to change."
741
+ access_import_done: "Permissions imported."
742
+ access_type_agent: "Agent"
743
+ access_type_tool: "Tool"
744
+ access_type_model: "Model"
745
+ access_type_sql_source: "SQL source"
746
+ access_type_rag_collection: "Collection"
747
+ access_type_memory_folder: "Memory folder"
748
+ access_type_knowledge_wiki: "Wiki"
749
+ access_type_knowledge_table: "Knowledge table"
750
+ access_type_mcp_tool: "MCP tool"
751
+ access_type_company: "The company"
752
+ access_settings_tab: "Settings"
698
753
  access_group_owners: "Owners"
699
754
  access_group_admins: "Administrators"
700
755
  access_group_editors: "Editors"
@@ -725,6 +780,13 @@ ui:
725
780
  access_mode_own: "Restricted"
726
781
  access_mode_default: "Whole company"
727
782
  access_heading_agent: "Who can use this agent?"
783
+ access_heading_tool: "Who can use this tool?"
784
+ access_heading_sql_source: "Who can query this SQL source?"
785
+ access_heading_knowledge_table: "Who can query this table?"
786
+ access_heading_model: "Who can use this model?"
787
+ access_heading_knowledge_wiki: "Who can see this wiki?"
788
+ access_heading_rag_collection: "Who can see this collection?"
789
+ access_heading_memory_folder: "Who can see this folder?"
728
790
  access_heading: "Who has access?"
729
791
  access_default: "Company access (default)"
730
792
  access_default_hint: "Everyone uses it under the company's general permissions. Add a group to restrict it."
@@ -837,7 +899,7 @@ ui:
837
899
  mode_external_sync: "External"
838
900
  mode_managed_help: "The wiki is edited from this workspace and pages are saved into storage."
839
901
  mode_external_sync_help: "The wiki stays read-only in IAToolkit and updates from the configured storage root."
840
- access_control: "Access control"
902
+ access_control: "Page visibility by labels"
841
903
  access_mode_off: "Off"
842
904
  access_mode_off_help: "Access labels are stored but no page is filtered."
843
905
  access_mode_dry_run: "Dry run"
@@ -1770,6 +1832,19 @@ ui:
1770
1832
 
1771
1833
 
1772
1834
  db_explorer:
1835
+ sql_source_open_detail: "View and configure the source"
1836
+ sql_source_switch: "Switch source"
1837
+ sql_source_tab_connection: "Connection"
1838
+ sql_source_test: "Test connection"
1839
+ sql_source_testing: "Connecting..."
1840
+ sql_source_test_ok: "Connected · {count} tables"
1841
+ sql_source_test_failed: "Could not connect"
1842
+ sql_source_tables_hint: "With the switch off, tick in the list on the left the tables that enter the context."
1843
+ sql_source_pick: "Choose a source"
1844
+ sql_source_none: "No SQL sources yet"
1845
+ sql_source_kind: "SQL source"
1846
+ sql_sources_status_active: "Active"
1847
+ sql_sources_status_inactive: "Inactive"
1773
1848
  data_explorer: "Data Explorer"
1774
1849
  database_connection: "Database Connection"
1775
1850
  tables: "Tables"
@@ -2581,6 +2656,33 @@ ui:
2581
2656
 
2582
2657
  runtime_defaults_card_title: "Runtime defaults"
2583
2658
  rag:
2659
+ collections_tab: "Collections"
2660
+ collection_new: "New collection"
2661
+ collection_filter: "Filter collections"
2662
+ collection_pick: "Pick a collection to see its detail."
2663
+ collection_none: "No collections."
2664
+ collection_document: "document"
2665
+ collection_documents: "documents"
2666
+ collection_memory_badge: "Memory folder"
2667
+ collection_tab_general: "General"
2668
+ collection_memory_note: "It is the collection of the Memory folder “{folder}”: it is managed in Memory."
2669
+ collection_description: "Description"
2670
+ collection_description_hint: "The AI reads it to decide when to search this collection."
2671
+ collection_parser: "Document reader"
2672
+ collection_parser_default: "the company's"
2673
+ collection_delete: "Delete collection"
2674
+ collection_delete_only_empty: "Only an empty collection can be deleted: delete its documents first."
2675
+ collection_save: "Save"
2676
+ collection_last_load: "Last load"
2677
+ collection_view_documents: "See its documents"
2678
+ collection_upload: "Upload documents"
2679
+ collection_new_hint: "Group documents so the AI searches them together."
2680
+ collection_name: "Name"
2681
+ collection_create: "Create collection"
2682
+ collection_created: "Collection created."
2683
+ collection_saved: "Collection updated."
2684
+ collection_delete_confirm: "Delete the collection “{name}”?"
2685
+ collection_deleted: "Collection deleted."
2584
2686
  ingestion: "Ingestion"
2585
2687
  ingestion_description: "Ingest documents into the knowledge base."
2586
2688
  workbench: "Workbench"
@@ -2693,6 +2795,7 @@ errors:
2693
2795
  company_not_found: "The company {company_short_name} does not exist."
2694
2796
  access:
2695
2797
  agent_denied: "You do not have access to the agent {prompt_name}."
2798
+ model_denied: "You do not have access to the model {model}."
2696
2799
  timeout: "timeout expired."
2697
2800
  auth:
2698
2801
  invalid_password: "The provided password is incorrect."
@@ -709,6 +709,61 @@ ui:
709
709
  access_all_resources: "todos los recursos"
710
710
  access_company: "la empresa"
711
711
  access_title: "Acceso"
712
+ access_usage: "Uso"
713
+ access_usage_calls: "llamadas en los últimos días"
714
+ access_usage_people: "personas que lo usaron"
715
+ access_usage_agents: "agentes que lo tienen ligado"
716
+ access_usage_agents_title: "Agentes que lo usan"
717
+ access_usage_no_agents: "Ningún agente lo tiene ligado."
718
+ access_usage_window: "Llamadas de los últimos {days} días."
719
+ access_person_title: "Qué ve esta persona"
720
+ access_group_title: "Qué puede este grupo"
721
+ access_person_company: "Sobre la empresa"
722
+ access_person_none: "Ningún recurso tiene acceso propio todavía: usa lo de toda la empresa."
723
+ access_group_none: "No aparece en la lista de acceso de ningún recurso."
724
+ access_no_access: "sin acceso"
725
+ access_role_owner: "Dueño"
726
+ access_role_admin: "Administra"
727
+ access_role_editor: "Edita"
728
+ access_role_user: "Usa"
729
+ access_simulator: "Simular acceso"
730
+ access_simulator_hint: "Elige una persona y un recurso: te dice si puede y por qué."
731
+ access_sim_person: "Persona"
732
+ access_sim_type: "Tipo de recurso"
733
+ access_sim_key: "Recurso (nombre o clave)"
734
+ access_sim_run: "Simular"
735
+ access_sim_allowed: "Puede"
736
+ access_sim_denied: "No puede"
737
+ access_sim_groups: "Sus grupos"
738
+ access_reason_owner: "Es dueño de la empresa: puede todo."
739
+ access_reason_company_admin: "Administra la empresa: administra todos los recursos."
740
+ access_reason_company: "Según su nivel sobre la empresa."
741
+ access_reason_own_access_list: "El recurso tiene lista propia: decide si alguno de sus grupos está en ella."
742
+ access_reason_type_default: "El recurso usa el acceso de la empresa para su tipo."
743
+ access_export: "Exportar"
744
+ access_import: "Importar permisos"
745
+ access_import_hint: "Pega un YAML exportado. Primero revisa qué cambiaría y después aplícalo."
746
+ access_import_check: "Revisar cambios"
747
+ access_import_apply: "Aplicar"
748
+ access_import_groups_created: "Grupos nuevos"
749
+ access_import_groups_updated: "Grupos modificados"
750
+ access_import_members_added: "Miembros que se agregan"
751
+ access_import_members_removed: "Miembros que se quitan"
752
+ access_import_resources_set: "Recursos con su acceso"
753
+ access_import_errors: "Errores"
754
+ access_import_nothing: "No hay nada que cambiar."
755
+ access_import_done: "Permisos importados."
756
+ access_type_agent: "Agente"
757
+ access_type_tool: "Tool"
758
+ access_type_model: "Modelo"
759
+ access_type_sql_source: "Fuente SQL"
760
+ access_type_rag_collection: "Colección"
761
+ access_type_memory_folder: "Carpeta de Memoria"
762
+ access_type_knowledge_wiki: "Wiki"
763
+ access_type_knowledge_table: "Knowledge table"
764
+ access_type_mcp_tool: "Tool MCP"
765
+ access_type_company: "La empresa"
766
+ access_settings_tab: "Configuración"
712
767
  access_group_owners: "Dueños"
713
768
  access_group_admins: "Administradores"
714
769
  access_group_editors: "Editores"
@@ -739,6 +794,13 @@ ui:
739
794
  access_mode_own: "Restringido"
740
795
  access_mode_default: "Toda la empresa"
741
796
  access_heading_agent: "¿Quién puede usar este agente?"
797
+ access_heading_tool: "¿Quién puede usar esta tool?"
798
+ access_heading_sql_source: "¿Quién puede consultar esta fuente SQL?"
799
+ access_heading_knowledge_table: "¿Quién puede consultar esta tabla?"
800
+ access_heading_model: "¿Quién puede usar este modelo?"
801
+ access_heading_knowledge_wiki: "¿Quién puede ver esta wiki?"
802
+ access_heading_rag_collection: "¿Quién puede ver esta colección?"
803
+ access_heading_memory_folder: "¿Quién puede ver esta carpeta?"
742
804
  access_heading: "¿Quién tiene acceso?"
743
805
  access_default: "Acceso de la empresa (por defecto)"
744
806
  access_default_hint: "Lo usan todos según los permisos generales de la empresa. Agrega un grupo para restringirlo."
@@ -851,7 +913,7 @@ ui:
851
913
  mode_external_sync: "Externa"
852
914
  mode_managed_help: "La wiki se edita desde esta interfaz y guarda sus páginas en storage."
853
915
  mode_external_sync_help: "La wiki queda de solo lectura en IAToolkit y se actualiza desde la raíz storage configurada."
854
- access_control: "Control de acceso"
916
+ access_control: "Visibilidad de páginas por etiquetas"
855
917
  access_mode_off: "Desactivado"
856
918
  access_mode_off_help: "Las etiquetas de acceso se guardan pero no se filtra ninguna página."
857
919
  access_mode_dry_run: "Simulación"
@@ -1786,6 +1848,19 @@ ui:
1786
1848
 
1787
1849
 
1788
1850
  db_explorer:
1851
+ sql_source_open_detail: "Ver y configurar la fuente"
1852
+ sql_source_switch: "Cambiar de fuente"
1853
+ sql_source_tab_connection: "Conexión"
1854
+ sql_source_test: "Probar conexión"
1855
+ sql_source_testing: "Conectando..."
1856
+ sql_source_test_ok: "Conectada · {count} tablas"
1857
+ sql_source_test_failed: "No se pudo conectar"
1858
+ sql_source_tables_hint: "Con el interruptor apagado, marca en la lista de la izquierda las tablas que entran al contexto."
1859
+ sql_source_pick: "Elige una fuente"
1860
+ sql_source_none: "Todavía no hay fuentes SQL"
1861
+ sql_source_kind: "Fuente SQL"
1862
+ sql_sources_status_active: "Activa"
1863
+ sql_sources_status_inactive: "Inactiva"
1789
1864
  data_explorer: "Explorador de datos"
1790
1865
  database_connection: "Bases de datos"
1791
1866
  tables: "Tablas"
@@ -2599,6 +2674,33 @@ ui:
2599
2674
 
2600
2675
  runtime_defaults_card_title: "Valores por defecto en runtime"
2601
2676
  rag:
2677
+ collections_tab: "Colecciones"
2678
+ collection_new: "Nueva colección"
2679
+ collection_filter: "Filtrar colecciones"
2680
+ collection_pick: "Elige una colección para ver su detalle."
2681
+ collection_none: "No hay colecciones."
2682
+ collection_document: "documento"
2683
+ collection_documents: "documentos"
2684
+ collection_memory_badge: "Carpeta de Memoria"
2685
+ collection_tab_general: "General"
2686
+ collection_memory_note: "Es la colección de la carpeta de Memoria «{folder}»: se administra en Memoria."
2687
+ collection_description: "Descripción"
2688
+ collection_description_hint: "La IA la lee para decidir cuándo buscar en esta colección."
2689
+ collection_parser: "Lector de documentos"
2690
+ collection_parser_default: "el de la empresa"
2691
+ collection_delete: "Eliminar colección"
2692
+ collection_delete_only_empty: "Solo se elimina una colección vacía: borra antes sus documentos."
2693
+ collection_save: "Guardar"
2694
+ collection_last_load: "Última carga"
2695
+ collection_view_documents: "Ver sus documentos"
2696
+ collection_upload: "Cargar documentos"
2697
+ collection_new_hint: "Agrupa documentos para que la IA los busque juntos."
2698
+ collection_name: "Nombre"
2699
+ collection_create: "Crear colección"
2700
+ collection_created: "Colección creada."
2701
+ collection_saved: "Colección actualizada."
2702
+ collection_delete_confirm: "¿Eliminar la colección «{name}»?"
2703
+ collection_deleted: "Colección eliminada."
2602
2704
  ingestion: "Ingesta"
2603
2705
  ingestion_description: "Ingestar documentos en la base de conocimiento."
2604
2706
  workbench: "Area de trabajo"
@@ -2708,6 +2810,7 @@ errors:
2708
2810
  company_not_found: "La empresa {company_short_name} no existe."
2709
2811
  access:
2710
2812
  agent_denied: "No tienes acceso al agente {prompt_name}."
2813
+ model_denied: "No tienes acceso al modelo {model}."
2711
2814
  timeout: "El tiempo de espera ha expirado."
2712
2815
 
2713
2816
 
@@ -52,6 +52,7 @@ class CompanyContextService:
52
52
  include_sql_context: bool = True,
53
53
  include_yaml_context: bool = True,
54
54
  selected_context_files: List[str] | None = None,
55
+ allowed_databases: List[str] | None = None,
55
56
  ) -> dict[str, str]:
56
57
  """
57
58
  Builds the full context by aggregating three sources:
@@ -78,7 +79,9 @@ class CompanyContextService:
78
79
  # schema expansion and expose SQL through dedicated schema/query tools.
79
80
  if include_sql_context:
80
81
  try:
81
- sql_context, db_tables = self._get_sql_enriched_context(company_short_name)
82
+ # allowed_databases: the sources this person may query (BL-010); None is all.
83
+ sql_context, db_tables = self._get_sql_enriched_context(company_short_name,
84
+ allowed_databases=allowed_databases)
82
85
  sql_context = sql_context.strip()
83
86
  sql_source_table_scopes = self._get_sql_source_table_scopes(company_short_name)
84
87
  except Exception as e:
@@ -199,7 +199,7 @@ class ContextBuilderService:
199
199
 
200
200
  # 1. Get user profile
201
201
  user_profile = self.profile_service.get_profile_by_identifier(company_short_name, user_identifier)
202
- available_tools = self.tool_service.get_tools_for_llm(company)
202
+ available_tools = self.tool_service.get_tools_for_llm(company, user_identifier=user_identifier)
203
203
 
204
204
  # 2. Render the base system prompt (iatoolkit standard)
205
205
  system_prompt_payload = self.prompt_service.get_system_prompt_payload(
@@ -223,9 +223,13 @@ class ContextBuilderService:
223
223
  service_list=available_tools,
224
224
  )
225
225
 
226
- # 3. Get company specific context (DB Schemas, Docs, etc.)
227
- company_context_blocks = self.company_context_service.get_company_context_blocks(company_short_name)
228
- collection_context = self._build_collection_context(company_short_name)
226
+ # 3. Get company specific context (DB Schemas, Docs, etc.), limited to the SQL
227
+ # sources and collections this person may use (BL-010, Fase 2).
228
+ allowed_databases, allowed_collections = self._access_restrictions(company_short_name, user_identifier)
229
+ company_context_blocks = self.company_context_service.get_company_context_blocks(
230
+ company_short_name, allowed_databases=allowed_databases)
231
+ collection_context = "" if allowed_collections == [] else self._build_collection_context(
232
+ company_short_name, collection_names=allowed_collections)
229
233
 
230
234
  final_system_context = self._join_context_sections(
231
235
  rendered_sections.get("identity"),
@@ -274,6 +278,24 @@ class ContextBuilderService:
274
278
 
275
279
  return capabilities
276
280
 
281
+ def _access_restrictions(self, company_short_name: str,
282
+ user_identifier: str | None) -> tuple[list[str] | None, list[str] | None]:
283
+ """(SQL sources, collections) this person may use; None where nothing is restricted."""
284
+ from iatoolkit.common import access
285
+ if not user_identifier or not access.Access.registered():
286
+ return None, None
287
+ from iatoolkit import current_iatoolkit
288
+ from iatoolkit.services.resource_access_scope import ResourceAccessScope
289
+ from iatoolkit.services.sql_source_service import SqlSourceService
290
+ injector = current_iatoolkit().get_injector()
291
+ scope = injector.get(ResourceAccessScope)
292
+ databases = [str(s.get("database") or "") for s in
293
+ injector.get(SqlSourceService).list_sources(company_short_name, include_inactive=False) or []
294
+ if s.get("database")]
295
+ allowed_databases = scope.allowed_databases(company_short_name, user_identifier, databases)
296
+ return (None if len(allowed_databases) == len(databases) else allowed_databases,
297
+ scope.allowed_collections(company_short_name, user_identifier))
298
+
277
299
  def build_agent_system_context(
278
300
  self,
279
301
  company_short_name: str,
@@ -312,6 +334,12 @@ class ContextBuilderService:
312
334
  resource_bindings,
313
335
  PromptResourceType.RAG_COLLECTION.value,
314
336
  )
337
+ # The agent's sources and collections, minus those this person may not use.
338
+ allowed_databases, allowed_collections = self._access_restrictions(company_short_name, user_identifier)
339
+ if allowed_databases is not None:
340
+ sql_sources = [s for s in sql_sources if s in allowed_databases]
341
+ if allowed_collections is not None:
342
+ rag_collections = [c for c in rag_collections if c in allowed_collections]
315
343
 
316
344
  prompt_capabilities = self._resolve_system_prompt_capabilities(enabled_tools)
317
345
  if self.SQL_TOOL_NAME in enabled_tool_names and not sql_sources:
@@ -370,6 +398,7 @@ class ContextBuilderService:
370
398
  company_context_policy = context_policy.get("company_context_blocks") or {}
371
399
  company_context_blocks = self.company_context_service.get_company_context_blocks(
372
400
  company_short_name,
401
+ allowed_databases=allowed_databases,
373
402
  include_sql_context=bool(company_context_policy.get("sql_context")),
374
403
  include_yaml_context=bool(company_context_policy.get("yaml_context")),
375
404
  )
@@ -56,6 +56,23 @@ class Dispatcher:
56
56
  self._company_instances = None
57
57
  self._company_instances_revision = -1
58
58
 
59
+ @staticmethod
60
+ def _scope_tool_call(company_short_name: str, function_name: str, user_identifier: str | None,
61
+ kwargs: dict) -> dict:
62
+ from iatoolkit.common import access
63
+ if not user_identifier or not access.Access.registered():
64
+ # No person (internal runs), or no groups (core alone): nothing is restricted.
65
+ return kwargs
66
+ from iatoolkit import current_iatoolkit
67
+ from iatoolkit.services.resource_access_scope import ResourceAccessScope
68
+ try:
69
+ injector = current_iatoolkit().get_injector()
70
+ except Exception:
71
+ # No running IAToolkit (unit tests of the dispatcher alone): nothing to scope with.
72
+ return kwargs
73
+ scope = injector.get(ResourceAccessScope)
74
+ return scope.scope_tool_call(company_short_name, function_name, user_identifier, kwargs)
75
+
59
76
  def _safe_rollback(self):
60
77
  """
61
78
  Best-effort rollback for the shared scoped session used by repositories.
@@ -228,6 +245,9 @@ class Dispatcher:
228
245
  )
229
246
  return result
230
247
  try:
248
+ # What the person may reach (BL-010, Fase 2): the tool, and the SQL source,
249
+ # collections or wikis the call names or would search.
250
+ kwargs = self._scope_tool_call(company_short_name, function_name, user_identifier, kwargs)
231
251
  result = self._dispatch_resolved_tool(
232
252
  company_short_name=company_short_name,
233
253
  function_name=function_name,
@@ -1269,7 +1269,7 @@ class QueryService:
1269
1269
  if not prompt_output_contract:
1270
1270
  return {'rebuild_needed': True, 'error': f"Prompt '{prompt_name}' not found"}
1271
1271
 
1272
- tools = self.tool_service.get_tools_for_llm(company)
1272
+ tools = self.tool_service.get_tools_for_llm(company, user_identifier=user_identifier)
1273
1273
  is_agent_execution = self._is_agentic_execution(prompt_output_contract)
1274
1274
  tools, _tool_router_metrics = self._apply_prompt_tool_policy(
1275
1275
  company_short_name=company_short_name,
@@ -1528,6 +1528,11 @@ class QueryService:
1528
1528
  prompt_output_contract=prompt_output_contract,
1529
1529
  )
1530
1530
  effective_model = self._resolve_model(company_short_name, model, prompt_output_contract)
1531
+ # Using a model is a level-1 permission over it (BL-010, Fase 2).
1532
+ if effective_model and not access.can(company_short_name, user_identifier, access.USE, "model",
1533
+ effective_model):
1534
+ return {"error": True, "status_code": 403,
1535
+ "error_message": self.i18n_service.t('errors.access.model_denied', model=effective_model)}
1531
1536
  output_schema = self._build_output_text_schema_payload(
1532
1537
  company_short_name,
1533
1538
  effective_model,
@@ -1616,7 +1621,7 @@ class QueryService:
1616
1621
  is_agent_execution = self._is_agentic_execution(prompt_output_contract) and not is_agent_session_execution
1617
1622
 
1618
1623
  # get the tools availables for this company
1619
- tools = self.tool_service.get_tools_for_llm(company)
1624
+ tools = self.tool_service.get_tools_for_llm(company, user_identifier=user_identifier)
1620
1625
  log_stage("load_tools")
1621
1626
  tools, tool_router_metrics = self._apply_prompt_tool_policy(
1622
1627
  company_short_name=company_short_name,
@@ -1920,7 +1925,7 @@ class QueryService:
1920
1925
  )
1921
1926
 
1922
1927
  is_agent_execution = self._is_agentic_execution(prompt_output_contract)
1923
- tools = self.tool_service.get_tools_for_llm(company)
1928
+ tools = self.tool_service.get_tools_for_llm(company, user_identifier=user_identifier)
1924
1929
  tools, tool_router_metrics = self._apply_prompt_tool_policy(
1925
1930
  company_short_name=company_short_name,
1926
1931
  prompt_output_contract=prompt_output_contract,
@@ -2060,7 +2065,7 @@ class QueryService:
2060
2065
  effective_model = self._resolve_model(company_short_name, None, {})
2061
2066
  provider = self._get_provider(company_short_name, effective_model)
2062
2067
  history_type = self._get_history_type(company_short_name, effective_model)
2063
- tools = self.tool_service.get_tools_for_llm(company)
2068
+ tools = self.tool_service.get_tools_for_llm(company, user_identifier=user_identifier)
2064
2069
  runtime_context, _user_profile, selected_system_prompt_keys = self.context_builder.build_system_context(
2065
2070
  company_short_name,
2066
2071
  user_identifier,