iatoolkit 2.62.1__tar.gz → 2.63.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.62.1/src/iatoolkit.egg-info → iatoolkit-2.63.0}/PKG-INFO +1 -1
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/__init__.py +1 -1
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/common/routes.py +9 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/config/system_tools_pack.yaml +2 -2
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/locales/en.yaml +8 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/locales/es.yaml +8 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/tenant_wiki_service.py +53 -12
- iatoolkit-2.63.0/src/iatoolkit/static/styles/wiki_page.css +35 -0
- iatoolkit-2.63.0/src/iatoolkit/templates/wiki_page.html +29 -0
- iatoolkit-2.63.0/src/iatoolkit/views/wiki_page_view.py +110 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0/src/iatoolkit.egg-info}/PKG-INFO +1 -1
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit.egg-info/SOURCES.txt +4 -1
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/LICENSE +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/LICENSE_COMMUNITY.md +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/pyproject.toml +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/readme.md +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/setup.cfg +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/base_company.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/cli_commands.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/common/__init__.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/common/bridge_validation.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/common/company_paths.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/common/exceptions.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/common/interfaces/__init__.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/common/interfaces/asset_storage.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/common/interfaces/database_provider.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/common/interfaces/memory_compilation_trigger.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/common/interfaces/secret_provider.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/common/interfaces/signup_policy_resolver.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/common/interfaces/web_search_provider.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/common/model_registry.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/common/search_terms.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/common/secret_resolver.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/common/session_manager.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/common/text_splitter.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/common/url_safety.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/common/util.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/company_registry.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/config/__init__.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/config/llm_capabilities.yaml +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/config/system_prompts/channel_business_identity.prompt +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/config/system_prompts/channel_conversation_continuity.prompt +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/config/system_prompts/channel_response_style.prompt +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/config/system_prompts/chat_state_rules.prompt +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/config/system_prompts/chat_user_profile.prompt +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/config/system_prompts/core_identity.prompt +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/config/system_prompts/email_output.prompt +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/config/system_prompts/file_download_output.prompt +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/config/system_prompts/format_styles.prompt +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/config/system_prompts/html_structures.prompt +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/config/system_prompts/links_documents.prompt +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/config/system_prompts/memory_usage.prompt +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/config/system_prompts/multimodal_basics.prompt +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/config/system_prompts/output_basics.prompt +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/config/system_prompts/presentation_formatting.prompt +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/config/system_prompts/query_main.prompt +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/config/system_prompts/sql_aggregation_scope.prompt +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/config/system_prompts/sql_casting.prompt +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/config/system_prompts/sql_core.prompt +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/config/system_prompts/sql_jsonb.prompt +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/config/system_prompts/sql_mysql_casting.prompt +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/config/system_prompts/sql_mysql_json.prompt +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/config/system_prompts/sql_redshift_basics.prompt +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/config/system_prompts/sql_redshift_types.prompt +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/config/system_prompts/sql_rules.prompt +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/config/system_prompts/tool_html_passthrough.prompt +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/config/system_prompts_pack.yaml +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/core.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/infra/__init__.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/infra/brevo_mail_app.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/infra/call_service.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/infra/connectors/__init__.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/infra/connectors/file_connector.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/infra/connectors/file_connector_factory.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/infra/connectors/google_cloud_storage_connector.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/infra/connectors/google_drive_connector.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/infra/connectors/local_file_connector.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/infra/connectors/s3_connector.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/infra/google_auth_client.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/infra/google_chat_app.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/infra/inference_embeddings_client.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/infra/inference_handler.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/infra/jina_embeddings_client.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/infra/llm_gateway_resolver.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/infra/llm_providers/__init__.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/infra/llm_providers/anthropic_adapter.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/infra/llm_providers/deepseek_adapter.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/infra/llm_providers/gemini_adapter.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/infra/llm_providers/openai_adapter.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/infra/llm_providers/openai_compatible_chat_adapter.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/infra/llm_providers/openrouter_adapter.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/infra/llm_proxy.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/infra/llm_response.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/infra/redis_session_manager.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/repositories/__init__.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/repositories/api_key_repo.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/repositories/bridge_repo.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/repositories/database_manager.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/repositories/document_repo.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/repositories/env_secret_provider.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/repositories/filesystem_asset_repository.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/repositories/knowledge_wiki_repo.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/repositories/llm_query_repo.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/repositories/mcp_token_repo.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/repositories/memory_question_repo.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/repositories/memory_repo.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/repositories/models.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/repositories/profile_repo.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/repositories/prompt_resource_repo.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/repositories/sql_dataset_repo.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/repositories/sql_source_repo.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/repositories/vs_repo.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/runtime_logging.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/__init__.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/api_key_service.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/attachment_policy_service.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/auth_service.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/branding_service.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/company_context_service.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/configuration_service.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/context_builder_service.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/dispatcher_service.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/embedding_service.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/excel_service.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/file_processor_service.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/history_manager_service.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/http_tool_service.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/i18n_service.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/inference_service.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/jwt_service.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/knowledge_base_service.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/language_service.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/license_service.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/llm_client_service.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/mail_service.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/markdown_wiki_service.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/mcp_token_service.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/memory_compiler_service.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/memory_lookup_policy_service.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/memory_question_service.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/memory_service.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/memory_wiki_service.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/noop_memory_compilation_trigger.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/operator_identity_service.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/parsers/__init__.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/parsers/contracts.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/parsers/image_normalizer.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/parsers/parsing_service.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/parsers/pdf_ocr_detection.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/parsers/provider_factory.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/parsers/provider_resolver.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/parsers/providers/__init__.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/parsers/providers/basic_provider.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/parsers/providers/docling_provider.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/parsers/validator.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/pdf_service.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/profile_service.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/prompt_resource_service.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/prompt_service.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/query_service.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/signup_policy_resolver.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/sql_dataset_service.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/sql_service.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/sql_source_service.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/storage_service.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/structured_output_service.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/system_prompt_catalog.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/system_tools.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/telemetry_service.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/tool_output_contract.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/tool_service.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/user_feedback_service.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/user_session_context_service.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/visual_kb_service.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/visual_tool_service.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/warmup_service.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/web_search/__init__.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/web_search/provider_factory.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/web_search/providers/__init__.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/web_search/providers/brave_provider.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/services/web_search_service.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/static/images/favicon.ico +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/static/images/favicon.png +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/static/images/fernando.jpeg +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/static/images/iatoolkit_core.png +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/static/images/iatoolkit_logo.png +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/static/js/chat_feedback_button.js +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/static/js/chat_filepond.js +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/static/js/chat_header_navigation.js +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/static/js/chat_help_content.js +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/static/js/chat_history_button.js +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/static/js/chat_logout_button.js +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/static/js/chat_main.js +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/static/js/chat_memory_button.js +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/static/js/chat_model_selector.js +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/static/js/chat_onboarding_button.js +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/static/js/chat_prompt_manager.js +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/static/js/chat_reload_button.js +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/static/styles/account.css +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/static/styles/chat_iatoolkit.css +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/static/styles/chat_modal.css +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/static/styles/chat_public.css +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/static/styles/documents.css +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/static/styles/landing_page.css +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/static/styles/llm_output.css +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/static/styles/onboarding.css +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/templates/_chat_header.html +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/templates/_company_header.html +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/templates/_login_widget.html +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/templates/account.html +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/templates/base.html +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/templates/change_password.html +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/templates/chat.html +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/templates/chat_memory_modal.html +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/templates/chat_modals.html +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/templates/error.html +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/templates/forgot_password.html +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/templates/home_hosted_default.html +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/templates/login_global.html +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/templates/memory/wiki_schema.md +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/templates/onboarding_shell.html +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/templates/pdf/base.html +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/templates/pdf/letter.html +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/templates/pdf/report.html +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/templates/pdf/simple.html +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/templates/signup.html +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/views/__init__.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/views/account_view.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/views/api_key_api_view.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/views/base_login_view.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/views/categories_api_view.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/views/change_password_view.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/views/chat_context_preview_api_view.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/views/chat_view.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/views/configuration_api_view.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/views/connectors_api_view.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/views/embedding_api_view.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/views/forgot_password_view.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/views/help_content_api_view.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/views/history_api_view.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/views/home_view.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/views/init_context_api_view.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/views/llmquery_api_view.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/views/load_document_api_view.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/views/login_view.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/views/logout_api_view.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/views/memory_api_view.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/views/profile_api_view.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/views/prompt_api_view.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/views/prompt_context_preview_api_view.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/views/prompt_resource_api_view.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/views/rag_api_view.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/views/root_redirect_view.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/views/signup_view.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/views/static_page_view.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/views/tool_api_view.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/views/user_feedback_api_view.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/views/users_api_view.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/views/verify_user_view.py +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit.egg-info/dependency_links.txt +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit.egg-info/requires.txt +0 -0
- {iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit.egg-info/top_level.txt +0 -0
|
@@ -52,6 +52,7 @@ def register_views(app):
|
|
|
52
52
|
from iatoolkit.views.tool_api_view import ToolApiView
|
|
53
53
|
from iatoolkit.views.api_key_api_view import ApiKeyApiView
|
|
54
54
|
from iatoolkit.views.memory_api_view import MemoryApiView
|
|
55
|
+
from iatoolkit.views.wiki_page_view import WikiPageView
|
|
55
56
|
|
|
56
57
|
# Dependency-free liveness endpoint for load balancer/orchestrator health
|
|
57
58
|
# checks (ALB, ECS, Docker HEALTHCHECK, etc). Deliberately returns a plain
|
|
@@ -103,6 +104,14 @@ def register_views(app):
|
|
|
103
104
|
view_func=AccountView.as_view('account'),
|
|
104
105
|
methods=['GET', 'POST'])
|
|
105
106
|
|
|
107
|
+
# a knowledge wiki page in the browser: where the wiki tools' `url` points
|
|
108
|
+
wiki_page_view = WikiPageView.as_view('wiki_page')
|
|
109
|
+
app.add_url_rule('/<company_short_name>/wiki/<wiki_key>/',
|
|
110
|
+
defaults={'page_path': ''},
|
|
111
|
+
view_func=wiki_page_view)
|
|
112
|
+
app.add_url_rule('/<company_short_name>/wiki/<wiki_key>/<path:page_path>',
|
|
113
|
+
view_func=wiki_page_view)
|
|
114
|
+
|
|
106
115
|
# this endpoint is called when onboarding_shell finish the context load
|
|
107
116
|
app.add_url_rule(
|
|
108
117
|
'/<company_short_name>/finalize',
|
|
@@ -378,7 +378,7 @@ tools:
|
|
|
378
378
|
required:
|
|
379
379
|
- document_id
|
|
380
380
|
- function_name: iat_wiki_search
|
|
381
|
-
description: Busca páginas publicadas dentro de las wikis de conocimiento compartidas por la empresa. Úsala como acelerador cuando necesites encontrar rápidamente una página relevante, pero no como punto de entrada por defecto. Si no conoces un `path` válido, primero llama `iat_wiki_get_page` con `path="/"` para leer el índice raíz de la wiki y seguir sus links exactos. `wiki_key` es el identificador estable de una wiki publicada, por ejemplo `sales`, `ops` o `hr`; úsalo cuando ya sepas en qué wiki buscar y omítelo cuando quieras buscar en todas las wikis publicadas disponibles en esta conexión MCP. Esta tool devuelve candidatos; luego usa `iat_wiki_get_page` para leer la página completa antes de responder.
|
|
381
|
+
description: Busca páginas publicadas dentro de las wikis de conocimiento compartidas por la empresa. Úsala como acelerador cuando necesites encontrar rápidamente una página relevante, pero no como punto de entrada por defecto. Si no conoces un `path` válido, primero llama `iat_wiki_get_page` con `path="/"` para leer el índice raíz de la wiki y seguir sus links exactos. `wiki_key` es el identificador estable de una wiki publicada, por ejemplo `sales`, `ops` o `hr`; úsalo cuando ya sepas en qué wiki buscar y omítelo cuando quieras buscar en todas las wikis publicadas disponibles en esta conexión MCP. Esta tool devuelve candidatos; luego usa `iat_wiki_get_page` para leer la página completa antes de responder. Cada candidato trae `url`, el link para abrir la página en el navegador.
|
|
382
382
|
routing:
|
|
383
383
|
force_include_capability: has_knowledge_wikis
|
|
384
384
|
routing_profile:
|
|
@@ -427,7 +427,7 @@ tools:
|
|
|
427
427
|
description: |-
|
|
428
428
|
Wiki entrypoint: llama `iat_wiki_get_page` con `path="/"` para cargar el índice raíz de una wiki de conocimiento publicada del tenant.
|
|
429
429
|
Lee **una** página de wiki y devuelve su contenido en Markdown. La wiki documenta contexto de negocio, áreas, sistemas internos, arquitectura, procesos, políticas, runbooks, onboarding, operaciones y glosarios. Es una wiki navegable por links: la página raíz `path="/"` es el punto de entrada y lista las páginas disponibles con sus paths exactos; después abre solo las páginas relevantes siguiendo esos links o los paths devueltos por iat_wiki_search (solo si esta habilitada).
|
|
430
|
-
`wiki_key` identifica la wiki publicada. Los `path` son sensibles a mayúsculas y deben coincidir EXACTAMENTE con el link o path publicado; no los inventes ni los reconstruyas de memoria. Si no conoces un path válido, vuelve a llamar con `path="/"`. Esta tool es de solo lectura y es segura de usar siempre que la documentación interna de la empresa ayude a responder. Prefiere abrir pocas páginas puntuales antes de recorrer el corpus completo. Cuando respondas usando material de la wiki, cita la página usada.
|
|
430
|
+
`wiki_key` identifica la wiki publicada. Los `path` son sensibles a mayúsculas y deben coincidir EXACTAMENTE con el link o path publicado; no los inventes ni los reconstruyas de memoria. Si no conoces un path válido, vuelve a llamar con `path="/"`. Esta tool es de solo lectura y es segura de usar siempre que la documentación interna de la empresa ayude a responder. Prefiere abrir pocas páginas puntuales antes de recorrer el corpus completo. Cuando respondas usando material de la wiki, cita la página usada; si trae `url`, cítala como link con esa URL exacta.
|
|
431
431
|
routing:
|
|
432
432
|
force_include_capability: has_knowledge_wikis
|
|
433
433
|
routing_profile:
|
|
@@ -377,6 +377,14 @@ ui:
|
|
|
377
377
|
last_used: "Last used"
|
|
378
378
|
never_used: "No recorded use"
|
|
379
379
|
|
|
380
|
+
wiki_page:
|
|
381
|
+
back_to_chat: "Back to chat"
|
|
382
|
+
trail_label: "Location in the wiki"
|
|
383
|
+
empty: "This page has no content."
|
|
384
|
+
not_found: "This page does not exist in the wiki or is no longer published."
|
|
385
|
+
forbidden: "You do not have access to this page."
|
|
386
|
+
forbidden_labels: "You do not have access to this page. You need one of these labels: {labels}."
|
|
387
|
+
unavailable: "We could not verify your access right now. Try again in a few minutes."
|
|
380
388
|
memory:
|
|
381
389
|
title: "Company memory"
|
|
382
390
|
capture_title: "Teach the company something"
|
|
@@ -391,6 +391,14 @@ ui:
|
|
|
391
391
|
last_used: "Último uso"
|
|
392
392
|
never_used: "Sin uso registrado"
|
|
393
393
|
|
|
394
|
+
wiki_page:
|
|
395
|
+
back_to_chat: "Volver al chat"
|
|
396
|
+
trail_label: "Ubicación en la wiki"
|
|
397
|
+
empty: "Esta página no tiene contenido."
|
|
398
|
+
not_found: "Esta página no existe en la wiki o ya no está publicada."
|
|
399
|
+
forbidden: "No tienes acceso a esta página."
|
|
400
|
+
forbidden_labels: "No tienes acceso a esta página. Necesitas alguna de estas etiquetas: {labels}."
|
|
401
|
+
unavailable: "No pudimos verificar tu acceso en este momento. Intenta de nuevo en unos minutos."
|
|
394
402
|
memory:
|
|
395
403
|
title: "Memoria de la empresa"
|
|
396
404
|
capture_title: "Enseñar algo a la empresa"
|
|
@@ -14,7 +14,9 @@ import unicodedata
|
|
|
14
14
|
from datetime import datetime
|
|
15
15
|
from pathlib import PurePosixPath
|
|
16
16
|
from typing import Any, Callable
|
|
17
|
+
from urllib.parse import quote
|
|
17
18
|
|
|
19
|
+
from flask import has_request_context, request
|
|
18
20
|
from injector import inject
|
|
19
21
|
|
|
20
22
|
from iatoolkit.repositories.knowledge_wiki_repo import KnowledgeWikiRepo
|
|
@@ -583,6 +585,37 @@ class TenantWikiService:
|
|
|
583
585
|
"unlabelled": len(pages) - labelled,
|
|
584
586
|
}
|
|
585
587
|
|
|
588
|
+
@classmethod
|
|
589
|
+
def page_url(cls, company_short_name: str, wiki_key: str, path: str | None) -> str | None:
|
|
590
|
+
"""
|
|
591
|
+
Where a person opens a page in the browser: the page viewer, at the
|
|
592
|
+
page's own path, so the relative links between pages resolve without
|
|
593
|
+
rewriting them. The root page is the wiki's own folder.
|
|
594
|
+
|
|
595
|
+
`APP_BASE_URL` names the public host, because a scheduled job has no
|
|
596
|
+
request to take it from; without it the request's host is used, and
|
|
597
|
+
with neither there is no URL to give.
|
|
598
|
+
"""
|
|
599
|
+
base = str(os.getenv("APP_BASE_URL") or "").strip().rstrip("/")
|
|
600
|
+
if not base and has_request_context():
|
|
601
|
+
base = request.url_root.rstrip("/")
|
|
602
|
+
if not base:
|
|
603
|
+
return None
|
|
604
|
+
return "/".join((
|
|
605
|
+
base,
|
|
606
|
+
quote(str(company_short_name or "").strip(), safe=""),
|
|
607
|
+
"wiki",
|
|
608
|
+
quote(cls.normalize_wiki_key(wiki_key), safe=""),
|
|
609
|
+
quote(cls._normalize_page_path(path), safe="/"),
|
|
610
|
+
))
|
|
611
|
+
|
|
612
|
+
def _reader_url(self, company_short_name: str, wiki: KnowledgeWiki, path: str | None) -> str | None:
|
|
613
|
+
# A system wiki is read through the feature that owns it; the viewer
|
|
614
|
+
# answers "wiki not found" for it, so it gets no link.
|
|
615
|
+
if self.is_system_wiki(wiki):
|
|
616
|
+
return None
|
|
617
|
+
return self.page_url(company_short_name, wiki.wiki_key, path)
|
|
618
|
+
|
|
586
619
|
def get_page(
|
|
587
620
|
self,
|
|
588
621
|
company_short_name: str,
|
|
@@ -638,12 +671,15 @@ class TenantWikiService:
|
|
|
638
671
|
return {
|
|
639
672
|
"status": "success",
|
|
640
673
|
"wiki": self.serialize_wiki(wiki),
|
|
641
|
-
"page":
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
674
|
+
"page": {
|
|
675
|
+
**self._build_virtual_index_page(
|
|
676
|
+
wiki,
|
|
677
|
+
markdown=markdown,
|
|
678
|
+
source_storage_key=source_storage_key,
|
|
679
|
+
path="/",
|
|
680
|
+
),
|
|
681
|
+
"url": self._reader_url(company_short_name, wiki, "/"),
|
|
682
|
+
},
|
|
647
683
|
}
|
|
648
684
|
if normalized_path == self.INDEX_FILENAME:
|
|
649
685
|
entries = self._filter_page_entries(self._page_entries(wiki), visibility_filter=visibility_filter)
|
|
@@ -656,12 +692,15 @@ class TenantWikiService:
|
|
|
656
692
|
return {
|
|
657
693
|
"status": "success",
|
|
658
694
|
"wiki": self.serialize_wiki(wiki),
|
|
659
|
-
"page":
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
695
|
+
"page": {
|
|
696
|
+
**self._build_virtual_index_page(
|
|
697
|
+
wiki,
|
|
698
|
+
markdown=authored_index_markdown,
|
|
699
|
+
source_storage_key=authored_index_storage_key,
|
|
700
|
+
path=self.INDEX_FILENAME,
|
|
701
|
+
),
|
|
702
|
+
"url": self._reader_url(company_short_name, wiki, self.INDEX_FILENAME),
|
|
703
|
+
},
|
|
665
704
|
}
|
|
666
705
|
page = self.knowledge_wiki_repo.get_page_by_path(wiki.id, normalized_path)
|
|
667
706
|
if page is None:
|
|
@@ -689,6 +728,7 @@ class TenantWikiService:
|
|
|
689
728
|
**self.serialize_page(page, include_body=True),
|
|
690
729
|
"frontmatter": parsed.get("frontmatter") or {},
|
|
691
730
|
"markdown": markdown,
|
|
731
|
+
"url": self._reader_url(company_short_name, wiki, page.path),
|
|
692
732
|
},
|
|
693
733
|
}
|
|
694
734
|
|
|
@@ -1068,6 +1108,7 @@ class TenantWikiService:
|
|
|
1068
1108
|
**self.serialize_page(page, include_body=False),
|
|
1069
1109
|
"wiki_key": wiki.wiki_key,
|
|
1070
1110
|
"wiki_name": wiki.name,
|
|
1111
|
+
"url": self._reader_url(company_short_name, wiki, page.path),
|
|
1071
1112
|
"score": round(score if score > 0 else 1.0, 4),
|
|
1072
1113
|
})
|
|
1073
1114
|
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
.wiki-page {
|
|
2
|
+
--wiki-line: #e2e5e8;
|
|
3
|
+
--wiki-muted: #60666d;
|
|
4
|
+
max-width: 920px;
|
|
5
|
+
margin: 0 auto;
|
|
6
|
+
padding: 0 24px 64px;
|
|
7
|
+
color: #25292d;
|
|
8
|
+
font: 16px/1.6 system-ui, sans-serif;
|
|
9
|
+
}
|
|
10
|
+
.wiki-page * { box-sizing: border-box; min-width: 0; }
|
|
11
|
+
.wiki-page-header { display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 20px 0 16px; border-bottom: 1px solid var(--wiki-line); }
|
|
12
|
+
.wiki-page-brand { font-size: 18px; font-weight: 650; color: var(--brand-primary-color, #285e50); text-decoration: none; }
|
|
13
|
+
.wiki-page-back { display: inline-flex; align-items: center; gap: 8px; font-size: 14px; color: var(--wiki-muted); text-decoration: none; }
|
|
14
|
+
.wiki-page-back:hover { color: #25292d; }
|
|
15
|
+
.wiki-page-trail { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 12px; padding: 16px 0 8px; font-size: 14px; }
|
|
16
|
+
.wiki-page-trail a { display: inline-flex; align-items: center; gap: 6px; font-weight: 600; color: var(--brand-primary-color, #285e50); text-decoration: none; }
|
|
17
|
+
.wiki-page-path { color: var(--wiki-muted); font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 13px; overflow-wrap: anywhere; }
|
|
18
|
+
.wiki-page-main { padding-top: 16px; }
|
|
19
|
+
.wiki-page-notice { padding: 12px 16px; border-left: 3px solid #c9ced3; background: #f6f7f8; overflow-wrap: anywhere; }
|
|
20
|
+
.wiki-page-body { overflow-wrap: anywhere; }
|
|
21
|
+
.wiki-page-body h1 { font-size: 28px; line-height: 1.25; font-weight: 650; margin: 8px 0 20px; }
|
|
22
|
+
.wiki-page-body h2 { font-size: 21px; line-height: 1.3; font-weight: 650; margin: 32px 0 12px; padding-bottom: 6px; border-bottom: 1px solid var(--wiki-line); }
|
|
23
|
+
.wiki-page-body h3 { font-size: 17px; font-weight: 650; margin: 24px 0 8px; }
|
|
24
|
+
.wiki-page-body a { color: var(--brand-primary-color, #285e50); }
|
|
25
|
+
.wiki-page-body code { font-size: 0.9em; background: #f3f4f6; padding: 1px 4px; border-radius: 4px; overflow-wrap: anywhere; }
|
|
26
|
+
.wiki-page-body pre { background: #f6f8fa; padding: 12px 16px; border-radius: 6px; overflow-x: auto; }
|
|
27
|
+
.wiki-page-body pre code { background: none; padding: 0; }
|
|
28
|
+
.wiki-page-body blockquote { margin: 0 0 16px; padding: 4px 16px; border-left: 3px solid var(--wiki-line); color: var(--wiki-muted); }
|
|
29
|
+
.wiki-page-body table { display: block; max-width: 100%; overflow-x: auto; border-collapse: collapse; margin-bottom: 16px; font-size: 14px; }
|
|
30
|
+
.wiki-page-body th, .wiki-page-body td { border: 1px solid var(--wiki-line); padding: 6px 10px; vertical-align: top; }
|
|
31
|
+
.wiki-page-body thead { background: #f6f8fa; }
|
|
32
|
+
@media (max-width: 600px) {
|
|
33
|
+
.wiki-page { padding: 0 16px 48px; }
|
|
34
|
+
.wiki-page-back span { display: none; }
|
|
35
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{% extends "base.html" %}
|
|
2
|
+
{% set suppress_toasts = true %}
|
|
3
|
+
{% block title %}{{ page_title }} · {{ wiki_name }}{% endblock %}
|
|
4
|
+
{% block styles %}
|
|
5
|
+
<style>{{ branding.css_variables | safe }}</style>
|
|
6
|
+
<link rel="stylesheet" href="{{ url_for('static', filename='styles/wiki_page.css') }}">
|
|
7
|
+
{% endblock %}
|
|
8
|
+
{% block content %}
|
|
9
|
+
<div class="wiki-page">
|
|
10
|
+
<header class="wiki-page-header">
|
|
11
|
+
<a class="wiki-page-brand" href="{{ url_for('chat', company_short_name=company_short_name) }}">{{ branding.name }}</a>
|
|
12
|
+
<a class="wiki-page-back" href="{{ url_for('chat', company_short_name=company_short_name) }}">
|
|
13
|
+
<i class="bi bi-chat-dots" aria-hidden="true"></i><span>{{ t('ui.wiki_page.back_to_chat') }}</span>
|
|
14
|
+
</a>
|
|
15
|
+
</header>
|
|
16
|
+
<nav class="wiki-page-trail" aria-label="{{ t('ui.wiki_page.trail_label') }}">
|
|
17
|
+
<a href="{{ root_url }}"><i class="bi bi-journal-text" aria-hidden="true"></i>{{ wiki_name }}</a>
|
|
18
|
+
{% if page_path %}<span class="wiki-page-path">{{ page_path }}</span>{% endif %}
|
|
19
|
+
</nav>
|
|
20
|
+
<main class="wiki-page-main">
|
|
21
|
+
{% if message %}
|
|
22
|
+
<div class="wiki-page-notice" role="status">{{ message }}</div>
|
|
23
|
+
{% endif %}
|
|
24
|
+
{% if body_html %}
|
|
25
|
+
<article class="wiki-page-body">{{ body_html | safe }}</article>
|
|
26
|
+
{% endif %}
|
|
27
|
+
</main>
|
|
28
|
+
</div>
|
|
29
|
+
{% endblock %}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
# Copyright (c) 2024 Fernando Libedinsky
|
|
2
|
+
# Product: IAToolkit
|
|
3
|
+
#
|
|
4
|
+
# IAToolkit is open source software.
|
|
5
|
+
|
|
6
|
+
import markdown2
|
|
7
|
+
import nh3
|
|
8
|
+
from flask import redirect, render_template, request, url_for
|
|
9
|
+
from flask.views import MethodView
|
|
10
|
+
from injector import inject
|
|
11
|
+
|
|
12
|
+
from iatoolkit.services.branding_service import BrandingService
|
|
13
|
+
from iatoolkit.services.i18n_service import I18nService
|
|
14
|
+
from iatoolkit.services.markdown_wiki_service import MarkdownWikiService
|
|
15
|
+
from iatoolkit.services.profile_service import ProfileService
|
|
16
|
+
from iatoolkit.services.tenant_wiki_service import TenantWikiService
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class WikiPageView(MethodView):
|
|
20
|
+
"""
|
|
21
|
+
A knowledge wiki page, read in the browser.
|
|
22
|
+
|
|
23
|
+
The link the wiki tools hand out (`TenantWikiService.page_url`) lands here.
|
|
24
|
+
The page is read as the signed-in person, so its visibility labels apply
|
|
25
|
+
exactly as they do in chat; without a session the person signs in and comes
|
|
26
|
+
back. The URL mirrors the page's path in the wiki, so the relative links
|
|
27
|
+
between pages resolve by themselves.
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
# `code-friendly`: in a technical wiki an underscore joins a name
|
|
31
|
+
# (SYS_alertas_push), it does not start italics.
|
|
32
|
+
MARKDOWN_EXTRAS = ["tables", "fenced-code-blocks", "strike", "task_list", "code-friendly"]
|
|
33
|
+
|
|
34
|
+
@inject
|
|
35
|
+
def __init__(self,
|
|
36
|
+
profile_service: ProfileService,
|
|
37
|
+
branding_service: BrandingService,
|
|
38
|
+
i18n_service: I18nService,
|
|
39
|
+
tenant_wiki_service: TenantWikiService):
|
|
40
|
+
self.profile_service = profile_service
|
|
41
|
+
self.branding_service = branding_service
|
|
42
|
+
self.i18n_service = i18n_service
|
|
43
|
+
self.tenant_wiki_service = tenant_wiki_service
|
|
44
|
+
|
|
45
|
+
def get(self, company_short_name: str, wiki_key: str, page_path: str = ""):
|
|
46
|
+
company = self.profile_service.get_company_by_short_name(company_short_name)
|
|
47
|
+
if not company:
|
|
48
|
+
return render_template('error.html',
|
|
49
|
+
message=self.i18n_service.t('errors.templates.company_not_found')), 404
|
|
50
|
+
|
|
51
|
+
session_info = self.profile_service.get_current_session_info(company_short_name=company_short_name) or {}
|
|
52
|
+
user_identifier = session_info.get('user_identifier')
|
|
53
|
+
if not user_identifier or session_info.get('company_short_name') != company_short_name:
|
|
54
|
+
# The home page carries `next` into its login widget.
|
|
55
|
+
return redirect(url_for('home', company_short_name=company_short_name,
|
|
56
|
+
next=request.full_path.rstrip('?')))
|
|
57
|
+
|
|
58
|
+
result = self.tenant_wiki_service.get_page(
|
|
59
|
+
company_short_name,
|
|
60
|
+
wiki_key=wiki_key,
|
|
61
|
+
path=page_path or "/",
|
|
62
|
+
user_identifier=user_identifier,
|
|
63
|
+
)
|
|
64
|
+
wiki = result.get("wiki") or {}
|
|
65
|
+
context = {
|
|
66
|
+
"company_short_name": company_short_name,
|
|
67
|
+
"branding": self.branding_service.get_company_branding(company_short_name),
|
|
68
|
+
"wiki_name": wiki.get("name") or wiki_key,
|
|
69
|
+
"root_url": url_for('wiki_page', company_short_name=company_short_name,
|
|
70
|
+
wiki_key=wiki_key, page_path=''),
|
|
71
|
+
"page_path": page_path,
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
if result.get("status") == "success":
|
|
75
|
+
page = result.get("page") or {}
|
|
76
|
+
body = MarkdownWikiService.parse_frontmatter_document(page.get("markdown") or "").get("body")
|
|
77
|
+
return render_template(
|
|
78
|
+
"wiki_page.html",
|
|
79
|
+
**context,
|
|
80
|
+
page_title=page.get("title") or page_path or context["wiki_name"],
|
|
81
|
+
body_html=self.render_markdown(body),
|
|
82
|
+
message=None if body else self.i18n_service.t('ui.wiki_page.empty'),
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
status_code, message = self._denial(result)
|
|
86
|
+
return render_template(
|
|
87
|
+
"wiki_page.html",
|
|
88
|
+
**context,
|
|
89
|
+
page_title=page_path or context["wiki_name"],
|
|
90
|
+
body_html="",
|
|
91
|
+
message=message,
|
|
92
|
+
), status_code
|
|
93
|
+
|
|
94
|
+
@classmethod
|
|
95
|
+
def render_markdown(cls, markdown: str | None) -> str:
|
|
96
|
+
if not str(markdown or "").strip():
|
|
97
|
+
return ""
|
|
98
|
+
return nh3.clean(markdown2.markdown(markdown, extras=cls.MARKDOWN_EXTRAS))
|
|
99
|
+
|
|
100
|
+
def _denial(self, result: dict) -> tuple[int, str]:
|
|
101
|
+
"""A withheld page says why, as the wiki tools do; anything else is a 404."""
|
|
102
|
+
status = result.get("status")
|
|
103
|
+
if status == TenantWikiService.ACCESS_STATUS_UNAVAILABLE:
|
|
104
|
+
return 503, self.i18n_service.t('ui.wiki_page.unavailable')
|
|
105
|
+
if status == TenantWikiService.ACCESS_STATUS_FORBIDDEN:
|
|
106
|
+
labels = ", ".join(result.get("required_labels") or [])
|
|
107
|
+
if labels:
|
|
108
|
+
return 403, self.i18n_service.t('ui.wiki_page.forbidden_labels', labels=labels)
|
|
109
|
+
return 403, self.i18n_service.t('ui.wiki_page.forbidden')
|
|
110
|
+
return 404, self.i18n_service.t('ui.wiki_page.not_found')
|
|
@@ -202,6 +202,7 @@ src/iatoolkit/static/styles/documents.css
|
|
|
202
202
|
src/iatoolkit/static/styles/landing_page.css
|
|
203
203
|
src/iatoolkit/static/styles/llm_output.css
|
|
204
204
|
src/iatoolkit/static/styles/onboarding.css
|
|
205
|
+
src/iatoolkit/static/styles/wiki_page.css
|
|
205
206
|
src/iatoolkit/templates/_chat_header.html
|
|
206
207
|
src/iatoolkit/templates/_company_header.html
|
|
207
208
|
src/iatoolkit/templates/_login_widget.html
|
|
@@ -217,6 +218,7 @@ src/iatoolkit/templates/home_hosted_default.html
|
|
|
217
218
|
src/iatoolkit/templates/login_global.html
|
|
218
219
|
src/iatoolkit/templates/onboarding_shell.html
|
|
219
220
|
src/iatoolkit/templates/signup.html
|
|
221
|
+
src/iatoolkit/templates/wiki_page.html
|
|
220
222
|
src/iatoolkit/templates/memory/wiki_schema.md
|
|
221
223
|
src/iatoolkit/templates/pdf/base.html
|
|
222
224
|
src/iatoolkit/templates/pdf/letter.html
|
|
@@ -254,4 +256,5 @@ src/iatoolkit/views/static_page_view.py
|
|
|
254
256
|
src/iatoolkit/views/tool_api_view.py
|
|
255
257
|
src/iatoolkit/views/user_feedback_api_view.py
|
|
256
258
|
src/iatoolkit/views/users_api_view.py
|
|
257
|
-
src/iatoolkit/views/verify_user_view.py
|
|
259
|
+
src/iatoolkit/views/verify_user_view.py
|
|
260
|
+
src/iatoolkit/views/wiki_page_view.py
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/common/interfaces/memory_compilation_trigger.py
RENAMED
|
File without changes
|
|
File without changes
|
{iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/common/interfaces/signup_policy_resolver.py
RENAMED
|
File without changes
|
{iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/common/interfaces/web_search_provider.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/config/system_prompts/chat_state_rules.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/config/system_prompts/chat_user_profile.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/config/system_prompts/core_identity.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/config/system_prompts/email_output.prompt
RENAMED
|
File without changes
|
|
File without changes
|
{iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/config/system_prompts/format_styles.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/config/system_prompts/html_structures.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/config/system_prompts/links_documents.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/config/system_prompts/memory_usage.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/config/system_prompts/multimodal_basics.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/config/system_prompts/output_basics.prompt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/config/system_prompts/sql_casting.prompt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/config/system_prompts/sql_mysql_casting.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/config/system_prompts/sql_mysql_json.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/config/system_prompts/sql_redshift_basics.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/config/system_prompts/sql_redshift_types.prompt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/infra/connectors/file_connector_factory.py
RENAMED
|
File without changes
|
|
File without changes
|
{iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/infra/connectors/google_drive_connector.py
RENAMED
|
File without changes
|
{iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/infra/connectors/local_file_connector.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/infra/llm_providers/anthropic_adapter.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iatoolkit-2.62.1 → iatoolkit-2.63.0}/src/iatoolkit/infra/llm_providers/openrouter_adapter.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|