databricks-tellr-app 0.4.3.dev12__tar.gz → 0.4.3.dev13__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 (167) hide show
  1. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/PKG-INFO +1 -1
  2. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/databricks_tellr_app.egg-info/PKG-INFO +1 -1
  3. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/pyproject.toml +1 -1
  4. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/api/main.py +9 -1
  5. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/api/routes/chat.py +0 -12
  6. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/core/encryption.py +54 -32
  7. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/database/models/encryption_key.py +6 -2
  8. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/README.md +0 -0
  9. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/databricks_tellr_app/__init__.py +0 -0
  10. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/databricks_tellr_app/run.py +0 -0
  11. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/databricks_tellr_app.egg-info/SOURCES.txt +0 -0
  12. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/databricks_tellr_app.egg-info/dependency_links.txt +0 -0
  13. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/databricks_tellr_app.egg-info/requires.txt +0 -0
  14. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/databricks_tellr_app.egg-info/top_level.txt +0 -0
  15. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/setup.cfg +0 -0
  16. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/setup.py +0 -0
  17. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/__init__.py +0 -0
  18. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/api/__init__.py +0 -0
  19. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/api/_otel_bootstrap.py +0 -0
  20. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/api/fixtures/tour_demo_deck.json +0 -0
  21. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/api/mcp_auth.py +0 -0
  22. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/api/mcp_server.py +0 -0
  23. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/api/middleware/__init__.py +0 -0
  24. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/api/middleware/csrf.py +0 -0
  25. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/api/middleware/request_logging.py +0 -0
  26. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/api/middleware/security_headers.py +0 -0
  27. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/api/routes/__init__.py +0 -0
  28. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/api/routes/_authz.py +0 -0
  29. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/api/routes/admin.py +0 -0
  30. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/api/routes/admin_usage.py +0 -0
  31. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/api/routes/agent_config.py +0 -0
  32. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/api/routes/deck_contributors.py +0 -0
  33. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/api/routes/export.py +0 -0
  34. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/api/routes/feedback.py +0 -0
  35. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/api/routes/google_slides.py +0 -0
  36. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/api/routes/images.py +0 -0
  37. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/api/routes/local_version.py +0 -0
  38. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/api/routes/profiles.py +0 -0
  39. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/api/routes/sessions.py +0 -0
  40. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/api/routes/settings/__init__.py +0 -0
  41. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/api/routes/settings/contributors.py +0 -0
  42. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/api/routes/settings/deck_prompts.py +0 -0
  43. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/api/routes/settings/design_systems.py +0 -0
  44. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/api/routes/settings/identities.py +0 -0
  45. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/api/routes/settings/slide_styles.py +0 -0
  46. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/api/routes/setup.py +0 -0
  47. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/api/routes/slides.py +0 -0
  48. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/api/routes/tools.py +0 -0
  49. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/api/routes/tour.py +0 -0
  50. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/api/routes/verification.py +0 -0
  51. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/api/routes/version.py +0 -0
  52. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/api/schemas/__init__.py +0 -0
  53. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/api/schemas/agent_config.py +0 -0
  54. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/api/schemas/feedback.py +0 -0
  55. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/api/schemas/requests.py +0 -0
  56. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/api/schemas/responses.py +0 -0
  57. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/api/schemas/settings/__init__.py +0 -0
  58. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/api/schemas/settings/requests.py +0 -0
  59. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/api/schemas/settings/responses.py +0 -0
  60. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/api/schemas/streaming.py +0 -0
  61. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/api/services/__init__.py +0 -0
  62. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/api/services/chat_service.py +0 -0
  63. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/api/services/export_job_queue.py +0 -0
  64. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/api/services/feedback_service.py +0 -0
  65. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/api/services/job_queue.py +0 -0
  66. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/api/services/session_manager.py +0 -0
  67. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/api/services/session_naming.py +0 -0
  68. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/api/services/usage_events.py +0 -0
  69. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/api/services/usage_service.py +0 -0
  70. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/api/utils/__init__.py +0 -0
  71. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/api/utils/validation.py +0 -0
  72. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/core/__init__.py +0 -0
  73. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/core/config_loader.py +0 -0
  74. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/core/context_utils.py +0 -0
  75. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/core/database.py +0 -0
  76. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/core/databricks_client.py +0 -0
  77. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/core/defaults.py +0 -0
  78. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/core/init_default_profile.py +0 -0
  79. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/core/lakebase.py +0 -0
  80. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/core/migrate_profiles_to_agent_config.py +0 -0
  81. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/core/mlflow_agent_spans.py +0 -0
  82. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/core/mlflow_tracing.py +0 -0
  83. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/core/otel_logging.py +0 -0
  84. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/core/permission_context.py +0 -0
  85. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/core/prompt_modules.py +0 -0
  86. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/core/settings_db.py +0 -0
  87. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/core/user_context.py +0 -0
  88. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/database/__init__.py +0 -0
  89. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/database/models/__init__.py +0 -0
  90. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/database/models/deck_contributor.py +0 -0
  91. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/database/models/design_system.py +0 -0
  92. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/database/models/feedback.py +0 -0
  93. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/database/models/genie_space.py +0 -0
  94. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/database/models/google_global_credentials.py +0 -0
  95. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/database/models/google_oauth_token.py +0 -0
  96. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/database/models/identity.py +0 -0
  97. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/database/models/image.py +0 -0
  98. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/database/models/profile.py +0 -0
  99. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/database/models/profile_contributor.py +0 -0
  100. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/database/models/prompts.py +0 -0
  101. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/database/models/request_log.py +0 -0
  102. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/database/models/session.py +0 -0
  103. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/database/models/slide_deck_prompt.py +0 -0
  104. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/database/models/slide_style_library.py +0 -0
  105. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/database/models/usage_event.py +0 -0
  106. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/database/models/user_preference.py +0 -0
  107. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/database/types.py +0 -0
  108. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/domain/__init__.py +0 -0
  109. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/domain/slide.py +0 -0
  110. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/domain/slide_deck.py +0 -0
  111. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/services/__init__.py +0 -0
  112. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/services/agent.py +0 -0
  113. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/services/agent_factory.py +0 -0
  114. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/services/config_service.py +0 -0
  115. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/services/config_validator.py +0 -0
  116. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/services/converter_jail/__init__.py +0 -0
  117. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/services/converter_jail/ast_guard.py +0 -0
  118. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/services/converter_jail/codeprep.py +0 -0
  119. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/services/converter_jail/gslides_runner.py +0 -0
  120. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/services/converter_jail/jail.py +0 -0
  121. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/services/converter_jail/pptx_runner.py +0 -0
  122. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/services/converter_jail/protocol.py +0 -0
  123. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/services/design_system_compiler.py +0 -0
  124. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/services/design_system_service.py +0 -0
  125. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/services/design_system_templates.py +0 -0
  126. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/services/drive_uploader.py +0 -0
  127. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/services/evaluation/__init__.py +0 -0
  128. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/services/evaluation/llm_judge.py +0 -0
  129. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/services/genie_service.py +0 -0
  130. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/services/google_slides_auth.py +0 -0
  131. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/services/google_slides_prompts_defaults.py +0 -0
  132. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/services/html_to_google_slides.py +0 -0
  133. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/services/html_to_pptx.py +0 -0
  134. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/services/identity_provider.py +0 -0
  135. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/services/identity_providers/__init__.py +0 -0
  136. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/services/identity_providers/account_provider.py +0 -0
  137. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/services/identity_providers/local_provider.py +0 -0
  138. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/services/identity_providers/workspace_provider.py +0 -0
  139. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/services/image_service.py +0 -0
  140. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/services/image_tools.py +0 -0
  141. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/services/permission_service.py +0 -0
  142. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/services/pptx_from_html_huashu.py +0 -0
  143. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/services/pptx_from_records.py +0 -0
  144. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/services/pptx_prompts_defaults.py +0 -0
  145. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/services/profile_service.py +0 -0
  146. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/services/streaming_callback.py +0 -0
  147. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/services/tools/__init__.py +0 -0
  148. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/services/tools/agent_bricks_tool.py +0 -0
  149. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/services/tools/ds_asset_tool.py +0 -0
  150. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/services/tools/genie_tool.py +0 -0
  151. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/services/tools/mcp_tool.py +0 -0
  152. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/services/tools/model_endpoint_tool.py +0 -0
  153. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/services/tools/vector_tool.py +0 -0
  154. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/services/validator.py +0 -0
  155. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/utils/__init__.py +0 -0
  156. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/utils/css_utils.py +0 -0
  157. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/utils/ds_asset_utils.py +0 -0
  158. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/utils/error_handling.py +0 -0
  159. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/utils/html_safety.py +0 -0
  160. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/utils/html_utils.py +0 -0
  161. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/utils/image_utils.py +0 -0
  162. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/utils/js_validator.py +0 -0
  163. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/utils/logging_config.py +0 -0
  164. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/utils/pi_filter.py +0 -0
  165. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/utils/slide_hash.py +0 -0
  166. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/utils/spotlight.py +0 -0
  167. {databricks_tellr_app-0.4.3.dev12 → databricks_tellr_app-0.4.3.dev13}/src/utils/text_caps.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: databricks-tellr-app
3
- Version: 0.4.3.dev12
3
+ Version: 0.4.3.dev13
4
4
  Summary: Tellr application package for Databricks Apps
5
5
  Requires-Python: >=3.10
6
6
  Description-Content-Type: text/markdown
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: databricks-tellr-app
3
- Version: 0.4.3.dev12
3
+ Version: 0.4.3.dev13
4
4
  Summary: Tellr application package for Databricks Apps
5
5
  Requires-Python: >=3.10
6
6
  Description-Content-Type: text/markdown
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "databricks-tellr-app"
7
- version = "0.4.3.dev12"
7
+ version = "0.4.3.dev13"
8
8
  description = "Tellr application package for Databricks Apps"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -489,11 +489,19 @@ logger.info("MCP server mounted at /mcp")
489
489
 
490
490
  @app.get("/api/health")
491
491
  async def health():
492
- """Health check endpoint."""
492
+ """Health check endpoint.
493
+
494
+ ``encryption_key_source`` is load-bearing for deployment: ``tellr.update``
495
+ polls it to confirm a relocated app is reading the secret before it deletes
496
+ the Lakebase key row. Reports the source only — never the key.
497
+ """
498
+ from src.core.encryption import key_source
499
+
493
500
  return {
494
501
  "status": "healthy",
495
502
  "environment": ENVIRONMENT,
496
503
  "version": "0.3.0",
504
+ "encryption_key_source": key_source(),
497
505
  }
498
506
 
499
507
 
@@ -543,18 +543,6 @@ async def send_message_streaming(
543
543
  )
544
544
 
545
545
 
546
- @router.get("/health")
547
- async def health_check():
548
- """Health check endpoint.
549
-
550
- Returns:
551
- Status information
552
- """
553
- return {
554
- "status": "healthy",
555
- "service": "AI Slide Generator",
556
- }
557
-
558
546
 
559
547
  @router.post("/chat/async")
560
548
  async def submit_chat_async(
@@ -1,34 +1,16 @@
1
1
  """Fernet symmetric encryption for sensitive data (OAuth credentials, tokens).
2
2
 
3
3
  Uses AES-128-CBC with HMAC-SHA256 authentication via the ``cryptography``
4
- library. The master key lives in the ``encryption_keys`` table of the
5
- application database (SDR-4437 CRITICAL-3): dynamic, persistent across
6
- restarts/restores, unique per deployment, zero operator setup.
7
-
8
- Resolution is SELECT-first, then race-safe INSERT-if-absent:
9
-
10
- 1. ``SELECT key_value FROM encryption_keys WHERE id = 1`` — read-first is
11
- load-bearing: on upgraded installs the table is created by the *deployer*
12
- role and the app SP holds an explicit SELECT, INSERT grant; reading first
13
- means INSERT privilege is never exercised when the row already exists.
14
- 2. If absent, seed from the ``GOOGLE_OAUTH_ENCRYPTION_KEY`` env var (the
15
- UI-button upgrade net — see below), else a legacy ``.encryption_key`` file
16
- in the project root (local dev — keeps pre-existing dev ciphertext
17
- decryptable), else generate a fresh key. See ``_seed_value``.
18
- 3. ``INSERT ... ON CONFLICT (id) DO NOTHING`` + read-back, so concurrent
19
- workers/replicas converge on one key.
20
-
21
- The supported upgrade path is ``tellr.update`` / ``deploy_local``, which — run
22
- as the deploying human — reads the legacy ``GOOGLE_OAUTH_ENCRYPTION_KEY`` from
23
- the existing app.yaml, seeds it into this table, and writes a keyless app.yaml
24
- (SDR-4437 remediation, PR-3). As a safety net for a stray Databricks Apps UI
25
- "Deploy" button upgrade — which bypasses the tool and reuses the old,
26
- still-key-bearing app.yaml — ``_seed_value`` reads that same
27
- ``GOOGLE_OAUTH_ENCRYPTION_KEY`` env var (Apps injects every app.yaml ``env:``
28
- entry into the process environment) so the booting app re-seeds the table from
29
- the injected key instead of fresh-generating one and orphaning existing
30
- ciphertext. Because resolution is SELECT-first, the env var is consulted only
31
- while the table is empty; after any successful migration the stored row wins.
4
+ library. The master key comes from one of two places, selected at boot:
5
+
6
+ 1. **Secret-backed (opt-in).** When the deploy tool has attached a Databricks
7
+ Apps secret resource, the platform injects ``TELLR_ENCRYPTION_KEY`` into the
8
+ environment and that value is the key. This path never touches the database.
9
+ See docs/superpowers/specs/2026-08-20-secret-backed-fernet-key-design.md.
10
+ 2. **Lakebase-backed (default, unchanged).** The key lives in the
11
+ ``encryption_keys`` table of the application database (SDR-4437 CRITICAL-3):
12
+ dynamic, persistent across restarts/restores, unique per deployment, zero
13
+ operator setup.
32
14
  """
33
15
 
34
16
  import logging
@@ -75,7 +57,7 @@ def _validated(key: bytes) -> bytes:
75
57
  def _seed_value() -> bytes:
76
58
  """Pick the value to seed an empty encryption_keys table with.
77
59
 
78
- Priority (SELECT-first in get_encryption_key means this runs only when
60
+ Priority (SELECT-first in _from_lakebase means this runs only when
79
61
  the table is empty):
80
62
  1. GOOGLE_OAUTH_ENCRYPTION_KEY env var — the safety net for a stray
81
63
  Databricks Apps UI "Deploy" button upgrade of an un-migrated app
@@ -100,12 +82,44 @@ def _seed_value() -> bytes:
100
82
  return Fernet.generate_key()
101
83
 
102
84
 
103
- @lru_cache(maxsize=1)
104
- def get_encryption_key() -> bytes:
85
+ _SECRET_ENV_VAR = "TELLR_ENCRYPTION_KEY"
86
+
87
+
88
+ def key_source() -> str:
89
+ """Report where the master key comes from, without reading the key itself.
90
+
91
+ Consumed by /api/health so the deploy tool can confirm a relocated app is
92
+ actually reading the secret before it deletes the Lakebase row.
93
+ """
94
+ return "secret" if os.getenv(_SECRET_ENV_VAR, "").strip() else "lakebase"
95
+
96
+
97
+ def _from_secret() -> bytes:
98
+ """Return the Fernet key injected by the Apps secret resource.
99
+
100
+ Deliberately touches no database: a secret-mode app's encryption_keys table
101
+ is empty by construction, and writing to it would defeat the whole point.
102
+ """
103
+ raw = os.getenv(_SECRET_ENV_VAR, "").strip()
104
+ try:
105
+ Fernet(raw.encode())
106
+ except (ValueError, TypeError) as exc:
107
+ raise RuntimeError(
108
+ f"{_SECRET_ENV_VAR} is not a valid Fernet key — refusing to start. "
109
+ f"Check the value stored in the secret backing the "
110
+ f"{_SECRET_ENV_VAR} app resource."
111
+ ) from exc
112
+ logger.info("Encryption key loaded from the %s secret resource", _SECRET_ENV_VAR)
113
+ return raw.encode()
114
+
115
+
116
+ def _from_lakebase() -> bytes:
105
117
  """Return the Fernet master key from the encryption_keys table (id=1)."""
106
118
  from src.core.database import get_db_session
107
119
 
108
- # 1. Read-first (see module docstring for why this order matters).
120
+ # 1. Read-first: check for an existing row before seeding so concurrent
121
+ # workers never mint two different keys (INSERT … ON CONFLICT DO NOTHING
122
+ # is still safe against the race, but this avoids the seed call entirely).
109
123
  with get_db_session() as session:
110
124
  row = session.execute(_SELECT_KEY).first()
111
125
  if row and row[0]:
@@ -125,6 +139,14 @@ def get_encryption_key() -> bytes:
125
139
  return _validated(row[0].encode())
126
140
 
127
141
 
142
+ @lru_cache(maxsize=1)
143
+ def get_encryption_key() -> bytes:
144
+ """Return the Fernet master key, from the secret resource or Lakebase."""
145
+ if os.getenv(_SECRET_ENV_VAR, "").strip():
146
+ return _from_secret()
147
+ return _from_lakebase()
148
+
149
+
128
150
  def ensure_encryption_key() -> None:
129
151
  """Pre-fork boot hook: load/seed the key before uvicorn workers fork.
130
152
 
@@ -4,8 +4,12 @@ Holds the Fernet master key for OAuth credential/token encryption in the
4
4
  ACL-governed Lakebase data schema instead of app.yaml. Single-row table
5
5
  (id = 1). Deliberately shares the data schema's grants: the key carries
6
6
  the same ACLs as the ciphertext it protects — an explicitly accepted risk
7
- in the SDR-4437 remediation design. Do NOT add key-specific grant
8
- tightening here.
7
+ in the SDR-4437 remediation. Do NOT add key-specific grant tightening here.
8
+
9
+ Deployments that need the key out of Lakebase entirely can opt into the
10
+ secret-backed path instead, in which case this table stays empty and the key
11
+ lives in a Databricks secret injected as TELLR_ENCRYPTION_KEY. See
12
+ docs/superpowers/specs/2026-08-20-secret-backed-fernet-key-design.md.
9
13
  """
10
14
 
11
15
  from sqlalchemy import Column, DateTime, Integer, Text