MetaList 0.2.1__tar.gz → 0.3.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 (322) hide show
  1. {metalist-0.2.1/metalist.egg-info → metalist-0.3.1}/PKG-INFO +15 -17
  2. {metalist-0.2.1 → metalist-0.3.1}/README.md +1 -1
  3. {metalist-0.2.1 → metalist-0.3.1}/app/api/routes/auth.py +18 -34
  4. {metalist-0.2.1 → metalist-0.3.1}/app/config.py +1 -2
  5. {metalist-0.2.1 → metalist-0.3.1}/app/db/schema.py +0 -14
  6. {metalist-0.2.1 → metalist-0.3.1}/app/db/settings_sql.py +0 -56
  7. {metalist-0.2.1 → metalist-0.3.1}/app/main.py +0 -18
  8. {metalist-0.2.1 → metalist-0.3.1}/app/services/auth_service.py +0 -49
  9. {metalist-0.2.1 → metalist-0.3.1}/app/services/client_state_service.py +11 -172
  10. {metalist-0.2.1 → metalist-0.3.1}/app/services/hydration_state.py +1 -2
  11. {metalist-0.2.1 → metalist-0.3.1}/app/services/latex_rendering.py +14 -25
  12. {metalist-0.2.1 → metalist-0.3.1}/app/services/markdown_rendering.py +0 -165
  13. {metalist-0.2.1 → metalist-0.3.1}/app/services/namespace_switcher.py +8 -33
  14. {metalist-0.2.1 → metalist-0.3.1}/app/services/note_store.py +2 -17
  15. {metalist-0.2.1 → metalist-0.3.1}/app/services/search_index.py +3 -90
  16. {metalist-0.2.1 → metalist-0.3.1}/app/services/sound_storage.py +1 -1
  17. {metalist-0.2.1 → metalist-0.3.1}/app/services/tag_suggestions.py +15 -235
  18. {metalist-0.2.1 → metalist-0.3.1}/app/services/tag_term_matching.py +5 -44
  19. {metalist-0.2.1 → metalist-0.3.1}/app/startup_js_sanity.py +1 -18
  20. {metalist-0.2.1 → metalist-0.3.1}/app/startup_sanity.py +1 -20
  21. {metalist-0.2.1 → metalist-0.3.1}/app/startup_sanity_config.py +0 -14
  22. {metalist-0.2.1 → metalist-0.3.1}/app/static/css/main.css +6 -12
  23. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/auth.js +39 -66
  24. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/client-state-api.js +3 -13
  25. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/login-namespace-picker.js +0 -13
  26. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/modals/namespace-modals.js +12 -5
  27. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/events/context-menu-events.js +25 -30
  28. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/events/keyboard-events.js +5 -1
  29. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/services/html-paste-sanitizer-service.js +9 -45
  30. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/services/search-suggestions-service.js +0 -3
  31. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/services/tag-bar-service.js +1 -1
  32. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/services/tag-suggestions-service.js +0 -3
  33. {metalist-0.2.1 → metalist-0.3.1}/main.py +0 -34
  34. {metalist-0.2.1 → metalist-0.3.1/metalist.egg-info}/PKG-INFO +15 -17
  35. {metalist-0.2.1 → metalist-0.3.1}/metalist.egg-info/SOURCES.txt +0 -4
  36. {metalist-0.2.1 → metalist-0.3.1}/metalist.egg-info/entry_points.txt +0 -1
  37. metalist-0.3.1/metalist.egg-info/requires.txt +18 -0
  38. {metalist-0.2.1 → metalist-0.3.1}/pyproject.toml +15 -21
  39. metalist-0.2.1/app/db/migrations.py +0 -166
  40. metalist-0.2.1/app/encryption_audit.py +0 -776
  41. metalist-0.2.1/app/static/js/modules/mode-manager/services/context-menu-target-service.js +0 -78
  42. metalist-0.2.1/app/version.py +0 -3
  43. metalist-0.2.1/metalist.egg-info/requires.txt +0 -20
  44. {metalist-0.2.1 → metalist-0.3.1}/MANIFEST.in +0 -0
  45. {metalist-0.2.1 → metalist-0.3.1}/app/__init__.py +0 -0
  46. {metalist-0.2.1 → metalist-0.3.1}/app/api/__init__.py +0 -0
  47. {metalist-0.2.1 → metalist-0.3.1}/app/api/deps.py +0 -0
  48. {metalist-0.2.1 → metalist-0.3.1}/app/api/dev.py +0 -0
  49. {metalist-0.2.1 → metalist-0.3.1}/app/api/middleware/auth.py +0 -0
  50. {metalist-0.2.1 → metalist-0.3.1}/app/api/request_auth.py +0 -0
  51. {metalist-0.2.1 → metalist-0.3.1}/app/api/routes/backups.py +0 -0
  52. {metalist-0.2.1 → metalist-0.3.1}/app/api/routes/files.py +0 -0
  53. {metalist-0.2.1 → metalist-0.3.1}/app/api/routes/mcp.py +0 -0
  54. {metalist-0.2.1 → metalist-0.3.1}/app/api/routes/memory.py +0 -0
  55. {metalist-0.2.1 → metalist-0.3.1}/app/api/routes/notes.py +0 -0
  56. {metalist-0.2.1 → metalist-0.3.1}/app/api/routes/ontology.py +0 -0
  57. {metalist-0.2.1 → metalist-0.3.1}/app/api/routes/reminders.py +0 -0
  58. {metalist-0.2.1 → metalist-0.3.1}/app/api/routes/sounds.py +0 -0
  59. {metalist-0.2.1 → metalist-0.3.1}/app/api/routes/test.py +0 -0
  60. {metalist-0.2.1 → metalist-0.3.1}/app/api/transactions.py +0 -0
  61. {metalist-0.2.1 → metalist-0.3.1}/app/db/__init__.py +0 -0
  62. {metalist-0.2.1 → metalist-0.3.1}/app/db/backup_settings_sql.py +0 -0
  63. {metalist-0.2.1 → metalist-0.3.1}/app/db/engine.py +0 -0
  64. {metalist-0.2.1 → metalist-0.3.1}/app/db/file_schema.py +0 -0
  65. {metalist-0.2.1 → metalist-0.3.1}/app/db/file_session.py +0 -0
  66. {metalist-0.2.1 → metalist-0.3.1}/app/db/files_sql.py +0 -0
  67. {metalist-0.2.1 → metalist-0.3.1}/app/db/link_titles_sql.py +0 -0
  68. {metalist-0.2.1 → metalist-0.3.1}/app/db/notes_sql.py +0 -0
  69. {metalist-0.2.1 → metalist-0.3.1}/app/db/ontology_rules_sql.py +0 -0
  70. {metalist-0.2.1 → metalist-0.3.1}/app/db/reminders_sql.py +0 -0
  71. {metalist-0.2.1 → metalist-0.3.1}/app/db/search_history_sql.py +0 -0
  72. {metalist-0.2.1 → metalist-0.3.1}/app/db/session.py +0 -0
  73. {metalist-0.2.1 → metalist-0.3.1}/app/db/sounds_sql.py +0 -0
  74. {metalist-0.2.1 → metalist-0.3.1}/app/db/tab_state_sql.py +0 -0
  75. {metalist-0.2.1 → metalist-0.3.1}/app/mcp/__init__.py +0 -0
  76. {metalist-0.2.1 → metalist-0.3.1}/app/mcp/__main__.py +0 -0
  77. {metalist-0.2.1 → metalist-0.3.1}/app/mcp/errors.py +0 -0
  78. {metalist-0.2.1 → metalist-0.3.1}/app/mcp/policy.py +0 -0
  79. {metalist-0.2.1 → metalist-0.3.1}/app/mcp/read_service.py +0 -0
  80. {metalist-0.2.1 → metalist-0.3.1}/app/mcp/server.py +0 -0
  81. {metalist-0.2.1 → metalist-0.3.1}/app/mcp/tools.py +0 -0
  82. {metalist-0.2.1 → metalist-0.3.1}/app/models/commands.py +0 -0
  83. {metalist-0.2.1 → metalist-0.3.1}/app/models/database.py +0 -0
  84. {metalist-0.2.1 → metalist-0.3.1}/app/models/entities.py +0 -0
  85. {metalist-0.2.1 → metalist-0.3.1}/app/models/enums.py +0 -0
  86. {metalist-0.2.1 → metalist-0.3.1}/app/models/linked_list.py +0 -0
  87. {metalist-0.2.1 → metalist-0.3.1}/app/models/list_operations.py +0 -0
  88. {metalist-0.2.1 → metalist-0.3.1}/app/models/list_traversal.py +0 -0
  89. {metalist-0.2.1 → metalist-0.3.1}/app/models/note_crud.py +0 -0
  90. {metalist-0.2.1 → metalist-0.3.1}/app/models/utils.py +0 -0
  91. {metalist-0.2.1 → metalist-0.3.1}/app/presentation/__init__.py +0 -0
  92. {metalist-0.2.1 → metalist-0.3.1}/app/presentation/render/__init__.py +0 -0
  93. {metalist-0.2.1 → metalist-0.3.1}/app/presentation/render/note_renderer.py +0 -0
  94. {metalist-0.2.1 → metalist-0.3.1}/app/presentation/templates.py +0 -0
  95. {metalist-0.2.1 → metalist-0.3.1}/app/security/encryption.py +0 -0
  96. {metalist-0.2.1 → metalist-0.3.1}/app/server_runtime.py +0 -0
  97. {metalist-0.2.1 → metalist-0.3.1}/app/services/__init__.py +0 -0
  98. {metalist-0.2.1 → metalist-0.3.1}/app/services/auth.py +0 -0
  99. {metalist-0.2.1 → metalist-0.3.1}/app/services/auth_cache_state.py +0 -0
  100. {metalist-0.2.1 → metalist-0.3.1}/app/services/backlinks.py +0 -0
  101. {metalist-0.2.1 → metalist-0.3.1}/app/services/backup_service.py +0 -0
  102. {metalist-0.2.1 → metalist-0.3.1}/app/services/backup_settings_service.py +0 -0
  103. {metalist-0.2.1 → metalist-0.3.1}/app/services/base_service.py +0 -0
  104. {metalist-0.2.1 → metalist-0.3.1}/app/services/content_cache.py +0 -0
  105. {metalist-0.2.1 → metalist-0.3.1}/app/services/content_formatting.py +0 -0
  106. {metalist-0.2.1 → metalist-0.3.1}/app/services/date_filtering.py +0 -0
  107. {metalist-0.2.1 → metalist-0.3.1}/app/services/dependencies.py +0 -0
  108. {metalist-0.2.1 → metalist-0.3.1}/app/services/diagnostics.py +0 -0
  109. {metalist-0.2.1 → metalist-0.3.1}/app/services/embedded_references.py +0 -0
  110. {metalist-0.2.1 → metalist-0.3.1}/app/services/encryption.py +0 -0
  111. {metalist-0.2.1 → metalist-0.3.1}/app/services/exception_capture.py +0 -0
  112. {metalist-0.2.1 → metalist-0.3.1}/app/services/file_registry.py +0 -0
  113. {metalist-0.2.1 → metalist-0.3.1}/app/services/file_storage.py +0 -0
  114. {metalist-0.2.1 → metalist-0.3.1}/app/services/html_export.py +0 -0
  115. {metalist-0.2.1 → metalist-0.3.1}/app/services/html_unformatting.py +0 -0
  116. {metalist-0.2.1 → metalist-0.3.1}/app/services/integrity.py +0 -0
  117. {metalist-0.2.1 → metalist-0.3.1}/app/services/link_titles.py +0 -0
  118. {metalist-0.2.1 → metalist-0.3.1}/app/services/login_rate_limit.py +0 -0
  119. {metalist-0.2.1 → metalist-0.3.1}/app/services/maintenance_mode.py +0 -0
  120. {metalist-0.2.1 → metalist-0.3.1}/app/services/memory.py +0 -0
  121. {metalist-0.2.1 → metalist-0.3.1}/app/services/memory_service.py +0 -0
  122. {metalist-0.2.1 → metalist-0.3.1}/app/services/namespace_deletion_jobs.py +0 -0
  123. {metalist-0.2.1 → metalist-0.3.1}/app/services/namespace_deletion_worker.py +0 -0
  124. {metalist-0.2.1 → metalist-0.3.1}/app/services/note_image_tags.py +0 -0
  125. {metalist-0.2.1 → metalist-0.3.1}/app/services/note_service.py +0 -0
  126. {metalist-0.2.1 → metalist-0.3.1}/app/services/ontology_rules_store.py +0 -0
  127. {metalist-0.2.1 → metalist-0.3.1}/app/services/query_service.py +0 -0
  128. {metalist-0.2.1 → metalist-0.3.1}/app/services/reminders.py +0 -0
  129. {metalist-0.2.1 → metalist-0.3.1}/app/services/root_sorting.py +0 -0
  130. {metalist-0.2.1 → metalist-0.3.1}/app/services/runtime_hardening.py +0 -0
  131. {metalist-0.2.1 → metalist-0.3.1}/app/services/search_history.py +0 -0
  132. {metalist-0.2.1 → metalist-0.3.1}/app/services/search_query.py +0 -0
  133. {metalist-0.2.1 → metalist-0.3.1}/app/services/search_text.py +0 -0
  134. {metalist-0.2.1 → metalist-0.3.1}/app/services/session_timeout_service.py +0 -0
  135. {metalist-0.2.1 → metalist-0.3.1}/app/services/shell_session_service.py +0 -0
  136. {metalist-0.2.1 → metalist-0.3.1}/app/services/snapshot.py +0 -0
  137. {metalist-0.2.1 → metalist-0.3.1}/app/services/store.py +0 -0
  138. {metalist-0.2.1 → metalist-0.3.1}/app/services/sync.py +0 -0
  139. {metalist-0.2.1 → metalist-0.3.1}/app/services/sync_state.py +0 -0
  140. {metalist-0.2.1 → metalist-0.3.1}/app/services/tab_state.py +0 -0
  141. {metalist-0.2.1 → metalist-0.3.1}/app/services/tag_case.py +0 -0
  142. {metalist-0.2.1 → metalist-0.3.1}/app/services/tag_ontology.py +0 -0
  143. {metalist-0.2.1 → metalist-0.3.1}/app/services/tag_rename.py +0 -0
  144. {metalist-0.2.1 → metalist-0.3.1}/app/services/test_reset.py +0 -0
  145. {metalist-0.2.1 → metalist-0.3.1}/app/services/tokens.py +0 -0
  146. {metalist-0.2.1 → metalist-0.3.1}/app/services/transaction_manager.py +0 -0
  147. {metalist-0.2.1 → metalist-0.3.1}/app/services/undo_service.py +0 -0
  148. {metalist-0.2.1 → metalist-0.3.1}/app/services/undo_state.py +0 -0
  149. {metalist-0.2.1 → metalist-0.3.1}/app/services/view_cache.py +0 -0
  150. {metalist-0.2.1 → metalist-0.3.1}/app/services/view_diff.py +0 -0
  151. {metalist-0.2.1 → metalist-0.3.1}/app/services/view_state.py +0 -0
  152. {metalist-0.2.1 → metalist-0.3.1}/app/static/config/command_palette_tags.json +0 -0
  153. {metalist-0.2.1 → metalist-0.3.1}/app/static/css/forms.css +0 -0
  154. {metalist-0.2.1 → metalist-0.3.1}/app/static/img/favicon.ico +0 -0
  155. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/locked.js +0 -0
  156. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/main.js +0 -0
  157. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/activity-tracker.js +0 -0
  158. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/api-client.js +0 -0
  159. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/async-result.js +0 -0
  160. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/client-state-migration.js +0 -0
  161. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/command-palette/click-activation-service.js +0 -0
  162. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/command-palette/command-palette-controller.js +0 -0
  163. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/command-palette/endpoint-registry.js +0 -0
  164. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/command-palette/preferences-store.js +0 -0
  165. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/command-palette/tag-config-loader.js +0 -0
  166. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/command-palette/usage-store.js +0 -0
  167. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/config.js +0 -0
  168. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/connectivity-monitor.js +0 -0
  169. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/context-menu/context-menu-registry.js +0 -0
  170. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/context-menu/context-menu-service.js +0 -0
  171. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/context-menu/input-caret-service.js +0 -0
  172. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/dom-utils-fixed.js +0 -0
  173. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/dom-utils.js +0 -0
  174. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/editor-commands.js +0 -0
  175. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/editor-selection.js +0 -0
  176. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/editor-toolbar.js +0 -0
  177. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/error-handler.js +0 -0
  178. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/error-overlay.js +0 -0
  179. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/location-flags.js +0 -0
  180. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/modals/alphabetize-root-notes-modal.js +0 -0
  181. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/modals/backup-restore-modal.js +0 -0
  182. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/modals/backup-result-modal.js +0 -0
  183. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/modals/backup-retention-modal.js +0 -0
  184. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/modals/backup-settings-modal.js +0 -0
  185. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/modals/base-modal.js +0 -0
  186. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/modals/delete-namespace-modal.js +0 -0
  187. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/modals/delete-namespace-validation.js +0 -0
  188. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/modals/help-modal.js +0 -0
  189. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/modals/memory-modal.js +0 -0
  190. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/modals/namespace-loading-page.js +0 -0
  191. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/modals/ontology-modal.js +0 -0
  192. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/modals/password-modal.js +0 -0
  193. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/modals/prioritize-modal.js +0 -0
  194. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/modals/random-password-modal.js +0 -0
  195. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/modals/reminder-modal.js +0 -0
  196. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/modals/reset-updated-at-modal.js +0 -0
  197. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/modals/session-timeout-modal.js +0 -0
  198. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/modals/sound-manager-modal.js +0 -0
  199. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/modals/version-info-modal.js +0 -0
  200. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/actions/content-actions.js +0 -0
  201. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/actions/history-actions.js +0 -0
  202. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/actions/note-actions.js +0 -0
  203. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/actions/search-actions.js +0 -0
  204. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/actions/selection-actions.js +0 -0
  205. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/actions/ui-actions.js +0 -0
  206. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/events/focus-events.js +0 -0
  207. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/events/inactivity-events.js +0 -0
  208. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/events/input-events.js +0 -0
  209. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/events/mouse-events.js +0 -0
  210. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/events/search-events.js +0 -0
  211. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/mode-context.js +0 -0
  212. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/mode-logger.js +0 -0
  213. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/mode-manager-controller.js +0 -0
  214. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/services/animated-scroll-service.js +0 -0
  215. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/services/backlinks-panel-service.js +0 -0
  216. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/services/clipboard-shortcut-policy-service.js +0 -0
  217. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/services/collapse-affordance-service.js +0 -0
  218. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/services/collapse-editing-policy-service.js +0 -0
  219. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/services/command-gate-service.js +0 -0
  220. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/services/date-filter-indicator-service.js +0 -0
  221. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/services/date-filter-service.js +0 -0
  222. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/services/differential-view-service.js +0 -0
  223. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/services/edit-session-collapse-policy-service.js +0 -0
  224. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/services/edit-session-collapse-service.js +0 -0
  225. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/services/embedded-image-service.js +0 -0
  226. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/services/file-image-preview-service.js +0 -0
  227. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/services/file-reference-service.js +0 -0
  228. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/services/filtered-refresh-selection-service.js +0 -0
  229. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/services/image-context-menu-action-service.js +0 -0
  230. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/services/image-file-insert-choice-modal-service.js +0 -0
  231. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/services/infinite-scroll-service.js +0 -0
  232. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/services/link-context-menu-action-service.js +0 -0
  233. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/services/markdown-render-service.js +0 -0
  234. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/services/note-click-target-service.js +0 -0
  235. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/services/note-clipboard-write-service.js +0 -0
  236. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/services/note-collapse-animation-service.js +0 -0
  237. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/services/note-context-menu-action-service.js +0 -0
  238. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/services/note-drag-service.js +0 -0
  239. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/services/note-reposition-animation-service.js +0 -0
  240. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/services/note-split-service.js +0 -0
  241. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/services/password-clipboard-service.js +0 -0
  242. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/services/polling-service.js +0 -0
  243. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/services/rhs-panel-service.js +0 -0
  244. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/services/root-date-separator-service.js +0 -0
  245. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/services/root-sort-indicator-service.js +0 -0
  246. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/services/root-sort-service.js +0 -0
  247. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/services/scroll-anchor-service.js +0 -0
  248. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/services/scroll-restoration-service.js +0 -0
  249. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/services/scroll-to-top-service.js +0 -0
  250. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/services/search-contexts-overlay-service.js +0 -0
  251. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/services/search-debounce-service.js +0 -0
  252. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/services/search-input-service.js +0 -0
  253. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/services/search-interaction-service.js +0 -0
  254. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/services/search-redaction-reveal-service.js +0 -0
  255. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/services/search-syntax-service.js +0 -0
  256. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/services/shell-output-service.js +0 -0
  257. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/services/tab-dom-cache-service.js +0 -0
  258. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/services/tab-duplication-service.js +0 -0
  259. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/services/tab-state-service.js +0 -0
  260. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/services/tag-syntax-service.js +0 -0
  261. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/services/todo-toggle-editing-service.js +0 -0
  262. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/mode-manager/services/view-mode-search-shortcut-service.js +0 -0
  263. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/password-generator.js +0 -0
  264. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/reminder-store.js +0 -0
  265. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/reminder-surface-service.js +0 -0
  266. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/selection-markers.js +0 -0
  267. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/session-auth.js +0 -0
  268. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/sound-service.js +0 -0
  269. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/tag-token.js +0 -0
  270. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/modules/uuid.js +0 -0
  271. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/namespace-deleted.js +0 -0
  272. {metalist-0.2.1 → metalist-0.3.1}/app/static/js/vendor/markdown-it.min.js +0 -0
  273. {metalist-0.2.1 → metalist-0.3.1}/app/static/video/login-startup.mp4 +0 -0
  274. {metalist-0.2.1 → metalist-0.3.1}/app/templates/base.html +0 -0
  275. {metalist-0.2.1 → metalist-0.3.1}/app/templates/index.html +0 -0
  276. {metalist-0.2.1 → metalist-0.3.1}/app/templates/locked.html +0 -0
  277. {metalist-0.2.1 → metalist-0.3.1}/app/templates/maintenance.html +0 -0
  278. {metalist-0.2.1 → metalist-0.3.1}/app/templates/namespace_deleted.html +0 -0
  279. {metalist-0.2.1 → metalist-0.3.1}/app/templates/notes_list.html +0 -0
  280. {metalist-0.2.1 → metalist-0.3.1}/app/usecases/__init__.py +0 -0
  281. {metalist-0.2.1 → metalist-0.3.1}/app/usecases/alphabetize_root_notes.py +0 -0
  282. {metalist-0.2.1 → metalist-0.3.1}/app/usecases/base.py +0 -0
  283. {metalist-0.2.1 → metalist-0.3.1}/app/usecases/collapse.py +0 -0
  284. {metalist-0.2.1 → metalist-0.3.1}/app/usecases/copy_note.py +0 -0
  285. {metalist-0.2.1 → metalist-0.3.1}/app/usecases/create_child.py +0 -0
  286. {metalist-0.2.1 → metalist-0.3.1}/app/usecases/create_note.py +0 -0
  287. {metalist-0.2.1 → metalist-0.3.1}/app/usecases/create_sibling.py +0 -0
  288. {metalist-0.2.1 → metalist-0.3.1}/app/usecases/delete_subtree.py +0 -0
  289. {metalist-0.2.1 → metalist-0.3.1}/app/usecases/expand.py +0 -0
  290. {metalist-0.2.1 → metalist-0.3.1}/app/usecases/indent.py +0 -0
  291. {metalist-0.2.1 → metalist-0.3.1}/app/usecases/lock.py +0 -0
  292. {metalist-0.2.1 → metalist-0.3.1}/app/usecases/move.py +0 -0
  293. {metalist-0.2.1 → metalist-0.3.1}/app/usecases/move_to_top.py +0 -0
  294. {metalist-0.2.1 → metalist-0.3.1}/app/usecases/outdent.py +0 -0
  295. {metalist-0.2.1 → metalist-0.3.1}/app/usecases/paste_child.py +0 -0
  296. {metalist-0.2.1 → metalist-0.3.1}/app/usecases/paste_sibling.py +0 -0
  297. {metalist-0.2.1 → metalist-0.3.1}/app/usecases/prioritize.py +0 -0
  298. {metalist-0.2.1 → metalist-0.3.1}/app/usecases/record_edit_mode.py +0 -0
  299. {metalist-0.2.1 → metalist-0.3.1}/app/usecases/redo.py +0 -0
  300. {metalist-0.2.1 → metalist-0.3.1}/app/usecases/rename_tag.py +0 -0
  301. {metalist-0.2.1 → metalist-0.3.1}/app/usecases/reset_updated_at.py +0 -0
  302. {metalist-0.2.1 → metalist-0.3.1}/app/usecases/run_shell.py +0 -0
  303. {metalist-0.2.1 → metalist-0.3.1}/app/usecases/search_comment_autofill.py +0 -0
  304. {metalist-0.2.1 → metalist-0.3.1}/app/usecases/search_context_tags.py +0 -0
  305. {metalist-0.2.1 → metalist-0.3.1}/app/usecases/set_collapse_bulk.py +0 -0
  306. {metalist-0.2.1 → metalist-0.3.1}/app/usecases/set_collapse_in_context.py +0 -0
  307. {metalist-0.2.1 → metalist-0.3.1}/app/usecases/split_note.py +0 -0
  308. {metalist-0.2.1 → metalist-0.3.1}/app/usecases/toggle_reference_mode.py +0 -0
  309. {metalist-0.2.1 → metalist-0.3.1}/app/usecases/toggle_todo_done.py +0 -0
  310. {metalist-0.2.1 → metalist-0.3.1}/app/usecases/undo.py +0 -0
  311. {metalist-0.2.1 → metalist-0.3.1}/app/usecases/unformat_content.py +0 -0
  312. {metalist-0.2.1 → metalist-0.3.1}/app/usecases/update_content.py +0 -0
  313. {metalist-0.2.1 → metalist-0.3.1}/app/usecases/view.py +0 -0
  314. {metalist-0.2.1 → metalist-0.3.1}/app/utils/__init__.py +0 -0
  315. {metalist-0.2.1 → metalist-0.3.1}/app/utils/encryption.py +0 -0
  316. {metalist-0.2.1 → metalist-0.3.1}/app/utils/text_utils.py +0 -0
  317. {metalist-0.2.1 → metalist-0.3.1}/convert-from-legacy.py +0 -0
  318. {metalist-0.2.1 → metalist-0.3.1}/mcp_client.py +0 -0
  319. {metalist-0.2.1 → metalist-0.3.1}/metalist.egg-info/dependency_links.txt +0 -0
  320. {metalist-0.2.1 → metalist-0.3.1}/metalist.egg-info/top_level.txt +0 -0
  321. {metalist-0.2.1 → metalist-0.3.1}/scripts/generate-lan-cert.sh +0 -0
  322. {metalist-0.2.1 → metalist-0.3.1}/setup.cfg +0 -0
@@ -1,31 +1,29 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: metalist
3
- Version: 0.2.1
3
+ Version: 0.3.1
4
4
  Summary: A minimalist single-user note-taking app with SSR, fast in-memory tree operations, and efficient sync.
5
5
  Project-URL: Homepage, https://github.com/evolvingstuff/metalist
6
6
  Project-URL: Repository, https://github.com/evolvingstuff/metalist
7
7
  Project-URL: Issues, https://github.com/evolvingstuff/metalist/issues
8
8
  Requires-Python: <3.14,>=3.10
9
9
  Description-Content-Type: text/markdown
10
- Requires-Dist: argon2-cffi==25.1.0
11
- Requires-Dist: cryptography==50.0.0
12
- Requires-Dist: fastapi==0.141.1
13
- Requires-Dist: httpx==0.28.1
10
+ Requires-Dist: argon2-cffi==23.1.0
11
+ Requires-Dist: cryptography==42.0.5
12
+ Requires-Dist: fastapi==0.110.0
14
13
  Requires-Dist: latex2mathml==3.81.0
15
- Requires-Dist: loguru==0.7.3
16
- Requires-Dist: Mako==1.3.12
17
- Requires-Dist: mutagen==1.48.1
18
- Requires-Dist: pydantic==2.13.4
19
- Requires-Dist: python-multipart==0.0.32
20
- Requires-Dist: starlette==1.3.1
21
- Requires-Dist: tqdm==4.70.0
14
+ Requires-Dist: loguru==0.7.2
15
+ Requires-Dist: Mako==1.3.2
16
+ Requires-Dist: mutagen==1.47.0
17
+ Requires-Dist: pydantic==2.9.2
18
+ Requires-Dist: python-multipart==0.0.9
19
+ Requires-Dist: starlette==0.36.3
22
20
  Requires-Dist: tree-sitter==0.25.2
23
21
  Requires-Dist: tree-sitter-javascript==0.25.0
24
- Requires-Dist: uvicorn==0.52.0
22
+ Requires-Dist: uvicorn==0.27.1
25
23
  Provides-Extra: dev
26
- Requires-Dist: hypothesis==6.164.0; extra == "dev"
27
- Requires-Dist: pytest==9.1.1; extra == "dev"
28
- Requires-Dist: pytest-cov==7.1.0; extra == "dev"
24
+ Requires-Dist: hypothesis==6.112.0; extra == "dev"
25
+ Requires-Dist: pytest==8.0.0; extra == "dev"
26
+ Requires-Dist: pytest-cov==4.1.0; extra == "dev"
29
27
 
30
28
  # MetaList
31
29
 
@@ -263,7 +261,7 @@ This repo now packages itself under the PyPI distribution name `metalist`. Curre
263
261
 
264
262
  Recommended release path:
265
263
  1. In the existing PyPI project `metalist`, configure GitHub Trusted Publishing for `evolvingstuff/metalist` and the workflow file `.github/workflows/publish-pypi.yml`.
266
- 2. Push a tag such as `v0.2.1`.
264
+ 2. Push a tag such as `v0.3.1`.
267
265
  3. After the GitHub Actions workflow completes, users can run it with `uvx metalist`, install it persistently with `uv tool install metalist`, or install it with `pip install metalist`.
268
266
 
269
267
  If `--input` is omitted, a file picker opens (when `tkinter` is available).
@@ -234,7 +234,7 @@ This repo now packages itself under the PyPI distribution name `metalist`. Curre
234
234
 
235
235
  Recommended release path:
236
236
  1. In the existing PyPI project `metalist`, configure GitHub Trusted Publishing for `evolvingstuff/metalist` and the workflow file `.github/workflows/publish-pypi.yml`.
237
- 2. Push a tag such as `v0.2.1`.
237
+ 2. Push a tag such as `v0.3.1`.
238
238
  3. After the GitHub Actions workflow completes, users can run it with `uvx metalist`, install it persistently with `uv tool install metalist`, or install it with `pip install metalist`.
239
239
 
240
240
  If `--input` is omitted, a file picker opens (when `tkinter` is available).
@@ -408,16 +408,7 @@ def _verify_namespace_password(*, namespace: str, password: str) -> None:
408
408
  raise HTTPException(status_code=401, detail="Invalid password")
409
409
 
410
410
 
411
- def _run_hydration(*, rebuild_required: bool) -> None:
412
- hydration_state.set_phase(
413
- phase="database_check",
414
- message="Database is up to date",
415
- total=1,
416
- )
417
- hydration_state.update(1)
418
- if not rebuild_required:
419
- hydration_state.finish()
420
- return
411
+ def _run_hydration() -> None:
421
412
  session = SafeSession()
422
413
  try:
423
414
  prefetched_rows = populate_cache_from_db(session)
@@ -440,7 +431,7 @@ def _on_hydration_done(future: Future) -> None:
440
431
  hydration_state.fail(str(error))
441
432
 
442
433
 
443
- def _start_hydration(*, first_load: bool, rebuild_required: bool) -> None:
434
+ def _start_hydration(first_load: bool) -> None:
444
435
  global _hydration_future
445
436
  with _hydration_lock:
446
437
  if _hydration_future is not None and not _hydration_future.done():
@@ -449,10 +440,7 @@ def _start_hydration(*, first_load: bool, rebuild_required: bool) -> None:
449
440
  first_load=first_load,
450
441
  message="Preparing encrypted data",
451
442
  )
452
- _hydration_future = _hydration_executor.submit(
453
- _run_hydration,
454
- rebuild_required=rebuild_required,
455
- )
443
+ _hydration_future = _hydration_executor.submit(_run_hydration)
456
444
  _hydration_future.add_done_callback(_on_hydration_done)
457
445
 
458
446
 
@@ -461,7 +449,7 @@ def _build_hydration_status() -> HydrationStatusResponse:
461
449
  if not auth_cache_state.cache_refresh_needed() and snapshot["status"] == "idle":
462
450
  snapshot["status"] = "ready"
463
451
  snapshot["phase"] = "complete"
464
- snapshot["message"] = "Workspace ready"
452
+ snapshot["message"] = "Hydration complete"
465
453
  snapshot["overall_percent"] = 100
466
454
  return HydrationStatusResponse(**snapshot)
467
455
 
@@ -636,7 +624,6 @@ def login(
636
624
  raise HTTPException(status_code=401, detail="Invalid password")
637
625
 
638
626
  dek = auth.unwrap_dek_for_password(payload.password)
639
- auth.run_authenticated_database_migrations(dek=dek)
640
627
 
641
628
  set_session_dek(dek)
642
629
  ensure_rules_decrypted_and_compiled(token="")
@@ -645,13 +632,17 @@ def login(
645
632
  reminder_store.ensure_decrypted(token="")
646
633
  search_history_store.ensure_decrypted(token="")
647
634
 
635
+ needs_hydration = auth_cache_state.cache_refresh_needed()
636
+ if not note_store.loaded:
637
+ needs_hydration = True
638
+
648
639
  token = token_service.create_token(_client_info(request), tab_id, dek=dek)
649
640
  set_auth_cookie(request=request, response=response, token=token)
650
641
  login_rate_limiter.record_success(rate_limit_key)
651
642
  clear_all_locks()
652
643
  return LoginResponse(
653
644
  message="Login successful",
654
- hydration_required=True,
645
+ hydration_required=needs_hydration,
655
646
  )
656
647
 
657
648
 
@@ -755,11 +746,6 @@ def auth_status(
755
746
  database_user_version = database_user_version_row[0]
756
747
  if not isinstance(database_user_version, int) or database_user_version < 0:
757
748
  raise RuntimeError(f"Invalid database user_version: {database_user_version!r}")
758
- client_preferences: dict[str, str] = {}
759
- if not bool(settings and settings.encryption_enabled):
760
- client_preferences = load_client_preferences(token="")
761
- elif token is not None:
762
- client_preferences = load_client_preferences(token=token)
763
749
  return {
764
750
  "version": VERSION,
765
751
  "database_user_version": database_user_version,
@@ -774,13 +760,14 @@ def auth_status(
774
760
  "cache_ready": not auth_cache_state.cache_refresh_needed(),
775
761
  "namespace": ACTIVE_NAMESPACE,
776
762
  "link_title_revision": link_title_store.get_revision(),
777
- "client_preferences": client_preferences,
763
+ "client_preferences": load_client_preferences(),
778
764
  }
779
765
 
780
766
 
781
767
  @router.get("/client-state", response_model=ClientStateResponse)
782
768
  def get_client_state(token: Annotated[str, Depends(_require_auth)]):
783
- payload = load_client_state(token=token)
769
+ del token
770
+ payload = load_client_state()
784
771
  return ClientStateResponse(**payload)
785
772
 
786
773
 
@@ -790,7 +777,8 @@ def put_client_preferences(
790
777
  payload: ClientPreferencesUpdateRequest,
791
778
  token: Annotated[str, Depends(_require_auth)],
792
779
  ):
793
- normalized = save_client_preferences(preferences=payload.preferences, token=token)
780
+ del token
781
+ normalized = save_client_preferences(preferences=payload.preferences)
794
782
  return ClientPreferencesResponse(preferences=normalized)
795
783
 
796
784
 
@@ -800,10 +788,8 @@ def put_command_palette_usage(
800
788
  payload: CommandPaletteUsageUpdateRequest,
801
789
  token: Annotated[str, Depends(_require_auth)],
802
790
  ):
803
- normalized = save_command_palette_usage(
804
- usage_state=payload.command_palette_usage,
805
- token=token,
806
- )
791
+ del token
792
+ normalized = save_command_palette_usage(usage_state=payload.command_palette_usage)
807
793
  return CommandPaletteUsageResponse(command_palette_usage=normalized)
808
794
 
809
795
 
@@ -1081,10 +1067,8 @@ def hydrate_cache(
1081
1067
  if not note_store.loaded:
1082
1068
  needs_hydration = True
1083
1069
 
1084
- _start_hydration(
1085
- first_load=auth_cache_state.cache_refresh_needed(),
1086
- rebuild_required=needs_hydration,
1087
- )
1070
+ if needs_hydration:
1071
+ _start_hydration(first_load=auth_cache_state.cache_refresh_needed())
1088
1072
 
1089
1073
  return _build_hydration_status()
1090
1074
 
@@ -5,9 +5,8 @@ from app.server_runtime import resolve_api_prefix
5
5
  from app.server_runtime import resolve_database_runtime_config
6
6
  from app.server_runtime import resolve_default_database_path
7
7
  from app.server_runtime import resolve_v1_api_prefix
8
- from app.version import __version__
9
8
 
10
- VERSION = __version__
9
+ VERSION = "0.3.0"
11
10
 
12
11
 
13
12
  def _env_flag(name: str, default: bool) -> bool:
@@ -64,14 +64,7 @@ CREATE TABLE IF NOT EXISTS {APP_SETTINGS_TABLE} (
64
64
  backup_settings_encryption_nonce BLOB,
65
65
  backup_settings_encryption_tag BLOB,
66
66
  client_preferences_json TEXT,
67
- client_preferences_encryption_nonce BLOB,
68
- client_preferences_encryption_tag BLOB,
69
67
  command_palette_usage_json TEXT,
70
- command_palette_usage_encryption_nonce BLOB,
71
- command_palette_usage_encryption_tag BLOB,
72
- tag_prefix_settings_json TEXT,
73
- tag_prefix_settings_encryption_nonce BLOB,
74
- tag_prefix_settings_encryption_tag BLOB,
75
68
  session_timeout_minutes INTEGER,
76
69
  created_at TEXT NOT NULL,
77
70
  updated_at TEXT NOT NULL
@@ -217,14 +210,7 @@ def initialize_schema(connection: Connection) -> None:
217
210
  "backup_settings_encryption_nonce": "BLOB",
218
211
  "backup_settings_encryption_tag": "BLOB",
219
212
  "client_preferences_json": "TEXT",
220
- "client_preferences_encryption_nonce": "BLOB",
221
- "client_preferences_encryption_tag": "BLOB",
222
213
  "command_palette_usage_json": "TEXT",
223
- "command_palette_usage_encryption_nonce": "BLOB",
224
- "command_palette_usage_encryption_tag": "BLOB",
225
- "tag_prefix_settings_json": "TEXT",
226
- "tag_prefix_settings_encryption_nonce": "BLOB",
227
- "tag_prefix_settings_encryption_tag": "BLOB",
228
214
  "session_timeout_minutes": "INTEGER",
229
215
  },
230
216
  )
@@ -51,22 +51,7 @@ def fetch_settings(connection: GuardedConnection | sqlite3.Connection) -> Option
51
51
  "backup_settings_encryption_nonce": row["backup_settings_encryption_nonce"],
52
52
  "backup_settings_encryption_tag": row["backup_settings_encryption_tag"],
53
53
  "client_preferences_json": row["client_preferences_json"],
54
- "client_preferences_encryption_nonce": row["client_preferences_encryption_nonce"],
55
- "client_preferences_encryption_tag": row["client_preferences_encryption_tag"],
56
54
  "command_palette_usage_json": row["command_palette_usage_json"],
57
- "command_palette_usage_encryption_nonce": row[
58
- "command_palette_usage_encryption_nonce"
59
- ],
60
- "command_palette_usage_encryption_tag": row[
61
- "command_palette_usage_encryption_tag"
62
- ],
63
- "tag_prefix_settings_json": row["tag_prefix_settings_json"],
64
- "tag_prefix_settings_encryption_nonce": row[
65
- "tag_prefix_settings_encryption_nonce"
66
- ],
67
- "tag_prefix_settings_encryption_tag": row[
68
- "tag_prefix_settings_encryption_tag"
69
- ],
70
55
  "session_timeout_minutes": row["session_timeout_minutes"],
71
56
  "created_at": datetime.fromisoformat(row["created_at"]),
72
57
  "updated_at": datetime.fromisoformat(row["updated_at"]),
@@ -183,8 +168,6 @@ def update_client_preferences_json(
183
168
  connection: GuardedConnection | sqlite3.Connection,
184
169
  *,
185
170
  client_preferences_json: str,
186
- client_preferences_encryption_nonce: bytes | None,
187
- client_preferences_encryption_tag: bytes | None,
188
171
  ) -> None:
189
172
  if not isinstance(client_preferences_json, str):
190
173
  raise TypeError("client_preferences_json must be a string")
@@ -194,15 +177,11 @@ def update_client_preferences_json(
194
177
  f"""
195
178
  UPDATE {APP_SETTINGS_TABLE}
196
179
  SET client_preferences_json = ?,
197
- client_preferences_encryption_nonce = ?,
198
- client_preferences_encryption_tag = ?,
199
180
  updated_at = ?
200
181
  WHERE id = 1
201
182
  """,
202
183
  (
203
184
  client_preferences_json,
204
- client_preferences_encryption_nonce,
205
- client_preferences_encryption_tag,
206
185
  _serialize_datetime(datetime.now(timezone.utc)),
207
186
  ),
208
187
  )
@@ -212,8 +191,6 @@ def update_command_palette_usage_json(
212
191
  connection: GuardedConnection | sqlite3.Connection,
213
192
  *,
214
193
  command_palette_usage_json: str,
215
- command_palette_usage_encryption_nonce: bytes | None,
216
- command_palette_usage_encryption_tag: bytes | None,
217
194
  ) -> None:
218
195
  if not isinstance(command_palette_usage_json, str):
219
196
  raise TypeError("command_palette_usage_json must be a string")
@@ -223,44 +200,11 @@ def update_command_palette_usage_json(
223
200
  f"""
224
201
  UPDATE {APP_SETTINGS_TABLE}
225
202
  SET command_palette_usage_json = ?,
226
- command_palette_usage_encryption_nonce = ?,
227
- command_palette_usage_encryption_tag = ?,
228
203
  updated_at = ?
229
204
  WHERE id = 1
230
205
  """,
231
206
  (
232
207
  command_palette_usage_json,
233
- command_palette_usage_encryption_nonce,
234
- command_palette_usage_encryption_tag,
235
- _serialize_datetime(datetime.now(timezone.utc)),
236
- ),
237
- )
238
-
239
-
240
- def update_tag_prefix_settings_json(
241
- connection: GuardedConnection | sqlite3.Connection,
242
- *,
243
- tag_prefix_settings_json: str,
244
- tag_prefix_settings_encryption_nonce: bytes | None,
245
- tag_prefix_settings_encryption_tag: bytes | None,
246
- ) -> None:
247
- if not isinstance(tag_prefix_settings_json, str):
248
- raise TypeError("tag_prefix_settings_json must be a string")
249
-
250
- conn = _conn(connection)
251
- conn.execute(
252
- f"""
253
- UPDATE {APP_SETTINGS_TABLE}
254
- SET tag_prefix_settings_json = ?,
255
- tag_prefix_settings_encryption_nonce = ?,
256
- tag_prefix_settings_encryption_tag = ?,
257
- updated_at = ?
258
- WHERE id = 1
259
- """,
260
- (
261
- tag_prefix_settings_json,
262
- tag_prefix_settings_encryption_nonce,
263
- tag_prefix_settings_encryption_tag,
264
208
  _serialize_datetime(datetime.now(timezone.utc)),
265
209
  ),
266
210
  )
@@ -10,9 +10,6 @@ from .api.middleware.auth import AuthMiddleware
10
10
  from app.config import ACTIVE_NAMESPACE, STARTUP_ANIMATION_ENABLED, VERSION
11
11
  from .db.session import begin_writer, enable_read_guard
12
12
  from .db.schema import initialize_schema
13
- from .db.migrations import CURRENT_DATABASE_VERSION
14
- from .db.migrations import read_database_version
15
- from .db.migrations import run_database_migrations
16
13
  from .db.notes_sql import clear_encryption_metadata_for_empty_notes
17
14
  from .db.settings_sql import fetch_settings, insert_default_settings
18
15
  from .api.deps import get_db
@@ -156,21 +153,6 @@ with begin_writer() as connection:
156
153
  settings = fetch_settings(connection)
157
154
  if not settings:
158
155
  insert_default_settings(connection)
159
- settings = fetch_settings(connection)
160
- if settings is None:
161
- raise RuntimeError("App settings missing after schema initialization")
162
- database_version = read_database_version(connection.raw_connection)
163
- if database_version > CURRENT_DATABASE_VERSION:
164
- raise RuntimeError(
165
- f"Database version {database_version} is newer than supported version "
166
- f"{CURRENT_DATABASE_VERSION}"
167
- )
168
- if not bool(settings["encryption_enabled"]):
169
- run_database_migrations(
170
- connection=connection.raw_connection,
171
- encryption_enabled=False,
172
- encryption_service=None,
173
- )
174
156
  bootstrap_ontology_rules_store(connection=connection)
175
157
  tab_state_store.bootstrap(connection=connection)
176
158
  link_title_store.bootstrap(connection=connection)
@@ -19,10 +19,6 @@ from app.config import (
19
19
  VAULT_VERSION,
20
20
  )
21
21
  from app.db.session import begin_writer
22
- from app.db.migrations import CURRENT_DATABASE_VERSION
23
- from app.db.migrations import MigrationResult
24
- from app.db.migrations import read_database_version
25
- from app.db.migrations import run_database_migrations
26
22
  from app.db.notes_sql import fetch_all_for_cache
27
23
  from app.db.notes_sql import update_note_fields_preserving_updated_at
28
24
  from app.db.ontology_rules_sql import fetch_all_rules as fetch_all_ontology_rules
@@ -48,8 +44,6 @@ from app.services.encryption import EncryptionService
48
44
  from app.services.maintenance_mode import maintenance_service
49
45
  from app.services.note_store import store as note_store
50
46
  from app.services.tab_state import tab_state_store
51
- from app.services.backup_service import create_timestamped_backup
52
- from app.services.client_state_service import rewrite_client_state_storage
53
47
  from app.security.encryption import set_encryption_required
54
48
 
55
49
 
@@ -203,39 +197,6 @@ class AuthService:
203
197
  kek,
204
198
  )
205
199
 
206
- def run_authenticated_database_migrations(self, *, dek: bytes) -> MigrationResult:
207
- if not isinstance(dek, bytes) or len(dek) == 0:
208
- raise ValueError("Database migrations require a non-empty DEK")
209
- connection = self.db.connection()
210
- initial_version = read_database_version(connection)
211
- if initial_version > CURRENT_DATABASE_VERSION:
212
- raise RuntimeError(
213
- f"Database version {initial_version} is newer than supported version "
214
- f"{CURRENT_DATABASE_VERSION}"
215
- )
216
- if initial_version == CURRENT_DATABASE_VERSION:
217
- return MigrationResult(
218
- initial_version=initial_version,
219
- final_version=initial_version,
220
- applied_versions=(),
221
- rewritten_payload_count=0,
222
- )
223
- maintenance_service.enter_maintenance("Upgrading namespace database")
224
- try:
225
- create_timestamped_backup()
226
- migration_encryption = EncryptionService()
227
- migration_encryption.dek = dek
228
- with SafeSession.allow_reads("auth:database_migrations"):
229
- with connection:
230
- migration_result = run_database_migrations(
231
- connection=connection,
232
- encryption_enabled=True,
233
- encryption_service=migration_encryption,
234
- )
235
- return migration_result
236
- finally:
237
- maintenance_service.exit_maintenance()
238
-
239
200
  def set_password(self, password: str, time_cost: int) -> Tuple[bool, str]:
240
201
  """Enable password protection by encrypting all existing content."""
241
202
  if self.has_password():
@@ -418,11 +379,6 @@ class AuthService:
418
379
  encryption_service=self.encryption,
419
380
  force_plaintext=False,
420
381
  )
421
- rewrite_client_state_storage(
422
- connection=connection,
423
- encryption_service=self.encryption,
424
- force_plaintext=False,
425
- )
426
382
  finally:
427
383
  maintenance_service.exit_maintenance()
428
384
 
@@ -697,11 +653,6 @@ class AuthService:
697
653
  encryption_service=None,
698
654
  force_plaintext=True,
699
655
  )
700
- rewrite_client_state_storage(
701
- connection=connection,
702
- encryption_service=self.encryption,
703
- force_plaintext=True,
704
- )
705
656
  clear_password_settings(connection)
706
657
  self.encryption.clear_keys()
707
658
  finally: