MetaList 0.4.2__tar.gz → 0.6.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (465) hide show
  1. {metalist-0.4.2 → metalist-0.6.0}/PKG-INFO +29 -8
  2. {metalist-0.4.2 → metalist-0.6.0}/README.md +28 -6
  3. {metalist-0.4.2 → metalist-0.6.0}/app/api/middleware/auth.py +5 -19
  4. metalist-0.6.0/app/api/note_requests.py +335 -0
  5. {metalist-0.4.2 → metalist-0.6.0}/app/api/routes/ai.py +50 -264
  6. {metalist-0.4.2 → metalist-0.6.0}/app/api/routes/auth.py +81 -53
  7. {metalist-0.4.2 → metalist-0.6.0}/app/api/routes/backups.py +3 -0
  8. {metalist-0.4.2 → metalist-0.6.0}/app/api/routes/files.py +2 -4
  9. {metalist-0.4.2 → metalist-0.6.0}/app/api/routes/notes.py +148 -74
  10. {metalist-0.4.2 → metalist-0.6.0}/app/api/routes/ontology.py +23 -4
  11. {metalist-0.4.2 → metalist-0.6.0}/app/api/routes/reminders.py +20 -10
  12. {metalist-0.4.2 → metalist-0.6.0}/app/api/routes/remote_images.py +4 -3
  13. {metalist-0.4.2 → metalist-0.6.0}/app/api/transactions.py +28 -5
  14. metalist-0.6.0/app/api/upload_limits.py +73 -0
  15. {metalist-0.4.2 → metalist-0.6.0}/app/db/file_schema.py +0 -20
  16. {metalist-0.4.2 → metalist-0.6.0}/app/db/file_session.py +8 -6
  17. {metalist-0.4.2 → metalist-0.6.0}/app/db/files_sql.py +24 -0
  18. metalist-0.6.0/app/db/live_recovery.py +263 -0
  19. {metalist-0.4.2 → metalist-0.6.0}/app/db/migrations.py +2 -0
  20. {metalist-0.4.2 → metalist-0.6.0}/app/db/notes_sql.py +6 -0
  21. metalist-0.6.0/app/db/retire_sounds.py +67 -0
  22. {metalist-0.4.2 → metalist-0.6.0}/app/db/session.py +79 -26
  23. {metalist-0.4.2 → metalist-0.6.0}/app/db/version.py +1 -1
  24. {metalist-0.4.2 → metalist-0.6.0}/app/encryption_audit.py +7 -2
  25. metalist-0.6.0/app/exception_boundaries.py +154 -0
  26. metalist-0.6.0/app/https_proxy.py +135 -0
  27. {metalist-0.4.2 → metalist-0.6.0}/app/main.py +52 -82
  28. {metalist-0.4.2 → metalist-0.6.0}/app/models/database.py +35 -8
  29. {metalist-0.4.2 → metalist-0.6.0}/app/models/linked_list.py +1 -1
  30. {metalist-0.4.2 → metalist-0.6.0}/app/models/list_operations.py +6 -7
  31. {metalist-0.4.2 → metalist-0.6.0}/app/models/note_crud.py +2 -28
  32. {metalist-0.4.2 → metalist-0.6.0}/app/models/utils.py +73 -93
  33. {metalist-0.4.2 → metalist-0.6.0}/app/security/request_boundary.py +21 -15
  34. metalist-0.6.0/app/security/sensitive_cache.py +78 -0
  35. {metalist-0.4.2 → metalist-0.6.0}/app/server_runtime.py +13 -10
  36. {metalist-0.4.2 → metalist-0.6.0}/app/services/agent/cloud_privacy.py +8 -0
  37. {metalist-0.4.2 → metalist-0.6.0}/app/services/agent/evidence_serialization.py +31 -31
  38. {metalist-0.4.2 → metalist-0.6.0}/app/services/agent/investigation.py +8 -9
  39. {metalist-0.4.2 → metalist-0.6.0}/app/services/ai_chat.py +26 -1
  40. metalist-0.6.0/app/services/ai_chat_stream.py +129 -0
  41. {metalist-0.4.2 → metalist-0.6.0}/app/services/auth_service.py +143 -361
  42. {metalist-0.4.2 → metalist-0.6.0}/app/services/backup_service.py +57 -44
  43. {metalist-0.4.2 → metalist-0.6.0}/app/services/bulk_operation.py +29 -18
  44. {metalist-0.4.2 → metalist-0.6.0}/app/services/client_state_service.py +32 -37
  45. {metalist-0.4.2 → metalist-0.6.0}/app/services/content_formatting.py +65 -468
  46. {metalist-0.4.2 → metalist-0.6.0}/app/services/embedded_references.py +14 -0
  47. {metalist-0.4.2 → metalist-0.6.0}/app/services/exception_capture.py +7 -1
  48. {metalist-0.4.2 → metalist-0.6.0}/app/services/file_storage.py +19 -7
  49. metalist-0.6.0/app/services/hierarchy.py +69 -0
  50. {metalist-0.4.2 → metalist-0.6.0}/app/services/html_export.py +21 -13
  51. {metalist-0.4.2 → metalist-0.6.0}/app/services/html_unformatting.py +17 -6
  52. metalist-0.6.0/app/services/input_errors.py +13 -0
  53. {metalist-0.4.2 → metalist-0.6.0}/app/services/latex_rendering.py +2 -2
  54. {metalist-0.4.2 → metalist-0.6.0}/app/services/link_titles.py +20 -10
  55. {metalist-0.4.2 → metalist-0.6.0}/app/services/maintenance_mode.py +18 -1
  56. {metalist-0.4.2 → metalist-0.6.0}/app/services/managed_ollama_runtime.py +5 -5
  57. {metalist-0.4.2 → metalist-0.6.0}/app/services/namespace_deletion_jobs.py +2 -1
  58. {metalist-0.4.2 → metalist-0.6.0}/app/services/namespace_deletion_worker.py +3 -3
  59. {metalist-0.4.2 → metalist-0.6.0}/app/services/namespace_rename_jobs.py +1 -0
  60. {metalist-0.4.2 → metalist-0.6.0}/app/services/namespace_rename_worker.py +1 -1
  61. {metalist-0.4.2 → metalist-0.6.0}/app/services/namespace_runtime_guard.py +1 -1
  62. {metalist-0.4.2 → metalist-0.6.0}/app/services/namespace_switcher.py +39 -18
  63. metalist-0.6.0/app/services/note_ordering.py +133 -0
  64. {metalist-0.4.2 → metalist-0.6.0}/app/services/note_store.py +227 -587
  65. metalist-0.6.0/app/services/password_note_fields.py +45 -0
  66. {metalist-0.4.2 → metalist-0.6.0}/app/services/reminders.py +63 -102
  67. {metalist-0.4.2 → metalist-0.6.0}/app/services/remote_image_proxy.py +7 -6
  68. metalist-0.6.0/app/services/request_recovery.py +96 -0
  69. metalist-0.6.0/app/services/resource_limits.py +46 -0
  70. {metalist-0.4.2 → metalist-0.6.0}/app/services/root_sorting.py +96 -41
  71. metalist-0.6.0/app/services/runtime_generation.py +39 -0
  72. {metalist-0.4.2 → metalist-0.6.0}/app/services/runtime_lock.py +10 -2
  73. {metalist-0.4.2 → metalist-0.6.0}/app/services/search_query.py +10 -9
  74. {metalist-0.4.2 → metalist-0.6.0}/app/services/self_update.py +1 -1
  75. {metalist-0.4.2 → metalist-0.6.0}/app/services/shell_session_service.py +118 -21
  76. {metalist-0.4.2 → metalist-0.6.0}/app/services/snapshot.py +194 -179
  77. {metalist-0.4.2 → metalist-0.6.0}/app/services/store.py +13 -21
  78. metalist-0.6.0/app/services/structured_note_renderers.py +478 -0
  79. metalist-0.6.0/app/services/sync.py +155 -0
  80. {metalist-0.4.2 → metalist-0.6.0}/app/services/tab_state.py +37 -36
  81. {metalist-0.4.2 → metalist-0.6.0}/app/services/tag_suggestions.py +147 -134
  82. {metalist-0.4.2 → metalist-0.6.0}/app/services/tag_term_matching.py +5 -5
  83. {metalist-0.4.2 → metalist-0.6.0}/app/services/tokens.py +26 -0
  84. {metalist-0.4.2 → metalist-0.6.0}/app/services/undo_state.py +72 -26
  85. metalist-0.6.0/app/services/view_cache.py +122 -0
  86. {metalist-0.4.2 → metalist-0.6.0}/app/services/windows_process_control.py +19 -0
  87. {metalist-0.4.2 → metalist-0.6.0}/app/startup_js_sanity.py +144 -5
  88. {metalist-0.4.2 → metalist-0.6.0}/app/startup_sanity.py +47 -1
  89. {metalist-0.4.2 → metalist-0.6.0}/app/startup_sanity_config.py +15 -0
  90. {metalist-0.4.2 → metalist-0.6.0}/app/static/config/command_palette_tags.json +0 -4
  91. metalist-0.6.0/app/static/css/floating-notes.css +44 -0
  92. {metalist-0.4.2 → metalist-0.6.0}/app/static/css/main.css +30 -122
  93. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/ai-chat/ai-agent-debug-view.js +8 -1
  94. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/ai-chat/ai-chat-api.js +3 -1
  95. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/ai-chat/ai-chat-panel-controller.js +36 -19
  96. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/ai-chat/bulk-proposal-ui.js +26 -18
  97. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/ai-chat/proposal-menu.js +3 -1
  98. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/api-client.js +29 -92
  99. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/api-failure-classification-service.js +9 -8
  100. metalist-0.6.0/app/static/js/modules/application-state.js +245 -0
  101. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/async-result.js +2 -1
  102. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/auth.js +21 -11
  103. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/client-state-api.js +3 -2
  104. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/command-palette/activation-auth-policy.js +2 -0
  105. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/command-palette/command-palette-controller.js +33 -70
  106. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/command-palette/endpoint-registry.js +2 -7
  107. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/command-palette/preferences-store.js +29 -15
  108. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/command-palette/tag-config-loader.js +2 -1
  109. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/command-palette/usage-store.js +10 -4
  110. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/config.js +7 -12
  111. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/connectivity-monitor.js +13 -6
  112. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/context-menu/context-menu-registry.js +53 -1
  113. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/context-menu/context-menu-service.js +123 -50
  114. metalist-0.6.0/app/static/js/modules/editor-selection.js +118 -0
  115. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/editor-toolbar.js +30 -26
  116. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/error-overlay.js +6 -3
  117. metalist-0.6.0/app/static/js/modules/expected-errors.js +23 -0
  118. metalist-0.6.0/app/static/js/modules/maintenance.js +16 -0
  119. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/modals/agent-prompt-editor-modal.js +5 -0
  120. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/modals/ai-agent-settings-modal.js +9 -0
  121. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/modals/alphabetize-root-notes-modal.js +8 -6
  122. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/modals/backup-restore-modal.js +9 -4
  123. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/modals/backup-result-modal.js +9 -0
  124. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/modals/backup-retention-modal.js +8 -6
  125. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/modals/backup-settings-modal.js +15 -11
  126. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/modals/base-modal.js +7 -23
  127. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/modals/confirmation-modal.js +8 -6
  128. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/modals/delete-namespace-modal.js +5 -8
  129. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/modals/help-modal.js +3 -0
  130. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/modals/namespace-modals.js +25 -13
  131. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/modals/note-layout-appearance-modal.js +3 -0
  132. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/modals/ontology-modal.js +95 -70
  133. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/modals/password-modal.js +18 -12
  134. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/modals/prioritize-modal.js +12 -7
  135. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/modals/random-password-modal.js +7 -1
  136. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/modals/reminder-modal.js +24 -260
  137. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/modals/reset-updated-at-modal.js +8 -6
  138. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/modals/search-suggestion-statistics-modal.js +3 -0
  139. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/modals/session-timeout-modal.js +8 -2
  140. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/modals/version-info-modal.js +11 -8
  141. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/actions/history-actions.js +8 -1
  142. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/actions/note-actions.js +3 -5
  143. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/actions/selection-actions.js +1 -1
  144. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/actions/ui-actions.js +21 -17
  145. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/events/context-menu-events.js +15 -1
  146. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/events/inactivity-events.js +7 -2
  147. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/events/input-events.js +6 -3
  148. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/events/keyboard-events.js +77 -48
  149. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/events/mouse-events.js +91 -68
  150. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/mode-context.js +121 -79
  151. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/mode-logger.js +2 -2
  152. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/animated-scroll-service.js +10 -7
  153. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/backlinks-panel-service.js +15 -10
  154. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/command-gate-service.js +26 -34
  155. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/differential-view-service.js +12 -7
  156. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/embedded-image-service.js +2 -1
  157. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/file-image-preview-service.js +33 -21
  158. metalist-0.6.0/app/static/js/modules/mode-manager/services/floating-note-dom.js +74 -0
  159. metalist-0.6.0/app/static/js/modules/mode-manager/services/floating-note-layout.js +28 -0
  160. metalist-0.6.0/app/static/js/modules/mode-manager/services/floating-note-service.js +246 -0
  161. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/image-context-menu-action-service.js +11 -7
  162. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/image-file-insert-choice-modal-service.js +8 -5
  163. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/infinite-scroll-service.js +32 -25
  164. metalist-0.6.0/app/static/js/modules/mode-manager/services/link-title-prefetch-service.js +48 -0
  165. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/markdown-render-service.js +9 -6
  166. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/mermaid-render-service.js +16 -12
  167. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/note-click-target-service.js +12 -0
  168. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/note-clipboard-write-service.js +4 -0
  169. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/note-collapse-animation-service.js +2 -1
  170. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/note-fullscreen-service.js +14 -10
  171. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/note-reposition-animation-service.js +2 -1
  172. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/password-clipboard-service.js +13 -6
  173. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/polling-service.js +34 -26
  174. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/reference-source-navigation-service.js +18 -14
  175. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/remote-image-proxy-service.js +35 -23
  176. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/scroll-restoration-service.js +16 -12
  177. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/search-contexts-overlay-service.js +33 -18
  178. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/search-debounce-service.js +9 -6
  179. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/search-interaction-service.js +27 -26
  180. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/search-redaction-reveal-service.js +1 -1
  181. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/search-suggestion-windows-service.js +25 -9
  182. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/search-suggestions-service.js +49 -39
  183. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/selected-formatting-removal-service.js +68 -0
  184. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/tab-dom-cache-service.js +12 -7
  185. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/tab-state-service.js +38 -32
  186. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/tag-bar-service.js +35 -30
  187. metalist-0.6.0/app/static/js/modules/mode-manager/services/tag-input-selection-service.js +26 -0
  188. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/tag-suggestions-service.js +54 -43
  189. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/note-html-sanitizer.js +9 -5
  190. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/password-operation-response.js +5 -3
  191. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/password-strength.js +8 -5
  192. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/reminder-store.js +9 -9
  193. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/reminder-surface-service.js +18 -37
  194. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/namespace-deleted.js +3 -2
  195. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/namespace-renamed.js +3 -2
  196. metalist-0.6.0/app/static/js/vendor/dompurify-3.4.13.min.js +3 -0
  197. metalist-0.6.0/app/static/js/vendor/markdown-it-14.3.2.LICENSE.txt +22 -0
  198. metalist-0.6.0/app/static/js/vendor/markdown-it-14.3.2.min.js +3 -0
  199. metalist-0.6.0/app/static/js/vendor/mermaid-11.16.1.min.js +3587 -0
  200. {metalist-0.4.2 → metalist-0.6.0}/app/static/note-html-policy.json +2 -1
  201. {metalist-0.4.2 → metalist-0.6.0}/app/templates/base.html +1 -1
  202. {metalist-0.4.2 → metalist-0.6.0}/app/templates/maintenance.html +1 -25
  203. metalist-0.6.0/app/upload_limits.py +11 -0
  204. {metalist-0.4.2 → metalist-0.6.0}/app/usecases/collapse.py +1 -0
  205. {metalist-0.4.2 → metalist-0.6.0}/app/usecases/copy_note.py +21 -11
  206. {metalist-0.4.2 → metalist-0.6.0}/app/usecases/delete_subtree.py +1 -0
  207. {metalist-0.4.2 → metalist-0.6.0}/app/usecases/expand.py +2 -2
  208. {metalist-0.4.2 → metalist-0.6.0}/app/usecases/move.py +22 -50
  209. {metalist-0.4.2 → metalist-0.6.0}/app/usecases/paste_sibling.py +4 -7
  210. metalist-0.6.0/app/usecases/prefetch_link_titles.py +24 -0
  211. {metalist-0.4.2 → metalist-0.6.0}/app/usecases/resize_image.py +2 -2
  212. {metalist-0.4.2 → metalist-0.6.0}/app/usecases/toggle_reference_mode.py +2 -2
  213. {metalist-0.4.2 → metalist-0.6.0}/app/usecases/toggle_todo_done.py +2 -2
  214. {metalist-0.4.2 → metalist-0.6.0}/app/usecases/undo.py +2 -2
  215. {metalist-0.4.2 → metalist-0.6.0}/app/usecases/unformat_content.py +2 -2
  216. {metalist-0.4.2 → metalist-0.6.0}/app/usecases/update_content.py +14 -6
  217. {metalist-0.4.2 → metalist-0.6.0}/app/utils/encryption.py +2 -0
  218. {metalist-0.4.2 → metalist-0.6.0}/app/version.py +1 -1
  219. {metalist-0.4.2 → metalist-0.6.0}/convert-from-legacy.py +1 -1
  220. {metalist-0.4.2 → metalist-0.6.0}/main.py +11 -72
  221. {metalist-0.4.2 → metalist-0.6.0}/metalist.egg-info/PKG-INFO +29 -8
  222. {metalist-0.4.2 → metalist-0.6.0}/metalist.egg-info/SOURCES.txt +33 -16
  223. {metalist-0.4.2 → metalist-0.6.0}/metalist.egg-info/requires.txt +0 -1
  224. {metalist-0.4.2 → metalist-0.6.0}/pyproject.toml +9 -1
  225. metalist-0.4.2/app/api/routes/sounds.py +0 -190
  226. metalist-0.4.2/app/db/sounds_sql.py +0 -162
  227. metalist-0.4.2/app/services/base_service.py +0 -145
  228. metalist-0.4.2/app/services/dependencies.py +0 -72
  229. metalist-0.4.2/app/services/note_service.py +0 -290
  230. metalist-0.4.2/app/services/query_service.py +0 -280
  231. metalist-0.4.2/app/services/sound_storage.py +0 -754
  232. metalist-0.4.2/app/services/sync.py +0 -74
  233. metalist-0.4.2/app/services/transaction_manager.py +0 -159
  234. metalist-0.4.2/app/services/undo_service.py +0 -44
  235. metalist-0.4.2/app/services/view_cache.py +0 -71
  236. metalist-0.4.2/app/static/js/modules/editor-selection.js +0 -110
  237. metalist-0.4.2/app/static/js/modules/modals/sound-manager-modal.js +0 -270
  238. metalist-0.4.2/app/static/js/modules/sound-service.js +0 -380
  239. metalist-0.4.2/app/static/js/vendor/dompurify-3.4.12.min.js +0 -3
  240. metalist-0.4.2/app/static/js/vendor/markdown-it.min.js +0 -1
  241. metalist-0.4.2/app/static/js/vendor/mermaid-11.9.0.min.js +0 -2659
  242. {metalist-0.4.2 → metalist-0.6.0}/MANIFEST.in +0 -0
  243. {metalist-0.4.2 → metalist-0.6.0}/app/__init__.py +0 -0
  244. {metalist-0.4.2 → metalist-0.6.0}/app/api/__init__.py +0 -0
  245. {metalist-0.4.2 → metalist-0.6.0}/app/api/deps.py +0 -0
  246. {metalist-0.4.2 → metalist-0.6.0}/app/api/dev.py +0 -0
  247. {metalist-0.4.2 → metalist-0.6.0}/app/api/request_auth.py +0 -0
  248. {metalist-0.4.2 → metalist-0.6.0}/app/api/routes/test.py +0 -0
  249. {metalist-0.4.2 → metalist-0.6.0}/app/config.py +0 -0
  250. {metalist-0.4.2 → metalist-0.6.0}/app/data_directory.py +0 -0
  251. {metalist-0.4.2 → metalist-0.6.0}/app/db/__init__.py +0 -0
  252. {metalist-0.4.2 → metalist-0.6.0}/app/db/backup_settings_sql.py +0 -0
  253. {metalist-0.4.2 → metalist-0.6.0}/app/db/engine.py +0 -0
  254. {metalist-0.4.2 → metalist-0.6.0}/app/db/link_titles_sql.py +0 -0
  255. {metalist-0.4.2 → metalist-0.6.0}/app/db/ontology_rules_sql.py +0 -0
  256. {metalist-0.4.2 → metalist-0.6.0}/app/db/reminders_sql.py +0 -0
  257. {metalist-0.4.2 → metalist-0.6.0}/app/db/schema.py +0 -0
  258. {metalist-0.4.2 → metalist-0.6.0}/app/db/search_history_sql.py +0 -0
  259. {metalist-0.4.2 → metalist-0.6.0}/app/db/settings_sql.py +0 -0
  260. {metalist-0.4.2 → metalist-0.6.0}/app/db/tab_state_sql.py +0 -0
  261. {metalist-0.4.2 → metalist-0.6.0}/app/models/commands.py +0 -0
  262. {metalist-0.4.2 → metalist-0.6.0}/app/models/entities.py +0 -0
  263. {metalist-0.4.2 → metalist-0.6.0}/app/models/enums.py +0 -0
  264. {metalist-0.4.2 → metalist-0.6.0}/app/models/list_traversal.py +0 -0
  265. {metalist-0.4.2 → metalist-0.6.0}/app/presentation/__init__.py +0 -0
  266. {metalist-0.4.2 → metalist-0.6.0}/app/presentation/render/__init__.py +0 -0
  267. {metalist-0.4.2 → metalist-0.6.0}/app/presentation/render/note_renderer.py +0 -0
  268. {metalist-0.4.2 → metalist-0.6.0}/app/presentation/templates.py +0 -0
  269. {metalist-0.4.2 → metalist-0.6.0}/app/security/authenticated_logging.py +0 -0
  270. {metalist-0.4.2 → metalist-0.6.0}/app/security/encryption.py +0 -0
  271. {metalist-0.4.2 → metalist-0.6.0}/app/security/http_headers.py +0 -0
  272. {metalist-0.4.2 → metalist-0.6.0}/app/security/note_html.py +0 -0
  273. {metalist-0.4.2 → metalist-0.6.0}/app/security/sensitive_logging.py +0 -0
  274. {metalist-0.4.2 → metalist-0.6.0}/app/security/shell_execution.py +0 -0
  275. {metalist-0.4.2 → metalist-0.6.0}/app/security/validation_errors.py +0 -0
  276. {metalist-0.4.2 → metalist-0.6.0}/app/services/__init__.py +0 -0
  277. {metalist-0.4.2 → metalist-0.6.0}/app/services/agent/__init__.py +0 -0
  278. {metalist-0.4.2 → metalist-0.6.0}/app/services/agent/actions.py +0 -0
  279. {metalist-0.4.2 → metalist-0.6.0}/app/services/agent/context.py +0 -0
  280. {metalist-0.4.2 → metalist-0.6.0}/app/services/agent/inference.py +0 -0
  281. {metalist-0.4.2 → metalist-0.6.0}/app/services/agent/model_policy.py +0 -0
  282. {metalist-0.4.2 → metalist-0.6.0}/app/services/agent/ollama_inference.py +0 -0
  283. {metalist-0.4.2 → metalist-0.6.0}/app/services/agent/openai_cost_tracking.py +0 -0
  284. {metalist-0.4.2 → metalist-0.6.0}/app/services/agent/openai_inference.py +0 -0
  285. {metalist-0.4.2 → metalist-0.6.0}/app/services/agent/permissions.py +0 -0
  286. {metalist-0.4.2 → metalist-0.6.0}/app/services/agent/prompt_settings.py +0 -0
  287. {metalist-0.4.2 → metalist-0.6.0}/app/services/agent/prompts/__init__.py +0 -0
  288. {metalist-0.4.2 → metalist-0.6.0}/app/services/agent/prompts/final-response.md +0 -0
  289. {metalist-0.4.2 → metalist-0.6.0}/app/services/agent/prompts/system.md +0 -0
  290. {metalist-0.4.2 → metalist-0.6.0}/app/services/agent/prompts/tool-result.md +0 -0
  291. {metalist-0.4.2 → metalist-0.6.0}/app/services/agent/retrieval_settings.py +0 -0
  292. {metalist-0.4.2 → metalist-0.6.0}/app/services/agent/runtime.py +0 -0
  293. {metalist-0.4.2 → metalist-0.6.0}/app/services/agent/scope.py +0 -0
  294. {metalist-0.4.2 → metalist-0.6.0}/app/services/agent/skill_settings.py +0 -0
  295. {metalist-0.4.2 → metalist-0.6.0}/app/services/agent/skills/__init__.py +0 -0
  296. {metalist-0.4.2 → metalist-0.6.0}/app/services/agent/skills/scoped-investigation.md +0 -0
  297. {metalist-0.4.2 → metalist-0.6.0}/app/services/agent/tagging.py +0 -0
  298. {metalist-0.4.2 → metalist-0.6.0}/app/services/agent/tagging_run.py +0 -0
  299. {metalist-0.4.2 → metalist-0.6.0}/app/services/agent/token_estimation.py +0 -0
  300. {metalist-0.4.2 → metalist-0.6.0}/app/services/agent/tools.py +0 -0
  301. {metalist-0.4.2 → metalist-0.6.0}/app/services/agent/trace.py +0 -0
  302. {metalist-0.4.2 → metalist-0.6.0}/app/services/ai_chat_rendering.py +0 -0
  303. {metalist-0.4.2 → metalist-0.6.0}/app/services/auth.py +0 -0
  304. {metalist-0.4.2 → metalist-0.6.0}/app/services/auth_cache_state.py +0 -0
  305. {metalist-0.4.2 → metalist-0.6.0}/app/services/backlink_index.py +0 -0
  306. {metalist-0.4.2 → metalist-0.6.0}/app/services/backlinks.py +0 -0
  307. {metalist-0.4.2 → metalist-0.6.0}/app/services/backup_settings_service.py +0 -0
  308. {metalist-0.4.2 → metalist-0.6.0}/app/services/content_cache.py +0 -0
  309. {metalist-0.4.2 → metalist-0.6.0}/app/services/diagnostics.py +0 -0
  310. {metalist-0.4.2 → metalist-0.6.0}/app/services/encryption.py +0 -0
  311. {metalist-0.4.2 → metalist-0.6.0}/app/services/file_registry.py +0 -0
  312. {metalist-0.4.2 → metalist-0.6.0}/app/services/footnote_layout.py +0 -0
  313. {metalist-0.4.2 → metalist-0.6.0}/app/services/footnote_rendering.py +0 -0
  314. {metalist-0.4.2 → metalist-0.6.0}/app/services/hydration_state.py +0 -0
  315. {metalist-0.4.2 → metalist-0.6.0}/app/services/image_size_formatting.py +0 -0
  316. {metalist-0.4.2 → metalist-0.6.0}/app/services/inline_image_occurrences.py +0 -0
  317. {metalist-0.4.2 → metalist-0.6.0}/app/services/integrity.py +0 -0
  318. {metalist-0.4.2 → metalist-0.6.0}/app/services/login_rate_limit.py +0 -0
  319. {metalist-0.4.2 → metalist-0.6.0}/app/services/markdown_rendering.py +0 -0
  320. {metalist-0.4.2 → metalist-0.6.0}/app/services/note_fullscreen.py +0 -0
  321. {metalist-0.4.2 → metalist-0.6.0}/app/services/note_image_tags.py +0 -0
  322. {metalist-0.4.2 → metalist-0.6.0}/app/services/ollama_provider.py +0 -0
  323. {metalist-0.4.2 → metalist-0.6.0}/app/services/ontology_rules_store.py +0 -0
  324. {metalist-0.4.2 → metalist-0.6.0}/app/services/openai_credentials.py +0 -0
  325. {metalist-0.4.2 → metalist-0.6.0}/app/services/reference_presentation.py +0 -0
  326. {metalist-0.4.2 → metalist-0.6.0}/app/services/runtime_hardening.py +0 -0
  327. {metalist-0.4.2 → metalist-0.6.0}/app/services/search_history.py +0 -0
  328. {metalist-0.4.2 → metalist-0.6.0}/app/services/search_history_storage.py +0 -0
  329. {metalist-0.4.2 → metalist-0.6.0}/app/services/search_index.py +0 -0
  330. {metalist-0.4.2 → metalist-0.6.0}/app/services/search_text.py +0 -0
  331. {metalist-0.4.2 → metalist-0.6.0}/app/services/selected_text_tag.py +0 -0
  332. {metalist-0.4.2 → metalist-0.6.0}/app/services/session_timeout_service.py +0 -0
  333. {metalist-0.4.2 → metalist-0.6.0}/app/services/sync_state.py +0 -0
  334. {metalist-0.4.2 → metalist-0.6.0}/app/services/tag_case.py +0 -0
  335. {metalist-0.4.2 → metalist-0.6.0}/app/services/tag_ontology.py +0 -0
  336. {metalist-0.4.2 → metalist-0.6.0}/app/services/tag_rename.py +0 -0
  337. {metalist-0.4.2 → metalist-0.6.0}/app/services/test_reset.py +0 -0
  338. {metalist-0.4.2 → metalist-0.6.0}/app/services/update_backups.py +0 -0
  339. {metalist-0.4.2 → metalist-0.6.0}/app/services/view_diff.py +0 -0
  340. {metalist-0.4.2 → metalist-0.6.0}/app/services/view_state.py +0 -0
  341. {metalist-0.4.2 → metalist-0.6.0}/app/startup_environment.py +0 -0
  342. {metalist-0.4.2 → metalist-0.6.0}/app/static/css/forms.css +0 -0
  343. {metalist-0.4.2 → metalist-0.6.0}/app/static/img/favicon.ico +0 -0
  344. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/locked.js +0 -0
  345. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/main.js +0 -0
  346. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/activity-tracker.js +0 -0
  347. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/ai-chat/agent-prompt-service.js +0 -0
  348. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/ai-chat/agent-retrieval-settings.js +0 -0
  349. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/ai-chat/ai-chat-panel-service.js +0 -0
  350. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/ai-chat/ai-thinking-level-service.js +0 -0
  351. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/ai-chat/bulk-elapsed-clock.js +0 -0
  352. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/ai-chat/cloud-privacy-policy.js +0 -0
  353. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/client-state-migration.js +0 -0
  354. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/command-palette/backup-command-availability.js +0 -0
  355. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/command-palette/click-activation-service.js +0 -0
  356. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/command-palette/note-layout-preferences.js +0 -0
  357. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/context-menu/context-menu-target-service.js +0 -0
  358. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/context-menu/input-caret-service.js +0 -0
  359. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/disconnect-editing-state-service.js +0 -0
  360. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/dom-utils-fixed.js +0 -0
  361. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/dom-utils.js +0 -0
  362. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/editor-commands.js +0 -0
  363. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/elapsed-time.js +0 -0
  364. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/error-handler.js +0 -0
  365. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/location-flags.js +0 -0
  366. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/login-namespace-picker.js +0 -0
  367. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/modals/delete-namespace-validation.js +0 -0
  368. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/modals/namespace-loading-page.js +0 -0
  369. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/modals/namespace-ports-profile.js +0 -0
  370. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/modals/namespace-rename-validation.js +0 -0
  371. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/actions/content-actions.js +0 -0
  372. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/actions/search-actions.js +0 -0
  373. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/events/focus-events.js +0 -0
  374. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/events/search-events.js +0 -0
  375. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/mode-manager-controller.js +0 -0
  376. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/add-style-service.js +0 -0
  377. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/backlinks-navigation-service.js +0 -0
  378. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/clipboard-shortcut-policy-service.js +0 -0
  379. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/collapse-affordance-service.js +0 -0
  380. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/collapse-editing-policy-service.js +0 -0
  381. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/context-menu-target-service.js +0 -0
  382. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/deselect-selection-state-service.js +0 -0
  383. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/edit-session-collapse-policy-service.js +0 -0
  384. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/edit-session-collapse-service.js +0 -0
  385. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/file-drop-policy-service.js +0 -0
  386. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/file-reference-service.js +0 -0
  387. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/filtered-refresh-selection-service.js +0 -0
  388. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/footnote-navigation-service.js +0 -0
  389. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/history-selection-policy-service.js +0 -0
  390. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/history-shortcut-policy-service.js +0 -0
  391. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/html-paste-sanitizer-service.js +0 -0
  392. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/link-context-menu-action-service.js +0 -0
  393. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/note-context-menu-action-service.js +0 -0
  394. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/note-delete-shortcut-policy-service.js +0 -0
  395. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/note-drag-service.js +0 -0
  396. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/note-split-service.js +0 -0
  397. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/note-timestamp-hover-service.js +0 -0
  398. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/remove-formatting-service.js +0 -0
  399. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/root-date-separator-service.js +0 -0
  400. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/root-sort-indicator-service.js +0 -0
  401. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/root-sort-service.js +0 -0
  402. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/scroll-anchor-service.js +0 -0
  403. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/scroll-to-top-service.js +0 -0
  404. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/search-input-service.js +0 -0
  405. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/search-suggestion-statistics-service.js +0 -0
  406. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/search-suggestion-window-labels-service.js +0 -0
  407. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/search-syntax-service.js +0 -0
  408. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/selected-text-tag-service.js +0 -0
  409. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/shell-output-service.js +0 -0
  410. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/tab-drag-service.js +0 -0
  411. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/tab-duplication-service.js +0 -0
  412. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/tag-proposal-service.js +0 -0
  413. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/tag-syntax-service.js +0 -0
  414. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/todo-toggle-editing-service.js +0 -0
  415. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/untagged-view-indicator-service.js +0 -0
  416. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/mode-manager/services/view-mode-search-shortcut-service.js +0 -0
  417. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/password-generator.js +0 -0
  418. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/password-policy.js +0 -0
  419. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/selection-markers.js +0 -0
  420. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/session-auth.js +0 -0
  421. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/modules/tag-token.js +0 -0
  422. {metalist-0.4.2 → metalist-0.6.0}/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.0/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.0/app/static/js/vendor/mermaid-11.16.1.LICENSE.txt +0 -0
  425. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/vendor/zxcvbn-4.4.2.LICENSE.txt +0 -0
  426. {metalist-0.4.2 → metalist-0.6.0}/app/static/js/vendor/zxcvbn-4.4.2.js +0 -0
  427. {metalist-0.4.2 → metalist-0.6.0}/app/static/video/login-startup.mp4 +0 -0
  428. {metalist-0.4.2 → metalist-0.6.0}/app/templates/index.html +0 -0
  429. {metalist-0.4.2 → metalist-0.6.0}/app/templates/locked.html +0 -0
  430. {metalist-0.4.2 → metalist-0.6.0}/app/templates/namespace_deleted.html +0 -0
  431. {metalist-0.4.2 → metalist-0.6.0}/app/templates/namespace_renamed.html +0 -0
  432. {metalist-0.4.2 → metalist-0.6.0}/app/templates/notes_list.html +0 -0
  433. {metalist-0.4.2 → metalist-0.6.0}/app/usecases/__init__.py +0 -0
  434. {metalist-0.4.2 → metalist-0.6.0}/app/usecases/add_selected_text_tag.py +0 -0
  435. {metalist-0.4.2 → metalist-0.6.0}/app/usecases/alphabetize_root_notes.py +0 -0
  436. {metalist-0.4.2 → metalist-0.6.0}/app/usecases/base.py +0 -0
  437. {metalist-0.4.2 → metalist-0.6.0}/app/usecases/bulk_tag_proposals.py +0 -0
  438. {metalist-0.4.2 → metalist-0.6.0}/app/usecases/create_child.py +0 -0
  439. {metalist-0.4.2 → metalist-0.6.0}/app/usecases/create_note.py +0 -0
  440. {metalist-0.4.2 → metalist-0.6.0}/app/usecases/create_sibling.py +0 -0
  441. {metalist-0.4.2 → metalist-0.6.0}/app/usecases/delete_tag.py +0 -0
  442. {metalist-0.4.2 → metalist-0.6.0}/app/usecases/indent.py +0 -0
  443. {metalist-0.4.2 → metalist-0.6.0}/app/usecases/lock.py +0 -0
  444. {metalist-0.4.2 → metalist-0.6.0}/app/usecases/move_to_top.py +0 -0
  445. {metalist-0.4.2 → metalist-0.6.0}/app/usecases/outdent.py +0 -0
  446. {metalist-0.4.2 → metalist-0.6.0}/app/usecases/paste_child.py +0 -0
  447. {metalist-0.4.2 → metalist-0.6.0}/app/usecases/prioritize.py +0 -0
  448. {metalist-0.4.2 → metalist-0.6.0}/app/usecases/redo.py +0 -0
  449. {metalist-0.4.2 → metalist-0.6.0}/app/usecases/rename_tag.py +0 -0
  450. {metalist-0.4.2 → metalist-0.6.0}/app/usecases/reset_updated_at.py +0 -0
  451. {metalist-0.4.2 → metalist-0.6.0}/app/usecases/run_shell.py +0 -0
  452. {metalist-0.4.2 → metalist-0.6.0}/app/usecases/search_comment_autofill.py +0 -0
  453. {metalist-0.4.2 → metalist-0.6.0}/app/usecases/search_context_tags.py +0 -0
  454. {metalist-0.4.2 → metalist-0.6.0}/app/usecases/set_collapse_bulk.py +0 -0
  455. {metalist-0.4.2 → metalist-0.6.0}/app/usecases/set_collapse_in_context.py +0 -0
  456. {metalist-0.4.2 → metalist-0.6.0}/app/usecases/split_note.py +0 -0
  457. {metalist-0.4.2 → metalist-0.6.0}/app/usecases/tag_proposals.py +0 -0
  458. {metalist-0.4.2 → metalist-0.6.0}/app/usecases/view.py +0 -0
  459. {metalist-0.4.2 → metalist-0.6.0}/app/utils/__init__.py +0 -0
  460. {metalist-0.4.2 → metalist-0.6.0}/app/utils/text_utils.py +0 -0
  461. {metalist-0.4.2 → metalist-0.6.0}/metalist.egg-info/dependency_links.txt +0 -0
  462. {metalist-0.4.2 → metalist-0.6.0}/metalist.egg-info/entry_points.txt +0 -0
  463. {metalist-0.4.2 → metalist-0.6.0}/metalist.egg-info/top_level.txt +0 -0
  464. {metalist-0.4.2 → metalist-0.6.0}/scripts/generate-lan-cert.sh +0 -0
  465. {metalist-0.4.2 → metalist-0.6.0}/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.0
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,20 @@ 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.0
52
+
53
+ - 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.
54
+ - Double-click selects complete tags, including punctuation and prefixes, in search and tag bars.
55
+ - 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.
56
+ - Context menus have icons throughout. Full-screen notes have compact spacing, and both read-only views keep steady borders on hover.
57
+ - Fixed Version Info loading and state-transition errors during editing, focus changes, tab switching, and duplication.
58
+
59
+ ## Changes in 0.5.0
60
+
61
+ - 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).
62
+ - 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.
63
+ - 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).
64
+
52
65
  ## Technology Stack
53
66
 
54
67
  ### Backend
@@ -68,7 +81,7 @@ A minimalist single-user note-taking app focused on server-side rendering (SSR),
68
81
  ## Architecture (High Level)
69
82
  - Server renders the base page via Mako templates.
70
83
  - 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.
84
+ - 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
85
 
73
86
  ## Security Boundary
74
87
 
@@ -102,22 +115,25 @@ After the first installation, update and restart MetaList with one cross-platfor
102
115
  ```bash
103
116
  metalist update
104
117
  ```
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.
118
+ 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
119
 
107
120
  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
121
 
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.
122
+ 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
123
 
111
124
  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
125
 
113
126
  ```bash
114
127
  python3 -m venv .venv
115
128
  source .venv/bin/activate
116
- uv pip install -e .[dev]
129
+ python -m pip install --require-hashes -r requirements/ci.txt
130
+ python -m pip install --no-deps --no-build-isolation -e ".[dev]"
117
131
 
118
132
  npm install
119
133
  ```
120
134
 
135
+ 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.
136
+
121
137
  ### Run
122
138
 
123
139
  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 +263,9 @@ scheme/client metadata is accepted only from `METALIST_FORWARDED_ALLOW_IPS`.
247
263
  Do not widen that list beyond the actual proxy addresses.
248
264
 
249
265
  ### 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.
266
+ `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
267
 
252
- This is destructive. It deletes the existing notes DB and related files/sounds DB before rebuilding the namespace.
268
+ This is destructive. It deletes the existing notes DB and related files DB before rebuilding the namespace.
253
269
 
254
270
  Example usage:
255
271
  ```bash
@@ -312,3 +328,8 @@ Render Mermaid diagrams to PNGs:
312
328
  ```bash
313
329
  npm run render-diagrams
314
330
  ```
331
+
332
+
333
+ ## Maintenance and recovery
334
+
335
+ 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,20 @@ 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.0
16
+
17
+ - 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.
18
+ - Double-click selects complete tags, including punctuation and prefixes, in search and tag bars.
19
+ - 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.
20
+ - Context menus have icons throughout. Full-screen notes have compact spacing, and both read-only views keep steady borders on hover.
21
+ - Fixed Version Info loading and state-transition errors during editing, focus changes, tab switching, and duplication.
22
+
23
+ ## Changes in 0.5.0
24
+
25
+ - 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).
26
+ - 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.
27
+ - 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).
28
+
15
29
  ## Technology Stack
16
30
 
17
31
  ### Backend
@@ -31,7 +45,7 @@ A minimalist single-user note-taking app focused on server-side rendering (SSR),
31
45
  ## Architecture (High Level)
32
46
  - Server renders the base page via Mako templates.
33
47
  - 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.
48
+ - 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
49
 
36
50
  ## Security Boundary
37
51
 
@@ -65,22 +79,25 @@ After the first installation, update and restart MetaList with one cross-platfor
65
79
  ```bash
66
80
  metalist update
67
81
  ```
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.
82
+ 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
83
 
70
84
  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
85
 
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.
86
+ 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
87
 
74
88
  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
89
 
76
90
  ```bash
77
91
  python3 -m venv .venv
78
92
  source .venv/bin/activate
79
- uv pip install -e .[dev]
93
+ python -m pip install --require-hashes -r requirements/ci.txt
94
+ python -m pip install --no-deps --no-build-isolation -e ".[dev]"
80
95
 
81
96
  npm install
82
97
  ```
83
98
 
99
+ 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.
100
+
84
101
  ### Run
85
102
 
86
103
  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 +227,9 @@ scheme/client metadata is accepted only from `METALIST_FORWARDED_ALLOW_IPS`.
210
227
  Do not widen that list beyond the actual proxy addresses.
211
228
 
212
229
  ### 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.
230
+ `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
231
 
215
- This is destructive. It deletes the existing notes DB and related files/sounds DB before rebuilding the namespace.
232
+ This is destructive. It deletes the existing notes DB and related files DB before rebuilding the namespace.
216
233
 
217
234
  Example usage:
218
235
  ```bash
@@ -275,3 +292,8 @@ Render Mermaid diagrams to PNGs:
275
292
  ```bash
276
293
  npm run render-diagrams
277
294
  ```
295
+
296
+
297
+ ## Maintenance and recovery
298
+
299
+ 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
+