iatoolkit 2.71.0__tar.gz → 2.72.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.
- {iatoolkit-2.71.0/src/iatoolkit.egg-info → iatoolkit-2.72.0}/PKG-INFO +1 -1
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/__init__.py +1 -1
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/common/access.py +16 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/locales/en.yaml +107 -4
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/locales/es.yaml +107 -4
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/company_context_service.py +4 -1
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/context_builder_service.py +33 -4
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/dispatcher_service.py +20 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/query_service.py +9 -4
- iatoolkit-2.72.0/src/iatoolkit/services/resource_access_scope.py +161 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/tool_service.py +7 -1
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/views/base_login_view.py +3 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/views/chat_view.py +3 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/views/login_view.py +3 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/views/wiki_page_view.py +6 -1
- {iatoolkit-2.71.0 → iatoolkit-2.72.0/src/iatoolkit.egg-info}/PKG-INFO +1 -1
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit.egg-info/SOURCES.txt +1 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/LICENSE +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/LICENSE_COMMUNITY.md +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/pyproject.toml +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/readme.md +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/setup.cfg +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/base_company.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/cli_commands.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/common/__init__.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/common/bridge_validation.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/common/company_paths.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/common/exceptions.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/common/interfaces/__init__.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/common/interfaces/asset_storage.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/common/interfaces/database_provider.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/common/interfaces/memory_compilation_trigger.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/common/interfaces/secret_provider.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/common/interfaces/signup_policy_resolver.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/common/interfaces/web_search_provider.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/common/memory_tools.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/common/model_registry.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/common/routes.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/common/search_terms.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/common/secret_resolver.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/common/session_manager.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/common/text_splitter.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/common/url_safety.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/common/util.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/company_registry.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/config/__init__.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/config/llm_capabilities.yaml +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/config/system_agents/memory_compiler.prompt +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/config/system_agents/memory_correction.prompt +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/config/system_agents/memory_document_ingest.prompt +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/config/system_agents/memory_image_ingest.prompt +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/config/system_agents/memory_meeting_ingest.prompt +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/config/system_agents/memory_question_review.prompt +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/config/system_agents_pack.yaml +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/config/system_prompts/channel_business_identity.prompt +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/config/system_prompts/channel_conversation_continuity.prompt +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/config/system_prompts/channel_response_style.prompt +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/config/system_prompts/chat_state_rules.prompt +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/config/system_prompts/chat_user_profile.prompt +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/config/system_prompts/core_identity.prompt +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/config/system_prompts/email_output.prompt +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/config/system_prompts/file_download_output.prompt +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/config/system_prompts/format_styles.prompt +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/config/system_prompts/html_structures.prompt +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/config/system_prompts/links_documents.prompt +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/config/system_prompts/memory_usage.prompt +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/config/system_prompts/multimodal_basics.prompt +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/config/system_prompts/output_basics.prompt +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/config/system_prompts/presentation_formatting.prompt +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/config/system_prompts/query_main.prompt +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/config/system_prompts/sql_aggregation_scope.prompt +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/config/system_prompts/sql_casting.prompt +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/config/system_prompts/sql_core.prompt +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/config/system_prompts/sql_jsonb.prompt +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/config/system_prompts/sql_mysql_casting.prompt +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/config/system_prompts/sql_mysql_json.prompt +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/config/system_prompts/sql_redshift_basics.prompt +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/config/system_prompts/sql_redshift_types.prompt +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/config/system_prompts/sql_rules.prompt +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/config/system_prompts/tool_html_passthrough.prompt +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/config/system_prompts_pack.yaml +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/config/system_tools_pack.yaml +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/core.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/infra/__init__.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/infra/brevo_mail_app.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/infra/call_service.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/infra/connectors/__init__.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/infra/connectors/file_connector.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/infra/connectors/file_connector_factory.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/infra/connectors/google_cloud_storage_connector.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/infra/connectors/google_drive_connector.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/infra/connectors/local_file_connector.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/infra/connectors/s3_connector.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/infra/google_auth_client.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/infra/google_chat_app.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/infra/inference_embeddings_client.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/infra/inference_handler.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/infra/jina_embeddings_client.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/infra/llm_gateway_resolver.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/infra/llm_providers/__init__.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/infra/llm_providers/anthropic_adapter.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/infra/llm_providers/deepseek_adapter.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/infra/llm_providers/gemini_adapter.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/infra/llm_providers/openai_adapter.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/infra/llm_providers/openai_compatible_chat_adapter.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/infra/llm_providers/openrouter_adapter.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/infra/llm_proxy.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/infra/llm_response.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/infra/redis_session_manager.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/repositories/__init__.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/repositories/advisory_lock.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/repositories/api_key_repo.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/repositories/bridge_repo.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/repositories/database_manager.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/repositories/document_repo.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/repositories/env_secret_provider.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/repositories/filesystem_asset_repository.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/repositories/knowledge_wiki_repo.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/repositories/llm_query_repo.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/repositories/mcp_token_repo.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/repositories/memory_question_repo.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/repositories/memory_repo.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/repositories/memory_usage_repo.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/repositories/models.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/repositories/profile_repo.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/repositories/prompt_resource_repo.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/repositories/sql_dataset_repo.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/repositories/sql_source_repo.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/repositories/vs_repo.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/runtime_logging.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/__init__.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/api_key_service.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/attachment_policy_service.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/auth_service.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/branding_service.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/configuration_service.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/embedding_service.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/excel_service.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/file_processor_service.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/history_manager_service.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/http_tool_service.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/i18n_service.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/inference_service.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/jwt_service.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/knowledge_base_service.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/language_service.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/license_service.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/llm_client_service.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/mail_service.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/markdown_wiki_service.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/mcp_token_service.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/memory_compiler_service.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/memory_lookup_policy_service.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/memory_question_service.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/memory_service.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/memory_sources.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/memory_usage_service.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/memory_wiki_service.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/noop_memory_compilation_trigger.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/operator_identity_service.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/parsers/__init__.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/parsers/contracts.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/parsers/image_normalizer.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/parsers/parsing_service.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/parsers/pdf_ocr_detection.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/parsers/provider_factory.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/parsers/provider_resolver.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/parsers/providers/__init__.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/parsers/providers/basic_provider.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/parsers/providers/docling_provider.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/parsers/validator.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/pdf_service.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/profile_service.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/prompt_resource_service.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/prompt_service.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/signup_policy_resolver.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/sql_dataset_service.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/sql_service.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/sql_source_service.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/storage_service.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/structured_output_service.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/system_agent_catalog.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/system_agent_runner.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/system_prompt_catalog.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/system_tools.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/telemetry_service.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/tenant_wiki_service.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/tool_output_contract.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/user_feedback_service.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/user_session_context_service.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/visual_kb_service.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/visual_tool_service.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/warmup_service.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/web_search/__init__.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/web_search/provider_factory.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/web_search/providers/__init__.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/web_search/providers/brave_provider.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/web_search_service.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/services/wiki_page_index_service.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/static/images/favicon.ico +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/static/images/favicon.png +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/static/images/fernando.jpeg +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/static/images/iatoolkit_core.png +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/static/images/iatoolkit_logo.png +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/static/js/chat_feedback_button.js +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/static/js/chat_filepond.js +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/static/js/chat_header_navigation.js +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/static/js/chat_help_content.js +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/static/js/chat_history_button.js +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/static/js/chat_logout_button.js +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/static/js/chat_main.js +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/static/js/chat_memory_button.js +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/static/js/chat_model_selector.js +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/static/js/chat_onboarding_button.js +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/static/js/chat_prompt_manager.js +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/static/js/chat_reload_button.js +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/static/styles/account.css +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/static/styles/chat_iatoolkit.css +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/static/styles/chat_modal.css +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/static/styles/chat_public.css +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/static/styles/documents.css +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/static/styles/landing_page.css +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/static/styles/llm_output.css +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/static/styles/onboarding.css +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/static/styles/wiki_page.css +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/templates/_chat_header.html +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/templates/_company_header.html +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/templates/_login_widget.html +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/templates/account.html +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/templates/base.html +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/templates/change_password.html +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/templates/chat.html +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/templates/chat_memory_modal.html +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/templates/chat_modals.html +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/templates/error.html +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/templates/forgot_password.html +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/templates/home_hosted_default.html +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/templates/login_global.html +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/templates/memory/wiki_schema.md +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/templates/onboarding_shell.html +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/templates/pdf/base.html +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/templates/pdf/letter.html +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/templates/pdf/report.html +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/templates/pdf/simple.html +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/templates/signup.html +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/templates/wiki_page.html +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/views/__init__.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/views/account_view.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/views/api_key_api_view.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/views/categories_api_view.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/views/change_password_view.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/views/chat_context_preview_api_view.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/views/configuration_api_view.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/views/connectors_api_view.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/views/embedding_api_view.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/views/forgot_password_view.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/views/help_content_api_view.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/views/history_api_view.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/views/home_view.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/views/init_context_api_view.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/views/llmquery_api_view.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/views/load_document_api_view.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/views/logout_api_view.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/views/memory_api_view.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/views/profile_api_view.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/views/prompt_api_view.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/views/prompt_context_preview_api_view.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/views/prompt_resource_api_view.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/views/rag_api_view.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/views/root_redirect_view.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/views/signup_view.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/views/static_page_view.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/views/tool_api_view.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/views/user_feedback_api_view.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/views/users_api_view.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit/views/verify_user_view.py +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit.egg-info/dependency_links.txt +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit.egg-info/requires.txt +0 -0
- {iatoolkit-2.71.0 → iatoolkit-2.72.0}/src/iatoolkit.egg-info/top_level.txt +0 -0
|
@@ -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.
|
|
@@ -661,6 +661,22 @@ ui:
|
|
|
661
661
|
team_group_delete: "Delete group"
|
|
662
662
|
team_group_builtin: "Built-in"
|
|
663
663
|
team_group_save: "Save"
|
|
664
|
+
team_group_no_grants_short: "Only what resources give it"
|
|
665
|
+
team_group_resources: "resources with their own access"
|
|
666
|
+
team_group_resource: "resource with its own access"
|
|
667
|
+
team_groups_empty_hint: "Create one to restrict an agent to certain people."
|
|
668
|
+
team_groups_empty_title: "No groups of your own yet"
|
|
669
|
+
team_groups_builtin: "Built-in groups"
|
|
670
|
+
team_groups_company: "Company groups"
|
|
671
|
+
team_groups_intro: "Group people to give them access to agents and other resources."
|
|
672
|
+
team_group_no_match: "Nobody in the company matches."
|
|
673
|
+
team_group_create: "Create group"
|
|
674
|
+
team_group_add_member_label: "Add a person"
|
|
675
|
+
team_group_description_placeholder: "What this group is for (optional)"
|
|
676
|
+
team_group_name_placeholder: "E.g. Risk"
|
|
677
|
+
team_group_details: "Group details"
|
|
678
|
+
team_group_edit_hint: "People in this group."
|
|
679
|
+
team_group_new_hint: "A group brings people together to give them access to agents and other resources."
|
|
664
680
|
team_group_edit: "Edit"
|
|
665
681
|
team_group_everyone_note: "Includes everyone in the company."
|
|
666
682
|
team_group_owners_note: "Only an owner can change the owners. Owners is never empty."
|
|
@@ -669,7 +685,7 @@ ui:
|
|
|
669
685
|
team_group_owners_all: "everything, billing included"
|
|
670
686
|
team_group_delete_confirm: "Delete this group? Its permissions are lost."
|
|
671
687
|
team_group_none_members: "No members."
|
|
672
|
-
team_group_member_placeholder: "
|
|
688
|
+
team_group_member_placeholder: "Search by name or email"
|
|
673
689
|
team_group_created: "Group created."
|
|
674
690
|
team_group_deleted: "Group deleted."
|
|
675
691
|
team_group_updated: "Group updated."
|
|
@@ -679,9 +695,95 @@ ui:
|
|
|
679
695
|
access_all_resources: "every resource"
|
|
680
696
|
access_company: "the company"
|
|
681
697
|
access_title: "Access"
|
|
698
|
+
access_person_title: "What this person sees"
|
|
699
|
+
access_group_title: "What this group can do"
|
|
700
|
+
access_person_company: "Over the company"
|
|
701
|
+
access_person_none: "No resource has its own access yet: they use what the whole company uses."
|
|
702
|
+
access_group_none: "Not listed in any resource's access."
|
|
703
|
+
access_no_access: "no access"
|
|
704
|
+
access_role_owner: "Owner"
|
|
705
|
+
access_role_admin: "Administers"
|
|
706
|
+
access_role_editor: "Edits"
|
|
707
|
+
access_role_user: "Uses"
|
|
708
|
+
access_simulator: "Simulate access"
|
|
709
|
+
access_simulator_hint: "Pick a person and a resource: it tells you whether they can, and why."
|
|
710
|
+
access_sim_person: "Person"
|
|
711
|
+
access_sim_type: "Resource type"
|
|
712
|
+
access_sim_key: "Resource (name or key)"
|
|
713
|
+
access_sim_run: "Simulate"
|
|
714
|
+
access_sim_allowed: "Can"
|
|
715
|
+
access_sim_denied: "Cannot"
|
|
716
|
+
access_sim_groups: "Their groups"
|
|
717
|
+
access_reason_owner: "Owns the company: can do everything."
|
|
718
|
+
access_reason_company_admin: "Administers the company: administers every resource."
|
|
719
|
+
access_reason_company: "By their level over the company."
|
|
720
|
+
access_reason_own_access_list: "The resource has its own list: it depends on whether one of their groups is in it."
|
|
721
|
+
access_reason_type_default: "The resource uses the company's access for its type."
|
|
722
|
+
access_export: "Export"
|
|
723
|
+
access_import: "Import permissions"
|
|
724
|
+
access_import_hint: "Paste an exported YAML. Check what would change first, then apply it."
|
|
725
|
+
access_import_check: "Check changes"
|
|
726
|
+
access_import_apply: "Apply"
|
|
727
|
+
access_import_groups_created: "New groups"
|
|
728
|
+
access_import_groups_updated: "Changed groups"
|
|
729
|
+
access_import_members_added: "Members added"
|
|
730
|
+
access_import_members_removed: "Members removed"
|
|
731
|
+
access_import_resources_set: "Resources with their access"
|
|
732
|
+
access_import_errors: "Errors"
|
|
733
|
+
access_import_nothing: "Nothing to change."
|
|
734
|
+
access_import_done: "Permissions imported."
|
|
735
|
+
access_type_agent: "Agent"
|
|
736
|
+
access_type_tool: "Tool"
|
|
737
|
+
access_type_model: "Model"
|
|
738
|
+
access_type_sql_source: "SQL source"
|
|
739
|
+
access_type_rag_collection: "Collection"
|
|
740
|
+
access_type_memory_folder: "Memory folder"
|
|
741
|
+
access_type_knowledge_wiki: "Wiki"
|
|
742
|
+
access_type_knowledge_table: "Knowledge table"
|
|
743
|
+
access_type_mcp_tool: "MCP tool"
|
|
744
|
+
access_type_company: "The company"
|
|
745
|
+
access_settings_tab: "Settings"
|
|
746
|
+
access_group_owners: "Owners"
|
|
747
|
+
access_group_admins: "Administrators"
|
|
748
|
+
access_group_editors: "Editors"
|
|
749
|
+
access_group_everyone: "Everyone"
|
|
750
|
+
access_group_owners_desc: "Can do everything, including billing and deleting the company."
|
|
751
|
+
access_group_admins_desc: "Administer the company: team, agents, knowledge and settings."
|
|
752
|
+
access_group_editors_desc: "Edit every resource from the console."
|
|
753
|
+
access_group_everyone_desc: "Everyone in the company."
|
|
754
|
+
access_readonly: "Only those who administer the company can change access."
|
|
755
|
+
access_level_help_3: "Also decide who has access."
|
|
756
|
+
access_level_help_2: "Also change its configuration or content."
|
|
757
|
+
access_level_help_1_see: "Read its content, also through the AI."
|
|
758
|
+
access_level_help_1_use: "Run it in the chat, the API and MCP."
|
|
759
|
+
access_level_1_see: "see"
|
|
760
|
+
access_level_1_use: "use"
|
|
761
|
+
access_nobody: "No groups."
|
|
762
|
+
access_members: "members"
|
|
763
|
+
access_member: "member"
|
|
764
|
+
access_everyone_members: "Whole company"
|
|
765
|
+
access_remove: "Remove access"
|
|
766
|
+
access_add: "Add"
|
|
767
|
+
access_add_title_own: "Give access to another group"
|
|
768
|
+
access_add_title_default: "Restrict to a group"
|
|
769
|
+
access_always_hint: "Always have access; no need to add them."
|
|
770
|
+
access_always: "Owners and administrators"
|
|
771
|
+
access_levels: "Levels"
|
|
772
|
+
access_who: "Who has access"
|
|
773
|
+
access_mode_own: "Restricted"
|
|
774
|
+
access_mode_default: "Whole company"
|
|
775
|
+
access_heading_agent: "Who can use this agent?"
|
|
776
|
+
access_heading_tool: "Who can use this tool?"
|
|
777
|
+
access_heading_sql_source: "Who can query this SQL source?"
|
|
778
|
+
access_heading_knowledge_table: "Who can query this table?"
|
|
779
|
+
access_heading_model: "Who can use this model?"
|
|
780
|
+
access_heading_knowledge_wiki: "Who can see this wiki?"
|
|
781
|
+
access_heading_rag_collection: "Who can see this collection?"
|
|
782
|
+
access_heading_memory_folder: "Who can see this folder?"
|
|
783
|
+
access_heading: "Who has access?"
|
|
682
784
|
access_default: "Company access (default)"
|
|
683
|
-
access_default_hint: "
|
|
684
|
-
access_own_hint: "Only
|
|
785
|
+
access_default_hint: "Everyone uses it under the company's general permissions. Add a group to restrict it."
|
|
786
|
+
access_own_hint: "Only the listed groups have access. Removing the last group returns it to the whole company."
|
|
685
787
|
access_add_group: "Add group"
|
|
686
788
|
access_reset: "Back to company access"
|
|
687
789
|
access_saved: "Access updated."
|
|
@@ -790,7 +892,7 @@ ui:
|
|
|
790
892
|
mode_external_sync: "External"
|
|
791
893
|
mode_managed_help: "The wiki is edited from this workspace and pages are saved into storage."
|
|
792
894
|
mode_external_sync_help: "The wiki stays read-only in IAToolkit and updates from the configured storage root."
|
|
793
|
-
access_control: "
|
|
895
|
+
access_control: "Page visibility by labels"
|
|
794
896
|
access_mode_off: "Off"
|
|
795
897
|
access_mode_off_help: "Access labels are stored but no page is filtered."
|
|
796
898
|
access_mode_dry_run: "Dry run"
|
|
@@ -2646,6 +2748,7 @@ errors:
|
|
|
2646
2748
|
company_not_found: "The company {company_short_name} does not exist."
|
|
2647
2749
|
access:
|
|
2648
2750
|
agent_denied: "You do not have access to the agent {prompt_name}."
|
|
2751
|
+
model_denied: "You do not have access to the model {model}."
|
|
2649
2752
|
timeout: "timeout expired."
|
|
2650
2753
|
auth:
|
|
2651
2754
|
invalid_password: "The provided password is incorrect."
|
|
@@ -675,6 +675,22 @@ ui:
|
|
|
675
675
|
team_group_delete: "Eliminar grupo"
|
|
676
676
|
team_group_builtin: "De fábrica"
|
|
677
677
|
team_group_save: "Guardar"
|
|
678
|
+
team_group_no_grants_short: "Solo lo que le den los recursos"
|
|
679
|
+
team_group_resources: "recursos con acceso propio"
|
|
680
|
+
team_group_resource: "recurso con acceso propio"
|
|
681
|
+
team_groups_empty_hint: "Crea uno para restringir un agente a ciertas personas."
|
|
682
|
+
team_groups_empty_title: "Todavía no hay grupos propios"
|
|
683
|
+
team_groups_builtin: "Grupos de fábrica"
|
|
684
|
+
team_groups_company: "Grupos de la empresa"
|
|
685
|
+
team_groups_intro: "Agrupa personas para darles acceso a agentes y otros recursos."
|
|
686
|
+
team_group_no_match: "Nadie de la empresa coincide."
|
|
687
|
+
team_group_create: "Crear grupo"
|
|
688
|
+
team_group_add_member_label: "Agregar persona"
|
|
689
|
+
team_group_description_placeholder: "Para qué es este grupo (opcional)"
|
|
690
|
+
team_group_name_placeholder: "Ej.: Riesgo"
|
|
691
|
+
team_group_details: "Datos del grupo"
|
|
692
|
+
team_group_edit_hint: "Personas de este grupo."
|
|
693
|
+
team_group_new_hint: "Un grupo reúne personas para darles acceso a agentes y otros recursos."
|
|
678
694
|
team_group_edit: "Editar"
|
|
679
695
|
team_group_everyone_note: "Incluye a todas las personas de la empresa."
|
|
680
696
|
team_group_owners_note: "Solo un dueño puede cambiar los dueños. Dueños nunca queda vacío."
|
|
@@ -683,7 +699,7 @@ ui:
|
|
|
683
699
|
team_group_owners_all: "todo, incluida la facturación"
|
|
684
700
|
team_group_delete_confirm: "¿Eliminar este grupo? Sus permisos se pierden."
|
|
685
701
|
team_group_none_members: "Sin miembros."
|
|
686
|
-
team_group_member_placeholder: "
|
|
702
|
+
team_group_member_placeholder: "Busca por nombre o email"
|
|
687
703
|
team_group_created: "Grupo creado."
|
|
688
704
|
team_group_deleted: "Grupo eliminado."
|
|
689
705
|
team_group_updated: "Grupo actualizado."
|
|
@@ -693,9 +709,95 @@ ui:
|
|
|
693
709
|
access_all_resources: "todos los recursos"
|
|
694
710
|
access_company: "la empresa"
|
|
695
711
|
access_title: "Acceso"
|
|
712
|
+
access_person_title: "Qué ve esta persona"
|
|
713
|
+
access_group_title: "Qué puede este grupo"
|
|
714
|
+
access_person_company: "Sobre la empresa"
|
|
715
|
+
access_person_none: "Ningún recurso tiene acceso propio todavía: usa lo de toda la empresa."
|
|
716
|
+
access_group_none: "No aparece en la lista de acceso de ningún recurso."
|
|
717
|
+
access_no_access: "sin acceso"
|
|
718
|
+
access_role_owner: "Dueño"
|
|
719
|
+
access_role_admin: "Administra"
|
|
720
|
+
access_role_editor: "Edita"
|
|
721
|
+
access_role_user: "Usa"
|
|
722
|
+
access_simulator: "Simular acceso"
|
|
723
|
+
access_simulator_hint: "Elige una persona y un recurso: te dice si puede y por qué."
|
|
724
|
+
access_sim_person: "Persona"
|
|
725
|
+
access_sim_type: "Tipo de recurso"
|
|
726
|
+
access_sim_key: "Recurso (nombre o clave)"
|
|
727
|
+
access_sim_run: "Simular"
|
|
728
|
+
access_sim_allowed: "Puede"
|
|
729
|
+
access_sim_denied: "No puede"
|
|
730
|
+
access_sim_groups: "Sus grupos"
|
|
731
|
+
access_reason_owner: "Es dueño de la empresa: puede todo."
|
|
732
|
+
access_reason_company_admin: "Administra la empresa: administra todos los recursos."
|
|
733
|
+
access_reason_company: "Según su nivel sobre la empresa."
|
|
734
|
+
access_reason_own_access_list: "El recurso tiene lista propia: decide si alguno de sus grupos está en ella."
|
|
735
|
+
access_reason_type_default: "El recurso usa el acceso de la empresa para su tipo."
|
|
736
|
+
access_export: "Exportar"
|
|
737
|
+
access_import: "Importar permisos"
|
|
738
|
+
access_import_hint: "Pega un YAML exportado. Primero revisa qué cambiaría y después aplícalo."
|
|
739
|
+
access_import_check: "Revisar cambios"
|
|
740
|
+
access_import_apply: "Aplicar"
|
|
741
|
+
access_import_groups_created: "Grupos nuevos"
|
|
742
|
+
access_import_groups_updated: "Grupos modificados"
|
|
743
|
+
access_import_members_added: "Miembros que se agregan"
|
|
744
|
+
access_import_members_removed: "Miembros que se quitan"
|
|
745
|
+
access_import_resources_set: "Recursos con su acceso"
|
|
746
|
+
access_import_errors: "Errores"
|
|
747
|
+
access_import_nothing: "No hay nada que cambiar."
|
|
748
|
+
access_import_done: "Permisos importados."
|
|
749
|
+
access_type_agent: "Agente"
|
|
750
|
+
access_type_tool: "Tool"
|
|
751
|
+
access_type_model: "Modelo"
|
|
752
|
+
access_type_sql_source: "Fuente SQL"
|
|
753
|
+
access_type_rag_collection: "Colección"
|
|
754
|
+
access_type_memory_folder: "Carpeta de Memoria"
|
|
755
|
+
access_type_knowledge_wiki: "Wiki"
|
|
756
|
+
access_type_knowledge_table: "Knowledge table"
|
|
757
|
+
access_type_mcp_tool: "Tool MCP"
|
|
758
|
+
access_type_company: "La empresa"
|
|
759
|
+
access_settings_tab: "Configuración"
|
|
760
|
+
access_group_owners: "Dueños"
|
|
761
|
+
access_group_admins: "Administradores"
|
|
762
|
+
access_group_editors: "Editores"
|
|
763
|
+
access_group_everyone: "Todos"
|
|
764
|
+
access_group_owners_desc: "Pueden todo, incluida la facturación y eliminar la empresa."
|
|
765
|
+
access_group_admins_desc: "Administran la empresa: equipo, agentes, conocimiento y ajustes."
|
|
766
|
+
access_group_editors_desc: "Editan todos los recursos desde la consola."
|
|
767
|
+
access_group_everyone_desc: "Todas las personas de la empresa."
|
|
768
|
+
access_readonly: "Solo quienes administran la empresa pueden cambiar el acceso."
|
|
769
|
+
access_level_help_3: "Además, decidir quién tiene acceso."
|
|
770
|
+
access_level_help_2: "Además, cambiar su configuración o contenido."
|
|
771
|
+
access_level_help_1_see: "Leer su contenido, también a través de la IA."
|
|
772
|
+
access_level_help_1_use: "Ejecutarlo en el chat, la API y MCP."
|
|
773
|
+
access_level_1_see: "ver"
|
|
774
|
+
access_level_1_use: "usar"
|
|
775
|
+
access_nobody: "Ningún grupo."
|
|
776
|
+
access_members: "miembros"
|
|
777
|
+
access_member: "miembro"
|
|
778
|
+
access_everyone_members: "Toda la empresa"
|
|
779
|
+
access_remove: "Quitar acceso"
|
|
780
|
+
access_add: "Agregar"
|
|
781
|
+
access_add_title_own: "Dar acceso a otro grupo"
|
|
782
|
+
access_add_title_default: "Restringir a un grupo"
|
|
783
|
+
access_always_hint: "Siempre tienen acceso, no hace falta agregarlos."
|
|
784
|
+
access_always: "Dueños y administradores"
|
|
785
|
+
access_levels: "Niveles"
|
|
786
|
+
access_who: "Quién tiene acceso"
|
|
787
|
+
access_mode_own: "Restringido"
|
|
788
|
+
access_mode_default: "Toda la empresa"
|
|
789
|
+
access_heading_agent: "¿Quién puede usar este agente?"
|
|
790
|
+
access_heading_tool: "¿Quién puede usar esta tool?"
|
|
791
|
+
access_heading_sql_source: "¿Quién puede consultar esta fuente SQL?"
|
|
792
|
+
access_heading_knowledge_table: "¿Quién puede consultar esta tabla?"
|
|
793
|
+
access_heading_model: "¿Quién puede usar este modelo?"
|
|
794
|
+
access_heading_knowledge_wiki: "¿Quién puede ver esta wiki?"
|
|
795
|
+
access_heading_rag_collection: "¿Quién puede ver esta colección?"
|
|
796
|
+
access_heading_memory_folder: "¿Quién puede ver esta carpeta?"
|
|
797
|
+
access_heading: "¿Quién tiene acceso?"
|
|
696
798
|
access_default: "Acceso de la empresa (por defecto)"
|
|
697
|
-
access_default_hint: "Lo usan
|
|
698
|
-
access_own_hint: "Solo
|
|
799
|
+
access_default_hint: "Lo usan todos según los permisos generales de la empresa. Agrega un grupo para restringirlo."
|
|
800
|
+
access_own_hint: "Solo los grupos de la lista tienen acceso. Quitar el último grupo lo devuelve a toda la empresa."
|
|
699
801
|
access_add_group: "Agregar grupo"
|
|
700
802
|
access_reset: "Volver al acceso de la empresa"
|
|
701
803
|
access_saved: "Acceso actualizado."
|
|
@@ -804,7 +906,7 @@ ui:
|
|
|
804
906
|
mode_external_sync: "Externa"
|
|
805
907
|
mode_managed_help: "La wiki se edita desde esta interfaz y guarda sus páginas en storage."
|
|
806
908
|
mode_external_sync_help: "La wiki queda de solo lectura en IAToolkit y se actualiza desde la raíz storage configurada."
|
|
807
|
-
access_control: "
|
|
909
|
+
access_control: "Visibilidad de páginas por etiquetas"
|
|
808
910
|
access_mode_off: "Desactivado"
|
|
809
911
|
access_mode_off_help: "Las etiquetas de acceso se guardan pero no se filtra ninguna página."
|
|
810
912
|
access_mode_dry_run: "Simulación"
|
|
@@ -2661,6 +2763,7 @@ errors:
|
|
|
2661
2763
|
company_not_found: "La empresa {company_short_name} no existe."
|
|
2662
2764
|
access:
|
|
2663
2765
|
agent_denied: "No tienes acceso al agente {prompt_name}."
|
|
2766
|
+
model_denied: "No tienes acceso al modelo {model}."
|
|
2664
2767
|
timeout: "El tiempo de espera ha expirado."
|
|
2665
2768
|
|
|
2666
2769
|
|
|
@@ -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
|
-
|
|
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
|
-
|
|
228
|
-
|
|
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,
|