iatoolkit 2.24.1__tar.gz → 2.25.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (249) hide show
  1. {iatoolkit-2.24.1/src/iatoolkit.egg-info → iatoolkit-2.25.1}/PKG-INFO +1 -1
  2. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/__init__.py +1 -1
  3. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/config/system_tools_pack.yaml +80 -0
  4. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/locales/en.yaml +44 -0
  5. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/locales/es.yaml +44 -0
  6. iatoolkit-2.25.1/src/iatoolkit/repositories/knowledge_wiki_repo.py +218 -0
  7. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/repositories/models.py +123 -0
  8. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/dispatcher_service.py +96 -1
  9. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/inference_service.py +1 -1
  10. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/llm_client_service.py +149 -15
  11. iatoolkit-2.25.1/src/iatoolkit/services/markdown_wiki_service.py +279 -0
  12. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/memory_wiki_service.py +16 -90
  13. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/query_service.py +1 -1
  14. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/storage_service.py +40 -0
  15. iatoolkit-2.25.1/src/iatoolkit/services/tenant_knowledge_wiki_service.py +661 -0
  16. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/tool_service.py +48 -1
  17. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/tool_api_view.py +4 -0
  18. {iatoolkit-2.24.1 → iatoolkit-2.25.1/src/iatoolkit.egg-info}/PKG-INFO +1 -1
  19. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit.egg-info/SOURCES.txt +3 -0
  20. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/LICENSE +0 -0
  21. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/LICENSE_COMMUNITY.md +0 -0
  22. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/pyproject.toml +0 -0
  23. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/readme.md +0 -0
  24. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/requirements.txt +0 -0
  25. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/setup.cfg +0 -0
  26. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/base_company.py +0 -0
  27. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/cli_commands.py +0 -0
  28. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/common/__init__.py +0 -0
  29. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/common/exceptions.py +0 -0
  30. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/common/interfaces/__init__.py +0 -0
  31. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/common/interfaces/asset_storage.py +0 -0
  32. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/common/interfaces/database_provider.py +0 -0
  33. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/common/interfaces/memory_compilation_trigger.py +0 -0
  34. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/common/interfaces/memory_lint_trigger.py +0 -0
  35. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/common/interfaces/secret_provider.py +0 -0
  36. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/common/interfaces/signup_policy_resolver.py +0 -0
  37. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/common/interfaces/web_search_provider.py +0 -0
  38. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/common/model_registry.py +0 -0
  39. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/common/routes.py +0 -0
  40. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/common/secret_resolver.py +0 -0
  41. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/common/session_manager.py +0 -0
  42. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/common/util.py +0 -0
  43. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/company_registry.py +0 -0
  44. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/config/__init__.py +0 -0
  45. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/config/llm_capabilities.yaml +0 -0
  46. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/config/system_prompts/channel_business_identity.prompt +0 -0
  47. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/config/system_prompts/channel_conversation_continuity.prompt +0 -0
  48. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/config/system_prompts/channel_response_style.prompt +0 -0
  49. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/config/system_prompts/chat_state_rules.prompt +0 -0
  50. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/config/system_prompts/chat_user_profile.prompt +0 -0
  51. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/config/system_prompts/core_identity.prompt +0 -0
  52. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/config/system_prompts/email_output.prompt +0 -0
  53. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/config/system_prompts/file_download_output.prompt +0 -0
  54. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/config/system_prompts/format_styles.prompt +0 -0
  55. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/config/system_prompts/html_structures.prompt +0 -0
  56. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/config/system_prompts/links_documents.prompt +0 -0
  57. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/config/system_prompts/memory_usage.prompt +0 -0
  58. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/config/system_prompts/multimodal_basics.prompt +0 -0
  59. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/config/system_prompts/output_basics.prompt +0 -0
  60. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/config/system_prompts/presentation_formatting.prompt +0 -0
  61. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/config/system_prompts/query_main.prompt +0 -0
  62. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/config/system_prompts/sql_aggregation_scope.prompt +0 -0
  63. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/config/system_prompts/sql_casting.prompt +0 -0
  64. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/config/system_prompts/sql_core.prompt +0 -0
  65. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/config/system_prompts/sql_jsonb.prompt +0 -0
  66. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/config/system_prompts/sql_mysql_casting.prompt +0 -0
  67. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/config/system_prompts/sql_mysql_json.prompt +0 -0
  68. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/config/system_prompts/sql_redshift_basics.prompt +0 -0
  69. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/config/system_prompts/sql_redshift_types.prompt +0 -0
  70. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/config/system_prompts/sql_rules.prompt +0 -0
  71. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/config/system_prompts/tool_html_passthrough.prompt +0 -0
  72. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/config/system_prompts_pack.yaml +0 -0
  73. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/core.py +0 -0
  74. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/infra/__init__.py +0 -0
  75. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/infra/brevo_mail_app.py +0 -0
  76. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/infra/call_service.py +0 -0
  77. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/infra/connectors/__init__.py +0 -0
  78. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/infra/connectors/file_connector.py +0 -0
  79. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/infra/connectors/file_connector_factory.py +0 -0
  80. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/infra/connectors/google_cloud_storage_connector.py +0 -0
  81. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/infra/connectors/google_drive_connector.py +0 -0
  82. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/infra/connectors/local_file_connector.py +0 -0
  83. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/infra/connectors/s3_connector.py +0 -0
  84. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/infra/google_auth_client.py +0 -0
  85. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/infra/google_chat_app.py +0 -0
  86. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/infra/inference_embeddings_client.py +0 -0
  87. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/infra/inference_handler.py +0 -0
  88. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/infra/jina_embeddings_client.py +0 -0
  89. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/infra/llm_gateway_resolver.py +0 -0
  90. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/infra/llm_providers/__init__.py +0 -0
  91. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/infra/llm_providers/anthropic_adapter.py +0 -0
  92. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/infra/llm_providers/deepseek_adapter.py +0 -0
  93. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/infra/llm_providers/gemini_adapter.py +0 -0
  94. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/infra/llm_providers/openai_adapter.py +0 -0
  95. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/infra/llm_providers/openai_compatible_chat_adapter.py +0 -0
  96. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/infra/llm_providers/openrouter_adapter.py +0 -0
  97. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/infra/llm_proxy.py +0 -0
  98. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/infra/llm_response.py +0 -0
  99. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/infra/redis_session_manager.py +0 -0
  100. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/repositories/__init__.py +0 -0
  101. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/repositories/api_key_repo.py +0 -0
  102. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/repositories/database_manager.py +0 -0
  103. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/repositories/document_repo.py +0 -0
  104. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/repositories/env_secret_provider.py +0 -0
  105. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/repositories/filesystem_asset_repository.py +0 -0
  106. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/repositories/llm_query_repo.py +0 -0
  107. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/repositories/mcp_token_repo.py +0 -0
  108. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/repositories/memory_repo.py +0 -0
  109. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/repositories/profile_repo.py +0 -0
  110. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/repositories/prompt_resource_repo.py +0 -0
  111. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/repositories/sql_dataset_repo.py +0 -0
  112. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/repositories/sql_source_repo.py +0 -0
  113. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/repositories/vs_repo.py +0 -0
  114. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/runtime_logging.py +0 -0
  115. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/__init__.py +0 -0
  116. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/api_key_service.py +0 -0
  117. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/attachment_policy_service.py +0 -0
  118. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/auth_service.py +0 -0
  119. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/benchmark_service.py +0 -0
  120. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/branding_service.py +0 -0
  121. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/company_context_service.py +0 -0
  122. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/configuration_service.py +0 -0
  123. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/context_builder_service.py +0 -0
  124. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/embedding_service.py +0 -0
  125. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/excel_service.py +0 -0
  126. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/file_processor_service.py +0 -0
  127. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/history_manager_service.py +0 -0
  128. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/http_tool_service.py +0 -0
  129. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/i18n_service.py +0 -0
  130. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/jwt_service.py +0 -0
  131. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/knowledge_base_service.py +0 -0
  132. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/language_service.py +0 -0
  133. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/license_service.py +0 -0
  134. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/mail_service.py +0 -0
  135. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/mcp_token_service.py +0 -0
  136. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/memory_compiler_service.py +0 -0
  137. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/memory_lint_service.py +0 -0
  138. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/memory_lookup_policy_service.py +0 -0
  139. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/memory_service.py +0 -0
  140. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/noop_memory_compilation_trigger.py +0 -0
  141. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/noop_memory_lint_trigger.py +0 -0
  142. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/parsers/__init__.py +0 -0
  143. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/parsers/contracts.py +0 -0
  144. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/parsers/image_normalizer.py +0 -0
  145. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/parsers/parsing_service.py +0 -0
  146. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/parsers/pdf_ocr_detection.py +0 -0
  147. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/parsers/provider_factory.py +0 -0
  148. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/parsers/provider_resolver.py +0 -0
  149. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/parsers/providers/__init__.py +0 -0
  150. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/parsers/providers/basic_provider.py +0 -0
  151. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/parsers/providers/docling_provider.py +0 -0
  152. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/parsers/validator.py +0 -0
  153. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/pdf_service.py +0 -0
  154. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/profile_service.py +0 -0
  155. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/prompt_resource_service.py +0 -0
  156. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/prompt_service.py +0 -0
  157. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/signup_policy_resolver.py +0 -0
  158. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/sql_dataset_service.py +0 -0
  159. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/sql_service.py +0 -0
  160. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/sql_source_service.py +0 -0
  161. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/structured_output_service.py +0 -0
  162. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/system_prompt_catalog.py +0 -0
  163. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/system_tools.py +0 -0
  164. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/telemetry_service.py +0 -0
  165. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/tool_output_contract.py +0 -0
  166. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/user_feedback_service.py +0 -0
  167. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/user_session_context_service.py +0 -0
  168. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/visual_kb_service.py +0 -0
  169. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/visual_tool_service.py +0 -0
  170. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/warmup_service.py +0 -0
  171. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/web_search/__init__.py +0 -0
  172. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/web_search/provider_factory.py +0 -0
  173. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/web_search/providers/__init__.py +0 -0
  174. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/web_search/providers/brave_provider.py +0 -0
  175. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/web_search_service.py +0 -0
  176. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/static/images/fernando.jpeg +0 -0
  177. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/static/images/iatoolkit_core.png +0 -0
  178. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/static/images/iatoolkit_logo.png +0 -0
  179. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/static/js/chat_feedback_button.js +0 -0
  180. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/static/js/chat_filepond.js +0 -0
  181. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/static/js/chat_help_content.js +0 -0
  182. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/static/js/chat_history_button.js +0 -0
  183. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/static/js/chat_logout_button.js +0 -0
  184. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/static/js/chat_main.js +0 -0
  185. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/static/js/chat_memory_button.js +0 -0
  186. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/static/js/chat_model_selector.js +0 -0
  187. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/static/js/chat_onboarding_button.js +0 -0
  188. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/static/js/chat_prompt_manager.js +0 -0
  189. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/static/js/chat_reload_button.js +0 -0
  190. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/static/styles/chat_iatoolkit.css +0 -0
  191. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/static/styles/chat_modal.css +0 -0
  192. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/static/styles/chat_public.css +0 -0
  193. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/static/styles/documents.css +0 -0
  194. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/static/styles/landing_page.css +0 -0
  195. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/static/styles/llm_output.css +0 -0
  196. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/static/styles/onboarding.css +0 -0
  197. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/templates/_company_header.html +0 -0
  198. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/templates/_login_widget.html +0 -0
  199. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/templates/account.html +0 -0
  200. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/templates/base.html +0 -0
  201. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/templates/change_password.html +0 -0
  202. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/templates/chat.html +0 -0
  203. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/templates/chat_memory_modal.html +0 -0
  204. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/templates/chat_modals.html +0 -0
  205. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/templates/error.html +0 -0
  206. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/templates/forgot_password.html +0 -0
  207. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/templates/home_hosted_default.html +0 -0
  208. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/templates/memory/wiki_schema.md +0 -0
  209. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/templates/onboarding_shell.html +0 -0
  210. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/templates/pdf/base.html +0 -0
  211. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/templates/pdf/letter.html +0 -0
  212. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/templates/pdf/report.html +0 -0
  213. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/templates/pdf/simple.html +0 -0
  214. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/templates/signup.html +0 -0
  215. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/__init__.py +0 -0
  216. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/account_view.py +0 -0
  217. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/api_key_api_view.py +0 -0
  218. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/base_login_view.py +0 -0
  219. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/categories_api_view.py +0 -0
  220. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/change_password_view.py +0 -0
  221. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/chat_context_preview_api_view.py +0 -0
  222. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/chat_view.py +0 -0
  223. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/configuration_api_view.py +0 -0
  224. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/connectors_api_view.py +0 -0
  225. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/embedding_api_view.py +0 -0
  226. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/forgot_password_view.py +0 -0
  227. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/help_content_api_view.py +0 -0
  228. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/history_api_view.py +0 -0
  229. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/home_view.py +0 -0
  230. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/init_context_api_view.py +0 -0
  231. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/llmquery_api_view.py +0 -0
  232. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/load_document_api_view.py +0 -0
  233. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/login_view.py +0 -0
  234. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/logout_api_view.py +0 -0
  235. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/memory_api_view.py +0 -0
  236. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/profile_api_view.py +0 -0
  237. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/prompt_api_view.py +0 -0
  238. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/prompt_context_preview_api_view.py +0 -0
  239. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/prompt_resource_api_view.py +0 -0
  240. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/rag_api_view.py +0 -0
  241. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/root_redirect_view.py +0 -0
  242. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/signup_view.py +0 -0
  243. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/static_page_view.py +0 -0
  244. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/user_feedback_api_view.py +0 -0
  245. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/users_api_view.py +0 -0
  246. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/verify_user_view.py +0 -0
  247. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit.egg-info/dependency_links.txt +0 -0
  248. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit.egg-info/requires.txt +0 -0
  249. {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: iatoolkit
3
- Version: 2.24.1
3
+ Version: 2.25.1
4
4
  Summary: IAToolkit
5
5
  Author: Fernando Libedinsky
6
6
  License-Expression: MIT
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # IAToolkit is open source software.
5
5
 
6
- __version__ = "2.24.1"
6
+ __version__ = "2.25.1"
7
7
 
8
8
  # Expose main classes and functions at the top level of the package
9
9
 
@@ -276,6 +276,86 @@ 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_knowledge_wiki_search
280
+ description: Busca páginas publicadas dentro de las wikis de conocimiento compartidas por la empresa. Úsala para políticas, playbooks, procesos, runbooks, conocimiento operativo, onboarding, guías por área o información curada del tenant. No es memoria personal del usuario ni búsqueda documental cruda.
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 for policies, processes, playbooks, runbooks, or area knowledge.
296
+ - Retrieve published tenant knowledge before answering operational questions.
297
+ - Find the relevant company wiki page when the user asks about internal procedures.
298
+ examples:
299
+ - iat_knowledge_wiki_search(query="politica de descuentos enterprise", wiki_key="sales", limit=5)
300
+ - iat_knowledge_wiki_search(query="como escalar incidentes sev1", wiki_key="ops", limit=3)
301
+ - iat_knowledge_wiki_search(query="onboarding de nuevos ejecutivos", limit=5)
302
+ cost:
303
+ penalty: 0.07
304
+ latency_class: low
305
+ expensive: false
306
+ parameters:
307
+ type: object
308
+ properties:
309
+ query:
310
+ type: string
311
+ description: Texto que describe el conocimiento publicado que deseas recuperar.
312
+ wiki_key:
313
+ anyOf:
314
+ - type: string
315
+ - type: "null"
316
+ description: Clave opcional de la wiki a consultar. Usa null para buscar en todas las wikis publicadas.
317
+ limit:
318
+ type: integer
319
+ description: Cantidad máxima de páginas a recuperar.
320
+ minimum: 1
321
+ maximum: 25
322
+ required:
323
+ - query
324
+ - limit
325
+ - function_name: iat_knowledge_wiki_get_page
326
+ description: Recupera una página completa de una wiki de conocimiento compartida por la empresa usando wiki_key y path/slug. Úsala después de iat_knowledge_wiki_search cuando necesites leer el contenido completo antes de responder.
327
+ routing:
328
+ force_include_capability: has_knowledge_wikis
329
+ routing_profile:
330
+ tags:
331
+ - knowledge_wiki
332
+ - company_knowledge
333
+ - tenant_context
334
+ - page
335
+ - markdown
336
+ - wiki
337
+ intents:
338
+ - Open a published tenant wiki page by path or slug.
339
+ - Read the full markdown content of a company knowledge page before answering.
340
+ examples:
341
+ - iat_knowledge_wiki_get_page(wiki_key="sales", path="pricing.md")
342
+ - iat_knowledge_wiki_get_page(wiki_key="ops", path="incident-response.md")
343
+ cost:
344
+ penalty: 0.04
345
+ latency_class: low
346
+ expensive: false
347
+ parameters:
348
+ type: object
349
+ properties:
350
+ wiki_key:
351
+ type: string
352
+ description: Clave de la wiki publicada.
353
+ path:
354
+ type: string
355
+ description: Path o slug de la página a recuperar.
356
+ required:
357
+ - wiki_key
358
+ - path
279
359
  - function_name: iat_memory_search
280
360
  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
361
  routing:
@@ -621,6 +621,46 @@ 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
+ configure: "Configuration"
630
+ key: "Key"
631
+ name: "Name"
632
+ root: "Storage root"
633
+ status: "Status"
634
+ status_published: "Published"
635
+ status_draft: "Draft"
636
+ status_archived: "Archived"
637
+ description: "Description"
638
+ pages: "Pages"
639
+ index: "Index"
640
+ mcp: "MCP"
641
+ lint: "Review"
642
+ sync: "Sync"
643
+ issues: "issues"
644
+ index_resource: "Index resource"
645
+ copy_uri: "Copy URI"
646
+ publish_mcp: "Publish to MCP"
647
+ open_mcp: "Open MCP"
648
+ filter_pages: "Filter pages"
649
+ loading: "Loading..."
650
+ empty: "No wikis configured."
651
+ no_pages: "No pages."
652
+ no_issues: "No issues."
653
+ missing_key: "Wiki key is required."
654
+ save_ok: "Wiki saved."
655
+ save_error: "Could not save wiki."
656
+ sync_ok: "Sync queued."
657
+ sync_error: "Could not sync wiki."
658
+ lint_ok: "Review completed."
659
+ lint_error: "Could not review wiki."
660
+ mcp_ok: "Wiki published to MCP."
661
+ mcp_error: "Could not publish to MCP."
662
+ copy_ok: "URI copied."
663
+
624
664
  skills:
625
665
  title: "Skills"
626
666
  search_placeholder: "Search skills"
@@ -1859,6 +1899,10 @@ ui:
1859
1899
  company_config_desc: "Core runtime, branding, connector, and company behavior configuration."
1860
1900
  company_card_title: "Company"
1861
1901
  company_card_desc: "Core identity and runtime information for this company."
1902
+ company_editor_desc: "Review and update the full company configuration for identity, runtime, and branding."
1903
+ policies_card_title: "Policies"
1904
+ policies_card_desc: "Manage runtime access policies, quotas, and tool or model controls."
1905
+ policies_editor_desc: "Review and update the runtime policy file used for access decisions."
1862
1906
  company_name: "Company name"
1863
1907
  short_name: "Short name"
1864
1908
  runtime_mode: "Runtime mode"
@@ -621,6 +621,46 @@ 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
+ configure: "Configuración"
630
+ key: "Clave"
631
+ name: "Nombre"
632
+ root: "Raíz storage"
633
+ status: "Estado"
634
+ status_published: "Publicada"
635
+ status_draft: "Borrador"
636
+ status_archived: "Archivada"
637
+ description: "Descripción"
638
+ pages: "Páginas"
639
+ index: "Índice"
640
+ mcp: "MCP"
641
+ lint: "Revisar"
642
+ sync: "Sincronizar"
643
+ issues: "hallazgos"
644
+ index_resource: "Resource de índice"
645
+ copy_uri: "Copiar URI"
646
+ publish_mcp: "Publicar en MCP"
647
+ open_mcp: "Abrir MCP"
648
+ filter_pages: "Filtrar páginas"
649
+ loading: "Cargando..."
650
+ empty: "No hay wikis configuradas."
651
+ no_pages: "No hay páginas."
652
+ no_issues: "Sin issues."
653
+ missing_key: "Debes ingresar una key de wiki."
654
+ save_ok: "Wiki guardada."
655
+ save_error: "No se pudo guardar la wiki."
656
+ sync_ok: "Sincronización encolada."
657
+ sync_error: "No se pudo sincronizar la wiki."
658
+ lint_ok: "Revisión completada."
659
+ lint_error: "No se pudo revisar la wiki."
660
+ mcp_ok: "Wiki publicada en MCP."
661
+ mcp_error: "No se pudo publicar en MCP."
662
+ copy_ok: "URI copiada."
663
+
624
664
  skills:
625
665
  title: "Skills"
626
666
  search_placeholder: "Buscar skills"
@@ -1863,6 +1903,10 @@ ui:
1863
1903
  company_config_desc: "Configuración central de runtime, branding, conectores y comportamiento de la empresa."
1864
1904
  company_card_title: "Empresa"
1865
1905
  company_card_desc: "Identidad principal e información de runtime para esta empresa."
1906
+ company_editor_desc: "Revisa y actualiza la configuración completa de empresa para identidad, runtime y branding."
1907
+ policies_card_title: "Políticas"
1908
+ policies_card_desc: "Administra políticas de acceso, cuotas y controles de tools o modelos en runtime."
1909
+ policies_editor_desc: "Revisa y actualiza el archivo de políticas usado para decisiones de acceso en runtime."
1866
1910
  company_name: "Nombre de la empresa"
1867
1911
  short_name: "Nombre corto"
1868
1912
  runtime_mode: "Modo runtime"
@@ -0,0 +1,218 @@
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 get_page_by_path(self, wiki_id: int, path: str) -> KnowledgeWikiPage | None:
93
+ if not wiki_id or not path:
94
+ return None
95
+ return (
96
+ self.session.query(KnowledgeWikiPage)
97
+ .filter_by(wiki_id=wiki_id, path=path)
98
+ .first()
99
+ )
100
+
101
+ def get_page_by_slug(self, wiki_id: int, slug: str) -> KnowledgeWikiPage | None:
102
+ if not wiki_id or not slug:
103
+ return None
104
+ return (
105
+ self.session.query(KnowledgeWikiPage)
106
+ .filter_by(wiki_id=wiki_id, slug=slug)
107
+ .first()
108
+ )
109
+
110
+ def list_pages(
111
+ self,
112
+ wiki_id: int,
113
+ *,
114
+ include_archived: bool = False,
115
+ limit: int = 500,
116
+ ) -> list[KnowledgeWikiPage]:
117
+ if not wiki_id:
118
+ return []
119
+ query = self.session.query(KnowledgeWikiPage).filter_by(wiki_id=wiki_id)
120
+ if not include_archived:
121
+ query = query.filter(KnowledgeWikiPage.status != KnowledgeWikiPageStatus.ARCHIVED)
122
+ return (
123
+ query
124
+ .order_by(KnowledgeWikiPage.path.asc(), KnowledgeWikiPage.id.asc())
125
+ .limit(limit)
126
+ .all()
127
+ )
128
+
129
+ def create_or_update_page(
130
+ self,
131
+ *,
132
+ company_id: int,
133
+ wiki_id: int,
134
+ path: str,
135
+ slug: str,
136
+ title: str,
137
+ source_storage_key: str,
138
+ summary: str | None = None,
139
+ body_text: str | None = None,
140
+ status: KnowledgeWikiPageStatus = KnowledgeWikiPageStatus.PUBLISHED,
141
+ tags: list[str] | None = None,
142
+ owner: str | None = None,
143
+ source_meta: dict | None = None,
144
+ last_synced_at: datetime | None = None,
145
+ ) -> KnowledgeWikiPage:
146
+ page = self.get_page_by_path(wiki_id, path)
147
+ if page is None:
148
+ page = self.get_page_by_slug(wiki_id, slug)
149
+
150
+ if page:
151
+ page.path = path
152
+ page.slug = slug
153
+ page.title = title
154
+ page.summary = summary
155
+ page.body_text = body_text
156
+ page.source_storage_key = source_storage_key
157
+ page.status = status
158
+ page.tags = tags or []
159
+ page.owner = owner
160
+ page.source_meta = source_meta or {}
161
+ page.last_synced_at = last_synced_at
162
+ else:
163
+ page = KnowledgeWikiPage(
164
+ company_id=company_id,
165
+ wiki_id=wiki_id,
166
+ path=path,
167
+ slug=slug,
168
+ title=title,
169
+ summary=summary,
170
+ body_text=body_text,
171
+ source_storage_key=source_storage_key,
172
+ status=status,
173
+ tags=tags or [],
174
+ owner=owner,
175
+ source_meta=source_meta or {},
176
+ last_synced_at=last_synced_at,
177
+ )
178
+ self.session.add(page)
179
+ self.session.commit()
180
+ return page
181
+
182
+ def archive_pages_not_in_paths(self, wiki_id: int, paths: set[str]) -> int:
183
+ if not wiki_id:
184
+ return 0
185
+ query = self.session.query(KnowledgeWikiPage).filter_by(wiki_id=wiki_id)
186
+ if paths:
187
+ query = query.filter(~KnowledgeWikiPage.path.in_(paths))
188
+ rows = query.all()
189
+ changed = 0
190
+ for page in rows:
191
+ if page.status != KnowledgeWikiPageStatus.ARCHIVED:
192
+ page.status = KnowledgeWikiPageStatus.ARCHIVED
193
+ changed += 1
194
+ if changed:
195
+ self.session.commit()
196
+ return changed
197
+
198
+ def create_sync_run(
199
+ self,
200
+ *,
201
+ company_id: int,
202
+ wiki_id: int,
203
+ metadata_json: dict | None = None,
204
+ ) -> KnowledgeWikiSyncRun:
205
+ run = KnowledgeWikiSyncRun(
206
+ company_id=company_id,
207
+ wiki_id=wiki_id,
208
+ status=KnowledgeWikiSyncStatus.RUNNING,
209
+ metadata_json=metadata_json or {},
210
+ )
211
+ self.session.add(run)
212
+ self.session.commit()
213
+ return run
214
+
215
+ def save_sync_run(self, run: KnowledgeWikiSyncRun) -> KnowledgeWikiSyncRun:
216
+ self.session.add(run)
217
+ self.session.commit()
218
+ return run
@@ -69,6 +69,25 @@ class MemoryCaptureStatus(str, enum.Enum):
69
69
  FAILED = "failed"
70
70
 
71
71
 
72
+ class KnowledgeWikiStatus(str, enum.Enum):
73
+ DRAFT = "draft"
74
+ PUBLISHED = "published"
75
+ ARCHIVED = "archived"
76
+
77
+
78
+ class KnowledgeWikiPageStatus(str, enum.Enum):
79
+ DRAFT = "draft"
80
+ PUBLISHED = "published"
81
+ ARCHIVED = "archived"
82
+ BROKEN = "broken"
83
+
84
+
85
+ class KnowledgeWikiSyncStatus(str, enum.Enum):
86
+ RUNNING = "running"
87
+ SUCCESS = "success"
88
+ FAILED = "failed"
89
+
90
+
72
91
  # Cross-database JSON type:
73
92
  # - PostgreSQL: JSONB (for jsonb operators/functions/indexing)
74
93
  # - SQLite/others (tests): JSON
@@ -180,6 +199,16 @@ class Company(Base):
180
199
  back_populates="company",
181
200
  cascade="all, delete-orphan",
182
201
  )
202
+ knowledge_wikis = relationship(
203
+ "KnowledgeWiki",
204
+ back_populates="company",
205
+ cascade="all, delete-orphan",
206
+ )
207
+ knowledge_wiki_pages = relationship(
208
+ "KnowledgeWikiPage",
209
+ back_populates="company",
210
+ cascade="all, delete-orphan",
211
+ )
183
212
 
184
213
 
185
214
  def to_dict(self):
@@ -519,6 +548,100 @@ class VSImage(Base):
519
548
  return {column.key: getattr(self, column.key) for column in class_mapper(self.__class__).columns}
520
549
 
521
550
 
551
+ class KnowledgeWiki(Base):
552
+ """Represents a published markdown knowledge wiki scoped to a tenant."""
553
+ __tablename__ = "iat_knowledge_wikis"
554
+
555
+ id = Column(Integer, primary_key=True, autoincrement=True)
556
+ company_id = Column(Integer, ForeignKey(f"{ORM_SCHEMA}.iat_companies.id", ondelete="CASCADE"), nullable=False)
557
+ wiki_key = Column(String, nullable=False)
558
+ name = Column(String, nullable=False)
559
+ description = Column(Text, nullable=True)
560
+ root_storage_key = Column(String, nullable=False)
561
+ status = Column(Enum(KnowledgeWikiStatus), nullable=False, default=KnowledgeWikiStatus.PUBLISHED)
562
+ settings = Column(JSON_NATIVE, nullable=False, default=dict)
563
+ last_synced_at = Column(DateTime, nullable=True)
564
+ created_at = Column(DateTime, default=datetime.now, nullable=False)
565
+ updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, nullable=False)
566
+
567
+ __table_args__ = (
568
+ UniqueConstraint("company_id", "wiki_key", name="uix_knowledge_wiki_company_key"),
569
+ )
570
+
571
+ company = relationship("Company", back_populates="knowledge_wikis")
572
+ pages = relationship(
573
+ "KnowledgeWikiPage",
574
+ back_populates="wiki",
575
+ cascade="all, delete-orphan",
576
+ )
577
+ sync_runs = relationship(
578
+ "KnowledgeWikiSyncRun",
579
+ back_populates="wiki",
580
+ cascade="all, delete-orphan",
581
+ )
582
+
583
+ def to_dict(self):
584
+ return {column.key: getattr(self, column.key) for column in class_mapper(self.__class__).columns}
585
+
586
+
587
+ class KnowledgeWikiPage(Base):
588
+ """Represents one published markdown page inside a tenant knowledge wiki."""
589
+ __tablename__ = "iat_knowledge_wiki_pages"
590
+
591
+ id = Column(Integer, primary_key=True, autoincrement=True)
592
+ company_id = Column(Integer, ForeignKey(f"{ORM_SCHEMA}.iat_companies.id", ondelete="CASCADE"), nullable=False)
593
+ wiki_id = Column(Integer, ForeignKey(f"{ORM_SCHEMA}.iat_knowledge_wikis.id", ondelete="CASCADE"), nullable=False)
594
+ path = Column(String, nullable=False)
595
+ slug = Column(String, nullable=False)
596
+ title = Column(String, nullable=False)
597
+ summary = Column(Text, nullable=True)
598
+ body_text = Column(Text, nullable=True)
599
+ source_storage_key = Column(String, nullable=False)
600
+ status = Column(Enum(KnowledgeWikiPageStatus), nullable=False, default=KnowledgeWikiPageStatus.PUBLISHED)
601
+ tags = Column(JSON_NATIVE, nullable=False, default=list)
602
+ owner = Column(String, nullable=True)
603
+ source_meta = Column(JSON_NATIVE, nullable=False, default=dict)
604
+ last_synced_at = Column(DateTime, nullable=True)
605
+ created_at = Column(DateTime, default=datetime.now, nullable=False)
606
+ updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, nullable=False)
607
+
608
+ __table_args__ = (
609
+ UniqueConstraint("wiki_id", "path", name="uix_knowledge_wiki_page_path"),
610
+ UniqueConstraint("wiki_id", "slug", name="uix_knowledge_wiki_page_slug"),
611
+ )
612
+
613
+ company = relationship("Company", back_populates="knowledge_wiki_pages")
614
+ wiki = relationship("KnowledgeWiki", back_populates="pages")
615
+
616
+ def to_dict(self):
617
+ return {column.key: getattr(self, column.key) for column in class_mapper(self.__class__).columns}
618
+
619
+
620
+ class KnowledgeWikiSyncRun(Base):
621
+ """Tracks one import/reindex pass for a tenant knowledge wiki."""
622
+ __tablename__ = "iat_knowledge_wiki_sync_runs"
623
+
624
+ id = Column(Integer, primary_key=True, autoincrement=True)
625
+ company_id = Column(Integer, ForeignKey(f"{ORM_SCHEMA}.iat_companies.id", ondelete="CASCADE"), nullable=False)
626
+ wiki_id = Column(Integer, ForeignKey(f"{ORM_SCHEMA}.iat_knowledge_wikis.id", ondelete="CASCADE"), nullable=False)
627
+ status = Column(Enum(KnowledgeWikiSyncStatus), nullable=False, default=KnowledgeWikiSyncStatus.RUNNING)
628
+ pages_seen = Column(Integer, nullable=False, default=0)
629
+ pages_indexed = Column(Integer, nullable=False, default=0)
630
+ pages_failed = Column(Integer, nullable=False, default=0)
631
+ errors = Column(JSON_NATIVE, nullable=False, default=list)
632
+ metadata_json = Column(JSON_NATIVE, nullable=False, default=dict)
633
+ started_at = Column(DateTime, default=datetime.now, nullable=False)
634
+ finished_at = Column(DateTime, nullable=True)
635
+ created_at = Column(DateTime, default=datetime.now, nullable=False)
636
+ updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, nullable=False)
637
+
638
+ company = relationship("Company")
639
+ wiki = relationship("KnowledgeWiki", back_populates="sync_runs")
640
+
641
+ def to_dict(self):
642
+ return {column.key: getattr(self, column.key) for column in class_mapper(self.__class__).columns}
643
+
644
+
522
645
  class UserFeedback(Base):
523
646
  """Stores feedback and ratings submitted by users for specific interactions."""
524
647
  __tablename__ = 'iat_feedback'