MetaList 0.14.0__tar.gz → 0.16.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.
- {metalist-0.14.0 → metalist-0.16.0}/PKG-INFO +19 -1
- {metalist-0.14.0 → metalist-0.16.0}/README.md +17 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/api/note_requests.py +9 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/api/routes/notes.py +23 -4
- {metalist-0.14.0 → metalist-0.16.0}/app/presentation/login_page.py +7 -2
- {metalist-0.14.0 → metalist-0.16.0}/app/services/agent/skills/help-ai.md +1 -1
- {metalist-0.14.0 → metalist-0.16.0}/app/services/agent/skills/help-data.md +3 -1
- {metalist-0.14.0 → metalist-0.16.0}/app/services/agent/skills/help-dictation.md +1 -1
- {metalist-0.14.0 → metalist-0.16.0}/app/services/agent/skills/help-formatting.md +35 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/agent/skills/help-menus.md +6 -4
- {metalist-0.14.0 → metalist-0.16.0}/app/services/agent/skills/help-notes.md +9 -8
- {metalist-0.14.0 → metalist-0.16.0}/app/services/agent/skills/help-privacy.md +2 -1
- {metalist-0.14.0 → metalist-0.16.0}/app/services/agent/skills/help-releases.md +17 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/agent/skills/help-tags.md +12 -2
- metalist-0.16.0/app/services/chess_rendering.py +173 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/client_state_service.py +39 -0
- metalist-0.16.0/app/services/code_rendering.py +73 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/content_formatting.py +81 -3
- {metalist-0.14.0 → metalist-0.16.0}/app/services/dictation_cleanup.py +1 -1
- metalist-0.16.0/app/services/diff_rendering.py +52 -0
- metalist-0.16.0/app/services/mermaid_note_rendering.py +27 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/snapshot.py +12 -3
- {metalist-0.14.0 → metalist-0.16.0}/app/services/structured_note_renderers.py +3 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/tag_suggestions.py +44 -115
- {metalist-0.14.0 → metalist-0.16.0}/app/static/config/agent-menu-actions.json +14 -8
- {metalist-0.14.0 → metalist-0.16.0}/app/static/config/command_palette_tags.json +6 -2
- {metalist-0.14.0 → metalist-0.16.0}/app/static/css/main.css +340 -7
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/ai-chat/proposal-menu.js +3 -3
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/api-client.js +20 -1
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/auth.js +71 -21
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/command-palette/command-palette-controller.js +43 -8
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/command-palette/endpoint-registry.js +14 -7
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/config.js +1 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/context-menu/context-menu-registry.js +315 -254
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/context-menu/context-menu-service.js +71 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/login-namespace-picker.js +17 -11
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/modals/help-modal.js +1 -0
- metalist-0.16.0/app/static/js/modules/modals/namespace-loading-page.js +109 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/modals/namespace-modals.js +81 -16
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/modals/password-modal.js +25 -8
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/modals/reminder-modal.js +39 -17
- metalist-0.16.0/app/static/js/modules/modals/tag-suggestion-settings-modal.js +122 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/actions/note-actions.js +71 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/actions/ui-actions.js +34 -6
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/events/context-menu-events.js +147 -22
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/events/keyboard-events.js +182 -8
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/events/mouse-events.js +4 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/mode-context.js +7 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/mode-manager-controller.js +26 -2
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/infinite-scroll-service.js +5 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/mermaid-render-service.js +8 -3
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/note-context-menu-action-service.js +7 -7
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/note-fullscreen-service.js +14 -0
- metalist-0.16.0/app/static/js/modules/mode-manager/services/paste-format-detection-service.js +315 -0
- metalist-0.16.0/app/static/js/modules/mode-manager/services/scroll-to-top-service.js +152 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/tag-bar-service.js +14 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/tag-syntax-service.js +16 -4
- {metalist-0.14.0 → metalist-0.16.0}/app/templates/index.html +10 -0
- metalist-0.16.0/app/usecases/move_to_top.py +179 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/version.py +1 -1
- {metalist-0.14.0 → metalist-0.16.0}/metalist.egg-info/PKG-INFO +19 -1
- {metalist-0.14.0 → metalist-0.16.0}/metalist.egg-info/SOURCES.txt +6 -0
- {metalist-0.14.0 → metalist-0.16.0}/metalist.egg-info/requires.txt +1 -0
- {metalist-0.14.0 → metalist-0.16.0}/pyproject.toml +1 -0
- metalist-0.14.0/app/static/js/modules/modals/namespace-loading-page.js +0 -138
- metalist-0.14.0/app/static/js/modules/mode-manager/services/scroll-to-top-service.js +0 -99
- metalist-0.14.0/app/usecases/move_to_top.py +0 -116
- {metalist-0.14.0 → metalist-0.16.0}/MANIFEST.in +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/__init__.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/api/__init__.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/api/deps.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/api/dev.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/api/middleware/auth.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/api/request_auth.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/api/routes/ai.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/api/routes/app_updates.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/api/routes/auth.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/api/routes/backups.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/api/routes/files.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/api/routes/ontology.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/api/routes/reminders.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/api/routes/remote_images.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/api/routes/test.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/api/transactions.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/api/upload_limits.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/config.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/data_directory.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/db/__init__.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/db/backup_settings_sql.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/db/editable_files_migration.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/db/engine.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/db/file_schema.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/db/file_session.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/db/files_sql.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/db/link_titles_sql.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/db/live_recovery.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/db/migrations.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/db/notes_sql.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/db/ontology_rules_sql.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/db/reminders_sql.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/db/retire_sounds.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/db/schema.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/db/search_history_sql.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/db/session.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/db/settings_sql.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/db/tab_state_sql.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/db/version.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/encryption_audit.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/exception_boundaries.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/https_proxy.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/main.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/models/commands.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/models/database.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/models/entities.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/models/enums.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/models/linked_list.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/models/list_operations.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/models/list_traversal.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/models/note_crud.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/models/utils.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/network_settings.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/presentation/__init__.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/presentation/render/__init__.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/presentation/render/note_renderer.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/presentation/templates.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/security/authenticated_logging.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/security/encryption.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/security/http_error_diagnostics.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/security/http_headers.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/security/note_html.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/security/request_boundary.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/security/request_hosts.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/security/sensitive_cache.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/security/sensitive_logging.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/security/shell_execution.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/security/validation_errors.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/server_runtime.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/__init__.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/agent/__init__.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/agent/action_log.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/agent/agent_loop.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/agent/agent_tools.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/agent/citation_tokens.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/agent/cloud_privacy.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/agent/context.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/agent/evidence_serialization.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/agent/execution_errors.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/agent/failure_explanations.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/agent/help_catalog.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/agent/history.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/agent/inference.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/agent/investigation.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/agent/judging.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/agent/menu_actions.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/agent/model_policy.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/agent/note_aliases.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/agent/openai_cost_tracking.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/agent/openai_inference.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/agent/prompt_settings.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/agent/prompts/__init__.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/agent/prompts/agent.md +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/agent/prompts/final-response.md +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/agent/prompts/system.md +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/agent/release_notes.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/agent/retrieval_settings.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/agent/runtime.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/agent/scope.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/agent/skill_settings.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/agent/skills/__init__.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/agent/skills/help-references.md +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/agent/skills/help-reminders.md +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/agent/skills/help-search.md +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/agent/skills/staged-summary.md +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/agent/skills/tag-proposals.md +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/agent/skills/web-browsing.md +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/agent/staged_summary.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/agent/structured_inference.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/agent/tagging.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/agent/tagging_run.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/agent/token_estimation.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/agent/tool_calling.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/agent/trace.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/agent/web_actions.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/agent/web_capabilities.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/agent/web_evidence.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/agent/web_fetch.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/agent/web_settings.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/ai_chat.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/ai_chat_rendering.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/ai_chat_stream.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/app_update_worker.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/app_updates.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/auth.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/auth_cache_state.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/auth_service.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/backlink_index.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/backlinks.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/backup_service.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/backup_settings_service.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/bulk_operation.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/content_cache.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/diagnostics.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/embedded_references.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/encryption.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/exception_capture.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/file_edit_sessions.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/file_registry.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/file_storage.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/file_text_preview.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/footnote_layout.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/footnote_rendering.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/hierarchy.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/html_export.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/html_unformatting.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/hydration_state.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/image_size_formatting.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/inline_image_dimensions.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/inline_image_occurrences.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/input_errors.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/integrity.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/latex_rendering.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/link_title_retry.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/link_titles.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/login_rate_limit.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/maintenance_mode.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/markdown_rendering.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/namespace_deletion_jobs.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/namespace_deletion_worker.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/namespace_rename_jobs.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/namespace_rename_worker.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/namespace_runtime_guard.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/namespace_switcher.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/note_fullscreen.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/note_image_tags.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/note_ordering.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/note_store.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/ontology_rules_store.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/openai_credentials.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/password_note_fields.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/public_http.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/reference_presentation.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/reminders.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/remote_image_proxy.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/request_recovery.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/resource_limits.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/root_sorting.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/runtime_generation.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/runtime_hardening.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/runtime_lock.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/search_history.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/search_history_storage.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/search_index.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/search_query.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/search_text.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/selected_text_tag.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/self_update.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/session_timeout_service.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/shell_session_service.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/store.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/sync.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/sync_state.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/tab_state.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/tag_case.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/tag_ontology.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/tag_rename.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/tag_term_matching.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/test_reset.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/tokens.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/undo_state.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/update_backups.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/update_installer.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/update_preflight.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/view_cache.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/view_diff.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/view_state.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/services/windows_process_control.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/startup_console.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/startup_environment.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/startup_js_sanity.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/startup_sanity.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/startup_sanity_config.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/css/floating-notes.css +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/css/forms.css +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/img/favicon.ico +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/locked.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/main.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/activity-tracker.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/ai-chat/agent-menu-actions.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/ai-chat/agent-retrieval-settings.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/ai-chat/agent-web-settings.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/ai-chat/ai-agent-debug-view.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/ai-chat/ai-chat-api.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/ai-chat/ai-chat-message-placement.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/ai-chat/ai-chat-panel-controller.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/ai-chat/ai-chat-panel-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/ai-chat/ai-thinking-level-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/ai-chat/bulk-elapsed-clock.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/ai-chat/bulk-proposal-ui.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/ai-chat/bulk-scope-question.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/ai-chat/cloud-privacy-policy.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/ai-chat/confirmation-card.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/ai-chat/confirmation-question.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/ai-chat/summary-batch-preview.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/api-error-diagnostics.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/api-failure-classification-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/app-update-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/application-state.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/async-result.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/client-state-api.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/client-state-migration.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/command-palette/activation-auth-policy.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/command-palette/backup-command-availability.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/command-palette/click-activation-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/command-palette/note-layout-preferences.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/command-palette/preferences-store.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/command-palette/tag-config-loader.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/command-palette/usage-store.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/connectivity-monitor.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/context-menu/context-menu-target-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/context-menu/input-caret-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/disconnect-editing-state-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/dom-utils-fixed.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/dom-utils.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/editor-commands.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/editor-selection.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/editor-toolbar.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/elapsed-time.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/error-handler.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/error-overlay.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/excalidraw/excalidraw-actions.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/excalidraw/excalidraw-autosave.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/excalidraw/excalidraw-editor-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/excalidraw/excalidraw-editor-state.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/excalidraw/excalidraw-loader.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/excalidraw/excalidraw-preview-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/excalidraw/excalidraw-scene.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/expected-errors.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/location-flags.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/maintenance.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/modals/ai-agent-settings-modal.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/modals/alphabetize-root-notes-modal.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/modals/backup-restore-modal.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/modals/backup-result-modal.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/modals/backup-retention-modal.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/modals/backup-settings-modal.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/modals/base-modal.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/modals/confirmation-modal.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/modals/delete-namespace-modal.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/modals/delete-namespace-validation.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/modals/dictation-settings-modal.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/modals/link-title-retry-modal.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/modals/namespace-ports-profile.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/modals/namespace-rename-validation.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/modals/note-layout-appearance-modal.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/modals/ontology-modal.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/modals/prioritize-modal.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/modals/random-password-modal.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/modals/reset-updated-at-modal.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/modals/search-suggestion-statistics-modal.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/modals/session-timeout-modal.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/modals/version-info-modal.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/modals/visual-cues-modal.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/actions/content-actions.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/actions/history-actions.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/actions/search-actions.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/actions/selection-actions.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/events/focus-events.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/events/inactivity-events.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/events/input-events.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/events/search-events.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/mode-logger.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/add-style-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/animated-scroll-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/backlinks-navigation-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/backlinks-panel-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/clipboard-shortcut-policy-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/collapse-affordance-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/collapse-editing-policy-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/command-gate-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/context-menu-target-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/deselect-selection-state-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/dictation-note-paste.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/dictation-paste-padding.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/dictation-paste-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/differential-view-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/dropped-file-preview-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/edit-session-collapse-policy-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/edit-session-collapse-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/embedded-image-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/file-drop-policy-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/file-image-preview-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/file-reference-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/filtered-refresh-selection-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/floating-note-dom.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/floating-note-layout.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/floating-note-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/footnote-navigation-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/history-selection-policy-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/history-shortcut-policy-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/html-paste-sanitizer-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/image-context-menu-action-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/image-file-insert-choice-modal-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/link-context-menu-action-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/link-title-prefetch-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/markdown-render-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/note-click-target-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/note-clipboard-write-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/note-collapse-animation-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/note-delete-shortcut-policy-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/note-drag-indicator-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/note-drag-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/note-reposition-animation-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/note-split-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/note-timestamp-hover-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/password-clipboard-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/polling-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/reference-source-navigation-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/remote-image-proxy-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/remove-formatting-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/root-date-separator-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/root-note-creation-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/root-sort-indicator-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/root-sort-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/scroll-anchor-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/scroll-restoration-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/search-contexts-overlay-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/search-debounce-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/search-input-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/search-interaction-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/search-redaction-reveal-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/search-suggestion-statistics-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/search-suggestion-window-labels-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/search-suggestion-windows-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/search-suggestions-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/search-syntax-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/selected-formatting-removal-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/selected-text-tag-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/shell-output-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/tab-dom-cache-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/tab-drag-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/tab-duplication-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/tab-state-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/tag-input-selection-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/tag-proposal-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/tag-suggestions-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/todo-toggle-editing-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/untagged-view-indicator-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/view-mode-search-shortcut-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/mode-manager/services/viewport-hold-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/note-html-sanitizer.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/password-generator.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/password-operation-response.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/password-policy.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/password-strength.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/reminder-store.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/reminder-surface-service.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/selection-markers.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/session-auth.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/tag-token.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/modules/uuid.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/namespace-deleted.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/namespace-renamed.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/vendor/dompurify-3.4.16.LICENSE.txt +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/vendor/dompurify-3.4.16.min.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/vendor/excalidraw-0.18.1-assets/excalidraw.css +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/vendor/excalidraw-0.18.1-assets/fonts/Assistant/Assistant-Bold.woff2 +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/vendor/excalidraw-0.18.1-assets/fonts/Assistant/Assistant-Medium.woff2 +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/vendor/excalidraw-0.18.1-assets/fonts/Assistant/Assistant-Regular.woff2 +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/vendor/excalidraw-0.18.1-assets/fonts/Assistant/Assistant-SemiBold.woff2 +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/vendor/excalidraw-0.18.1-assets/fonts/Cascadia/CascadiaCode-Regular.woff2 +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/vendor/excalidraw-0.18.1-assets/fonts/ComicShanns/ComicShanns-Regular-279a7b317d12eb88de06167bd672b4b4.woff2 +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/vendor/excalidraw-0.18.1-assets/fonts/ComicShanns/ComicShanns-Regular-6e066e8de2ac57ea9283adb9c24d7f0c.woff2 +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/vendor/excalidraw-0.18.1-assets/fonts/ComicShanns/ComicShanns-Regular-dc6a8806fa96795d7b3be5026f989a17.woff2 +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/vendor/excalidraw-0.18.1-assets/fonts/ComicShanns/ComicShanns-Regular-fcb0fc02dcbee4c9846b3e2508668039.woff2 +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/vendor/excalidraw-0.18.1-assets/fonts/Excalifont/Excalifont-Regular-349fac6ca4700ffec595a7150a0d1e1d.woff2 +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/vendor/excalidraw-0.18.1-assets/fonts/Excalifont/Excalifont-Regular-3f2c5db56cc93c5a6873b1361d730c16.woff2 +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/vendor/excalidraw-0.18.1-assets/fonts/Excalifont/Excalifont-Regular-41b173a47b57366892116a575a43e2b6.woff2 +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/vendor/excalidraw-0.18.1-assets/fonts/Excalifont/Excalifont-Regular-623ccf21b21ef6b3a0d87738f77eb071.woff2 +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/vendor/excalidraw-0.18.1-assets/fonts/Excalifont/Excalifont-Regular-a88b72a24fb54c9f94e3b5fdaa7481c9.woff2 +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/vendor/excalidraw-0.18.1-assets/fonts/Excalifont/Excalifont-Regular-b9dcf9d2e50a1eaf42fc664b50a3fd0d.woff2 +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/vendor/excalidraw-0.18.1-assets/fonts/Excalifont/Excalifont-Regular-be310b9bcd4f1a43f571c46df7809174.woff2 +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/vendor/excalidraw-0.18.1-assets/fonts/Lilita/Lilita-Regular-i7dPIFZ9Zz-WBtRtedDbYE98RXi4EwSsbg.woff2 +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/vendor/excalidraw-0.18.1-assets/fonts/Lilita/Lilita-Regular-i7dPIFZ9Zz-WBtRtedDbYEF8RXi4EwQ.woff2 +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/vendor/excalidraw-0.18.1-assets/fonts/Nunito/Nunito-Regular-XRXI3I6Li01BKofiOc5wtlZ2di8HDIkhdTA3j6zbXWjgevT5.woff2 +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/vendor/excalidraw-0.18.1-assets/fonts/Nunito/Nunito-Regular-XRXI3I6Li01BKofiOc5wtlZ2di8HDIkhdTQ3j6zbXWjgeg.woff2 +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/vendor/excalidraw-0.18.1-assets/fonts/Nunito/Nunito-Regular-XRXI3I6Li01BKofiOc5wtlZ2di8HDIkhdTk3j6zbXWjgevT5.woff2 +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/vendor/excalidraw-0.18.1-assets/fonts/Nunito/Nunito-Regular-XRXI3I6Li01BKofiOc5wtlZ2di8HDIkhdTo3j6zbXWjgevT5.woff2 +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/vendor/excalidraw-0.18.1-assets/fonts/Nunito/Nunito-Regular-XRXI3I6Li01BKofiOc5wtlZ2di8HDIkhdTs3j6zbXWjgevT5.woff2 +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/vendor/excalidraw-0.18.1-assets/fonts/Virgil/Virgil-Regular.woff2 +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/vendor/excalidraw-0.18.1.LICENSE.txt +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/vendor/excalidraw-0.18.1.min.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/vendor/markdown-it-14.3.2.LICENSE.txt +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/vendor/markdown-it-14.3.2.min.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/vendor/mermaid-11.16.1.LICENSE.txt +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/vendor/mermaid-11.16.1.min.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/vendor/zxcvbn-4.4.2.LICENSE.txt +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/js/vendor/zxcvbn-4.4.2.js +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/static/note-html-policy.json +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/templates/_logo_mark.html +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/templates/base.html +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/templates/locked.html +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/templates/maintenance.html +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/templates/namespace_deleted.html +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/templates/namespace_renamed.html +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/templates/notes_list.html +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/upload_limits.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/usecases/__init__.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/usecases/add_selected_text_tag.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/usecases/alphabetize_root_notes.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/usecases/base.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/usecases/bulk_tag_proposals.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/usecases/collapse.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/usecases/copy_note.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/usecases/create_child.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/usecases/create_file_preview_child.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/usecases/create_note.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/usecases/create_sibling.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/usecases/delete_subtree.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/usecases/delete_tag.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/usecases/expand.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/usecases/file_edit_session.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/usecases/indent.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/usecases/lock.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/usecases/move.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/usecases/outdent.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/usecases/paste_child.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/usecases/paste_sibling.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/usecases/prefetch_link_titles.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/usecases/prioritize.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/usecases/redo.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/usecases/rename_tag.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/usecases/reset_updated_at.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/usecases/resize_image.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/usecases/run_shell.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/usecases/search_comment_autofill.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/usecases/search_context_tags.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/usecases/set_collapse_bulk.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/usecases/set_collapse_in_context.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/usecases/split_note.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/usecases/tag_proposals.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/usecases/toggle_reference_mode.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/usecases/toggle_todo_done.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/usecases/undo.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/usecases/unformat_content.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/usecases/update_content.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/usecases/view.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/utils/__init__.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/utils/encryption.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/app/utils/text_utils.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/convert-from-legacy.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/main.py +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/metalist.egg-info/dependency_links.txt +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/metalist.egg-info/entry_points.txt +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/metalist.egg-info/top_level.txt +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/scripts/generate-lan-cert.sh +0 -0
- {metalist-0.14.0 → metalist-0.16.0}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: metalist
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.16.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
|
|
@@ -20,6 +20,7 @@ Requires-Dist: nh3==0.3.6
|
|
|
20
20
|
Requires-Dist: openai==2.54.0
|
|
21
21
|
Requires-Dist: pillow==12.3.0
|
|
22
22
|
Requires-Dist: pydantic==2.13.4
|
|
23
|
+
Requires-Dist: pygments==2.20.0
|
|
23
24
|
Requires-Dist: pypdf==6.19.0
|
|
24
25
|
Requires-Dist: python-dotenv==1.2.2
|
|
25
26
|
Requires-Dist: python-multipart==0.0.32
|
|
@@ -50,6 +51,23 @@ A minimalist single-user note-taking app focused on server-side rendering (SSR),
|
|
|
50
51
|
- Multi-tab search contexts with server-persisted scroll/search state (survives browser restarts)
|
|
51
52
|
- Manual namespace backups/restores to a user-selected backup folder with retention controls
|
|
52
53
|
|
|
54
|
+
## Changes in 0.16.0
|
|
55
|
+
|
|
56
|
+
- Right-clicking outside any note opens a fuller menu: Add/Paste Note at Top, Undo, Redo, Go to Top, Go to Bottom, Fully Expand/Collapse All, View (All or Untagged notes), Sort by, Show (Chat, Tabs, Tags in List), Theme (System, Light, Dark), New Tab, Open/Switch Namespace, Reminders, Export View as HTML and Log Out. The current choices are ticked.
|
|
57
|
+
- The note menu is grouped: Copy Note, Paste, Add, Move, Outline, Focus, Export, the editing actions, and Delete Note last. Keyboard shortcuts show on the right of both menus, and actions that cannot happen from that note are hidden.
|
|
58
|
+
- Move to Bottom (in Move, or ⇧⌘↓) puts a note after its last sibling, or after the view's last note (the last match in a search). The view stays put: the notes above keep their place and the ones below close the gap.
|
|
59
|
+
- A down arrow under the up arrow goes to the bottom of the list, even when the end is not loaded yet; each arrow is dimmed when you are already at its end. Both arrows, and Focus ▸ Full Screen (now also offered while editing), save the note and leave edit mode first.
|
|
60
|
+
- The right-click menu closes when the pointer moves well away from it, and keys pressed in full-screen view no longer reach the list behind it.
|
|
61
|
+
|
|
62
|
+
## Changes in 0.15.0
|
|
63
|
+
|
|
64
|
+
- Pasting JSON, a chess position (FEN), a diff, a Mermaid diagram or a LaTeX block tags the note for it as you paste: the plain tag into an empty note, `((…))` around the paste in a note that already has text. ⌘Z right after the paste removes the tag with it; ⇧⌘V pastes without detection.
|
|
65
|
+
- New formats: `@code=python` (or any language) highlights code, `@diff` colours diffs, `@mermaid` draws a diagram without a Markdown fence, and `@chess` draws a FEN position as a board. JSON, code and diff blocks are more compact.
|
|
66
|
+
- Switching namespace stays in one tab: on the login screen the panel clears as you pick and the other namespace's login screen fades in under the same logo, with no white flash. In the app, Open/Switch namespace offers Open in This Tab or Open in New Tab.
|
|
67
|
+
- Tag suggestions: tags used elsewhere in the tree, or named in nearby notes, no longer get a boost; only the note's own text does. A new Tag Suggestions setting can also suggest tags that a parent or the rules already apply.
|
|
68
|
+
- Change password with no password opens Add password, and Open/Switch namespace with only one namespace opens Create namespace. The AI tag-proposal menu items now say they are about AI-proposed tags.
|
|
69
|
+
- Fixed: Add reminder did nothing (a missing title now says so); a password change could end on Session locked; right-clicking math or a Mermaid diagram showed the browser's menu; the Untagged notes × needed two clicks while editing a note; indented JSON and pie charts pasted into a note showed as invalid; a tiny scrollbar beside tall math; a white stripe and logo shift on the login screen with always-visible scrollbars.
|
|
70
|
+
|
|
53
71
|
## Changes in 0.14.0
|
|
54
72
|
|
|
55
73
|
- A new login screen: one dark screen with the MetaList logo. The namespace, password and OK fade in together; once the password is accepted, the loading progress slides in with the current step and the seconds elapsed. When the first login after an update backs up and upgrades the namespace, a note under OK says so. The Session locked page has the same look, and there is no white flash between them.
|
|
@@ -12,6 +12,23 @@ 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.16.0
|
|
16
|
+
|
|
17
|
+
- Right-clicking outside any note opens a fuller menu: Add/Paste Note at Top, Undo, Redo, Go to Top, Go to Bottom, Fully Expand/Collapse All, View (All or Untagged notes), Sort by, Show (Chat, Tabs, Tags in List), Theme (System, Light, Dark), New Tab, Open/Switch Namespace, Reminders, Export View as HTML and Log Out. The current choices are ticked.
|
|
18
|
+
- The note menu is grouped: Copy Note, Paste, Add, Move, Outline, Focus, Export, the editing actions, and Delete Note last. Keyboard shortcuts show on the right of both menus, and actions that cannot happen from that note are hidden.
|
|
19
|
+
- Move to Bottom (in Move, or ⇧⌘↓) puts a note after its last sibling, or after the view's last note (the last match in a search). The view stays put: the notes above keep their place and the ones below close the gap.
|
|
20
|
+
- A down arrow under the up arrow goes to the bottom of the list, even when the end is not loaded yet; each arrow is dimmed when you are already at its end. Both arrows, and Focus ▸ Full Screen (now also offered while editing), save the note and leave edit mode first.
|
|
21
|
+
- The right-click menu closes when the pointer moves well away from it, and keys pressed in full-screen view no longer reach the list behind it.
|
|
22
|
+
|
|
23
|
+
## Changes in 0.15.0
|
|
24
|
+
|
|
25
|
+
- Pasting JSON, a chess position (FEN), a diff, a Mermaid diagram or a LaTeX block tags the note for it as you paste: the plain tag into an empty note, `((…))` around the paste in a note that already has text. ⌘Z right after the paste removes the tag with it; ⇧⌘V pastes without detection.
|
|
26
|
+
- New formats: `@code=python` (or any language) highlights code, `@diff` colours diffs, `@mermaid` draws a diagram without a Markdown fence, and `@chess` draws a FEN position as a board. JSON, code and diff blocks are more compact.
|
|
27
|
+
- Switching namespace stays in one tab: on the login screen the panel clears as you pick and the other namespace's login screen fades in under the same logo, with no white flash. In the app, Open/Switch namespace offers Open in This Tab or Open in New Tab.
|
|
28
|
+
- Tag suggestions: tags used elsewhere in the tree, or named in nearby notes, no longer get a boost; only the note's own text does. A new Tag Suggestions setting can also suggest tags that a parent or the rules already apply.
|
|
29
|
+
- Change password with no password opens Add password, and Open/Switch namespace with only one namespace opens Create namespace. The AI tag-proposal menu items now say they are about AI-proposed tags.
|
|
30
|
+
- Fixed: Add reminder did nothing (a missing title now says so); a password change could end on Session locked; right-clicking math or a Mermaid diagram showed the browser's menu; the Untagged notes × needed two clicks while editing a note; indented JSON and pie charts pasted into a note showed as invalid; a tiny scrollbar beside tall math; a white stripe and logo shift on the login screen with always-visible scrollbars.
|
|
31
|
+
|
|
15
32
|
## Changes in 0.14.0
|
|
16
33
|
|
|
17
34
|
- A new login screen: one dark screen with the MetaList logo. The namespace, password and OK fade in together; once the password is accepted, the loading progress slides in with the current step and the seconds elapsed. When the first login after an update backs up and upgrades the namespace, a note under OK says so. The Session locked page has the same look, and there is no white flash between them.
|
|
@@ -60,6 +60,7 @@ class ViewDiffRequest(TypedDict):
|
|
|
60
60
|
visibleTopRootId: Text | None
|
|
61
61
|
visibleBottomRootId: Text | None
|
|
62
62
|
isUntaggedView: bool
|
|
63
|
+
startAtListEnd: bool
|
|
63
64
|
|
|
64
65
|
@with_config(ConfigDict(strict=True))
|
|
65
66
|
class UpdateTabStateRequest(TypedDict):
|
|
@@ -272,6 +273,14 @@ class MoveNoteToTopEndpointRequest(TypedDict):
|
|
|
272
273
|
undoContext: UndoContext
|
|
273
274
|
viewport: Viewport
|
|
274
275
|
|
|
276
|
+
@with_config(ConfigDict(strict=True))
|
|
277
|
+
class MoveNoteToBottomEndpointRequest(TypedDict):
|
|
278
|
+
search_query: Text | None
|
|
279
|
+
tab_id: Identifier
|
|
280
|
+
clientId: Identifier
|
|
281
|
+
undoContext: UndoContext
|
|
282
|
+
viewport: Viewport
|
|
283
|
+
|
|
275
284
|
@with_config(ConfigDict(strict=True))
|
|
276
285
|
class IndentNoteEndpointRequest(TypedDict):
|
|
277
286
|
visible_prev_id: Text | None
|
|
@@ -38,6 +38,7 @@ from app.api.note_requests import (
|
|
|
38
38
|
RunShellEndpointRequest,
|
|
39
39
|
ToggleReferenceModeEndpointRequest,
|
|
40
40
|
MoveNoteEndpointRequest,
|
|
41
|
+
MoveNoteToBottomEndpointRequest,
|
|
41
42
|
MoveNoteToTopEndpointRequest,
|
|
42
43
|
IndentNoteEndpointRequest,
|
|
43
44
|
OutdentNoteEndpointRequest,
|
|
@@ -81,7 +82,7 @@ from app.usecases.tag_proposals import (
|
|
|
81
82
|
)
|
|
82
83
|
from app.usecases.delete_subtree import CmdDeleteSubtree
|
|
83
84
|
from app.usecases.move import CmdMove
|
|
84
|
-
from app.usecases.move_to_top import CmdMoveToTop
|
|
85
|
+
from app.usecases.move_to_top import CmdMoveToBottom, CmdMoveToTop
|
|
85
86
|
from app.usecases.prioritize import CmdPrioritize
|
|
86
87
|
from app.usecases.alphabetize_root_notes import CmdAlphabetizeRootNotes
|
|
87
88
|
from app.usecases.reset_updated_at import CmdResetUpdatedAtToCreatedAt
|
|
@@ -138,6 +139,7 @@ from app.services.link_titles import link_title_store
|
|
|
138
139
|
from app.services.search_index import search_index
|
|
139
140
|
from app.services.dictation_cleanup import clean_dictated_paste
|
|
140
141
|
from app.services.tag_suggestions import suggest_tags_for_note
|
|
142
|
+
from app.services.client_state_service import suggests_already_applying_tags
|
|
141
143
|
from app.services.undo_state import reset_undo_stack
|
|
142
144
|
from app.usecases.prioritize import list_prioritize_tag_suggestions
|
|
143
145
|
from app.services.selected_text_tag import SelectedTextTagValidationError
|
|
@@ -277,6 +279,10 @@ def view_diff(payload: ViewDiffRequest):
|
|
|
277
279
|
is_untagged_view = payload["isUntaggedView"]
|
|
278
280
|
if not isinstance(is_untagged_view, bool):
|
|
279
281
|
raise TypeError("isUntaggedView must be a boolean")
|
|
282
|
+
# Go to Bottom: load the band that ends at the view's last root.
|
|
283
|
+
start_at_list_end = payload["startAtListEnd"]
|
|
284
|
+
if not isinstance(start_at_list_end, bool):
|
|
285
|
+
raise TypeError("startAtListEnd must be a boolean")
|
|
280
286
|
if not isinstance(tab_view_empty, bool):
|
|
281
287
|
raise TypeError("tabViewEmpty must be a boolean")
|
|
282
288
|
|
|
@@ -328,6 +334,7 @@ def view_diff(payload: ViewDiffRequest):
|
|
|
328
334
|
visible_top_root_id=visible_top_root_id,
|
|
329
335
|
visible_bottom_root_id=visible_bottom_root_id,
|
|
330
336
|
is_untagged_view=is_untagged_view,
|
|
337
|
+
start_at_list_end=start_at_list_end,
|
|
331
338
|
)
|
|
332
339
|
update_uuid = get_current_sync_uuid()
|
|
333
340
|
root_ids = list(state.children_by_parent.get(None, []))
|
|
@@ -599,7 +606,7 @@ def dictation_paste(payload: DictationPasteRequest) -> Dict[str, object]:
|
|
|
599
606
|
|
|
600
607
|
@router.post("/notes/tag-suggestions")
|
|
601
608
|
@transactional_route
|
|
602
|
-
def tag_suggestions(payload: TagSuggestionsRequest) -> Dict[str, object]:
|
|
609
|
+
def tag_suggestions(request: Request, payload: TagSuggestionsRequest) -> Dict[str, object]:
|
|
603
610
|
note_id = payload["note_id"]
|
|
604
611
|
anchors = payload["anchors"]
|
|
605
612
|
explicit_tags = payload["explicit_tags"]
|
|
@@ -626,6 +633,7 @@ def tag_suggestions(payload: TagSuggestionsRequest) -> Dict[str, object]:
|
|
|
626
633
|
prefix=prefix,
|
|
627
634
|
content_html=content_html,
|
|
628
635
|
limit=MAX_TAG_SUGGESTIONS,
|
|
636
|
+
include_already_applying=suggests_already_applying_tags(token=_require_bearer_token(request)),
|
|
629
637
|
)
|
|
630
638
|
return {"suggestions": suggestions}
|
|
631
639
|
|
|
@@ -1097,8 +1105,19 @@ def move_note_endpoint(note_id: str, body: MoveNoteEndpointRequest):
|
|
|
1097
1105
|
@router.post("/notes/{note_id}/move-to-top")
|
|
1098
1106
|
@transactional_route
|
|
1099
1107
|
def move_note_to_top_endpoint(note_id: str, body: MoveNoteToTopEndpointRequest):
|
|
1108
|
+
return _move_note_to_edge(note_id, body, command_class=CmdMoveToTop, context="notes.move-to-top")
|
|
1109
|
+
|
|
1110
|
+
|
|
1111
|
+
@router.post("/notes/{note_id}/move-to-bottom")
|
|
1112
|
+
@transactional_route
|
|
1113
|
+
def move_note_to_bottom_endpoint(note_id: str, body: MoveNoteToBottomEndpointRequest):
|
|
1114
|
+
return _move_note_to_edge(note_id, body, command_class=CmdMoveToBottom, context="notes.move-to-bottom")
|
|
1115
|
+
|
|
1116
|
+
|
|
1117
|
+
def _move_note_to_edge(note_id: str, body: MoveNoteToTopEndpointRequest, *, command_class: type, context: str):
|
|
1118
|
+
"""Move a note to the top or bottom of its siblings (of the view's roots for a root)."""
|
|
1100
1119
|
viewport = _require_viewport(body)
|
|
1101
|
-
_require_note_present(note_id, context=
|
|
1120
|
+
_require_note_present(note_id, context=context)
|
|
1102
1121
|
|
|
1103
1122
|
search_query = body["search_query"]
|
|
1104
1123
|
normalized_search: str | None = search_query
|
|
@@ -1117,7 +1136,7 @@ def move_note_to_top_endpoint(note_id: str, body: MoveNoteToTopEndpointRequest):
|
|
|
1117
1136
|
new_parent_id=None,
|
|
1118
1137
|
)
|
|
1119
1138
|
|
|
1120
|
-
cmd =
|
|
1139
|
+
cmd = command_class(
|
|
1121
1140
|
note_id=note_id,
|
|
1122
1141
|
search_query=normalized_search,
|
|
1123
1142
|
client_id=body["clientId"],
|
|
@@ -5,14 +5,19 @@ from __future__ import annotations
|
|
|
5
5
|
from starlette.requests import Request
|
|
6
6
|
|
|
7
7
|
from app.api.request_auth import AUTH_COOKIE_NAME
|
|
8
|
+
from app.services.tokens import token_service
|
|
8
9
|
|
|
9
10
|
|
|
10
11
|
def login_is_certainly_needed(request: Request) -> bool:
|
|
11
12
|
"""Whether a password namespace's page can open on the login screen at once,
|
|
12
13
|
with no white page before the browser checks its session: a re-login was asked
|
|
13
|
-
for (the Session locked page's Go to Login), or the browser has no session
|
|
14
|
+
for (the Session locked page's Go to Login), or the browser has no session the
|
|
15
|
+
server still knows (no cookie, or one from a session that has ended)."""
|
|
14
16
|
if not isinstance(request, Request):
|
|
15
17
|
raise TypeError("request must be a Request")
|
|
16
18
|
if request.query_params.get("force_reauth") == "1":
|
|
17
19
|
return True
|
|
18
|
-
|
|
20
|
+
cookie_token = request.cookies.get(AUTH_COOKIE_NAME)
|
|
21
|
+
if cookie_token is None:
|
|
22
|
+
return True
|
|
23
|
+
return not token_service.verify_token(cookie_token)
|
|
@@ -83,7 +83,7 @@ for missing bulk undo. Removing an accepted tag requires editing that note's tag
|
|
|
83
83
|
which this chat workflow cannot do. An explanation of these limits does not itself
|
|
84
84
|
request opening the proposal-management dialog.
|
|
85
85
|
|
|
86
|
-
|
|
86
|
+
Accept or reject AI-proposed tags opens the bulk acceptance/removal form. AI tagging vocabulary
|
|
87
87
|
chooses existing tags only, or existing and new tags. The AI's prompts and skills
|
|
88
88
|
(including the tagging instructions and these help texts) are built into MetaList
|
|
89
89
|
and cannot be edited, so the AI behaves the same for everyone; instructions saved
|
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
Namespaces isolate notes, preferences, tags, reminders, and authentication. A
|
|
4
4
|
namespace is not a search tab. Search tabs are views within the same namespace.
|
|
5
|
-
Switch namespace opens a picker of reachable namespaces
|
|
5
|
+
Open/Switch namespace opens a picker of reachable namespaces with two buttons: Open in
|
|
6
|
+
This Tab (switching keeps one tab) and Open in New Tab; with no other namespace
|
|
7
|
+
yet it opens Create namespace instead. Create namespace opens
|
|
6
8
|
a name/port form. Rename current namespace opens a rename form. Delete namespace
|
|
7
9
|
opens a confirmation form; do not execute deletion or imply it has happened.
|
|
8
10
|
Manage namespace ports edits saved future launch profiles; saving does not launch,
|
|
@@ -53,7 +53,7 @@ fixed rules, no AI, and it only reacts to pasting: typed text is never changed.
|
|
|
53
53
|
like an acronym (`GPT`). Each word is its own tag unless the words together match
|
|
54
54
|
one of the user's tags; a new multi-word tag has to be typed.
|
|
55
55
|
- **Other one-tag fields** (Edit Tag Relationships' search box, Add tag, Implied
|
|
56
|
-
tag, Synonym tag, Rename tag; Prioritize Tag;
|
|
56
|
+
tag, Synonym tag, Rename tag; Prioritize Tag; Accept or reject AI-proposed tags' tag filter):
|
|
57
57
|
the whole paste becomes one tag, "Machine learning" gives `machine-learning`.
|
|
58
58
|
- **Tag relationship conditions:** existing tags and quoted text; no regular
|
|
59
59
|
expressions by voice.
|
|
@@ -180,3 +180,38 @@ Other (non-meta) tags may also appear inside wrapper tokens (e.g. `{{foo bar}}`)
|
|
|
180
180
|
- `@csv`: parses the note content as CSV and renders it as a table in view mode.
|
|
181
181
|
- Invalid CSV shows a red "Invalid CSV" badge and the raw content.
|
|
182
182
|
- Scoped wrappers (e.g. `((@csv))`) render only the wrapped region as a CSV table.
|
|
183
|
+
|
|
184
|
+
## Chess meta tags
|
|
185
|
+
- `@chess`: reads the note content as a FEN (Forsyth–Edwards Notation) position and draws it as a chess board in view mode, White at the bottom, files a–h and ranks 1–8 labelled. Example: `rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1` is the starting position.
|
|
186
|
+
- Only the piece placement (the first field) is required. When the FEN has them, a caption under the board gives the side to move, the move number, castling rights and the en passant square.
|
|
187
|
+
- Pieces use the chess symbols of the system font, coloured white or black. Hovering a square shows its name and piece (for example "e4 white pawn").
|
|
188
|
+
- A FEN that does not parse shows a red "Invalid FEN" badge, what to fix, and the raw content.
|
|
189
|
+
- Scoped wrappers (e.g. `((@chess))`) draw a board for only the wrapped FEN, inside the surrounding text.
|
|
190
|
+
- One position per note or wrapper; whole games (PGN) are not supported.
|
|
191
|
+
- A hidden extra: typed in the tag bar, not offered in the Add Style menu.
|
|
192
|
+
|
|
193
|
+
## Diff meta tags
|
|
194
|
+
- `@diff`: shows the note content as a unified diff (what `git diff` and `diff -u` print) in view mode: added lines (`+`) green, removed lines (`-`) red, section starts (`@@ -1,3 +1,3 @@`) purple, file headers (`---`, `+++`, `diff --git`) grey and bold, unchanged lines plain.
|
|
195
|
+
- Lines jotted by hand with only `+`/`-` marks work too; nothing needs to parse, so there is no error state.
|
|
196
|
+
- Scoped wrappers (e.g. `((@diff))`) colour only the wrapped region.
|
|
197
|
+
|
|
198
|
+
## Code meta tags
|
|
199
|
+
- `@code=<language>`: shows the note content as source code with syntax highlighting in view mode, for example `@code=python`, `@code=javascript`, `@code=sql`. One tag for every language: any name or alias the server's highlighter (Pygments) knows works (`py`, `js`, `c++`, `c#`...), case-insensitively. The language name is shown above the code.
|
|
200
|
+
- An unknown language (`@code=pyhton`) shows the code plainly with an "Unknown language" badge.
|
|
201
|
+
- Scoped wrappers (e.g. `((@code=sql))`) highlight only the wrapped region.
|
|
202
|
+
|
|
203
|
+
## Mermaid meta tags
|
|
204
|
+
- `@mermaid`: the note content is one Mermaid diagram (no Markdown fence needed), drawn in view mode like a fenced `mermaid` block under `@markdown`, in its own block. Until it is drawn, and when it is invalid (with an `Invalid Mermaid diagram` badge), the source shows as a code block.
|
|
205
|
+
- Scoped wrappers (e.g. `((@mermaid))`) draw only the wrapped region.
|
|
206
|
+
|
|
207
|
+
## Paste format detection
|
|
208
|
+
- Pasting text in an unambiguous format tags the note for it at the moment of the paste (the tag appears in the tag bar; the text renders when the note leaves editing):
|
|
209
|
+
- JSON (a complete object or array) → `@json`
|
|
210
|
+
- a chess FEN position → `@chess`
|
|
211
|
+
- a unified diff (with `@@` section lines, `---`/`+++` headers, or `diff --git`) → `@diff`
|
|
212
|
+
- Mermaid starting with a diagram keyword (`graph TD`, `sequenceDiagram`, `gantt`...) → `@mermaid`; a fenced ```` ```mermaid ```` block → `@markdown`
|
|
213
|
+
- a pure LaTeX block (`$$...$$`, `\[...\]`, or `\begin{...}...\end{...}`) → `@LaTeX`
|
|
214
|
+
- Into an otherwise empty note (or with all of its text selected), and when pasting creates a new note, the plain tag is added. Into a note with content, the pasted text is wrapped `((...))` and `((@json))` (etc.) is added, so the existing text is untouched.
|
|
215
|
+
- Nothing is added for anything uncertain (prose, code, CSV, JSON-looking text that does not parse), when the note already has a renderer tag, when pasting inside an existing wrapped region, or when `((...))` is already in use in that note.
|
|
216
|
+
- `⌘Z` right after the paste removes the added tag together with the pasted text (one undo step, like a normal paste). `⇧⌘V` (Ctrl+Shift+V) pastes as plain text without detection.
|
|
217
|
+
- Implementation: `paste-format-detection-service.js` (detection and planning, tests in `tests/unit/paste_format_detection.test.mjs`), wired in `keyboard-events.js`.
|
|
@@ -19,9 +19,9 @@ Opening or dismissing the command palette does not clear undo/redo. Global actio
|
|
|
19
19
|
|
|
20
20
|
## Tag proposal controls
|
|
21
21
|
|
|
22
|
-
- **
|
|
23
|
-
- **
|
|
24
|
-
- **
|
|
22
|
+
- **Accept or reject AI-proposed tags** (tags the AI chat proposed, not yet accepted) selects acceptance/removal, current context/entire namespace, and an exact case-insensitive tag filter (blank means all proposals). Apply executes directly without another confirmation, model call, or progress/cancellation modal; the normal busy spinner remains visible until completion.
|
|
23
|
+
- **Reject all AI-proposed tags (current context)** asks for confirmation, then removes every pending proposal in the active search context. It uses the same atomic bulk path and requires no configuration form or model call. After confirmation, the normal busy spinner replaces the confirmation without opening a second modal.
|
|
24
|
+
- **AI tagging vocabulary** sets one categorical preference: existing tags only or allow new tags. The tagging instructions themselves are built in and cannot be edited.
|
|
25
25
|
- Generate proposals by explicitly requesting them in AI chat. Generation is not a menu action.
|
|
26
26
|
|
|
27
27
|
## Semantics
|
|
@@ -63,6 +63,7 @@ Opening or dismissing the command palette does not clear undo/redo. Global actio
|
|
|
63
63
|
- Palette preferences (`pref.*`) and command usage history are persisted per namespace in the main SQLite DB via `/api2/auth/client-state*`, not in browser `localStorage`.
|
|
64
64
|
- `Animated transitions` is on by default and controls UI motion such as tag-bar edit transitions and note expand/collapse transitions.
|
|
65
65
|
- `Dictation Settings` sets the spoken phrases for pasted dictated text: the phrase that starts tags in a note (`start tags`), the phrases that start and end a quote (`quote`, `end quote`), and the phrase that excludes the next search term (`minus`). Each is words of letters, 2 to 64 characters; the quote and exclusion phrases must differ. Save applies them, Escape or a click outside closes without saving.
|
|
66
|
+
- `Tag Suggestions` opens a settings window with one checkbox, saved immediately: `Allow suggesting tags that already apply` (off by default). On: tags a parent already has, and tags the rules imply from them, are suggested and ranked like any other tag. Off: they are left out until typed, then listed after the other matches.
|
|
66
67
|
- `Visual Cues` opens one window of independent checkboxes, all on by default and saved immediately. Under Drag and drop: `Drag ghost` (a dashed outline of the dragged note and its visible children follows the pointer), `Drop indicator` (a grey landing line plus a faint outline on the note it lands beside or under), and `Direction cursor` (the mouse cursor itself becomes an up, down, indent or outdent icon for a possible move; impossible moves and the option turned off keep the usual grabbing hand). They change only what is shown; dragging works the same. Close the window with Escape or by clicking outside it.
|
|
67
68
|
- `Note Layout & Appearance` stores namespace-scoped presets for top-level note size, child indentation, vertical spacing, note corners, and tag style. The defaults are `Larger`, `Standard`, `Comfortable`, `Round`, and `Pills` respectively. Note corners can be `Subtle`, `Rounded`, or `Round`; tag style shows visible note tags as outlined `Pills` or `Plain text` in both themes.
|
|
68
69
|
- `Search suggestion stats & settings` is the single suggestion-personalization control surface. Its ordered 1–365 day slots and default-on time-window-label and one-credit-per-note-per-search-context toggles save immediately when changed. The modal also displays retained daily tag-credit statistics and provides the confirmed activity reset. An empty slot list disables personalization; the default slots are 1, 7, and 30 days.
|
|
@@ -89,7 +90,8 @@ Opening or dismissing the command palette does not clear undo/redo. Global actio
|
|
|
89
90
|
- `Note Layout & Appearance`: previews and saves the note hierarchy presets. Search terms include `layout`, `appearance`, `font`, `size`, `spacing`, `indentation`, and `hierarchy`.
|
|
90
91
|
- `Search suggestion stats & settings`: combines ordered personalized-window editing, promoted-suggestion label visibility, default-on per-context note-credit suppression, retained daily tag-credit statistics, and confirmed activity reset. It does not collect search text or note content.
|
|
91
92
|
- `AI Agent Settings`: configures the OpenAI API key, model, cloud privacy policy, evidence-token limit, and tagging batch size. Model and thinking level are also selected beside chat Send. See `docs/ui/ai-chat.md`.
|
|
92
|
-
- `Switch namespace`: opens a simple namespace picker
|
|
93
|
+
- `Open/Switch namespace`: opens a simple namespace picker with two buttons. `Open in This Tab` loads the selected non-current namespace in the same tab, on its login screen, so switching back and forth keeps one tab (Back returns to the previous namespace). `Open in New Tab` opens it in a new browser tab and leaves the current tab as it is. With no other namespace yet, it opens Create namespace instead.
|
|
94
|
+
Either way, a running namespace with an unchanged launch profile keeps its process and warm cache; stopped namespaces launch, and changed port profiles restart the target. Each namespace still permits only one active browser tab/session.
|
|
93
95
|
- `Create namespace`: opens a namespace creation modal with defaulted HTTP / HTTPS ports that skip both saved MetaList reservations and ports with active OS listeners, saves the profile, launches the namespace, and opens it. Launch-time port races fail without terminating the process that owns the port. Running namespace servers revalidate their on-disk namespace identity every five seconds and terminate themselves if their database or launch profile disappears.
|
|
94
96
|
- `Manage namespace ports`: opens a table of saved launch profiles from each namespace's main DB; saving this table only updates future launch profiles and does not switch tabs, launch namespaces, or restart the current process. Current-namespace port edits apply on the next MetaList launch.
|
|
95
97
|
- `Delete namespace`: asks which namespace to delete, then opens a destructive confirmation view for that target. The confirm button is red and the user must type the namespace name. Deletion never requires the namespace password, so an inaccessible encrypted namespace can still be removed. Deleting the active namespace moves the tab to a dedicated namespace-removal status page; deleting an inactive namespace stays in the current tab and reports completion in the modal.
|
|
@@ -26,6 +26,7 @@ Sources: docs/ui/controls.md
|
|
|
26
26
|
| `⌘ + ↑` | Move current note up (one visible sibling) |
|
|
27
27
|
| `⇧ + ⌘ + ↑` | Move the selected root note to the top of the current root view (including filtered/search views), or move a child note to the top of its siblings |
|
|
28
28
|
| `⌘ + ↓` | Move current note down (one visible sibling) |
|
|
29
|
+
| `⇧ + ⌘ + ↓` | Move the selected note to the bottom (a child after its last sibling; a root after the view's last root, or last match in a search). The view stays put; editing ends with the note saved. |
|
|
29
30
|
| `⌘ + C` | Copy selection (default), or copy whole note when no selection |
|
|
30
31
|
| `⌘ + R` | Paste embedded reference from the most recently copied note UUID |
|
|
31
32
|
| `⌘ + S` | Split note at selection/caret into sibling notes; selected segment becomes its own note |
|
|
@@ -148,7 +149,7 @@ On macOS, `⌘ + Y` normally opens Safari History rather than performing native
|
|
|
148
149
|
|--------|--------|
|
|
149
150
|
| Click `+` button | Add new note at top |
|
|
150
151
|
| Click menu (`≡`) button | Open command palette |
|
|
151
|
-
| Click `↑` button |
|
|
152
|
+
| Click `↑` / `↓` button | Go to the top / bottom of the list (bottom: the last note's bottom at the window's bottom); dimmed at that end. While editing, first saves and leaves edit mode. Unloaded notes are loaded by rebuilding the view at that end. |
|
|
152
153
|
| Click note arrow | Toggle collapse/expand note. If the arrow is within the current edited note subtree, that edit session remains active; outside that subtree, the current edit saves/exits first. |
|
|
153
154
|
| Click `⋮` under the edited note's tag bar | Expand that collapsed parent note to reveal its hidden children. |
|
|
154
155
|
| Click note or blank space inside its outer card | Edit/select that note. Parent-note whitespace still counts as the parent until you click into a child note/card. What you clicked stays under the pointer while the note switches to its editable source, and the caret goes there: on the clicked text when it appears in the source (also when the source adds markup around it, such as `- ` list markers or `#` heading marks); on a Mermaid diagram box, at that box's label in the diagram source, with that source line under the pointer; elsewhere on a Mermaid diagram, at the start of its ```` ```mermaid ```` source, which starts where the diagram did; on a rendered LaTeX formula, at the start of its TeX source, which goes where the formula was. CSV rows, JSON keys and Markdown table rows map through their text. Leaving edit mode with the caret inside a formula's source keeps the rendered formula where that source was. |
|
|
@@ -162,17 +163,17 @@ On macOS, `⌘ + Y` normally opens Safari History rather than performing native
|
|
|
162
163
|
| Click the tag bar while editing | Focus the tag input without re-selecting the note shell. Mouse or keyboard focus adds a soft focus ring and, when Animated Transitions is enabled, a single subtle outward halo. |
|
|
163
164
|
| Click a Grammarly suggestion card | Keep the current note in edit mode while the assistant applies the correction. A subsequent ordinary outside click or `Escape` saves and exits as usual. |
|
|
164
165
|
| Double-click a tag in the search input or tag bar | Select the complete tag, including prefixes and internal punctuation (`foo-bar`, `@red`), without surrounding whitespace. Scoped groups select only the individual tag. Quoted search text and tag-bar comments keep native word selection. |
|
|
165
|
-
| Drag note body (while not editing) | Reorder among visible siblings based on vertical drop position (overshooting below the lowest sibling moves the note to the end of its siblings, and above the first sibling to the start; it never leaves its parent), or indent/outdent on horizontal drags. Once movement crosses the drag threshold, releasing back over the source note does not count as a click. While dragging, a dashed grey ghost of the note and its visible children follows the pointer on the drag's axis (vertical for reordering, horizontal for indent/outdent) and only within legal moves: between the first and lowest sibling, one level in under the note above, or one level out to the parent. A grey line marks where the note will land, with a faint outline on the note it lands beside or under; when a release would change nothing the ghost turns lighter and no line shows. The mouse cursor itself changes to name the action: an up or down arrow (the Move
|
|
166
|
+
| Drag note body (while not editing) | Reorder among visible siblings based on vertical drop position (overshooting below the lowest sibling moves the note to the end of its siblings, and above the first sibling to the start; it never leaves its parent), or indent/outdent on horizontal drags. Once movement crosses the drag threshold, releasing back over the source note does not count as a click. While dragging, a dashed grey ghost of the note and its visible children follows the pointer on the drag's axis (vertical for reordering, horizontal for indent/outdent) and only within legal moves: between the first and lowest sibling, one level in under the note above, or one level out to the parent. A grey line marks where the note will land, with a faint outline on the note it lands beside or under; when a release would change nothing the ghost turns lighter and no line shows. The mouse cursor itself changes to name the action: an up or down arrow (the Move to Top icon and its mirror) for reordering, or indent/outdent icons for horizontal drags. A move that is not possible from there (dragging the first note up, indenting with nothing above to nest under, outdenting a root note) shows no icon, only the plain grabbing hand. The note lands where the drop line showed: its top on the line when moved up, its bottom on it when moved down, and the page does not scroll, whether the note is short or taller than the window. Only when that edge would land behind the search bar does the page scroll, just enough to put the note right below the bar with no extra space. Each of the three (ghost, drop indicator, direction cursor) can be turned on or off in the command palette's `Visual Cues` window; all are on by default and none changes the notes themselves. |
|
|
166
167
|
| Drag-select text in note | Available only in edit mode; releasing mouse outside note keeps edit mode + selection |
|
|
167
168
|
| Right-click external link | Open a link-only context menu with `Copy Link` and `Open Link in New Tab`. Note actions are hidden for link targets. |
|
|
168
|
-
| Right-click note | Open the note
|
|
169
|
-
|
|
|
170
|
-
| Right-click selected note text | Open the note
|
|
169
|
+
| Right-click note | Open the note menu: what you clicked (image, diagram or reference actions) first; `Copy Note`; `Paste ▸` (sibling/child note and reference, once a note is copied); `Add ▸` (sibling, child, and `Add Note at Top` outside edit mode); `Move ▸` (`Move to Top`, `Move Up`, `Move Down`, `Move to Bottom`); `Outline ▸` (`Fully Expand`, `Fully Collapse` for notes with children; `Indent`, `Outdent`); `Focus ▸` (`Full Screen`, `Floating Window`); `Export ▸` (note or view as HTML); while editing `Add Style`, `Remove Formatting`, `Add Excalidraw Diagram`; `Delete Note` last; a footer with Created/Updated times. Actions that cannot happen from that note are hidden (root moves too while a sort order is active); a group with one action shows it in place. Shortcuts show on the right. Moves act on the clicked note, saving another edited note first. Full Screen shows the note and its whole subtree edge-to-edge (no ancestors); from edit mode it first leaves edit mode as `Esc` would; close with `×` or `Esc`. |
|
|
170
|
+
| Focus ▸ Floating Window (note menu) | Open that note and its complete descendant subtree in a read-only floating window. The title shows a ↗ reference link that opens the source note in ML3; password titles stay masked. Open multiple windows, drag the title-bar grip or empty space, and resize using the bottom-right handle (or focus the handle and use arrow keys). Windows stay fixed while the background scrolls and survive searches and ML3 tab changes. Saved changes appear live. Links, password/username copying, copyable text, and file downloads remain interactive; note references open another floating window. Close with × or Escape while focused. Windows close on page reload, logout, or namespace navigation. |
|
|
171
|
+
| Right-click selected note text | Open the note menu with `Copy` and `Add as Tag` for the selected text instead of `Copy Note`; while editing, `Add Style` scopes the chosen formatting tag to that range and `Remove Formatting` removes formatting only from that range. |
|
|
171
172
|
| Right-click image in note | Adds image actions to the note context menu: `Copy Image`, `Save Image`, `Zoom Image`, `Open Image in New Tab` |
|
|
172
173
|
| Right-click anywhere in a completed AI response bubble (including padding and links) | Choose `Copy Response` to place its raw Markdown on the MetaList note clipboard with `@markdown @llm`, while also writing rendered HTML and raw Markdown to the system clipboard. It can be pasted as a note but not as a reference until inserted. |
|
|
173
|
-
| Right-click notes view background |
|
|
174
|
+
| Right-click notes view background | Open the view menu: outside edit mode `Add Note at Top`, `Paste Note at Top` (once a note is copied), `Undo`, `Redo`; `Go to Top`, `Go to Bottom` (unless at that end), `Fully Expand All`, `Fully Collapse All`; `View ▸` (All / Untagged notes), `Sort by ▸`, `Show ▸` (Chat, Tabs, Tags in List), `Theme ▸` (System, Light, Dark), each ticking the current choice; `New Tab`, `Open/Switch Namespace…`, `Reminders…`; `Export View as HTML`; `Log Out`. Shortcuts show on the right; items that do not apply are hidden. |
|
|
174
175
|
| Right-click tag in search input, tag bar, or their suggestion lists | Open tag context menu (Edit Tag Relationships). If a note is being edited, it is saved and the view refresh completes first, restoring view-only rendering such as cached URL titles. |
|
|
175
|
-
| Right-click left or right lane | Open the same view menu
|
|
176
|
+
| Right-click left or right lane | Open the same view menu |
|
|
176
177
|
| Hover left side of search bar | Show the tab/search-context overlay |
|
|
177
178
|
| Hover/click search input | Hide the tab/search-context overlay |
|
|
178
179
|
|
|
@@ -200,7 +201,7 @@ On macOS, `⌘ + Y` normally opens Safari History rather than performing native
|
|
|
200
201
|
|
|
201
202
|
> Note: On Windows/Linux, use `Ctrl` instead of `⌘` (Command)
|
|
202
203
|
|
|
203
|
-
App menus close with `Escape` or an outside click. Every modal has a standard upper-right circular `×` matching full-screen note view and also closes with `Escape` or an outside click. Dismiss-only footer `Close`/`OK` buttons are omitted; `Enter` still submits a modal's declared primary workflow action.
|
|
204
|
+
App menus close with `Escape` or an outside click. The right-click menu also closes once the pointer moves about 28px away from it and any open submenu, like the tab overlay; small movements just past its edge keep it open. Every modal has a standard upper-right circular `×` matching full-screen note view and also closes with `Escape` or an outside click. Dismiss-only footer `Close`/`OK` buttons are omitted; `Enter` still submits a modal's declared primary workflow action.
|
|
204
205
|
|
|
205
206
|
When `Show tags in list` is enabled, the grey right-aligned tag column wraps and is capped at 25% of its note row so note content retains the majority of the available width.
|
|
206
207
|
|
|
@@ -120,7 +120,8 @@ current loading step and the seconds elapsed. When a database upgrade is due,
|
|
|
120
120
|
that login takes longer. "Session locked" means the session moved to another tab
|
|
121
121
|
or device; Go to Login opens the login screen.
|
|
122
122
|
|
|
123
|
-
The Add password, Change password, and Remove password menus open forms.
|
|
123
|
+
The Add password, Change password, and Remove password menus open forms. Change
|
|
124
|
+
password in a namespace with no password opens the Add password form. Opening
|
|
124
125
|
is not submitting. An encryption explanation alone does not request a form or a
|
|
125
126
|
password change. Never ask for an actual password or API key in chat.
|
|
126
127
|
|
|
@@ -5,6 +5,23 @@ README. Changes made after the newest listed version are not described here.
|
|
|
5
5
|
Compare with installed_version from the help lookup to tell the user whether
|
|
6
6
|
they already have a release. Version info offers updates (see the data topic).
|
|
7
7
|
|
|
8
|
+
## 0.16.0
|
|
9
|
+
|
|
10
|
+
- Right-clicking outside any note opens a fuller menu: Add/Paste Note at Top, Undo, Redo, Go to Top, Go to Bottom, Fully Expand/Collapse All, View (All or Untagged notes), Sort by, Show (Chat, Tabs, Tags in List), Theme (System, Light, Dark), New Tab, Open/Switch Namespace, Reminders, Export View as HTML and Log Out. The current choices are ticked.
|
|
11
|
+
- The note menu is grouped: Copy Note, Paste, Add, Move, Outline, Focus, Export, the editing actions, and Delete Note last. Keyboard shortcuts show on the right of both menus, and actions that cannot happen from that note are hidden.
|
|
12
|
+
- Move to Bottom (in Move, or ⇧⌘↓) puts a note after its last sibling, or after the view's last note (the last match in a search). The view stays put: the notes above keep their place and the ones below close the gap.
|
|
13
|
+
- A down arrow under the up arrow goes to the bottom of the list, even when the end is not loaded yet; each arrow is dimmed when you are already at its end. Both arrows, and Focus ▸ Full Screen (now also offered while editing), save the note and leave edit mode first.
|
|
14
|
+
- The right-click menu closes when the pointer moves well away from it, and keys pressed in full-screen view no longer reach the list behind it.
|
|
15
|
+
|
|
16
|
+
## 0.15.0
|
|
17
|
+
|
|
18
|
+
- Pasting JSON, a chess position (FEN), a diff, a Mermaid diagram or a LaTeX block tags the note for it as you paste: the plain tag into an empty note, `((…))` around the paste in a note that already has text. ⌘Z right after the paste removes the tag with it; ⇧⌘V pastes without detection.
|
|
19
|
+
- New formats: `@code=python` (or any language) highlights code, `@diff` colours diffs, `@mermaid` draws a diagram without a Markdown fence, and `@chess` draws a FEN position as a board. JSON, code and diff blocks are more compact.
|
|
20
|
+
- Switching namespace stays in one tab: on the login screen the panel clears as you pick and the other namespace's login screen fades in under the same logo, with no white flash. In the app, Open/Switch namespace offers Open in This Tab or Open in New Tab.
|
|
21
|
+
- Tag suggestions: tags used elsewhere in the tree, or named in nearby notes, no longer get a boost; only the note's own text does. A new Tag Suggestions setting can also suggest tags that a parent or the rules already apply.
|
|
22
|
+
- Change password with no password opens Add password, and Open/Switch namespace with only one namespace opens Create namespace. The AI tag-proposal menu items now say they are about AI-proposed tags.
|
|
23
|
+
- Fixed: Add reminder did nothing (a missing title now says so); a password change could end on Session locked; right-clicking math or a Mermaid diagram showed the browser's menu; the Untagged notes × needed two clicks while editing a note; indented JSON and pie charts pasted into a note showed as invalid; a tiny scrollbar beside tall math; a white stripe and logo shift on the login screen with always-visible scrollbars.
|
|
24
|
+
|
|
8
25
|
## 0.14.0
|
|
9
26
|
|
|
10
27
|
- A new login screen: one dark screen with the MetaList logo. The namespace, password and OK fade in together; once the password is accepted, the loading progress slides in with the current step and the seconds elapsed. When the first login after an update backs up and upgrades the namespace, a note under OK says so. The Session locked page has the same look, and there is no white flash between them.
|
|
@@ -100,6 +100,16 @@ Examples (autocorrected while typing):
|
|
|
100
100
|
- CSV meta tags:
|
|
101
101
|
- `@csv` renders note content as a CSV table; invalid CSV shows an error badge and raw text.
|
|
102
102
|
- `((@csv))` renders only the wrapped content as a CSV table.
|
|
103
|
+
- Chess meta tags:
|
|
104
|
+
- `@chess` draws the note's FEN chess position as a board (White at the bottom, with a caption for side to move, move number, castling and en passant); an invalid FEN shows an error badge saying what to fix.
|
|
105
|
+
- `((@chess))` draws a board for only the wrapped FEN, inside the surrounding text.
|
|
106
|
+
- Diff meta tags:
|
|
107
|
+
- `@diff` colours a unified diff (git diff / diff -u): added lines green, removed red, `@@` section starts and file headers marked; `((@diff))` colours only the wrapped content.
|
|
108
|
+
- Mermaid meta tags:
|
|
109
|
+
- `@mermaid` draws the note content as one Mermaid diagram (no Markdown fence needed); `((@mermaid))` draws only the wrapped content.
|
|
110
|
+
- Pasting JSON, a chess FEN, a unified diff, Mermaid or a pure LaTeX block adds the matching tag at once (`@json`, `@chess`, `@diff`, `@mermaid`, `@LaTeX`): the plain tag into an otherwise empty note, `((...))` and `((@json))` into a note with content. ⌘Z right after removes it with the paste; ⇧⌘V pastes without detection.
|
|
111
|
+
- Code meta tags:
|
|
112
|
+
- `@code=<language>` (for example `@code=python`, `@code=sql`) highlights source code; any language name the highlighter knows works, and an unknown one shows an "Unknown language" badge; `((@code=python))` highlights only the wrapped content.
|
|
103
113
|
|
|
104
114
|
Wrapper regions in note content are always allowed (e.g. `((foo))`), but they are only consumed/hidden in view mode when there is a matching scoped wrapper tag in the tag bar (meta tags like `{{@red}}` or regular tags like `{{foo}}`). Otherwise the wrappers remain literal text.
|
|
105
115
|
|
|
@@ -136,7 +146,7 @@ Unclosed comments behave like unclosed wrappers:
|
|
|
136
146
|
- Tags that match phrases in the current note content and the strongest direct co-occurrence hits from the current note's explicit non-meta tags share the top slots together: the strongest content hit appears first, then the strongest co-occurrence hit, then the next content hit, and so on.
|
|
137
147
|
- Within those content hits, an exact standalone tag written in the current note is prioritized ahead of synonym-expanded recommendations. This keeps a specific literal such as `suprapubic` ahead of a generic ontology representative derived from an earlier word such as `message`.
|
|
138
148
|
- For blank-prefix suggestions only, if a candidate's literal content match is driven entirely by segments that are already represented in an explicit or inherited tag on the note, that candidate is suppressed as redundant. Example: with `fat.appearance` already present, content-only matches like `fat-loss` or `body-fat` do not crowd out unrelated co-occurrence suggestions such as `overindulging`.
|
|
139
|
-
-
|
|
149
|
+
- Where the note sits in the tree gives no boost: tags used on its children, siblings or anywhere under its parent, and tag names written in those notes' or its ancestors' text, compete like any other tag (they are not left out). A tag on two of three children does not belong on the parent, and a sibling naming Kyoto says nothing about this note. Only the note's own text counts.
|
|
140
150
|
- Remaining suggestions fall back to other notes whose effective context overlaps the current note's explicit/inherited/inferred non-meta tags, but the emitted non-meta suggestions still come only from explicit tags assigned on those notes.
|
|
141
151
|
- A literal content hit on any connector-separated segment can also surface a tag, but low-signal glue segments like `and`, `no`, `of`, `the`, `to`, or `up` do not count on their own. They still participate in exact full-phrase literal matches, so content like `No Kings` can strongly promote `no-kings` even though bare `no` would not.
|
|
142
152
|
- Connector-heavy tags need near-complete literal coverage before they surface from content alone: after ignoring numeric-only chunks, a tag with `k` remaining connector-separated chunks requires at least `max(1, k-1)` meaningful matches, capped by its number of meaningful non-noise chunks. Thus `gpt-6-astra` behaves like `gpt-astra`: either `GPT` or `Astra` can surface it. Decimal versions such as `5.6` are ignored in the same way. `X-Y-Z` still needs two matches and cannot surface from just `X`, `Y`, or `Z`.
|
|
@@ -150,7 +160,7 @@ Unclosed comments behave like unclosed wrappers:
|
|
|
150
160
|
- Ontology-equivalent tags are usually collapsed to one displayed suggestion. The representative is the most-used eligible tag spelling explicitly written in tag bars, not the ontology-inferred search frequency, but prefix filtering happens first, so typing `emo` can still show `emotion` even if `mood` is the more common synonym overall. If the current note content exactly matches a synonym alias, that alias can still appear immediately after the common representative within the interleaved content/co-occurrence ordering.
|
|
151
161
|
- Tags declared in ontology rules remain eligible for literal-content matching and typed-prefix completion even when they have never been explicitly assigned to a note. With a blank prefix, unrelated unused ontology tags are not added as generic fallback suggestions.
|
|
152
162
|
- Tags already present explicitly in the current tag bar are never suggested.
|
|
153
|
-
- Tags already present only via inheritance or ontology inference are suppressed unless they match the prefix. For one-character prefixes they come right after the suggestions with evidence; for longer prefixes they appear at the bottom.
|
|
163
|
+
- Tags already present only via inheritance or ontology inference are suppressed unless they match the prefix. For one-character prefixes they come right after the suggestions with evidence; for longer prefixes they appear at the bottom. The **Tag Suggestions** settings dialog has `Allow suggesting tags that already apply` (off by default): when on, tags a parent already has and tags the rules imply from them are ranked like any other tag. Tags written in the note's own bar are still never suggested.
|
|
154
164
|
- Suggestions appear below the tag bar when there is room; if the tag bar is near the bottom, the list flips upward but keeps the same best-on-top ordering and initial scroll position.
|
|
155
165
|
- The server returns at most `MAX_TAG_SUGGESTIONS` note tag suggestions; the default is 20.
|
|
156
166
|
|