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