MetaList 0.4.2__tar.gz → 0.6.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 (465) hide show
  1. {metalist-0.4.2/metalist.egg-info → metalist-0.6.1}/PKG-INFO +33 -8
  2. {metalist-0.4.2 → metalist-0.6.1}/README.md +32 -6
  3. {metalist-0.4.2 → metalist-0.6.1}/app/api/middleware/auth.py +5 -19
  4. metalist-0.6.1/app/api/note_requests.py +335 -0
  5. {metalist-0.4.2 → metalist-0.6.1}/app/api/routes/ai.py +50 -264
  6. {metalist-0.4.2 → metalist-0.6.1}/app/api/routes/auth.py +81 -53
  7. {metalist-0.4.2 → metalist-0.6.1}/app/api/routes/backups.py +3 -0
  8. {metalist-0.4.2 → metalist-0.6.1}/app/api/routes/files.py +2 -4
  9. {metalist-0.4.2 → metalist-0.6.1}/app/api/routes/notes.py +148 -74
  10. {metalist-0.4.2 → metalist-0.6.1}/app/api/routes/ontology.py +23 -4
  11. {metalist-0.4.2 → metalist-0.6.1}/app/api/routes/reminders.py +20 -10
  12. {metalist-0.4.2 → metalist-0.6.1}/app/api/routes/remote_images.py +4 -3
  13. {metalist-0.4.2 → metalist-0.6.1}/app/api/transactions.py +28 -5
  14. metalist-0.6.1/app/api/upload_limits.py +73 -0
  15. {metalist-0.4.2 → metalist-0.6.1}/app/db/file_schema.py +0 -20
  16. {metalist-0.4.2 → metalist-0.6.1}/app/db/file_session.py +8 -6
  17. {metalist-0.4.2 → metalist-0.6.1}/app/db/files_sql.py +24 -0
  18. metalist-0.6.1/app/db/live_recovery.py +263 -0
  19. {metalist-0.4.2 → metalist-0.6.1}/app/db/migrations.py +2 -0
  20. {metalist-0.4.2 → metalist-0.6.1}/app/db/notes_sql.py +6 -0
  21. metalist-0.6.1/app/db/retire_sounds.py +67 -0
  22. {metalist-0.4.2 → metalist-0.6.1}/app/db/session.py +79 -26
  23. {metalist-0.4.2 → metalist-0.6.1}/app/db/version.py +1 -1
  24. {metalist-0.4.2 → metalist-0.6.1}/app/encryption_audit.py +7 -2
  25. metalist-0.6.1/app/exception_boundaries.py +154 -0
  26. metalist-0.6.1/app/https_proxy.py +135 -0
  27. {metalist-0.4.2 → metalist-0.6.1}/app/main.py +52 -82
  28. {metalist-0.4.2 → metalist-0.6.1}/app/models/database.py +35 -8
  29. {metalist-0.4.2 → metalist-0.6.1}/app/models/linked_list.py +1 -1
  30. {metalist-0.4.2 → metalist-0.6.1}/app/models/list_operations.py +6 -7
  31. {metalist-0.4.2 → metalist-0.6.1}/app/models/note_crud.py +2 -28
  32. {metalist-0.4.2 → metalist-0.6.1}/app/models/utils.py +73 -93
  33. {metalist-0.4.2 → metalist-0.6.1}/app/security/request_boundary.py +21 -15
  34. metalist-0.6.1/app/security/sensitive_cache.py +78 -0
  35. {metalist-0.4.2 → metalist-0.6.1}/app/server_runtime.py +13 -10
  36. {metalist-0.4.2 → metalist-0.6.1}/app/services/agent/cloud_privacy.py +8 -0
  37. {metalist-0.4.2 → metalist-0.6.1}/app/services/agent/evidence_serialization.py +31 -31
  38. {metalist-0.4.2 → metalist-0.6.1}/app/services/agent/investigation.py +8 -9
  39. {metalist-0.4.2 → metalist-0.6.1}/app/services/ai_chat.py +26 -1
  40. metalist-0.6.1/app/services/ai_chat_stream.py +129 -0
  41. {metalist-0.4.2 → metalist-0.6.1}/app/services/auth_service.py +143 -361
  42. {metalist-0.4.2 → metalist-0.6.1}/app/services/backup_service.py +57 -44
  43. {metalist-0.4.2 → metalist-0.6.1}/app/services/bulk_operation.py +29 -18
  44. {metalist-0.4.2 → metalist-0.6.1}/app/services/client_state_service.py +35 -38
  45. {metalist-0.4.2 → metalist-0.6.1}/app/services/content_formatting.py +65 -468
  46. {metalist-0.4.2 → metalist-0.6.1}/app/services/embedded_references.py +14 -0
  47. {metalist-0.4.2 → metalist-0.6.1}/app/services/exception_capture.py +7 -1
  48. {metalist-0.4.2 → metalist-0.6.1}/app/services/file_storage.py +19 -7
  49. metalist-0.6.1/app/services/hierarchy.py +69 -0
  50. {metalist-0.4.2 → metalist-0.6.1}/app/services/html_export.py +21 -13
  51. {metalist-0.4.2 → metalist-0.6.1}/app/services/html_unformatting.py +17 -6
  52. metalist-0.6.1/app/services/input_errors.py +13 -0
  53. {metalist-0.4.2 → metalist-0.6.1}/app/services/latex_rendering.py +2 -2
  54. {metalist-0.4.2 → metalist-0.6.1}/app/services/link_titles.py +20 -10
  55. {metalist-0.4.2 → metalist-0.6.1}/app/services/maintenance_mode.py +18 -1
  56. {metalist-0.4.2 → metalist-0.6.1}/app/services/managed_ollama_runtime.py +5 -5
  57. {metalist-0.4.2 → metalist-0.6.1}/app/services/namespace_deletion_jobs.py +2 -1
  58. {metalist-0.4.2 → metalist-0.6.1}/app/services/namespace_deletion_worker.py +3 -3
  59. {metalist-0.4.2 → metalist-0.6.1}/app/services/namespace_rename_jobs.py +1 -0
  60. {metalist-0.4.2 → metalist-0.6.1}/app/services/namespace_rename_worker.py +1 -1
  61. {metalist-0.4.2 → metalist-0.6.1}/app/services/namespace_runtime_guard.py +1 -1
  62. {metalist-0.4.2 → metalist-0.6.1}/app/services/namespace_switcher.py +39 -18
  63. metalist-0.6.1/app/services/note_ordering.py +133 -0
  64. {metalist-0.4.2 → metalist-0.6.1}/app/services/note_store.py +227 -587
  65. metalist-0.6.1/app/services/password_note_fields.py +45 -0
  66. {metalist-0.4.2 → metalist-0.6.1}/app/services/reminders.py +63 -102
  67. {metalist-0.4.2 → metalist-0.6.1}/app/services/remote_image_proxy.py +7 -6
  68. metalist-0.6.1/app/services/request_recovery.py +96 -0
  69. metalist-0.6.1/app/services/resource_limits.py +46 -0
  70. {metalist-0.4.2 → metalist-0.6.1}/app/services/root_sorting.py +96 -41
  71. metalist-0.6.1/app/services/runtime_generation.py +39 -0
  72. {metalist-0.4.2 → metalist-0.6.1}/app/services/runtime_lock.py +10 -2
  73. {metalist-0.4.2 → metalist-0.6.1}/app/services/search_query.py +10 -9
  74. {metalist-0.4.2 → metalist-0.6.1}/app/services/self_update.py +1 -1
  75. {metalist-0.4.2 → metalist-0.6.1}/app/services/shell_session_service.py +118 -21
  76. {metalist-0.4.2 → metalist-0.6.1}/app/services/snapshot.py +194 -179
  77. {metalist-0.4.2 → metalist-0.6.1}/app/services/store.py +13 -21
  78. metalist-0.6.1/app/services/structured_note_renderers.py +478 -0
  79. metalist-0.6.1/app/services/sync.py +155 -0
  80. {metalist-0.4.2 → metalist-0.6.1}/app/services/tab_state.py +37 -36
  81. {metalist-0.4.2 → metalist-0.6.1}/app/services/tag_suggestions.py +147 -134
  82. {metalist-0.4.2 → metalist-0.6.1}/app/services/tag_term_matching.py +5 -5
  83. {metalist-0.4.2 → metalist-0.6.1}/app/services/tokens.py +26 -0
  84. {metalist-0.4.2 → metalist-0.6.1}/app/services/undo_state.py +72 -26
  85. metalist-0.6.1/app/services/view_cache.py +122 -0
  86. {metalist-0.4.2 → metalist-0.6.1}/app/services/windows_process_control.py +19 -0
  87. {metalist-0.4.2 → metalist-0.6.1}/app/startup_js_sanity.py +144 -5
  88. {metalist-0.4.2 → metalist-0.6.1}/app/startup_sanity.py +47 -1
  89. {metalist-0.4.2 → metalist-0.6.1}/app/startup_sanity_config.py +15 -0
  90. {metalist-0.4.2 → metalist-0.6.1}/app/static/config/command_palette_tags.json +0 -8
  91. metalist-0.6.1/app/static/css/floating-notes.css +44 -0
  92. {metalist-0.4.2 → metalist-0.6.1}/app/static/css/main.css +30 -122
  93. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/ai-chat/ai-agent-debug-view.js +8 -1
  94. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/ai-chat/ai-chat-api.js +3 -1
  95. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/ai-chat/ai-chat-panel-controller.js +36 -19
  96. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/ai-chat/bulk-proposal-ui.js +26 -18
  97. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/ai-chat/proposal-menu.js +3 -1
  98. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/api-client.js +29 -92
  99. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/api-failure-classification-service.js +9 -8
  100. metalist-0.6.1/app/static/js/modules/application-state.js +245 -0
  101. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/async-result.js +2 -1
  102. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/auth.js +21 -11
  103. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/client-state-api.js +3 -2
  104. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/client-state-migration.js +4 -2
  105. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/command-palette/activation-auth-policy.js +2 -0
  106. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/command-palette/command-palette-controller.js +34 -89
  107. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/command-palette/endpoint-registry.js +2 -18
  108. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/command-palette/preferences-store.js +29 -15
  109. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/command-palette/tag-config-loader.js +2 -1
  110. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/command-palette/usage-store.js +10 -4
  111. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/config.js +7 -12
  112. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/connectivity-monitor.js +13 -6
  113. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/context-menu/context-menu-registry.js +53 -1
  114. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/context-menu/context-menu-service.js +123 -50
  115. metalist-0.6.1/app/static/js/modules/editor-selection.js +118 -0
  116. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/editor-toolbar.js +30 -26
  117. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/error-overlay.js +6 -3
  118. metalist-0.6.1/app/static/js/modules/expected-errors.js +23 -0
  119. metalist-0.6.1/app/static/js/modules/maintenance.js +16 -0
  120. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/modals/agent-prompt-editor-modal.js +5 -0
  121. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/modals/ai-agent-settings-modal.js +9 -0
  122. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/modals/alphabetize-root-notes-modal.js +8 -6
  123. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/modals/backup-restore-modal.js +9 -4
  124. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/modals/backup-result-modal.js +9 -0
  125. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/modals/backup-retention-modal.js +8 -6
  126. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/modals/backup-settings-modal.js +15 -11
  127. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/modals/base-modal.js +7 -23
  128. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/modals/confirmation-modal.js +8 -6
  129. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/modals/delete-namespace-modal.js +5 -8
  130. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/modals/help-modal.js +3 -0
  131. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/modals/namespace-modals.js +25 -13
  132. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/modals/note-layout-appearance-modal.js +3 -0
  133. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/modals/ontology-modal.js +95 -70
  134. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/modals/password-modal.js +18 -12
  135. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/modals/prioritize-modal.js +12 -7
  136. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/modals/random-password-modal.js +7 -1
  137. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/modals/reminder-modal.js +24 -260
  138. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/modals/reset-updated-at-modal.js +8 -6
  139. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/modals/search-suggestion-statistics-modal.js +3 -0
  140. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/modals/session-timeout-modal.js +8 -2
  141. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/modals/version-info-modal.js +11 -8
  142. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/actions/history-actions.js +8 -1
  143. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/actions/note-actions.js +3 -5
  144. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/actions/selection-actions.js +1 -1
  145. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/actions/ui-actions.js +8 -128
  146. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/events/context-menu-events.js +15 -1
  147. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/events/inactivity-events.js +7 -2
  148. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/events/input-events.js +6 -3
  149. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/events/keyboard-events.js +77 -48
  150. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/events/mouse-events.js +91 -68
  151. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/mode-context.js +121 -87
  152. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/mode-logger.js +2 -2
  153. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/animated-scroll-service.js +10 -7
  154. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/backlinks-panel-service.js +15 -10
  155. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/command-gate-service.js +26 -34
  156. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/differential-view-service.js +12 -7
  157. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/embedded-image-service.js +2 -1
  158. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/file-image-preview-service.js +33 -21
  159. metalist-0.6.1/app/static/js/modules/mode-manager/services/floating-note-dom.js +74 -0
  160. metalist-0.6.1/app/static/js/modules/mode-manager/services/floating-note-layout.js +28 -0
  161. metalist-0.6.1/app/static/js/modules/mode-manager/services/floating-note-service.js +246 -0
  162. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/image-context-menu-action-service.js +11 -7
  163. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/image-file-insert-choice-modal-service.js +8 -5
  164. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/infinite-scroll-service.js +32 -50
  165. metalist-0.6.1/app/static/js/modules/mode-manager/services/link-title-prefetch-service.js +48 -0
  166. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/markdown-render-service.js +9 -6
  167. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/mermaid-render-service.js +16 -12
  168. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/note-click-target-service.js +12 -0
  169. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/note-clipboard-write-service.js +4 -0
  170. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/note-collapse-animation-service.js +2 -1
  171. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/note-fullscreen-service.js +14 -10
  172. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/note-reposition-animation-service.js +2 -1
  173. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/password-clipboard-service.js +13 -6
  174. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/polling-service.js +34 -26
  175. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/reference-source-navigation-service.js +18 -14
  176. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/remote-image-proxy-service.js +35 -23
  177. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/scroll-restoration-service.js +16 -12
  178. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/search-contexts-overlay-service.js +33 -18
  179. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/search-debounce-service.js +9 -6
  180. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/search-interaction-service.js +27 -26
  181. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/search-redaction-reveal-service.js +1 -1
  182. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/search-suggestion-windows-service.js +25 -9
  183. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/search-suggestions-service.js +49 -39
  184. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/selected-formatting-removal-service.js +68 -0
  185. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/tab-dom-cache-service.js +12 -7
  186. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/tab-state-service.js +38 -32
  187. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/tag-bar-service.js +35 -30
  188. metalist-0.6.1/app/static/js/modules/mode-manager/services/tag-input-selection-service.js +26 -0
  189. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/tag-suggestions-service.js +54 -43
  190. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/note-html-sanitizer.js +9 -5
  191. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/password-operation-response.js +5 -3
  192. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/password-strength.js +8 -5
  193. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/reminder-store.js +9 -9
  194. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/reminder-surface-service.js +18 -37
  195. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/namespace-deleted.js +3 -2
  196. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/namespace-renamed.js +3 -2
  197. metalist-0.6.1/app/static/js/vendor/dompurify-3.4.13.min.js +3 -0
  198. metalist-0.6.1/app/static/js/vendor/markdown-it-14.3.2.LICENSE.txt +22 -0
  199. metalist-0.6.1/app/static/js/vendor/markdown-it-14.3.2.min.js +3 -0
  200. metalist-0.6.1/app/static/js/vendor/mermaid-11.16.1.min.js +3587 -0
  201. {metalist-0.4.2 → metalist-0.6.1}/app/static/note-html-policy.json +2 -1
  202. {metalist-0.4.2 → metalist-0.6.1}/app/templates/base.html +1 -1
  203. {metalist-0.4.2 → metalist-0.6.1}/app/templates/maintenance.html +1 -25
  204. metalist-0.6.1/app/upload_limits.py +11 -0
  205. {metalist-0.4.2 → metalist-0.6.1}/app/usecases/collapse.py +1 -0
  206. {metalist-0.4.2 → metalist-0.6.1}/app/usecases/copy_note.py +21 -11
  207. {metalist-0.4.2 → metalist-0.6.1}/app/usecases/delete_subtree.py +1 -0
  208. {metalist-0.4.2 → metalist-0.6.1}/app/usecases/expand.py +2 -2
  209. {metalist-0.4.2 → metalist-0.6.1}/app/usecases/move.py +22 -50
  210. {metalist-0.4.2 → metalist-0.6.1}/app/usecases/paste_sibling.py +4 -7
  211. metalist-0.6.1/app/usecases/prefetch_link_titles.py +24 -0
  212. {metalist-0.4.2 → metalist-0.6.1}/app/usecases/resize_image.py +2 -2
  213. {metalist-0.4.2 → metalist-0.6.1}/app/usecases/toggle_reference_mode.py +2 -2
  214. {metalist-0.4.2 → metalist-0.6.1}/app/usecases/toggle_todo_done.py +2 -2
  215. {metalist-0.4.2 → metalist-0.6.1}/app/usecases/undo.py +2 -2
  216. {metalist-0.4.2 → metalist-0.6.1}/app/usecases/unformat_content.py +2 -2
  217. {metalist-0.4.2 → metalist-0.6.1}/app/usecases/update_content.py +14 -6
  218. {metalist-0.4.2 → metalist-0.6.1}/app/utils/encryption.py +2 -0
  219. {metalist-0.4.2 → metalist-0.6.1}/app/version.py +1 -1
  220. {metalist-0.4.2 → metalist-0.6.1}/convert-from-legacy.py +1 -1
  221. {metalist-0.4.2 → metalist-0.6.1}/main.py +11 -72
  222. {metalist-0.4.2 → metalist-0.6.1/metalist.egg-info}/PKG-INFO +33 -8
  223. {metalist-0.4.2 → metalist-0.6.1}/metalist.egg-info/SOURCES.txt +33 -16
  224. {metalist-0.4.2 → metalist-0.6.1}/metalist.egg-info/requires.txt +0 -1
  225. {metalist-0.4.2 → metalist-0.6.1}/pyproject.toml +9 -1
  226. metalist-0.4.2/app/api/routes/sounds.py +0 -190
  227. metalist-0.4.2/app/db/sounds_sql.py +0 -162
  228. metalist-0.4.2/app/services/base_service.py +0 -145
  229. metalist-0.4.2/app/services/dependencies.py +0 -72
  230. metalist-0.4.2/app/services/note_service.py +0 -290
  231. metalist-0.4.2/app/services/query_service.py +0 -280
  232. metalist-0.4.2/app/services/sound_storage.py +0 -754
  233. metalist-0.4.2/app/services/sync.py +0 -74
  234. metalist-0.4.2/app/services/transaction_manager.py +0 -159
  235. metalist-0.4.2/app/services/undo_service.py +0 -44
  236. metalist-0.4.2/app/services/view_cache.py +0 -71
  237. metalist-0.4.2/app/static/js/modules/editor-selection.js +0 -110
  238. metalist-0.4.2/app/static/js/modules/modals/sound-manager-modal.js +0 -270
  239. metalist-0.4.2/app/static/js/modules/sound-service.js +0 -380
  240. metalist-0.4.2/app/static/js/vendor/dompurify-3.4.12.min.js +0 -3
  241. metalist-0.4.2/app/static/js/vendor/markdown-it.min.js +0 -1
  242. metalist-0.4.2/app/static/js/vendor/mermaid-11.9.0.min.js +0 -2659
  243. {metalist-0.4.2 → metalist-0.6.1}/MANIFEST.in +0 -0
  244. {metalist-0.4.2 → metalist-0.6.1}/app/__init__.py +0 -0
  245. {metalist-0.4.2 → metalist-0.6.1}/app/api/__init__.py +0 -0
  246. {metalist-0.4.2 → metalist-0.6.1}/app/api/deps.py +0 -0
  247. {metalist-0.4.2 → metalist-0.6.1}/app/api/dev.py +0 -0
  248. {metalist-0.4.2 → metalist-0.6.1}/app/api/request_auth.py +0 -0
  249. {metalist-0.4.2 → metalist-0.6.1}/app/api/routes/test.py +0 -0
  250. {metalist-0.4.2 → metalist-0.6.1}/app/config.py +0 -0
  251. {metalist-0.4.2 → metalist-0.6.1}/app/data_directory.py +0 -0
  252. {metalist-0.4.2 → metalist-0.6.1}/app/db/__init__.py +0 -0
  253. {metalist-0.4.2 → metalist-0.6.1}/app/db/backup_settings_sql.py +0 -0
  254. {metalist-0.4.2 → metalist-0.6.1}/app/db/engine.py +0 -0
  255. {metalist-0.4.2 → metalist-0.6.1}/app/db/link_titles_sql.py +0 -0
  256. {metalist-0.4.2 → metalist-0.6.1}/app/db/ontology_rules_sql.py +0 -0
  257. {metalist-0.4.2 → metalist-0.6.1}/app/db/reminders_sql.py +0 -0
  258. {metalist-0.4.2 → metalist-0.6.1}/app/db/schema.py +0 -0
  259. {metalist-0.4.2 → metalist-0.6.1}/app/db/search_history_sql.py +0 -0
  260. {metalist-0.4.2 → metalist-0.6.1}/app/db/settings_sql.py +0 -0
  261. {metalist-0.4.2 → metalist-0.6.1}/app/db/tab_state_sql.py +0 -0
  262. {metalist-0.4.2 → metalist-0.6.1}/app/models/commands.py +0 -0
  263. {metalist-0.4.2 → metalist-0.6.1}/app/models/entities.py +0 -0
  264. {metalist-0.4.2 → metalist-0.6.1}/app/models/enums.py +0 -0
  265. {metalist-0.4.2 → metalist-0.6.1}/app/models/list_traversal.py +0 -0
  266. {metalist-0.4.2 → metalist-0.6.1}/app/presentation/__init__.py +0 -0
  267. {metalist-0.4.2 → metalist-0.6.1}/app/presentation/render/__init__.py +0 -0
  268. {metalist-0.4.2 → metalist-0.6.1}/app/presentation/render/note_renderer.py +0 -0
  269. {metalist-0.4.2 → metalist-0.6.1}/app/presentation/templates.py +0 -0
  270. {metalist-0.4.2 → metalist-0.6.1}/app/security/authenticated_logging.py +0 -0
  271. {metalist-0.4.2 → metalist-0.6.1}/app/security/encryption.py +0 -0
  272. {metalist-0.4.2 → metalist-0.6.1}/app/security/http_headers.py +0 -0
  273. {metalist-0.4.2 → metalist-0.6.1}/app/security/note_html.py +0 -0
  274. {metalist-0.4.2 → metalist-0.6.1}/app/security/sensitive_logging.py +0 -0
  275. {metalist-0.4.2 → metalist-0.6.1}/app/security/shell_execution.py +0 -0
  276. {metalist-0.4.2 → metalist-0.6.1}/app/security/validation_errors.py +0 -0
  277. {metalist-0.4.2 → metalist-0.6.1}/app/services/__init__.py +0 -0
  278. {metalist-0.4.2 → metalist-0.6.1}/app/services/agent/__init__.py +0 -0
  279. {metalist-0.4.2 → metalist-0.6.1}/app/services/agent/actions.py +0 -0
  280. {metalist-0.4.2 → metalist-0.6.1}/app/services/agent/context.py +0 -0
  281. {metalist-0.4.2 → metalist-0.6.1}/app/services/agent/inference.py +0 -0
  282. {metalist-0.4.2 → metalist-0.6.1}/app/services/agent/model_policy.py +0 -0
  283. {metalist-0.4.2 → metalist-0.6.1}/app/services/agent/ollama_inference.py +0 -0
  284. {metalist-0.4.2 → metalist-0.6.1}/app/services/agent/openai_cost_tracking.py +0 -0
  285. {metalist-0.4.2 → metalist-0.6.1}/app/services/agent/openai_inference.py +0 -0
  286. {metalist-0.4.2 → metalist-0.6.1}/app/services/agent/permissions.py +0 -0
  287. {metalist-0.4.2 → metalist-0.6.1}/app/services/agent/prompt_settings.py +0 -0
  288. {metalist-0.4.2 → metalist-0.6.1}/app/services/agent/prompts/__init__.py +0 -0
  289. {metalist-0.4.2 → metalist-0.6.1}/app/services/agent/prompts/final-response.md +0 -0
  290. {metalist-0.4.2 → metalist-0.6.1}/app/services/agent/prompts/system.md +0 -0
  291. {metalist-0.4.2 → metalist-0.6.1}/app/services/agent/prompts/tool-result.md +0 -0
  292. {metalist-0.4.2 → metalist-0.6.1}/app/services/agent/retrieval_settings.py +0 -0
  293. {metalist-0.4.2 → metalist-0.6.1}/app/services/agent/runtime.py +0 -0
  294. {metalist-0.4.2 → metalist-0.6.1}/app/services/agent/scope.py +0 -0
  295. {metalist-0.4.2 → metalist-0.6.1}/app/services/agent/skill_settings.py +0 -0
  296. {metalist-0.4.2 → metalist-0.6.1}/app/services/agent/skills/__init__.py +0 -0
  297. {metalist-0.4.2 → metalist-0.6.1}/app/services/agent/skills/scoped-investigation.md +0 -0
  298. {metalist-0.4.2 → metalist-0.6.1}/app/services/agent/tagging.py +0 -0
  299. {metalist-0.4.2 → metalist-0.6.1}/app/services/agent/tagging_run.py +0 -0
  300. {metalist-0.4.2 → metalist-0.6.1}/app/services/agent/token_estimation.py +0 -0
  301. {metalist-0.4.2 → metalist-0.6.1}/app/services/agent/tools.py +0 -0
  302. {metalist-0.4.2 → metalist-0.6.1}/app/services/agent/trace.py +0 -0
  303. {metalist-0.4.2 → metalist-0.6.1}/app/services/ai_chat_rendering.py +0 -0
  304. {metalist-0.4.2 → metalist-0.6.1}/app/services/auth.py +0 -0
  305. {metalist-0.4.2 → metalist-0.6.1}/app/services/auth_cache_state.py +0 -0
  306. {metalist-0.4.2 → metalist-0.6.1}/app/services/backlink_index.py +0 -0
  307. {metalist-0.4.2 → metalist-0.6.1}/app/services/backlinks.py +0 -0
  308. {metalist-0.4.2 → metalist-0.6.1}/app/services/backup_settings_service.py +0 -0
  309. {metalist-0.4.2 → metalist-0.6.1}/app/services/content_cache.py +0 -0
  310. {metalist-0.4.2 → metalist-0.6.1}/app/services/diagnostics.py +0 -0
  311. {metalist-0.4.2 → metalist-0.6.1}/app/services/encryption.py +0 -0
  312. {metalist-0.4.2 → metalist-0.6.1}/app/services/file_registry.py +0 -0
  313. {metalist-0.4.2 → metalist-0.6.1}/app/services/footnote_layout.py +0 -0
  314. {metalist-0.4.2 → metalist-0.6.1}/app/services/footnote_rendering.py +0 -0
  315. {metalist-0.4.2 → metalist-0.6.1}/app/services/hydration_state.py +0 -0
  316. {metalist-0.4.2 → metalist-0.6.1}/app/services/image_size_formatting.py +0 -0
  317. {metalist-0.4.2 → metalist-0.6.1}/app/services/inline_image_occurrences.py +0 -0
  318. {metalist-0.4.2 → metalist-0.6.1}/app/services/integrity.py +0 -0
  319. {metalist-0.4.2 → metalist-0.6.1}/app/services/login_rate_limit.py +0 -0
  320. {metalist-0.4.2 → metalist-0.6.1}/app/services/markdown_rendering.py +0 -0
  321. {metalist-0.4.2 → metalist-0.6.1}/app/services/note_fullscreen.py +0 -0
  322. {metalist-0.4.2 → metalist-0.6.1}/app/services/note_image_tags.py +0 -0
  323. {metalist-0.4.2 → metalist-0.6.1}/app/services/ollama_provider.py +0 -0
  324. {metalist-0.4.2 → metalist-0.6.1}/app/services/ontology_rules_store.py +0 -0
  325. {metalist-0.4.2 → metalist-0.6.1}/app/services/openai_credentials.py +0 -0
  326. {metalist-0.4.2 → metalist-0.6.1}/app/services/reference_presentation.py +0 -0
  327. {metalist-0.4.2 → metalist-0.6.1}/app/services/runtime_hardening.py +0 -0
  328. {metalist-0.4.2 → metalist-0.6.1}/app/services/search_history.py +0 -0
  329. {metalist-0.4.2 → metalist-0.6.1}/app/services/search_history_storage.py +0 -0
  330. {metalist-0.4.2 → metalist-0.6.1}/app/services/search_index.py +0 -0
  331. {metalist-0.4.2 → metalist-0.6.1}/app/services/search_text.py +0 -0
  332. {metalist-0.4.2 → metalist-0.6.1}/app/services/selected_text_tag.py +0 -0
  333. {metalist-0.4.2 → metalist-0.6.1}/app/services/session_timeout_service.py +0 -0
  334. {metalist-0.4.2 → metalist-0.6.1}/app/services/sync_state.py +0 -0
  335. {metalist-0.4.2 → metalist-0.6.1}/app/services/tag_case.py +0 -0
  336. {metalist-0.4.2 → metalist-0.6.1}/app/services/tag_ontology.py +0 -0
  337. {metalist-0.4.2 → metalist-0.6.1}/app/services/tag_rename.py +0 -0
  338. {metalist-0.4.2 → metalist-0.6.1}/app/services/test_reset.py +0 -0
  339. {metalist-0.4.2 → metalist-0.6.1}/app/services/update_backups.py +0 -0
  340. {metalist-0.4.2 → metalist-0.6.1}/app/services/view_diff.py +0 -0
  341. {metalist-0.4.2 → metalist-0.6.1}/app/services/view_state.py +0 -0
  342. {metalist-0.4.2 → metalist-0.6.1}/app/startup_environment.py +0 -0
  343. {metalist-0.4.2 → metalist-0.6.1}/app/static/css/forms.css +0 -0
  344. {metalist-0.4.2 → metalist-0.6.1}/app/static/img/favicon.ico +0 -0
  345. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/locked.js +0 -0
  346. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/main.js +0 -0
  347. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/activity-tracker.js +0 -0
  348. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/ai-chat/agent-prompt-service.js +0 -0
  349. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/ai-chat/agent-retrieval-settings.js +0 -0
  350. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/ai-chat/ai-chat-panel-service.js +0 -0
  351. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/ai-chat/ai-thinking-level-service.js +0 -0
  352. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/ai-chat/bulk-elapsed-clock.js +0 -0
  353. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/ai-chat/cloud-privacy-policy.js +0 -0
  354. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/command-palette/backup-command-availability.js +0 -0
  355. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/command-palette/click-activation-service.js +0 -0
  356. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/command-palette/note-layout-preferences.js +0 -0
  357. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/context-menu/context-menu-target-service.js +0 -0
  358. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/context-menu/input-caret-service.js +0 -0
  359. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/disconnect-editing-state-service.js +0 -0
  360. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/dom-utils-fixed.js +0 -0
  361. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/dom-utils.js +0 -0
  362. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/editor-commands.js +0 -0
  363. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/elapsed-time.js +0 -0
  364. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/error-handler.js +0 -0
  365. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/location-flags.js +0 -0
  366. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/login-namespace-picker.js +0 -0
  367. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/modals/delete-namespace-validation.js +0 -0
  368. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/modals/namespace-loading-page.js +0 -0
  369. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/modals/namespace-ports-profile.js +0 -0
  370. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/modals/namespace-rename-validation.js +0 -0
  371. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/actions/content-actions.js +0 -0
  372. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/actions/search-actions.js +0 -0
  373. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/events/focus-events.js +0 -0
  374. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/events/search-events.js +0 -0
  375. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/mode-manager-controller.js +0 -0
  376. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/add-style-service.js +0 -0
  377. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/backlinks-navigation-service.js +0 -0
  378. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/clipboard-shortcut-policy-service.js +0 -0
  379. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/collapse-affordance-service.js +0 -0
  380. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/collapse-editing-policy-service.js +0 -0
  381. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/context-menu-target-service.js +0 -0
  382. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/deselect-selection-state-service.js +0 -0
  383. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/edit-session-collapse-policy-service.js +0 -0
  384. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/edit-session-collapse-service.js +0 -0
  385. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/file-drop-policy-service.js +0 -0
  386. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/file-reference-service.js +0 -0
  387. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/filtered-refresh-selection-service.js +0 -0
  388. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/footnote-navigation-service.js +0 -0
  389. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/history-selection-policy-service.js +0 -0
  390. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/history-shortcut-policy-service.js +0 -0
  391. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/html-paste-sanitizer-service.js +0 -0
  392. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/link-context-menu-action-service.js +0 -0
  393. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/note-context-menu-action-service.js +0 -0
  394. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/note-delete-shortcut-policy-service.js +0 -0
  395. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/note-drag-service.js +0 -0
  396. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/note-split-service.js +0 -0
  397. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/note-timestamp-hover-service.js +0 -0
  398. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/remove-formatting-service.js +0 -0
  399. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/root-date-separator-service.js +0 -0
  400. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/root-sort-indicator-service.js +0 -0
  401. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/root-sort-service.js +0 -0
  402. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/scroll-anchor-service.js +0 -0
  403. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/scroll-to-top-service.js +0 -0
  404. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/search-input-service.js +0 -0
  405. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/search-suggestion-statistics-service.js +0 -0
  406. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/search-suggestion-window-labels-service.js +0 -0
  407. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/search-syntax-service.js +0 -0
  408. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/selected-text-tag-service.js +0 -0
  409. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/shell-output-service.js +0 -0
  410. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/tab-drag-service.js +0 -0
  411. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/tab-duplication-service.js +0 -0
  412. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/tag-proposal-service.js +0 -0
  413. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/tag-syntax-service.js +0 -0
  414. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/todo-toggle-editing-service.js +0 -0
  415. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/untagged-view-indicator-service.js +0 -0
  416. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/mode-manager/services/view-mode-search-shortcut-service.js +0 -0
  417. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/password-generator.js +0 -0
  418. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/password-policy.js +0 -0
  419. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/selection-markers.js +0 -0
  420. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/session-auth.js +0 -0
  421. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/tag-token.js +0 -0
  422. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/modules/uuid.js +0 -0
  423. /metalist-0.4.2/app/static/js/vendor/dompurify-3.4.12.LICENSE.txt → /metalist-0.6.1/app/static/js/vendor/dompurify-3.4.13.LICENSE.txt +0 -0
  424. /metalist-0.4.2/app/static/js/vendor/mermaid-11.9.0.LICENSE.txt → /metalist-0.6.1/app/static/js/vendor/mermaid-11.16.1.LICENSE.txt +0 -0
  425. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/vendor/zxcvbn-4.4.2.LICENSE.txt +0 -0
  426. {metalist-0.4.2 → metalist-0.6.1}/app/static/js/vendor/zxcvbn-4.4.2.js +0 -0
  427. {metalist-0.4.2 → metalist-0.6.1}/app/static/video/login-startup.mp4 +0 -0
  428. {metalist-0.4.2 → metalist-0.6.1}/app/templates/index.html +0 -0
  429. {metalist-0.4.2 → metalist-0.6.1}/app/templates/locked.html +0 -0
  430. {metalist-0.4.2 → metalist-0.6.1}/app/templates/namespace_deleted.html +0 -0
  431. {metalist-0.4.2 → metalist-0.6.1}/app/templates/namespace_renamed.html +0 -0
  432. {metalist-0.4.2 → metalist-0.6.1}/app/templates/notes_list.html +0 -0
  433. {metalist-0.4.2 → metalist-0.6.1}/app/usecases/__init__.py +0 -0
  434. {metalist-0.4.2 → metalist-0.6.1}/app/usecases/add_selected_text_tag.py +0 -0
  435. {metalist-0.4.2 → metalist-0.6.1}/app/usecases/alphabetize_root_notes.py +0 -0
  436. {metalist-0.4.2 → metalist-0.6.1}/app/usecases/base.py +0 -0
  437. {metalist-0.4.2 → metalist-0.6.1}/app/usecases/bulk_tag_proposals.py +0 -0
  438. {metalist-0.4.2 → metalist-0.6.1}/app/usecases/create_child.py +0 -0
  439. {metalist-0.4.2 → metalist-0.6.1}/app/usecases/create_note.py +0 -0
  440. {metalist-0.4.2 → metalist-0.6.1}/app/usecases/create_sibling.py +0 -0
  441. {metalist-0.4.2 → metalist-0.6.1}/app/usecases/delete_tag.py +0 -0
  442. {metalist-0.4.2 → metalist-0.6.1}/app/usecases/indent.py +0 -0
  443. {metalist-0.4.2 → metalist-0.6.1}/app/usecases/lock.py +0 -0
  444. {metalist-0.4.2 → metalist-0.6.1}/app/usecases/move_to_top.py +0 -0
  445. {metalist-0.4.2 → metalist-0.6.1}/app/usecases/outdent.py +0 -0
  446. {metalist-0.4.2 → metalist-0.6.1}/app/usecases/paste_child.py +0 -0
  447. {metalist-0.4.2 → metalist-0.6.1}/app/usecases/prioritize.py +0 -0
  448. {metalist-0.4.2 → metalist-0.6.1}/app/usecases/redo.py +0 -0
  449. {metalist-0.4.2 → metalist-0.6.1}/app/usecases/rename_tag.py +0 -0
  450. {metalist-0.4.2 → metalist-0.6.1}/app/usecases/reset_updated_at.py +0 -0
  451. {metalist-0.4.2 → metalist-0.6.1}/app/usecases/run_shell.py +0 -0
  452. {metalist-0.4.2 → metalist-0.6.1}/app/usecases/search_comment_autofill.py +0 -0
  453. {metalist-0.4.2 → metalist-0.6.1}/app/usecases/search_context_tags.py +0 -0
  454. {metalist-0.4.2 → metalist-0.6.1}/app/usecases/set_collapse_bulk.py +0 -0
  455. {metalist-0.4.2 → metalist-0.6.1}/app/usecases/set_collapse_in_context.py +0 -0
  456. {metalist-0.4.2 → metalist-0.6.1}/app/usecases/split_note.py +0 -0
  457. {metalist-0.4.2 → metalist-0.6.1}/app/usecases/tag_proposals.py +0 -0
  458. {metalist-0.4.2 → metalist-0.6.1}/app/usecases/view.py +0 -0
  459. {metalist-0.4.2 → metalist-0.6.1}/app/utils/__init__.py +0 -0
  460. {metalist-0.4.2 → metalist-0.6.1}/app/utils/text_utils.py +0 -0
  461. {metalist-0.4.2 → metalist-0.6.1}/metalist.egg-info/dependency_links.txt +0 -0
  462. {metalist-0.4.2 → metalist-0.6.1}/metalist.egg-info/entry_points.txt +0 -0
  463. {metalist-0.4.2 → metalist-0.6.1}/metalist.egg-info/top_level.txt +0 -0
  464. {metalist-0.4.2 → metalist-0.6.1}/scripts/generate-lan-cert.sh +0 -0
  465. {metalist-0.4.2 → metalist-0.6.1}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: metalist
3
- Version: 0.4.2
3
+ Version: 0.6.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
@@ -16,7 +16,6 @@ Requires-Dist: instructor==1.15.4
16
16
  Requires-Dist: latex2mathml==3.81.0
17
17
  Requires-Dist: loguru==0.7.3
18
18
  Requires-Dist: Mako==1.3.12
19
- Requires-Dist: mutagen==1.48.1
20
19
  Requires-Dist: nh3==0.3.6
21
20
  Requires-Dist: openai==2.54.0
22
21
  Requires-Dist: pillow==12.3.0
@@ -49,6 +48,24 @@ A minimalist single-user note-taking app focused on server-side rendering (SSR),
49
48
  - Multi-tab search contexts with server-persisted scroll/search state (survives browser restarts)
50
49
  - Manual namespace backups/restores to a user-selected backup folder with retention controls
51
50
 
51
+ ## Changes in 0.6.1
52
+
53
+ - Removed the unused performance overlay, including its menu option and background state updates, fixing a fatal redundant-state error during note rearranging. Obsolete overlay preferences and command usage are discarded automatically.
54
+
55
+ ## Changes in 0.6.0
56
+
57
+ - Open notes and their children in multiple live, read-only floating windows. Drag and resize them, keep them visible across searches and tabs, and follow links or copy passwords. Saved changes refresh every half second.
58
+ - Double-click selects complete tags, including punctuation and prefixes, in search and tag bars.
59
+ - Choose sorting modes from the background right-click menu. Creation sorting uses the root note's creation time; last-updated sorting includes descendants and ignores reference display-form changes.
60
+ - Context menus have icons throughout. Full-screen notes have compact spacing, and both read-only views keep steady borders on hover.
61
+ - Fixed Version Info loading and state-transition errors during editing, focus changes, tab switching, and duplication.
62
+
63
+ ## Changes in 0.5.0
64
+
65
+ - Sound support is removed entirely; reminders retain their visual behavior. The live database migrates to schema 9, with encrypted namespaces migrating after unlock. Existing backups remain unchanged. See [sound removal](docs/ui/sounds.md).
66
+ - Remove Formatting supports arbitrary spans within pasted headings. Whole-note Cmd+U removes leading/trailing blank lines and retains at most one empty line between sections.
67
+ - This release includes the security, recovery, resource-limit, state-ownership, and performance work documented in the [implementation and coverage map](docs/testing/coverage-map.md).
68
+
52
69
  ## Technology Stack
53
70
 
54
71
  ### Backend
@@ -68,7 +85,7 @@ A minimalist single-user note-taking app focused on server-side rendering (SSR),
68
85
  ## Architecture (High Level)
69
86
  - Server renders the base page via Mako templates.
70
87
  - The browser client drives interaction via `/api2` JSON endpoints.
71
- - Notes are loaded/decrypted into an in-memory store at startup; a post-startup DB read guard prevents accidental runtime SELECTs.
88
+ - Passwordless notes load into memory at startup; encrypted notes load after login. Rendering/search and ordinary authentication use memory; a read guard restricts intentional SQLite access to explicit windows.
72
89
 
73
90
  ## Security Boundary
74
91
 
@@ -102,22 +119,25 @@ After the first installation, update and restart MetaList with one cross-platfor
102
119
  ```bash
103
120
  metalist update
104
121
  ```
105
- The updater checks the installed version against the latest PyPI release first. If MetaList is already current, it reports the installed version and leaves all running namespaces untouched. When an update is available, it checks the installer prerequisites, stops running namespaces, and creates and verifies a new backup of every namespace before installation can begin. Each archive includes the complete notes/settings database, the attachments/sounds database when present, and any legacy search-history database. Locked namespaces are backed up with their encrypted data and key metadata intact, without requiring a password.
122
+ The updater checks the installed version against the latest PyPI release first. If MetaList is already current, it reports the installed version and leaves all running namespaces untouched. When an update is available, it checks the installer prerequisites, stops running namespaces, and creates and verifies a new backup of every namespace before installation can begin. Each archive includes the complete notes/settings database, the attachments database when present, and any legacy search-history database. Locked namespaces are backed up with their encrypted data and key metadata intact, without requiring a password.
106
123
 
107
124
  Backups are saved to `~/MetaList/namespaces/<namespace>/backups/<namespace>-<timestamp>.metalist-backup.tar.gz`; the updater prints each verified path. Existing backups remain unchanged and are not pruned. If any backup fails, the update aborts with the current installation intact; run `metalist` to restart the stopped servers after resolving the failure.
108
125
 
109
- Only after all backups pass does the updater hand off to an external PowerShell process on Windows or `/bin/sh` on macOS/Linux so the installed environment can unlock. It installs the exact version reported by PyPI with a forced cache refresh, launches MetaList again, and reports the installed version (for example, `MetaList updated to v0.4.2.`). This protection requires an installed version containing the backup safeguard and applies to `metalist update`; direct pip/uv install commands do not run it.
126
+ Only after all backups pass does the updater hand off to an external PowerShell process on Windows or `/bin/sh` on macOS/Linux so the installed environment can unlock. It installs the exact version reported by PyPI with a forced cache refresh, launches MetaList again, and reports the installed version (for example, `MetaList updated to v0.5.0.`). This protection requires an installed version containing the backup safeguard and applies to `metalist update`; direct pip/uv install commands do not run it.
110
127
 
111
128
  For pip, users can run `pip install metalist`. For a non-editable local install from this checkout, use `uv pip install .` or `pip install .` instead of the editable command below.
112
129
 
113
130
  ```bash
114
131
  python3 -m venv .venv
115
132
  source .venv/bin/activate
116
- uv pip install -e .[dev]
133
+ python -m pip install --require-hashes -r requirements/ci.txt
134
+ python -m pip install --no-deps --no-build-isolation -e ".[dev]"
117
135
 
118
136
  npm install
119
137
  ```
120
138
 
139
+ On Windows, create the same `.venv` with `python -m venv .venv` and activate it with `.venv\Scripts\Activate.ps1` in PowerShell. Run the same `python -m pip` commands after activation. Node dependencies are developer tooling; the application itself does not require Node.
140
+
121
141
  ### Run
122
142
 
123
143
  Persistent data defaults to `~/MetaList`. Set `METALIST_DATA_DIRECTORY` to an absolute directory path before launch to use a separate data root, including namespaces, backups, certificates, logs, and runtime jobs. This is used by release tests to keep their disposable data separate from real notes.
@@ -247,9 +267,9 @@ scheme/client metadata is accepted only from `METALIST_FORWARDED_ALLOW_IPS`.
247
267
  Do not widen that list beyond the actual proxy addresses.
248
268
 
249
269
  ### Legacy Import
250
- `convert-from-legacy.py` replaces the SQLite database referenced by `app.config.DATABASE_URL`, clears its files/sounds sidecar, and imports notes from a legacy JSON export.
270
+ `convert-from-legacy.py` replaces the SQLite database referenced by `app.config.DATABASE_URL`, clears its files sidecar, and imports notes from a legacy JSON export.
251
271
 
252
- This is destructive. It deletes the existing notes DB and related files/sounds DB before rebuilding the namespace.
272
+ This is destructive. It deletes the existing notes DB and related files DB before rebuilding the namespace.
253
273
 
254
274
  Example usage:
255
275
  ```bash
@@ -312,3 +332,8 @@ Render Mermaid diagrams to PNGs:
312
332
  ```bash
313
333
  npm run render-diagrams
314
334
  ```
335
+
336
+
337
+ ## Maintenance and recovery
338
+
339
+ See the [dependency and release procedure](docs/security/supply-chain.md), [recovery runbook](docs/security/recovery.md), and [current test/implementation map](docs/testing/coverage-map.md). The dated [August code review](CODE_REVIEW.md) is historical.
@@ -12,6 +12,24 @@ A minimalist single-user note-taking app focused on server-side rendering (SSR),
12
12
  - Multi-tab search contexts with server-persisted scroll/search state (survives browser restarts)
13
13
  - Manual namespace backups/restores to a user-selected backup folder with retention controls
14
14
 
15
+ ## Changes in 0.6.1
16
+
17
+ - Removed the unused performance overlay, including its menu option and background state updates, fixing a fatal redundant-state error during note rearranging. Obsolete overlay preferences and command usage are discarded automatically.
18
+
19
+ ## Changes in 0.6.0
20
+
21
+ - Open notes and their children in multiple live, read-only floating windows. Drag and resize them, keep them visible across searches and tabs, and follow links or copy passwords. Saved changes refresh every half second.
22
+ - Double-click selects complete tags, including punctuation and prefixes, in search and tag bars.
23
+ - Choose sorting modes from the background right-click menu. Creation sorting uses the root note's creation time; last-updated sorting includes descendants and ignores reference display-form changes.
24
+ - Context menus have icons throughout. Full-screen notes have compact spacing, and both read-only views keep steady borders on hover.
25
+ - Fixed Version Info loading and state-transition errors during editing, focus changes, tab switching, and duplication.
26
+
27
+ ## Changes in 0.5.0
28
+
29
+ - Sound support is removed entirely; reminders retain their visual behavior. The live database migrates to schema 9, with encrypted namespaces migrating after unlock. Existing backups remain unchanged. See [sound removal](docs/ui/sounds.md).
30
+ - Remove Formatting supports arbitrary spans within pasted headings. Whole-note Cmd+U removes leading/trailing blank lines and retains at most one empty line between sections.
31
+ - This release includes the security, recovery, resource-limit, state-ownership, and performance work documented in the [implementation and coverage map](docs/testing/coverage-map.md).
32
+
15
33
  ## Technology Stack
16
34
 
17
35
  ### Backend
@@ -31,7 +49,7 @@ A minimalist single-user note-taking app focused on server-side rendering (SSR),
31
49
  ## Architecture (High Level)
32
50
  - Server renders the base page via Mako templates.
33
51
  - The browser client drives interaction via `/api2` JSON endpoints.
34
- - Notes are loaded/decrypted into an in-memory store at startup; a post-startup DB read guard prevents accidental runtime SELECTs.
52
+ - Passwordless notes load into memory at startup; encrypted notes load after login. Rendering/search and ordinary authentication use memory; a read guard restricts intentional SQLite access to explicit windows.
35
53
 
36
54
  ## Security Boundary
37
55
 
@@ -65,22 +83,25 @@ After the first installation, update and restart MetaList with one cross-platfor
65
83
  ```bash
66
84
  metalist update
67
85
  ```
68
- The updater checks the installed version against the latest PyPI release first. If MetaList is already current, it reports the installed version and leaves all running namespaces untouched. When an update is available, it checks the installer prerequisites, stops running namespaces, and creates and verifies a new backup of every namespace before installation can begin. Each archive includes the complete notes/settings database, the attachments/sounds database when present, and any legacy search-history database. Locked namespaces are backed up with their encrypted data and key metadata intact, without requiring a password.
86
+ The updater checks the installed version against the latest PyPI release first. If MetaList is already current, it reports the installed version and leaves all running namespaces untouched. When an update is available, it checks the installer prerequisites, stops running namespaces, and creates and verifies a new backup of every namespace before installation can begin. Each archive includes the complete notes/settings database, the attachments database when present, and any legacy search-history database. Locked namespaces are backed up with their encrypted data and key metadata intact, without requiring a password.
69
87
 
70
88
  Backups are saved to `~/MetaList/namespaces/<namespace>/backups/<namespace>-<timestamp>.metalist-backup.tar.gz`; the updater prints each verified path. Existing backups remain unchanged and are not pruned. If any backup fails, the update aborts with the current installation intact; run `metalist` to restart the stopped servers after resolving the failure.
71
89
 
72
- Only after all backups pass does the updater hand off to an external PowerShell process on Windows or `/bin/sh` on macOS/Linux so the installed environment can unlock. It installs the exact version reported by PyPI with a forced cache refresh, launches MetaList again, and reports the installed version (for example, `MetaList updated to v0.4.2.`). This protection requires an installed version containing the backup safeguard and applies to `metalist update`; direct pip/uv install commands do not run it.
90
+ Only after all backups pass does the updater hand off to an external PowerShell process on Windows or `/bin/sh` on macOS/Linux so the installed environment can unlock. It installs the exact version reported by PyPI with a forced cache refresh, launches MetaList again, and reports the installed version (for example, `MetaList updated to v0.5.0.`). This protection requires an installed version containing the backup safeguard and applies to `metalist update`; direct pip/uv install commands do not run it.
73
91
 
74
92
  For pip, users can run `pip install metalist`. For a non-editable local install from this checkout, use `uv pip install .` or `pip install .` instead of the editable command below.
75
93
 
76
94
  ```bash
77
95
  python3 -m venv .venv
78
96
  source .venv/bin/activate
79
- uv pip install -e .[dev]
97
+ python -m pip install --require-hashes -r requirements/ci.txt
98
+ python -m pip install --no-deps --no-build-isolation -e ".[dev]"
80
99
 
81
100
  npm install
82
101
  ```
83
102
 
103
+ On Windows, create the same `.venv` with `python -m venv .venv` and activate it with `.venv\Scripts\Activate.ps1` in PowerShell. Run the same `python -m pip` commands after activation. Node dependencies are developer tooling; the application itself does not require Node.
104
+
84
105
  ### Run
85
106
 
86
107
  Persistent data defaults to `~/MetaList`. Set `METALIST_DATA_DIRECTORY` to an absolute directory path before launch to use a separate data root, including namespaces, backups, certificates, logs, and runtime jobs. This is used by release tests to keep their disposable data separate from real notes.
@@ -210,9 +231,9 @@ scheme/client metadata is accepted only from `METALIST_FORWARDED_ALLOW_IPS`.
210
231
  Do not widen that list beyond the actual proxy addresses.
211
232
 
212
233
  ### Legacy Import
213
- `convert-from-legacy.py` replaces the SQLite database referenced by `app.config.DATABASE_URL`, clears its files/sounds sidecar, and imports notes from a legacy JSON export.
234
+ `convert-from-legacy.py` replaces the SQLite database referenced by `app.config.DATABASE_URL`, clears its files sidecar, and imports notes from a legacy JSON export.
214
235
 
215
- This is destructive. It deletes the existing notes DB and related files/sounds DB before rebuilding the namespace.
236
+ This is destructive. It deletes the existing notes DB and related files DB before rebuilding the namespace.
216
237
 
217
238
  Example usage:
218
239
  ```bash
@@ -275,3 +296,8 @@ Render Mermaid diagrams to PNGs:
275
296
  ```bash
276
297
  npm run render-diagrams
277
298
  ```
299
+
300
+
301
+ ## Maintenance and recovery
302
+
303
+ See the [dependency and release procedure](docs/security/supply-chain.md), [recovery runbook](docs/security/recovery.md), and [current test/implementation map](docs/testing/coverage-map.md). The dated [August code review](CODE_REVIEW.md) is historical.
@@ -5,9 +5,8 @@ from fastapi.responses import JSONResponse, RedirectResponse
5
5
  from starlette.middleware.base import BaseHTTPMiddleware
6
6
  from app.api.request_auth import read_request_auth_token
7
7
  from app.services.tokens import token_service
8
- from app.services.auth_service import AuthService
9
8
  from app.services.maintenance_mode import maintenance_service
10
- from app.models.database import SafeSession
9
+ from app.security.encryption import is_encryption_required
11
10
  from app.config import API_PREFIX, TEST_MODE
12
11
 
13
12
 
@@ -63,10 +62,7 @@ class AuthMiddleware(BaseHTTPMiddleware):
63
62
 
64
63
  # Block any v1 API usage with an explicit 410 Gone (no DB access)
65
64
  if path.startswith('/api') and not (path.startswith(API_PREFIX) or path == API_PREFIX):
66
- ref = request.headers.get('referer', '-')
67
- ua = request.headers.get('user-agent', '-')
68
- print(f"V1 API call blocked: path={path} referer={ref} ua={ua}")
69
- raise RuntimeError(f"V1 API disabled: {path}")
65
+ return JSONResponse(status_code=410, content={"detail": "Use the current API version"})
70
66
 
71
67
  # Check if maintenance mode is active first
72
68
  if maintenance_service.is_active():
@@ -91,19 +87,9 @@ class AuthMiddleware(BaseHTTPMiddleware):
91
87
  if not is_quiet:
92
88
  print(f"Path {path} is NOT public, checking auth")
93
89
 
94
- # Check if password is required (v1 disabled; only v2 status is public)
95
- db = SafeSession()
96
- try:
97
- auth = AuthService(db)
98
- has_password = auth.has_password()
99
-
100
- # Special case: password creation endpoint is only public if no password exists
101
- if path in {"/api/auth/settings/password/create", f"{API_PREFIX}/auth/settings/password/create"} and not has_password:
102
- if not is_quiet:
103
- print(f"Password creation allowed - no password set")
104
- return await call_next(request)
105
- finally:
106
- db.close() # Always close the database connection
90
+ # Startup and recoverable password transitions publish this memory-owned flag.
91
+ if path == f"{API_PREFIX}/auth/settings/password/create" and not is_encryption_required():
92
+ return await call_next(request)
107
93
 
108
94
  token, error_detail = read_request_auth_token(request)
109
95
  if error_detail is not None:
@@ -0,0 +1,335 @@
1
+ """Required HTTP request contracts; null remains explicit where the protocol allows it."""
2
+
3
+ from typing import Annotated, Literal
4
+ from app.services.resource_limits import SHELL_SECONDS
5
+ from typing_extensions import TypedDict
6
+ from pydantic import AfterValidator, ConfigDict, Field, with_config
7
+
8
+ Identifier = Annotated[str, Field(min_length=1, max_length=256)]
9
+ Text = Annotated[str, Field(max_length=1024 * 1024)]
10
+ Content = Annotated[str, Field(max_length=16 * 1024 * 1024)]
11
+ Nonnegative = Annotated[int, Field(ge=0)]
12
+
13
+
14
+ def _unique_windows(value):
15
+ if len(value) != len(set(value)):
16
+ raise ValueError('Search windows must be unique')
17
+ return value
18
+
19
+
20
+ WindowDays = Annotated[list[Annotated[int, Field(ge=1, le=365)]], Field(max_length=20), AfterValidator(_unique_windows)]
21
+
22
+ @with_config(ConfigDict(strict=True))
23
+ class SortKey(TypedDict):
24
+ domIndex: Nonnegative
25
+
26
+ @with_config(ConfigDict(strict=True))
27
+ class ScrollAnchor(TypedDict):
28
+ anchorId: Identifier
29
+ anchorBias: Literal['center', 'top']
30
+ intraOffset: Nonnegative
31
+ beltPrev: list[Identifier]
32
+ beltNext: list[Identifier]
33
+ anchorSortKey: SortKey
34
+
35
+ @with_config(ConfigDict(strict=True))
36
+ class Viewport(TypedDict):
37
+ scrollY: Nonnegative
38
+ scrollAnchor: ScrollAnchor | None
39
+
40
+ @with_config(ConfigDict(strict=True))
41
+ class Tab(TypedDict):
42
+ searchQuery: Text
43
+ scrollY: Nonnegative
44
+ anchorRootId: Text | None
45
+ scrollAnchor: ScrollAnchor | None
46
+ sortMode: Literal['normal', 'created', 'updated', 'alphabetical', 'content-volume']
47
+
48
+ @with_config(ConfigDict(strict=True))
49
+ class ViewDiffRequest(TypedDict):
50
+ clientId: Identifier
51
+ editingNoteId: Text | None
52
+ search: Text | None
53
+ tabId: Identifier
54
+ undoContext: Identifier
55
+ clientNoteUuidHashes: dict[Identifier, Text]
56
+ visibleRootAnchorId: Text | None
57
+ isUntaggedView: bool
58
+
59
+ @with_config(ConfigDict(strict=True))
60
+ class UpdateTabStateRequest(TypedDict):
61
+ activeTabId: Identifier
62
+ tabs: dict[Identifier, Tab]
63
+ tabOrder: list[Identifier]
64
+
65
+ @with_config(ConfigDict(strict=True))
66
+ class UpdateTabSortModeRequest(TypedDict):
67
+ tabId: Identifier
68
+ sortMode: Literal['normal', 'created', 'updated', 'alphabetical', 'content-volume']
69
+ clientId: Identifier
70
+ undoContext: Identifier
71
+
72
+ @with_config(ConfigDict(strict=True))
73
+ class CreateNewTabRequest(TypedDict):
74
+ copyFromTabId: Identifier
75
+
76
+ @with_config(ConfigDict(strict=True))
77
+ class DeleteTabRequest(TypedDict):
78
+ tabId: Identifier
79
+
80
+ @with_config(ConfigDict(strict=True))
81
+ class SearchSuggestionsRequest(TypedDict):
82
+ query: Text
83
+ windowDays: WindowDays
84
+
85
+ @with_config(ConfigDict(strict=True))
86
+ class PrioritizeTagSuggestionsRequest(TypedDict):
87
+ query: Text
88
+ search_query: Text | None
89
+
90
+ @with_config(ConfigDict(strict=True))
91
+ class TagInteractionsRequest(TypedDict):
92
+ noteId: Identifier
93
+ interactionType: Literal['edit', 'expand', 'command', 'fullscreen', 'move', 'indent', 'outdent']
94
+
95
+ @with_config(ConfigDict(strict=True))
96
+ class SearchSuggestionInteractionRequest(TypedDict):
97
+ tag: Identifier
98
+
99
+ @with_config(ConfigDict(strict=True))
100
+ class TabSearchInteractionRequest(TypedDict):
101
+ searchQuery: Text
102
+
103
+ @with_config(ConfigDict(strict=True))
104
+ class TagSuggestionsRequest(TypedDict):
105
+ note_id: Identifier
106
+ anchors: list[Identifier]
107
+ explicit_tags: list[Identifier]
108
+ prefix: Text
109
+ content_html: Content
110
+
111
+ @with_config(ConfigDict(strict=True))
112
+ class CreateNoteTopRequest(TypedDict):
113
+ first_visible_note_id: Text | None
114
+ search_query: Text | None
115
+ clientId: Identifier
116
+ undoContext: Identifier
117
+ viewport: Viewport
118
+
119
+ @with_config(ConfigDict(strict=True))
120
+ class CreateSiblingRequest(TypedDict):
121
+ search_query: Text | None
122
+ clientId: Identifier
123
+ undoContext: Identifier
124
+ viewport: Viewport
125
+
126
+ @with_config(ConfigDict(strict=True))
127
+ class CreateChildRequest(TypedDict):
128
+ search_query: Text | None
129
+ clientId: Identifier
130
+ undoContext: Identifier
131
+ viewport: Viewport
132
+
133
+ @with_config(ConfigDict(strict=True))
134
+ class UpdateNoteRequest(TypedDict):
135
+ clientId: Identifier
136
+ content: Content
137
+ tags: Text
138
+ undoContext: Identifier
139
+ viewport: Viewport
140
+
141
+ @with_config(ConfigDict(strict=True))
142
+ class SaveNoteRequest(TypedDict):
143
+ clientId: Identifier
144
+ content: Content
145
+ tags: Text
146
+ undoContext: Identifier
147
+ viewport: Viewport
148
+
149
+ @with_config(ConfigDict(strict=True))
150
+ class AddSelectedTextTagRequest(TypedDict):
151
+ selectedText: Identifier
152
+ clientId: Identifier
153
+ undoContext: Identifier
154
+ viewport: Viewport
155
+
156
+ @with_config(ConfigDict(strict=True))
157
+ class MakePseudoTagProposalsRequest(TypedDict):
158
+ clientId: Identifier
159
+ undoContext: Identifier
160
+ viewport: Viewport
161
+
162
+ @with_config(ConfigDict(strict=True))
163
+ class AcceptTagProposalRequest(TypedDict):
164
+ proposal: Identifier
165
+ clientId: Identifier
166
+ undoContext: Identifier
167
+ viewport: Viewport
168
+
169
+ @with_config(ConfigDict(strict=True))
170
+ class RejectTagProposalRequest(TypedDict):
171
+ proposal: Identifier
172
+ clientId: Identifier
173
+ undoContext: Identifier
174
+ viewport: Viewport
175
+
176
+ @with_config(ConfigDict(strict=True))
177
+ class SplitNoteRequest(TypedDict):
178
+ clientId: Identifier
179
+ segments: Annotated[list[Content], Field(min_length=1)]
180
+ tags: Text
181
+ undoContext: Identifier
182
+ viewport: Viewport
183
+
184
+ @with_config(ConfigDict(strict=True))
185
+ class ToggleTodoDoneRequest(TypedDict):
186
+ clientId: Identifier
187
+ undoContext: Identifier
188
+ viewport: Viewport
189
+
190
+ @with_config(ConfigDict(strict=True))
191
+ class UnformatNoteContentRequest(TypedDict):
192
+ clientId: Identifier
193
+ undoContext: Identifier
194
+ viewport: Viewport
195
+
196
+ @with_config(ConfigDict(strict=True))
197
+ class ResizeNoteImageRequest(TypedDict):
198
+ clientId: Identifier
199
+ sourceKind: Literal['inline', 'file']
200
+ occurrenceIndex: Nonnegative
201
+ action: Literal['bigger', 'smaller', 'reset']
202
+ undoContext: Identifier
203
+ viewport: Viewport
204
+
205
+ @with_config(ConfigDict(strict=True))
206
+ class RunShellEndpointRequest(TypedDict):
207
+ timeoutSeconds: Annotated[int, Field(ge=0, le=SHELL_SECONDS)]
208
+
209
+ @with_config(ConfigDict(strict=True))
210
+ class ToggleReferenceModeEndpointRequest(TypedDict):
211
+ reference_note_id: Identifier
212
+ occurrence_index: Nonnegative
213
+ mode: Literal['embed', 'link']
214
+ clientId: Identifier
215
+ undoContext: Identifier
216
+ viewport: Viewport
217
+
218
+ @with_config(ConfigDict(strict=True))
219
+ class MoveNoteEndpointRequest(TypedDict):
220
+ tab_id: Identifier
221
+ new_parent_id: Text | None
222
+ sibling_id: Identifier
223
+ position: Literal['BEFORE', 'AFTER']
224
+ clientId: Identifier
225
+ undoContext: Identifier
226
+ viewport: Viewport
227
+
228
+ @with_config(ConfigDict(strict=True))
229
+ class MoveNoteToTopEndpointRequest(TypedDict):
230
+ search_query: Text | None
231
+ tab_id: Identifier
232
+ clientId: Identifier
233
+ undoContext: Identifier
234
+ viewport: Viewport
235
+
236
+ @with_config(ConfigDict(strict=True))
237
+ class IndentNoteEndpointRequest(TypedDict):
238
+ visible_prev_id: Text | None
239
+ clientId: Identifier
240
+ undoContext: Identifier
241
+ viewport: Viewport
242
+
243
+ @with_config(ConfigDict(strict=True))
244
+ class OutdentNoteEndpointRequest(TypedDict):
245
+ search_query: Text | None
246
+ clientId: Identifier
247
+ undoContext: Identifier
248
+ viewport: Viewport
249
+
250
+ @with_config(ConfigDict(strict=True))
251
+ class CollapseEndpointRequest(TypedDict):
252
+ clientId: Identifier
253
+ undoContext: Identifier
254
+ viewport: Viewport
255
+
256
+ @with_config(ConfigDict(strict=True))
257
+ class ExpandEndpointRequest(TypedDict):
258
+ clientId: Identifier
259
+ undoContext: Identifier
260
+ viewport: Viewport
261
+
262
+ @with_config(ConfigDict(strict=True))
263
+ class SetCollapsedBulkEndpointRequest(TypedDict):
264
+ note_ids: Annotated[list[Identifier], Field(min_length=1)]
265
+ collapsed: bool
266
+ clientId: Identifier
267
+ undoContext: Identifier
268
+ viewport: Viewport
269
+
270
+ @with_config(ConfigDict(strict=True))
271
+ class SetCollapsedInContextEndpointRequest(TypedDict):
272
+ search_query: Text | None
273
+ collapsed: bool
274
+ recursive: bool
275
+ clientId: Identifier
276
+ undoContext: Identifier
277
+ viewport: Viewport
278
+
279
+ @with_config(ConfigDict(strict=True))
280
+ class SetCollapsedSubtreeEndpointRequest(TypedDict):
281
+ collapsed: bool
282
+ clientId: Identifier
283
+ undoContext: Identifier
284
+ viewport: Viewport
285
+
286
+ @with_config(ConfigDict(strict=True))
287
+ class PrioritizeInViewEndpointRequest(TypedDict):
288
+ tag: Identifier
289
+ direction: Literal['front', 'back']
290
+ search_query: Text | None
291
+ tab_id: Identifier
292
+ clientId: Identifier
293
+ undoContext: Identifier
294
+ viewport: Viewport
295
+
296
+ @with_config(ConfigDict(strict=True))
297
+ class AlphabetizeRootNotesEndpointRequest(TypedDict):
298
+ direction: Literal['asc', 'desc']
299
+ search_query: Text | None
300
+ tab_id: Identifier
301
+ clientId: Identifier
302
+ undoContext: Identifier
303
+ viewport: Viewport
304
+
305
+ @with_config(ConfigDict(strict=True))
306
+ class ResetUpdatedAtToCreatedAtEndpointRequest(TypedDict):
307
+ search_query: Text | None
308
+ clientId: Identifier
309
+ undoContext: Identifier
310
+ viewport: Viewport
311
+
312
+ @with_config(ConfigDict(strict=True))
313
+ class DeleteNoteRequest(TypedDict):
314
+ clientId: Identifier
315
+ undoContext: Identifier
316
+ viewport: Viewport
317
+
318
+ @with_config(ConfigDict(strict=True))
319
+ class CopyNoteEndpointRequest(TypedDict):
320
+ clientId: Identifier
321
+
322
+ @with_config(ConfigDict(strict=True))
323
+ class PasteSiblingEndpointRequest(TypedDict):
324
+ search_query: Text | None
325
+ clientId: Identifier
326
+ undoContext: Identifier
327
+ viewport: Viewport
328
+
329
+ @with_config(ConfigDict(strict=True))
330
+ class PasteChildEndpointRequest(TypedDict):
331
+ search_query: Text | None
332
+ clientId: Identifier
333
+ undoContext: Identifier
334
+ viewport: Viewport
335
+