iatoolkit 2.25.0__tar.gz → 2.26.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.25.0/src/iatoolkit.egg-info → iatoolkit-2.26.0}/PKG-INFO +1 -1
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/__init__.py +1 -1
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/config/system_tools_pack.yaml +90 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/infra/connectors/file_connector.py +2 -2
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/infra/connectors/google_cloud_storage_connector.py +3 -2
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/infra/connectors/google_drive_connector.py +1 -1
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/infra/connectors/local_file_connector.py +1 -1
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/infra/connectors/s3_connector.py +46 -14
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/locales/en.yaml +84 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/locales/es.yaml +84 -0
- iatoolkit-2.26.0/src/iatoolkit/repositories/knowledge_wiki_repo.py +226 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/repositories/models.py +123 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/embedding_service.py +100 -9
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/llm_client_service.py +148 -15
- iatoolkit-2.26.0/src/iatoolkit/services/markdown_wiki_service.py +328 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/memory_wiki_service.py +16 -90
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/query_service.py +1 -1
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/storage_service.py +51 -0
- iatoolkit-2.26.0/src/iatoolkit/services/tenant_knowledge_wiki_service.py +815 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/tool_service.py +64 -1
- {iatoolkit-2.25.0 → iatoolkit-2.26.0/src/iatoolkit.egg-info}/PKG-INFO +1 -1
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit.egg-info/SOURCES.txt +3 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/LICENSE +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/LICENSE_COMMUNITY.md +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/pyproject.toml +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/readme.md +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/requirements.txt +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/setup.cfg +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/base_company.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/cli_commands.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/common/__init__.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/common/exceptions.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/common/interfaces/__init__.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/common/interfaces/asset_storage.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/common/interfaces/database_provider.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/common/interfaces/memory_compilation_trigger.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/common/interfaces/memory_lint_trigger.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/common/interfaces/secret_provider.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/common/interfaces/signup_policy_resolver.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/common/interfaces/web_search_provider.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/common/model_registry.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/common/routes.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/common/secret_resolver.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/common/session_manager.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/common/util.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/company_registry.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/config/__init__.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/config/llm_capabilities.yaml +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/config/system_prompts/channel_business_identity.prompt +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/config/system_prompts/channel_conversation_continuity.prompt +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/config/system_prompts/channel_response_style.prompt +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/config/system_prompts/chat_state_rules.prompt +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/config/system_prompts/chat_user_profile.prompt +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/config/system_prompts/core_identity.prompt +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/config/system_prompts/email_output.prompt +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/config/system_prompts/file_download_output.prompt +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/config/system_prompts/format_styles.prompt +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/config/system_prompts/html_structures.prompt +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/config/system_prompts/links_documents.prompt +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/config/system_prompts/memory_usage.prompt +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/config/system_prompts/multimodal_basics.prompt +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/config/system_prompts/output_basics.prompt +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/config/system_prompts/presentation_formatting.prompt +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/config/system_prompts/query_main.prompt +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/config/system_prompts/sql_aggregation_scope.prompt +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/config/system_prompts/sql_casting.prompt +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/config/system_prompts/sql_core.prompt +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/config/system_prompts/sql_jsonb.prompt +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/config/system_prompts/sql_mysql_casting.prompt +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/config/system_prompts/sql_mysql_json.prompt +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/config/system_prompts/sql_redshift_basics.prompt +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/config/system_prompts/sql_redshift_types.prompt +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/config/system_prompts/sql_rules.prompt +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/config/system_prompts/tool_html_passthrough.prompt +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/config/system_prompts_pack.yaml +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/core.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/infra/__init__.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/infra/brevo_mail_app.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/infra/call_service.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/infra/connectors/__init__.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/infra/connectors/file_connector_factory.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/infra/google_auth_client.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/infra/google_chat_app.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/infra/inference_embeddings_client.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/infra/inference_handler.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/infra/jina_embeddings_client.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/infra/llm_gateway_resolver.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/infra/llm_providers/__init__.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/infra/llm_providers/anthropic_adapter.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/infra/llm_providers/deepseek_adapter.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/infra/llm_providers/gemini_adapter.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/infra/llm_providers/openai_adapter.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/infra/llm_providers/openai_compatible_chat_adapter.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/infra/llm_providers/openrouter_adapter.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/infra/llm_proxy.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/infra/llm_response.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/infra/redis_session_manager.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/repositories/__init__.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/repositories/api_key_repo.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/repositories/database_manager.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/repositories/document_repo.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/repositories/env_secret_provider.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/repositories/filesystem_asset_repository.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/repositories/llm_query_repo.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/repositories/mcp_token_repo.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/repositories/memory_repo.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/repositories/profile_repo.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/repositories/prompt_resource_repo.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/repositories/sql_dataset_repo.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/repositories/sql_source_repo.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/repositories/vs_repo.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/runtime_logging.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/__init__.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/api_key_service.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/attachment_policy_service.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/auth_service.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/benchmark_service.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/branding_service.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/company_context_service.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/configuration_service.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/context_builder_service.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/dispatcher_service.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/excel_service.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/file_processor_service.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/history_manager_service.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/http_tool_service.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/i18n_service.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/inference_service.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/jwt_service.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/knowledge_base_service.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/language_service.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/license_service.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/mail_service.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/mcp_token_service.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/memory_compiler_service.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/memory_lint_service.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/memory_lookup_policy_service.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/memory_service.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/noop_memory_compilation_trigger.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/noop_memory_lint_trigger.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/parsers/__init__.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/parsers/contracts.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/parsers/image_normalizer.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/parsers/parsing_service.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/parsers/pdf_ocr_detection.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/parsers/provider_factory.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/parsers/provider_resolver.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/parsers/providers/__init__.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/parsers/providers/basic_provider.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/parsers/providers/docling_provider.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/parsers/validator.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/pdf_service.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/profile_service.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/prompt_resource_service.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/prompt_service.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/signup_policy_resolver.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/sql_dataset_service.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/sql_service.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/sql_source_service.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/structured_output_service.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/system_prompt_catalog.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/system_tools.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/telemetry_service.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/tool_output_contract.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/user_feedback_service.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/user_session_context_service.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/visual_kb_service.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/visual_tool_service.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/warmup_service.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/web_search/__init__.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/web_search/provider_factory.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/web_search/providers/__init__.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/web_search/providers/brave_provider.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/services/web_search_service.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/static/images/fernando.jpeg +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/static/images/iatoolkit_core.png +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/static/images/iatoolkit_logo.png +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/static/js/chat_feedback_button.js +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/static/js/chat_filepond.js +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/static/js/chat_help_content.js +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/static/js/chat_history_button.js +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/static/js/chat_logout_button.js +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/static/js/chat_main.js +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/static/js/chat_memory_button.js +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/static/js/chat_model_selector.js +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/static/js/chat_onboarding_button.js +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/static/js/chat_prompt_manager.js +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/static/js/chat_reload_button.js +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/static/styles/chat_iatoolkit.css +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/static/styles/chat_modal.css +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/static/styles/chat_public.css +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/static/styles/documents.css +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/static/styles/landing_page.css +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/static/styles/llm_output.css +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/static/styles/onboarding.css +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/templates/_company_header.html +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/templates/_login_widget.html +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/templates/account.html +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/templates/base.html +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/templates/change_password.html +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/templates/chat.html +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/templates/chat_memory_modal.html +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/templates/chat_modals.html +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/templates/error.html +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/templates/forgot_password.html +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/templates/home_hosted_default.html +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/templates/memory/wiki_schema.md +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/templates/onboarding_shell.html +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/templates/pdf/base.html +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/templates/pdf/letter.html +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/templates/pdf/report.html +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/templates/pdf/simple.html +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/templates/signup.html +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/views/__init__.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/views/account_view.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/views/api_key_api_view.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/views/base_login_view.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/views/categories_api_view.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/views/change_password_view.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/views/chat_context_preview_api_view.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/views/chat_view.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/views/configuration_api_view.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/views/connectors_api_view.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/views/embedding_api_view.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/views/forgot_password_view.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/views/help_content_api_view.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/views/history_api_view.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/views/home_view.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/views/init_context_api_view.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/views/llmquery_api_view.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/views/load_document_api_view.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/views/login_view.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/views/logout_api_view.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/views/memory_api_view.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/views/profile_api_view.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/views/prompt_api_view.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/views/prompt_context_preview_api_view.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/views/prompt_resource_api_view.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/views/rag_api_view.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/views/root_redirect_view.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/views/signup_view.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/views/static_page_view.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/views/tool_api_view.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/views/user_feedback_api_view.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/views/users_api_view.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/views/verify_user_view.py +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit.egg-info/dependency_links.txt +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit.egg-info/requires.txt +0 -0
- {iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit.egg-info/top_level.txt +0 -0
|
@@ -276,6 +276,96 @@ tools:
|
|
|
276
276
|
description: "Opcional en la práctica. Usa null cuando no necesites filtrar por metadata. No inventes filtros ni envíes [] por defecto. Ejemplo: [{'key':'doc.type','value':'invoice'},{'key':'chunk.source_type','value':'table'}]."
|
|
277
277
|
required:
|
|
278
278
|
- query
|
|
279
|
+
- function_name: iat_wiki_search
|
|
280
|
+
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.
|
|
281
|
+
routing:
|
|
282
|
+
force_include_capability: has_knowledge_wikis
|
|
283
|
+
routing_profile:
|
|
284
|
+
tags:
|
|
285
|
+
- knowledge_wiki
|
|
286
|
+
- company_knowledge
|
|
287
|
+
- tenant_context
|
|
288
|
+
- playbook
|
|
289
|
+
- policy
|
|
290
|
+
- process
|
|
291
|
+
- runbook
|
|
292
|
+
- onboarding
|
|
293
|
+
- wiki
|
|
294
|
+
intents:
|
|
295
|
+
- Search curated company wiki pages when direct lookup is faster than browsing the root index.
|
|
296
|
+
- Find the relevant company wiki page after the user asks about internal procedures, policies, or runbooks.
|
|
297
|
+
- Narrow down which exact page to open with iat_wiki_get_page.
|
|
298
|
+
examples:
|
|
299
|
+
- iat_wiki_search(query="politica de descuentos enterprise", wiki_key="sales", limit=5)
|
|
300
|
+
- iat_wiki_search(query="como escalar incidentes sev1", wiki_key="ops", limit=3)
|
|
301
|
+
- iat_wiki_search(query="onboarding de nuevos ejecutivos", limit=5)
|
|
302
|
+
cost:
|
|
303
|
+
penalty: 0.09
|
|
304
|
+
latency_class: low
|
|
305
|
+
expensive: false
|
|
306
|
+
parameters:
|
|
307
|
+
type: object
|
|
308
|
+
properties:
|
|
309
|
+
query:
|
|
310
|
+
type: string
|
|
311
|
+
description: Consulta en lenguaje natural sobre políticas, playbooks, procesos, runbooks o conocimiento curado publicado en las wikis del tenant.
|
|
312
|
+
wiki_key:
|
|
313
|
+
anyOf:
|
|
314
|
+
- type: string
|
|
315
|
+
- type: "null"
|
|
316
|
+
description: Clave estable de la wiki publicada, por ejemplo `sales`, `ops` o `hr`. Debe coincidir con el `wiki_key` expuesto por el catálogo/resource. Usa null para buscar en todas las wikis publicadas disponibles.
|
|
317
|
+
limit:
|
|
318
|
+
type: integer
|
|
319
|
+
description: Cantidad máxima de páginas candidatas a recuperar antes de elegir una para leer completa.
|
|
320
|
+
minimum: 1
|
|
321
|
+
maximum: 25
|
|
322
|
+
required:
|
|
323
|
+
- query
|
|
324
|
+
- limit
|
|
325
|
+
- function_name: iat_wiki_get_page
|
|
326
|
+
description: |-
|
|
327
|
+
Wiki entrypoint: llama `iat_wiki_get_page` con `path="/"` para cargar el índice raíz de una wiki de conocimiento publicada del tenant.
|
|
328
|
+
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`.
|
|
329
|
+
`wiki_key` identifica la wiki publicada, por ejemplo `sales`, `ops` o `hr`. 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.
|
|
330
|
+
routing:
|
|
331
|
+
force_include_capability: has_knowledge_wikis
|
|
332
|
+
routing_profile:
|
|
333
|
+
tags:
|
|
334
|
+
- knowledge_wiki
|
|
335
|
+
- company_knowledge
|
|
336
|
+
- tenant_context
|
|
337
|
+
- page
|
|
338
|
+
- markdown
|
|
339
|
+
- wiki
|
|
340
|
+
- entrypoint
|
|
341
|
+
- index
|
|
342
|
+
- root
|
|
343
|
+
- internal_docs
|
|
344
|
+
intents:
|
|
345
|
+
- Load the root index of a tenant knowledge wiki with path="/".
|
|
346
|
+
- Open a published tenant wiki page by exact path or slug.
|
|
347
|
+
- Read the full markdown content of a company knowledge page before answering.
|
|
348
|
+
- Follow links from the root index or another wiki page to retrieve the exact page content.
|
|
349
|
+
examples:
|
|
350
|
+
- iat_wiki_get_page(wiki_key="sales", path="/")
|
|
351
|
+
- iat_wiki_get_page(wiki_key="sales", path="pricing.md")
|
|
352
|
+
- iat_wiki_get_page(wiki_key="ops", path="incident-response.md")
|
|
353
|
+
cost:
|
|
354
|
+
penalty: 0.01
|
|
355
|
+
latency_class: low
|
|
356
|
+
expensive: false
|
|
357
|
+
parameters:
|
|
358
|
+
type: object
|
|
359
|
+
properties:
|
|
360
|
+
wiki_key:
|
|
361
|
+
type: string
|
|
362
|
+
description: Clave estable de la wiki publicada, por ejemplo `sales`, `ops` o `hr`.
|
|
363
|
+
path:
|
|
364
|
+
type: string
|
|
365
|
+
description: Usa `"/"` para leer el índice raíz de la wiki. En cualquier otro caso, envía el path o slug exacto de la página dentro de esa wiki, idealmente uno listado en el índice raíz o devuelto por `iat_wiki_search`.
|
|
366
|
+
required:
|
|
367
|
+
- wiki_key
|
|
368
|
+
- path
|
|
279
369
|
- function_name: iat_memory_search
|
|
280
370
|
description: Busca páginas relevantes dentro de la Memoria personal del usuario y retorna contexto compilado. Incluye la señal `has_native_files` cuando una memoria tiene archivos fuente que pueden adjuntarse nativamente al modelo. Debe usarse antes de responder preguntas sobre cosas guardadas, notas previas, memoria del usuario, continuidad entre sesiones o "lo que hablamos/guardé antes".
|
|
281
371
|
routing:
|
|
@@ -9,7 +9,7 @@ from typing import List, Optional
|
|
|
9
9
|
|
|
10
10
|
class FileConnector(ABC):
|
|
11
11
|
@abstractmethod
|
|
12
|
-
def list_files(self) -> List[str]:
|
|
12
|
+
def list_files(self, prefix: str | None = None) -> List[str]:
|
|
13
13
|
pass
|
|
14
14
|
|
|
15
15
|
@abstractmethod
|
|
@@ -25,4 +25,4 @@ class FileConnector(ABC):
|
|
|
25
25
|
pass
|
|
26
26
|
|
|
27
27
|
def generate_presigned_url(self, file_path: str, expiration: int = 3600) -> Optional[str]:
|
|
28
|
-
return None
|
|
28
|
+
return None
|
|
@@ -36,11 +36,12 @@ class GoogleCloudStorageConnector(FileConnector):
|
|
|
36
36
|
client = storage.Client.from_service_account_json(self.service_account_path)
|
|
37
37
|
return client
|
|
38
38
|
|
|
39
|
-
def list_files(self) -> List[dict]:
|
|
39
|
+
def list_files(self, prefix: str | None = None) -> List[dict]:
|
|
40
40
|
"""
|
|
41
41
|
Lista todos los archivos en el bucket de GCS como diccionarios con claves 'path', 'name' y 'metadata'.
|
|
42
42
|
"""
|
|
43
|
-
|
|
43
|
+
normalized_prefix = str(prefix or "").strip().strip("/") or None
|
|
44
|
+
blobs = self.bucket.list_blobs(prefix=normalized_prefix)
|
|
44
45
|
|
|
45
46
|
return [
|
|
46
47
|
{
|
{iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/infra/connectors/google_drive_connector.py
RENAMED
|
@@ -52,7 +52,7 @@ class GoogleDriveConnector(FileConnector):
|
|
|
52
52
|
)
|
|
53
53
|
return service
|
|
54
54
|
|
|
55
|
-
def list_files(self) -> List[dict]:
|
|
55
|
+
def list_files(self, prefix: str | None = None) -> List[dict]:
|
|
56
56
|
"""
|
|
57
57
|
Estándar: Lista todos los archivos como diccionarios con claves 'path', 'name' y 'metadata'.
|
|
58
58
|
"""
|
{iatoolkit-2.25.0 → iatoolkit-2.26.0}/src/iatoolkit/infra/connectors/local_file_connector.py
RENAMED
|
@@ -14,7 +14,7 @@ class LocalFileConnector(FileConnector):
|
|
|
14
14
|
local_root = os.getenv("ROOT_DIR_LOCAL_FILES", '')
|
|
15
15
|
self.directory = os.path.join(local_root, directory)
|
|
16
16
|
|
|
17
|
-
def list_files(self) -> List[dict]:
|
|
17
|
+
def list_files(self, prefix: str | None = None) -> List[dict]:
|
|
18
18
|
"""
|
|
19
19
|
Estándar: Lista todos los archivos como diccionarios con claves 'path', 'name' y 'metadata'.
|
|
20
20
|
"""
|
|
@@ -15,21 +15,32 @@ class S3Connector(FileConnector):
|
|
|
15
15
|
self.folder = folder
|
|
16
16
|
self.s3 = boto3.client('s3', **auth)
|
|
17
17
|
|
|
18
|
-
def list_files(self) -> List[dict]:
|
|
18
|
+
def list_files(self, prefix: str | None = None) -> List[dict]:
|
|
19
19
|
# List only real S3 objects representing files, excluding folder placeholders.
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
20
|
+
list_prefix = self._resolve_list_prefix(prefix)
|
|
21
|
+
files = []
|
|
22
|
+
continuation_token = None
|
|
23
|
+
|
|
24
|
+
while True:
|
|
25
|
+
params = {
|
|
26
|
+
"Bucket": self.bucket,
|
|
27
|
+
"Prefix": list_prefix,
|
|
28
|
+
}
|
|
29
|
+
if continuation_token:
|
|
30
|
+
params["ContinuationToken"] = continuation_token
|
|
31
|
+
|
|
32
|
+
response = self.s3.list_objects_v2(**params)
|
|
33
|
+
files.extend(
|
|
34
|
+
obj for obj in response.get('Contents', [])
|
|
35
|
+
if self._is_file_key(obj.get('Key'))
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
if not response.get("IsTruncated"):
|
|
39
|
+
break
|
|
40
|
+
|
|
41
|
+
continuation_token = response.get("NextContinuationToken")
|
|
42
|
+
if not continuation_token:
|
|
43
|
+
break
|
|
33
44
|
|
|
34
45
|
return [
|
|
35
46
|
{
|
|
@@ -44,6 +55,27 @@ class S3Connector(FileConnector):
|
|
|
44
55
|
for obj in files
|
|
45
56
|
]
|
|
46
57
|
|
|
58
|
+
def _resolve_list_prefix(self, requested_prefix: str | None) -> str:
|
|
59
|
+
base_prefix = "/".join(p.strip("/") for p in [self.prefix, self.folder] if p)
|
|
60
|
+
normalized_requested = str(requested_prefix or "").strip().strip("/")
|
|
61
|
+
|
|
62
|
+
if normalized_requested:
|
|
63
|
+
if base_prefix and (
|
|
64
|
+
normalized_requested == base_prefix
|
|
65
|
+
or normalized_requested.startswith(f"{base_prefix}/")
|
|
66
|
+
):
|
|
67
|
+
effective_prefix = normalized_requested
|
|
68
|
+
elif base_prefix:
|
|
69
|
+
effective_prefix = "/".join([base_prefix, normalized_requested])
|
|
70
|
+
else:
|
|
71
|
+
effective_prefix = normalized_requested
|
|
72
|
+
else:
|
|
73
|
+
effective_prefix = base_prefix
|
|
74
|
+
|
|
75
|
+
if effective_prefix:
|
|
76
|
+
return f"{effective_prefix.rstrip('/')}/"
|
|
77
|
+
return ""
|
|
78
|
+
|
|
47
79
|
def _is_file_key(self, key: str | None) -> bool:
|
|
48
80
|
return isinstance(key, str) and key != "" and not key.endswith("/")
|
|
49
81
|
|
|
@@ -621,6 +621,90 @@ ui:
|
|
|
621
621
|
description: "Description"
|
|
622
622
|
skills: "Skills"
|
|
623
623
|
|
|
624
|
+
knowledge_wikis:
|
|
625
|
+
menu_label: "Wikis"
|
|
626
|
+
title: "Knowledge wikis"
|
|
627
|
+
wikis: "Wikis"
|
|
628
|
+
new_wiki: "New wiki"
|
|
629
|
+
create_wiki: "Create wiki"
|
|
630
|
+
select_wiki: "Select a wiki"
|
|
631
|
+
workspace_placeholder: "Choose a wiki from the list or create a new one."
|
|
632
|
+
configure: "Configuration"
|
|
633
|
+
key: "Key"
|
|
634
|
+
name: "Name"
|
|
635
|
+
root: "Storage root"
|
|
636
|
+
edit_root: "Edit storage root"
|
|
637
|
+
lock_root: "Lock storage root editing"
|
|
638
|
+
status: "Status"
|
|
639
|
+
status_published: "Published"
|
|
640
|
+
status_draft: "Draft"
|
|
641
|
+
status_archived: "Archived"
|
|
642
|
+
description: "Description"
|
|
643
|
+
pages: "Pages"
|
|
644
|
+
index: "Index"
|
|
645
|
+
mcp: "MCP"
|
|
646
|
+
mcp_status: "MCP publication"
|
|
647
|
+
mcp_status_published: "Published"
|
|
648
|
+
mcp_status_unpublished: "Not published"
|
|
649
|
+
mcp_status_published_help: "This wiki index is already exposed as a resource in the tenant MCP catalog."
|
|
650
|
+
mcp_status_unpublished_help: "This wiki does not yet expose its index as an MCP resource."
|
|
651
|
+
mcp_wiki_key: "MCP wiki_key"
|
|
652
|
+
lint: "Validate"
|
|
653
|
+
validate: "Validate"
|
|
654
|
+
validation_results: "Validation results"
|
|
655
|
+
sync: "Sync"
|
|
656
|
+
issues: "issues"
|
|
657
|
+
index_resource: "Resource URI"
|
|
658
|
+
mcp_publish_help: "This action publishes only this wiki's markdown index resource into MCP."
|
|
659
|
+
mcp_tools_help: "The tools iat_wiki_search and iat_wiki_get_page are enabled separately from the MCP manager."
|
|
660
|
+
mcp_step_publish_title: "1. Publish resource"
|
|
661
|
+
mcp_step_publish_text: "The Publish to MCP button adds or updates `iat://knowledge-wikis/{wiki_key}/index` in the tenant MCP resources."
|
|
662
|
+
mcp_step_tools_title: "2. Enable tools"
|
|
663
|
+
mcp_step_tools_text: "If you want tool-based search or page reads, enable `iat_wiki_search` and `iat_wiki_get_page` from the MCP manager."
|
|
664
|
+
mcp_step_usage_title: "3. Use wiki_key and path"
|
|
665
|
+
mcp_step_usage_text: "MCP clients can read this index first to discover pages, then use `wiki_key` and `path` with the tools."
|
|
666
|
+
copy_uri: "Copy URI"
|
|
667
|
+
publish_mcp: "Publish to MCP"
|
|
668
|
+
republish_mcp: "Update publication"
|
|
669
|
+
open_mcp: "Open MCP manager"
|
|
670
|
+
filter_pages: "Filter pages"
|
|
671
|
+
loading: "Loading..."
|
|
672
|
+
empty: "No wikis configured."
|
|
673
|
+
no_pages: "No pages."
|
|
674
|
+
no_issues: "No issues found."
|
|
675
|
+
lint_summary_clean: "Checked {count} indexed pages. No issues found."
|
|
676
|
+
lint_summary_issues: "Checked {count} indexed pages. Found {issues} issues."
|
|
677
|
+
missing_key: "Wiki key is required."
|
|
678
|
+
save_ok: "Wiki saved."
|
|
679
|
+
save_error: "Could not save wiki."
|
|
680
|
+
delete_confirmation: "Delete wiki"
|
|
681
|
+
delete_message: "This removes the wiki configuration, generated index, and indexed pages. Source markdown files in storage are not deleted."
|
|
682
|
+
delete_ok: "Wiki deleted."
|
|
683
|
+
delete_error: "Could not delete wiki."
|
|
684
|
+
sync_ok: "Sync completed."
|
|
685
|
+
sync_partial_ok: "Sync completed with errors."
|
|
686
|
+
sync_error: "Could not sync wiki."
|
|
687
|
+
sync_running: "Syncing..."
|
|
688
|
+
sync_results: "Sync result"
|
|
689
|
+
sync_status_idle: "Not run"
|
|
690
|
+
sync_status_success: "Completed"
|
|
691
|
+
sync_status_partial: "Completed with errors"
|
|
692
|
+
sync_status_error: "Failed"
|
|
693
|
+
sync_seen: "Files seen"
|
|
694
|
+
sync_indexed: "Pages indexed"
|
|
695
|
+
sync_failed: "Failed"
|
|
696
|
+
sync_finished_at: "Finished"
|
|
697
|
+
sync_first_error: "First error"
|
|
698
|
+
sync_summary_success: "Reviewed {seen} markdown files and indexed {indexed} pages."
|
|
699
|
+
sync_summary_partial: "Reviewed {seen} markdown files, indexed {indexed} pages, and found {failed} failures."
|
|
700
|
+
sync_summary_error: "Sync failed after reviewing {seen} markdown files. {failed} files could not be indexed."
|
|
701
|
+
sync_summary_empty: "No markdown files were found under this storage root."
|
|
702
|
+
lint_ok: "Validation completed."
|
|
703
|
+
lint_error: "Could not validate wiki."
|
|
704
|
+
mcp_ok: "Wiki published to MCP."
|
|
705
|
+
mcp_error: "Could not publish to MCP."
|
|
706
|
+
copy_ok: "URI copied."
|
|
707
|
+
|
|
624
708
|
skills:
|
|
625
709
|
title: "Skills"
|
|
626
710
|
search_placeholder: "Search skills"
|
|
@@ -621,6 +621,90 @@ ui:
|
|
|
621
621
|
description: "Descripción"
|
|
622
622
|
skills: "Skills"
|
|
623
623
|
|
|
624
|
+
knowledge_wikis:
|
|
625
|
+
menu_label: "Wikis"
|
|
626
|
+
title: "Wikis de conocimiento"
|
|
627
|
+
wikis: "Wikis"
|
|
628
|
+
new_wiki: "Nueva wiki"
|
|
629
|
+
create_wiki: "Crear wiki"
|
|
630
|
+
select_wiki: "Selecciona una wiki"
|
|
631
|
+
workspace_placeholder: "Elige una wiki del listado o crea una nueva."
|
|
632
|
+
configure: "Configuración"
|
|
633
|
+
key: "Clave"
|
|
634
|
+
name: "Nombre"
|
|
635
|
+
root: "Raíz storage"
|
|
636
|
+
edit_root: "Editar raíz storage"
|
|
637
|
+
lock_root: "Bloquear edición de raíz storage"
|
|
638
|
+
status: "Estado"
|
|
639
|
+
status_published: "Publicada"
|
|
640
|
+
status_draft: "Borrador"
|
|
641
|
+
status_archived: "Archivada"
|
|
642
|
+
description: "Descripción"
|
|
643
|
+
pages: "Páginas"
|
|
644
|
+
index: "Índice"
|
|
645
|
+
mcp: "MCP"
|
|
646
|
+
mcp_status: "Publicación MCP"
|
|
647
|
+
mcp_status_published: "Publicado"
|
|
648
|
+
mcp_status_unpublished: "No publicado"
|
|
649
|
+
mcp_status_published_help: "El índice de esta wiki ya está expuesto como resource en el catálogo MCP del tenant."
|
|
650
|
+
mcp_status_unpublished_help: "Esta wiki todavía no expone su índice como resource MCP."
|
|
651
|
+
mcp_wiki_key: "wiki_key MCP"
|
|
652
|
+
lint: "Validar"
|
|
653
|
+
validate: "Validar"
|
|
654
|
+
validation_results: "Resultados de validación"
|
|
655
|
+
sync: "Sincronizar"
|
|
656
|
+
issues: "hallazgos"
|
|
657
|
+
index_resource: "URI del resource"
|
|
658
|
+
mcp_publish_help: "Esta acción publica en MCP solo el resource del índice markdown de esta wiki."
|
|
659
|
+
mcp_tools_help: "Las tools iat_wiki_search e iat_wiki_get_page se habilitan por separado desde el gestor MCP."
|
|
660
|
+
mcp_step_publish_title: "1. Publicar resource"
|
|
661
|
+
mcp_step_publish_text: "El botón Publicar en MCP agrega o actualiza `iat://knowledge-wikis/{wiki_key}/index` dentro de los resources MCP del tenant."
|
|
662
|
+
mcp_step_tools_title: "2. Habilitar tools"
|
|
663
|
+
mcp_step_tools_text: "Si quieres búsqueda o lectura por tool, habilita `iat_wiki_search` e `iat_wiki_get_page` desde el gestor MCP."
|
|
664
|
+
mcp_step_usage_title: "3. Usar wiki_key y path"
|
|
665
|
+
mcp_step_usage_text: "Los clientes MCP pueden leer primero este índice para descubrir páginas y luego usar `wiki_key` y `path` en las tools."
|
|
666
|
+
copy_uri: "Copiar URI"
|
|
667
|
+
publish_mcp: "Publicar en MCP"
|
|
668
|
+
republish_mcp: "Actualizar publicación"
|
|
669
|
+
open_mcp: "Abrir gestor MCP"
|
|
670
|
+
filter_pages: "Filtrar páginas"
|
|
671
|
+
loading: "Cargando..."
|
|
672
|
+
empty: "No hay wikis configuradas."
|
|
673
|
+
no_pages: "No hay páginas."
|
|
674
|
+
no_issues: "Sin hallazgos."
|
|
675
|
+
lint_summary_clean: "Se revisaron {count} páginas indexadas. No se encontraron hallazgos."
|
|
676
|
+
lint_summary_issues: "Se revisaron {count} páginas indexadas. Se encontraron {issues} hallazgos."
|
|
677
|
+
missing_key: "Debes ingresar una key de wiki."
|
|
678
|
+
save_ok: "Wiki guardada."
|
|
679
|
+
save_error: "No se pudo guardar la wiki."
|
|
680
|
+
delete_confirmation: "Eliminar wiki"
|
|
681
|
+
delete_message: "Se borrará la configuración de la wiki, el índice generado y las páginas indexadas. Los archivos markdown fuente del storage no se borran."
|
|
682
|
+
delete_ok: "Wiki eliminada."
|
|
683
|
+
delete_error: "No se pudo eliminar la wiki."
|
|
684
|
+
sync_ok: "Sincronización completada."
|
|
685
|
+
sync_partial_ok: "Sincronización completada con errores."
|
|
686
|
+
sync_error: "No se pudo sincronizar la wiki."
|
|
687
|
+
sync_running: "Sincronizando..."
|
|
688
|
+
sync_results: "Resultado de sincronización"
|
|
689
|
+
sync_status_idle: "Sin ejecutar"
|
|
690
|
+
sync_status_success: "Completada"
|
|
691
|
+
sync_status_partial: "Con errores"
|
|
692
|
+
sync_status_error: "Falló"
|
|
693
|
+
sync_seen: "Archivos vistos"
|
|
694
|
+
sync_indexed: "Páginas indexadas"
|
|
695
|
+
sync_failed: "Fallidas"
|
|
696
|
+
sync_finished_at: "Finalizó"
|
|
697
|
+
sync_first_error: "Primer error"
|
|
698
|
+
sync_summary_success: "Se revisaron {seen} archivos markdown y se indexaron {indexed} páginas."
|
|
699
|
+
sync_summary_partial: "Se revisaron {seen} archivos markdown, se indexaron {indexed} páginas y {failed} fallaron."
|
|
700
|
+
sync_summary_error: "La sincronización falló después de revisar {seen} archivos markdown. {failed} archivos no pudieron indexarse."
|
|
701
|
+
sync_summary_empty: "No se encontraron archivos markdown bajo esta raíz de storage."
|
|
702
|
+
lint_ok: "Validación completada."
|
|
703
|
+
lint_error: "No se pudo validar la wiki."
|
|
704
|
+
mcp_ok: "Wiki publicada en MCP."
|
|
705
|
+
mcp_error: "No se pudo publicar en MCP."
|
|
706
|
+
copy_ok: "URI copiada."
|
|
707
|
+
|
|
624
708
|
skills:
|
|
625
709
|
title: "Skills"
|
|
626
710
|
search_placeholder: "Buscar skills"
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
# Copyright (c) 2024 Fernando Libedinsky
|
|
2
|
+
# Product: IAToolkit
|
|
3
|
+
#
|
|
4
|
+
# IAToolkit is open source software.
|
|
5
|
+
|
|
6
|
+
from __future__ import annotations
|
|
7
|
+
|
|
8
|
+
from datetime import datetime
|
|
9
|
+
|
|
10
|
+
from injector import inject
|
|
11
|
+
|
|
12
|
+
from iatoolkit.repositories.database_manager import DatabaseManager
|
|
13
|
+
from iatoolkit.repositories.models import (
|
|
14
|
+
KnowledgeWiki,
|
|
15
|
+
KnowledgeWikiPage,
|
|
16
|
+
KnowledgeWikiPageStatus,
|
|
17
|
+
KnowledgeWikiStatus,
|
|
18
|
+
KnowledgeWikiSyncRun,
|
|
19
|
+
KnowledgeWikiSyncStatus,
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class KnowledgeWikiRepo:
|
|
24
|
+
@inject
|
|
25
|
+
def __init__(self, db_manager: DatabaseManager):
|
|
26
|
+
self.session = db_manager.get_session()
|
|
27
|
+
|
|
28
|
+
def commit(self):
|
|
29
|
+
self.session.commit()
|
|
30
|
+
|
|
31
|
+
def rollback(self):
|
|
32
|
+
self.session.rollback()
|
|
33
|
+
|
|
34
|
+
def get_wiki_by_key(self, company_id: int, wiki_key: str) -> KnowledgeWiki | None:
|
|
35
|
+
if not company_id or not wiki_key:
|
|
36
|
+
return None
|
|
37
|
+
return (
|
|
38
|
+
self.session.query(KnowledgeWiki)
|
|
39
|
+
.filter_by(company_id=company_id, wiki_key=wiki_key)
|
|
40
|
+
.first()
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
def get_wiki(self, company_id: int, wiki_id: int) -> KnowledgeWiki | None:
|
|
44
|
+
if not company_id or not wiki_id:
|
|
45
|
+
return None
|
|
46
|
+
return (
|
|
47
|
+
self.session.query(KnowledgeWiki)
|
|
48
|
+
.filter_by(company_id=company_id, id=wiki_id)
|
|
49
|
+
.first()
|
|
50
|
+
)
|
|
51
|
+
|
|
52
|
+
def list_wikis(self, company_id: int, *, include_archived: bool = False) -> list[KnowledgeWiki]:
|
|
53
|
+
if not company_id:
|
|
54
|
+
return []
|
|
55
|
+
query = self.session.query(KnowledgeWiki).filter_by(company_id=company_id)
|
|
56
|
+
if not include_archived:
|
|
57
|
+
query = query.filter(KnowledgeWiki.status != KnowledgeWikiStatus.ARCHIVED)
|
|
58
|
+
return query.order_by(KnowledgeWiki.name.asc(), KnowledgeWiki.id.asc()).all()
|
|
59
|
+
|
|
60
|
+
def create_or_update_wiki(
|
|
61
|
+
self,
|
|
62
|
+
*,
|
|
63
|
+
company_id: int,
|
|
64
|
+
wiki_key: str,
|
|
65
|
+
name: str,
|
|
66
|
+
root_storage_key: str,
|
|
67
|
+
description: str | None = None,
|
|
68
|
+
status: KnowledgeWikiStatus = KnowledgeWikiStatus.PUBLISHED,
|
|
69
|
+
settings: dict | None = None,
|
|
70
|
+
) -> KnowledgeWiki:
|
|
71
|
+
wiki = self.get_wiki_by_key(company_id, wiki_key)
|
|
72
|
+
if wiki:
|
|
73
|
+
wiki.name = name
|
|
74
|
+
wiki.description = description
|
|
75
|
+
wiki.root_storage_key = root_storage_key
|
|
76
|
+
wiki.status = status
|
|
77
|
+
wiki.settings = settings or {}
|
|
78
|
+
else:
|
|
79
|
+
wiki = KnowledgeWiki(
|
|
80
|
+
company_id=company_id,
|
|
81
|
+
wiki_key=wiki_key,
|
|
82
|
+
name=name,
|
|
83
|
+
description=description,
|
|
84
|
+
root_storage_key=root_storage_key,
|
|
85
|
+
status=status,
|
|
86
|
+
settings=settings or {},
|
|
87
|
+
)
|
|
88
|
+
self.session.add(wiki)
|
|
89
|
+
self.session.commit()
|
|
90
|
+
return wiki
|
|
91
|
+
|
|
92
|
+
def delete_wiki(self, company_id: int, wiki_key: str) -> KnowledgeWiki | None:
|
|
93
|
+
wiki = self.get_wiki_by_key(company_id, wiki_key)
|
|
94
|
+
if wiki is None:
|
|
95
|
+
return None
|
|
96
|
+
self.session.delete(wiki)
|
|
97
|
+
self.session.commit()
|
|
98
|
+
return wiki
|
|
99
|
+
|
|
100
|
+
def get_page_by_path(self, wiki_id: int, path: str) -> KnowledgeWikiPage | None:
|
|
101
|
+
if not wiki_id or not path:
|
|
102
|
+
return None
|
|
103
|
+
return (
|
|
104
|
+
self.session.query(KnowledgeWikiPage)
|
|
105
|
+
.filter_by(wiki_id=wiki_id, path=path)
|
|
106
|
+
.first()
|
|
107
|
+
)
|
|
108
|
+
|
|
109
|
+
def get_page_by_slug(self, wiki_id: int, slug: str) -> KnowledgeWikiPage | None:
|
|
110
|
+
if not wiki_id or not slug:
|
|
111
|
+
return None
|
|
112
|
+
return (
|
|
113
|
+
self.session.query(KnowledgeWikiPage)
|
|
114
|
+
.filter_by(wiki_id=wiki_id, slug=slug)
|
|
115
|
+
.first()
|
|
116
|
+
)
|
|
117
|
+
|
|
118
|
+
def list_pages(
|
|
119
|
+
self,
|
|
120
|
+
wiki_id: int,
|
|
121
|
+
*,
|
|
122
|
+
include_archived: bool = False,
|
|
123
|
+
limit: int = 500,
|
|
124
|
+
) -> list[KnowledgeWikiPage]:
|
|
125
|
+
if not wiki_id:
|
|
126
|
+
return []
|
|
127
|
+
query = self.session.query(KnowledgeWikiPage).filter_by(wiki_id=wiki_id)
|
|
128
|
+
if not include_archived:
|
|
129
|
+
query = query.filter(KnowledgeWikiPage.status != KnowledgeWikiPageStatus.ARCHIVED)
|
|
130
|
+
return (
|
|
131
|
+
query
|
|
132
|
+
.order_by(KnowledgeWikiPage.path.asc(), KnowledgeWikiPage.id.asc())
|
|
133
|
+
.limit(limit)
|
|
134
|
+
.all()
|
|
135
|
+
)
|
|
136
|
+
|
|
137
|
+
def create_or_update_page(
|
|
138
|
+
self,
|
|
139
|
+
*,
|
|
140
|
+
company_id: int,
|
|
141
|
+
wiki_id: int,
|
|
142
|
+
path: str,
|
|
143
|
+
slug: str,
|
|
144
|
+
title: str,
|
|
145
|
+
source_storage_key: str,
|
|
146
|
+
summary: str | None = None,
|
|
147
|
+
body_text: str | None = None,
|
|
148
|
+
status: KnowledgeWikiPageStatus = KnowledgeWikiPageStatus.PUBLISHED,
|
|
149
|
+
tags: list[str] | None = None,
|
|
150
|
+
owner: str | None = None,
|
|
151
|
+
source_meta: dict | None = None,
|
|
152
|
+
last_synced_at: datetime | None = None,
|
|
153
|
+
) -> KnowledgeWikiPage:
|
|
154
|
+
page = self.get_page_by_path(wiki_id, path)
|
|
155
|
+
if page is None:
|
|
156
|
+
page = self.get_page_by_slug(wiki_id, slug)
|
|
157
|
+
|
|
158
|
+
if page:
|
|
159
|
+
page.path = path
|
|
160
|
+
page.slug = slug
|
|
161
|
+
page.title = title
|
|
162
|
+
page.summary = summary
|
|
163
|
+
page.body_text = body_text
|
|
164
|
+
page.source_storage_key = source_storage_key
|
|
165
|
+
page.status = status
|
|
166
|
+
page.tags = tags or []
|
|
167
|
+
page.owner = owner
|
|
168
|
+
page.source_meta = source_meta or {}
|
|
169
|
+
page.last_synced_at = last_synced_at
|
|
170
|
+
else:
|
|
171
|
+
page = KnowledgeWikiPage(
|
|
172
|
+
company_id=company_id,
|
|
173
|
+
wiki_id=wiki_id,
|
|
174
|
+
path=path,
|
|
175
|
+
slug=slug,
|
|
176
|
+
title=title,
|
|
177
|
+
summary=summary,
|
|
178
|
+
body_text=body_text,
|
|
179
|
+
source_storage_key=source_storage_key,
|
|
180
|
+
status=status,
|
|
181
|
+
tags=tags or [],
|
|
182
|
+
owner=owner,
|
|
183
|
+
source_meta=source_meta or {},
|
|
184
|
+
last_synced_at=last_synced_at,
|
|
185
|
+
)
|
|
186
|
+
self.session.add(page)
|
|
187
|
+
self.session.commit()
|
|
188
|
+
return page
|
|
189
|
+
|
|
190
|
+
def archive_pages_not_in_paths(self, wiki_id: int, paths: set[str]) -> int:
|
|
191
|
+
if not wiki_id:
|
|
192
|
+
return 0
|
|
193
|
+
query = self.session.query(KnowledgeWikiPage).filter_by(wiki_id=wiki_id)
|
|
194
|
+
if paths:
|
|
195
|
+
query = query.filter(~KnowledgeWikiPage.path.in_(paths))
|
|
196
|
+
rows = query.all()
|
|
197
|
+
changed = 0
|
|
198
|
+
for page in rows:
|
|
199
|
+
if page.status != KnowledgeWikiPageStatus.ARCHIVED:
|
|
200
|
+
page.status = KnowledgeWikiPageStatus.ARCHIVED
|
|
201
|
+
changed += 1
|
|
202
|
+
if changed:
|
|
203
|
+
self.session.commit()
|
|
204
|
+
return changed
|
|
205
|
+
|
|
206
|
+
def create_sync_run(
|
|
207
|
+
self,
|
|
208
|
+
*,
|
|
209
|
+
company_id: int,
|
|
210
|
+
wiki_id: int,
|
|
211
|
+
metadata_json: dict | None = None,
|
|
212
|
+
) -> KnowledgeWikiSyncRun:
|
|
213
|
+
run = KnowledgeWikiSyncRun(
|
|
214
|
+
company_id=company_id,
|
|
215
|
+
wiki_id=wiki_id,
|
|
216
|
+
status=KnowledgeWikiSyncStatus.RUNNING,
|
|
217
|
+
metadata_json=metadata_json or {},
|
|
218
|
+
)
|
|
219
|
+
self.session.add(run)
|
|
220
|
+
self.session.commit()
|
|
221
|
+
return run
|
|
222
|
+
|
|
223
|
+
def save_sync_run(self, run: KnowledgeWikiSyncRun) -> KnowledgeWikiSyncRun:
|
|
224
|
+
self.session.add(run)
|
|
225
|
+
self.session.commit()
|
|
226
|
+
return run
|