supervertaler 1.9.195__tar.gz → 1.9.196__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.

Potentially problematic release.


This version of supervertaler might be problematic. Click here for more details.

Files changed (389) hide show
  1. {supervertaler-1.9.195 → supervertaler-1.9.196}/CHANGELOG.md +19 -1
  2. {supervertaler-1.9.195 → supervertaler-1.9.196}/FAQ.md +28 -0
  3. {supervertaler-1.9.195 → supervertaler-1.9.196}/PKG-INFO +1 -1
  4. {supervertaler-1.9.195 → supervertaler-1.9.196}/Supervertaler.py +59 -31
  5. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/index.html +21 -5
  6. supervertaler-1.9.196/docs/screenshots/QuickTrans.png +0 -0
  7. supervertaler-1.9.196/docs/screenshots/Supervertalerv1.9.195_2026-02-02.png +0 -0
  8. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/reference/faq.md +28 -0
  9. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/llm_clients.py +58 -33
  10. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/unified_prompt_manager_qt.py +22 -1
  11. {supervertaler-1.9.195 → supervertaler-1.9.196}/pyproject.toml +1 -1
  12. {supervertaler-1.9.195 → supervertaler-1.9.196}/supervertaler.egg-info/PKG-INFO +1 -1
  13. {supervertaler-1.9.195 → supervertaler-1.9.196}/supervertaler.egg-info/SOURCES.txt +2 -0
  14. {supervertaler-1.9.195 → supervertaler-1.9.196}/LICENSE +0 -0
  15. {supervertaler-1.9.195 → supervertaler-1.9.196}/MANIFEST.in +0 -0
  16. {supervertaler-1.9.195 → supervertaler-1.9.196}/README.md +0 -0
  17. {supervertaler-1.9.195 → supervertaler-1.9.196}/assets/ICON_CONVERSION_GUIDE.md +0 -0
  18. {supervertaler-1.9.195 → supervertaler-1.9.196}/assets/MB.ico +0 -0
  19. {supervertaler-1.9.195 → supervertaler-1.9.196}/assets/README.md +0 -0
  20. {supervertaler-1.9.195 → supervertaler-1.9.196}/assets/README_ICONS.md +0 -0
  21. {supervertaler-1.9.195 → supervertaler-1.9.196}/assets/arrow_left_dark.png +0 -0
  22. {supervertaler-1.9.195 → supervertaler-1.9.196}/assets/arrow_left_light.png +0 -0
  23. {supervertaler-1.9.195 → supervertaler-1.9.196}/assets/arrow_right_dark.png +0 -0
  24. {supervertaler-1.9.195 → supervertaler-1.9.196}/assets/arrow_right_light.png +0 -0
  25. {supervertaler-1.9.195 → supervertaler-1.9.196}/assets/generate_icons.py +0 -0
  26. {supervertaler-1.9.195 → supervertaler-1.9.196}/assets/icon.ico +0 -0
  27. {supervertaler-1.9.195 → supervertaler-1.9.196}/assets/icon_128.png +0 -0
  28. {supervertaler-1.9.195 → supervertaler-1.9.196}/assets/icon_16x16.png +0 -0
  29. {supervertaler-1.9.195 → supervertaler-1.9.196}/assets/icon_24.png +0 -0
  30. {supervertaler-1.9.195 → supervertaler-1.9.196}/assets/icon_256.png +0 -0
  31. {supervertaler-1.9.195 → supervertaler-1.9.196}/assets/icon_256x256.png +0 -0
  32. {supervertaler-1.9.195 → supervertaler-1.9.196}/assets/icon_32.png +0 -0
  33. {supervertaler-1.9.195 → supervertaler-1.9.196}/assets/icon_32x32.png +0 -0
  34. {supervertaler-1.9.195 → supervertaler-1.9.196}/assets/icon_48.png +0 -0
  35. {supervertaler-1.9.195 → supervertaler-1.9.196}/assets/icon_48x48.png +0 -0
  36. {supervertaler-1.9.195 → supervertaler-1.9.196}/assets/icon_64.png +0 -0
  37. {supervertaler-1.9.195 → supervertaler-1.9.196}/assets/icon_preview.html +0 -0
  38. {supervertaler-1.9.195 → supervertaler-1.9.196}/assets/icon_sv_modern.svg +0 -0
  39. {supervertaler-1.9.195 → supervertaler-1.9.196}/assets/icon_sv_modern_paths.svg +0 -0
  40. {supervertaler-1.9.195 → supervertaler-1.9.196}/assets/icon_sv_simple.svg +0 -0
  41. {supervertaler-1.9.195 → supervertaler-1.9.196}/assets/icon_sv_website.svg +0 -0
  42. {supervertaler-1.9.195 → supervertaler-1.9.196}/assets/patent-drawing-1951.jpg +0 -0
  43. {supervertaler-1.9.195 → supervertaler-1.9.196}/assets/scrollbar_down.png +0 -0
  44. {supervertaler-1.9.195 → supervertaler-1.9.196}/assets/scrollbar_up.png +0 -0
  45. {supervertaler-1.9.195 → supervertaler-1.9.196}/assets/supervertaler_icon_colours.png +0 -0
  46. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/.nojekyll +0 -0
  47. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/CNAME +0 -0
  48. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/SIMILAR_APPS.md +0 -0
  49. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/apple-touch-icon.png +0 -0
  50. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/BUGFIX_README.md +0 -0
  51. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/CHANGELIST.md +0 -0
  52. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/CHANGELOG_Old.md +0 -0
  53. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/FAQ.md +0 -0
  54. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/INSTALLATION_v1.7.8.md +0 -0
  55. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/PROJECT_ORGANIZATION.md +0 -0
  56. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/TERMBASE_REFACTORING_SUMMARY.md +0 -0
  57. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/USER_GUIDE_v1.7.8.md +0 -0
  58. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/VERIFICATION_CHECKLIST.md +0 -0
  59. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/BEFORE_AFTER_COMPARISON.md +0 -0
  60. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/BUGFIX_SESSION_SUMMARY.md +0 -0
  61. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/COLOR_SCHEME_REFERENCE.md +0 -0
  62. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/COMPACT_LAYOUT_CHANGELOG.md +0 -0
  63. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/COMPACT_LAYOUT_DOCUMENTATION_INDEX.md +0 -0
  64. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/COMPACT_LAYOUT_IMPLEMENTATION_SUMMARY.md +0 -0
  65. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/COMPACT_LAYOUT_UPDATE.md +0 -0
  66. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/COMPLETE_IMPLEMENTATION_SUMMARY.md +0 -0
  67. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/COMPLETE_PROJECT_SUMMARY.md +0 -0
  68. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/DATABASE_FINAL_SUMMARY.md +0 -0
  69. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/DATABASE_IMPLEMENTATION.md +0 -0
  70. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/DATABASE_PRODUCTION_READY.md +0 -0
  71. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/DATABASE_QUICK_REFERENCE.md +0 -0
  72. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/DUAL_VERSION_STRATEGY.md +0 -0
  73. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/FINAL_SESSION_SUMMARY.md +0 -0
  74. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/FOLDER_STRUCTURE_UPDATE.md +0 -0
  75. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/GITHUB_PAGES_SETUP.md +0 -0
  76. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/IMPLEMENTATION_CHECKLIST.md +0 -0
  77. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/IMPLEMENTATION_COMPLETE.md +0 -0
  78. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/IMPLEMENTATION_COMPLETE_COMPACT_LAYOUT.md +0 -0
  79. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/IMPLEMENTATION_READY.md +0 -0
  80. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/IMPLEMENTATION_STATUS_PHASE2_READY.md +0 -0
  81. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/KEYBOARD_SHORTCUTS_MATCHES.md +0 -0
  82. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/LAYOUT_BEFORE_AFTER.md +0 -0
  83. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/MASTER_INDEX.md +0 -0
  84. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/MATCH_DISPLAY_IMPROVEMENTS.md +0 -0
  85. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/MATCH_DISPLAY_LONG_SEGMENTS_UPDATE.md +0 -0
  86. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/MATCH_DISPLAY_QUICK_REFERENCE.md +0 -0
  87. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/MATCH_INSERTION_FEATURES.md +0 -0
  88. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/MATCH_SHORTCUTS_QUICK_REF.md +0 -0
  89. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/MODULAR_ARCHITECTURE_GUIDE.md +0 -0
  90. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/PHASE2_IMPLEMENTATION_CHECKLIST.md +0 -0
  91. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/PHASE2_IMPLEMENTATION_DETAILED_CHECKLIST.md +0 -0
  92. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/PHASE2_IMPLEMENTATION_IN_PROGRESS.md +0 -0
  93. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/PHASE2_NEXT_STEPS.md +0 -0
  94. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/PHASE2_READY_TO_IMPLEMENT.md +0 -0
  95. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/PHASE2_START_HERE.md +0 -0
  96. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/QT_MIGRATION_PLAN.md +0 -0
  97. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/QT_SESSION_SUMMARY.md +0 -0
  98. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/QUICK_SESSION_SUMMARY.md +0 -0
  99. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/RELEASE_Qt_v1.0.0_Phase5.md +0 -0
  100. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/RELEASE_v1.9.38.md +0 -0
  101. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/RELEASE_v3.7.1.md +0 -0
  102. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/RELEASE_v3.7.6.md +0 -0
  103. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/RELEASE_v3.7.7.md +0 -0
  104. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/RESTRUCTURE_COMPLETE.md +0 -0
  105. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/SESSION_DOCUMENTATION_INDEX.md +0 -0
  106. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/SESSION_IMPLEMENTATION_SUMMARY.md +0 -0
  107. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/SESSION_LONG_SEGMENTS_COMPLETE.md +0 -0
  108. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/SESSION_MATCH_FEATURES_COMPLETE.md +0 -0
  109. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/SESSION_STATUS.md +0 -0
  110. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/SESSION_SUMMARY_Phase5.md +0 -0
  111. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/START_HERE.md +0 -0
  112. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/START_IMPLEMENTATION_HERE.md +0 -0
  113. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/STYLE_GUIDES_DELIVERABLES.md +0 -0
  114. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/STYLE_GUIDES_DOCUMENTATION_INDEX.md +0 -0
  115. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/STYLE_GUIDES_FEATURE_SUMMARY.md +0 -0
  116. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/STYLE_GUIDES_IMPLEMENTATION.md +0 -0
  117. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/STYLE_GUIDES_PROJECT_COMPLETION.md +0 -0
  118. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/STYLE_GUIDES_QUICK_REFERENCE.md +0 -0
  119. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/STYLE_GUIDES_VISUAL_ARCHITECTURE.md +0 -0
  120. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/TERMBASE_FIXES.md +0 -0
  121. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/TERMBASE_IMPLEMENTATION.md +0 -0
  122. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/TERMBASE_QUICK_START.md +0 -0
  123. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/TMX_CONCORDANCE_STYLE_HIGHLIGHTING.md +0 -0
  124. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/TMX_DUAL_HIGHLIGHTING.md +0 -0
  125. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/TMX_EDITOR_HIGHLIGHTING_UPDATE.md +0 -0
  126. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/TMX_EDITOR_IMPLEMENTATION.md +0 -0
  127. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/TMX_EDITOR_WORD_HIGHLIGHTING.md +0 -0
  128. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/TMX_TABLE_LAYOUT_INTEGRATED_EDIT.md +0 -0
  129. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/TMX_TREEVIEW_GRID_RESIZABLE.md +0 -0
  130. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/TMX_WORD_HIGHLIGHTING_IMPLEMENTATION_COMPLETE.md +0 -0
  131. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/TMX_WORD_HIGHLIGHTING_SUMMARY.md +0 -0
  132. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/TM_MATCH_PANE_CHECKLIST.md +0 -0
  133. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/TM_MATCH_PANE_IMPLEMENTATION.md +0 -0
  134. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/TM_MATCH_PANE_VISUAL_GUIDE.md +0 -0
  135. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/VISUAL_COLOR_REFERENCE.md +0 -0
  136. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/development/VISUAL_IMPLEMENTATION_SUMMARY.md +0 -0
  137. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/sessions/COLOR_FIX_EXPLANATION.md +0 -0
  138. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/sessions/DATABASE_CONSOLIDATION_REPORT.md +0 -0
  139. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/sessions/DUAL_EDITOR_WORKFLOW.md +0 -0
  140. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/sessions/DUAL_SELECTION_SYSTEM.md +0 -0
  141. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/sessions/IMPROVEMENTS_SUMMARY.md +0 -0
  142. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/sessions/ISSUES_FIXES_PROGRESS.md +0 -0
  143. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/sessions/MATCH_DISPLAY_COMPACT_FIXES.md +0 -0
  144. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/sessions/README_SESSION_TERMBASE.md +0 -0
  145. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/sessions/SAFE_DELETION_REMINDER.txt +0 -0
  146. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/sessions/SESSION_SUMMARY.md +0 -0
  147. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/sessions/TERMBASE_FIXES_APPLIED.md +0 -0
  148. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/sessions/TESTING_CHECKLIST.md +0 -0
  149. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/sessions/TMX_EDITOR_ANNOUNCEMENT.md +0 -0
  150. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/archive/sessions/TRANSLATION_RESULTS_IMPROVEMENTS.md +0 -0
  151. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/assets/Figure1.png +0 -0
  152. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/assets/patent-drawing-1951.jpg +0 -0
  153. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/changelog.html +0 -0
  154. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/dev-notes/QA.md +0 -0
  155. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/dev-notes/STYLE_GUIDES_UI_TEMPLATE.py +0 -0
  156. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/dev-notes/_Notes_2025-11-21.md +0 -0
  157. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/dev-notes/_things_to_remind_AIs_of_when_translating.md +0 -0
  158. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/dev-notes/issue_28.md +0 -0
  159. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/dev-notes/openai_debug.txt +0 -0
  160. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/dev-notes/pre-translation-dialog-enhancement.md +0 -0
  161. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/emoji_mockup.html +0 -0
  162. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/favicon.ico +0 -0
  163. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/guides/AI_PROMPT_ASSISTANT_USER_GUIDE.md +0 -0
  164. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/guides/ENCODING_REPAIR_TOOL.md +0 -0
  165. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/guides/FAQ.md +0 -0
  166. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/guides/GLOSSARY_OF_SUPERVERTALER_TERMINOLOGY.md +0 -0
  167. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/guides/JSON_EDITORS_AND_HUMAN_READABLE_FORMAT.md +0 -0
  168. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/guides/KEYBOARD_SHORTCUTS.md +0 -0
  169. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/guides/PDF_RESCUE.md +0 -0
  170. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/guides/PROMPT_ASSISTANT_USER_GUIDE.md +0 -0
  171. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/guides/QT_SETTINGS_DIALOG_GUIDE.md +0 -0
  172. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/guides/TERM_EXTRACTION_GUIDE.md +0 -0
  173. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/guides/USER_DATA_FOLDER_SETUP.md +0 -0
  174. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/idea_beijer.bot_integration_idea/BEIJERBOT_FEATURE_ANALYSIS.md +0 -0
  175. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/idea_beijer.bot_integration_idea/CLI_BRIDGE_SPECIFICATION.md +0 -0
  176. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/idea_beijer.bot_integration_idea/IMPLEMENTATION_ROADMAP.md +0 -0
  177. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/idea_beijer.bot_integration_idea/QUICKMENU_INTEGRATION_PLAN.md +0 -0
  178. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/idea_beijer.bot_integration_idea/README.md +0 -0
  179. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/idea_tag-cleaner/tag_cleaner.md +0 -0
  180. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/idea_use_vscode_as_cat_tool/ai-agent-translation-workflow.md +0 -0
  181. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/logo.png +0 -0
  182. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/screenshots/2025-10-13_00-46-16.jpg +0 -0
  183. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/screenshots/Superlookup_Web_resources.jpg +0 -0
  184. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/screenshots/Supervertaler_AI-Assistant.jpg +0 -0
  185. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/screenshots/Supervertaler_CLASSIC_v2.4.1_(tkinter).jpg +0 -0
  186. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/screenshots/Supervertaler_Prompt_Manager_2026-01-14.png +0 -0
  187. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/screenshots/Supervertaler_Qt_LLM_LeaderboardResults_2025-11-12.jpg +0 -0
  188. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/screenshots/Supervertaler_Qt_LLM_Leaderboard_2025-11-12.jpg +0 -0
  189. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/screenshots/Supervertaler_Superbrowser.jpg +0 -0
  190. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/screenshots/Supervertaler_dark_mode_2025-12-16.jpg +0 -0
  191. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/screenshots/Supervertaler_dark_mode_2025-12-17.jpg +0 -0
  192. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/screenshots/Supervertaler_grid.jpg +0 -0
  193. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/screenshots/Supervertaler_tkinter (v3.7.7).jpg +0 -0
  194. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/screenshots/Supervertaler_v1.9.102_compare_panel_2026-01-14.png +0 -0
  195. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/screenshots/Supervertaler_v1.9.102_grid_2026-01-14.png +0 -0
  196. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/screenshots/new/Supervertaler-grid.jpg +0 -0
  197. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/screenshots/new/Supervertaler_AI-Assistant.jpg +0 -0
  198. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/screenshots/new/Supervertaler_Prompt-Library.jpg +0 -0
  199. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/screenshots/new/Supervertaler_Qt_LLM_LeaderboardResults_2025-11-12.jpg +0 -0
  200. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/screenshots/new/Supervertaler_Qt_LLM_Leaderboard_2025-11-12.jpg +0 -0
  201. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/screenshots/new/Supervertaler_Superbrowser.jpg +0 -0
  202. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/screenshots/old/2025-10-13_00-50-24.jpg +0 -0
  203. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/screenshots/old/Supervertaler_Qt_2025-11-12.jpg +0 -0
  204. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/script.js +0 -0
  205. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/site.webmanifest +0 -0
  206. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/specifications/AI_ASSISTANT_PHASE2_IMPLEMENTATION.md +0 -0
  207. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/specifications/AI_PROMPT_ASSISTANT.md +0 -0
  208. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/specifications/AI_PROMPT_ASSISTANT_IMPLEMENTATION.md +0 -0
  209. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/specifications/EXPORT_MENU_UPDATE.md +0 -0
  210. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/specifications/IMPLEMENTATION_SUMMARY.md +0 -0
  211. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/specifications/QT_PHASE2_COMPLETE.md +0 -0
  212. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/specifications/QT_PHASE3_COMPLETE.md +0 -0
  213. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/specifications/SUPERVERTALER_DATA_FORMAT.md +0 -0
  214. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/specifications/TASK_TYPE_SYSTEM.md +0 -0
  215. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/specifications/TERMINOLOGY_UPDATE_SUMMARY.md +0 -0
  216. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/specifications/opus-api-integration.md +0 -0
  217. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/styles.css +0 -0
  218. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/.gitbook/assets/supervertaler-logo.png +0 -0
  219. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/.gitbook/assets/sv-icon.svg +0 -0
  220. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/GITBOOK_LANDING_DRAFT.md +0 -0
  221. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/README.md +0 -0
  222. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/SUMMARY.md +0 -0
  223. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/ai-translation/batch-translation.md +0 -0
  224. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/ai-translation/ollama.md +0 -0
  225. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/ai-translation/overview.md +0 -0
  226. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/ai-translation/prompt-library.md +0 -0
  227. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/ai-translation/prompts.md +0 -0
  228. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/ai-translation/providers.md +0 -0
  229. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/ai-translation/single-segment.md +0 -0
  230. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/cat-tools/cafetran.md +0 -0
  231. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/cat-tools/memoq.md +0 -0
  232. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/cat-tools/overview.md +0 -0
  233. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/cat-tools/phrase.md +0 -0
  234. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/cat-tools/trados.md +0 -0
  235. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/editor/editing-confirming.md +0 -0
  236. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/editor/filtering.md +0 -0
  237. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/editor/find-replace.md +0 -0
  238. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/editor/keyboard-shortcuts.md +0 -0
  239. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/editor/navigation.md +0 -0
  240. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/editor/pagination.md +0 -0
  241. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/editor/translation-grid.md +0 -0
  242. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/get-started/api-keys.md +0 -0
  243. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/get-started/first-project.md +0 -0
  244. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/get-started/installation.md +0 -0
  245. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/get-started/quick-start.md +0 -0
  246. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/glossaries/basics.md +0 -0
  247. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/glossaries/creating.md +0 -0
  248. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/glossaries/extraction.md +0 -0
  249. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/glossaries/highlighting.md +0 -0
  250. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/glossaries/importing.md +0 -0
  251. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/import-export/bilingual-tables.md +0 -0
  252. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/import-export/docx-import.md +0 -0
  253. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/import-export/exporting.md +0 -0
  254. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/import-export/formats.md +0 -0
  255. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/import-export/multi-file.md +0 -0
  256. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/import-export/txt-import.md +0 -0
  257. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/qa/non-translatables.md +0 -0
  258. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/qa/spellcheck.md +0 -0
  259. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/qa/tag-validation.md +0 -0
  260. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/reference/changelog.md +0 -0
  261. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/reference/contributing.md +0 -0
  262. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/reference/file-formats.md +0 -0
  263. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/settings/fonts.md +0 -0
  264. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/settings/general.md +0 -0
  265. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/settings/shortcuts.md +0 -0
  266. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/settings/theme.md +0 -0
  267. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/settings/view.md +0 -0
  268. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/superlookup/glossary-search.md +0 -0
  269. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/superlookup/mt.md +0 -0
  270. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/superlookup/overview.md +0 -0
  271. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/superlookup/tm-search.md +0 -0
  272. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/superlookup/web-resources.md +0 -0
  273. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/tools/autofingers.md +0 -0
  274. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/tools/image-extractor.md +0 -0
  275. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/tools/pdf-rescue.md +0 -0
  276. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/tools/tmx-editor.md +0 -0
  277. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/tools/voice-commands.md +0 -0
  278. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/translation-memory/basics.md +0 -0
  279. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/translation-memory/fuzzy-matching.md +0 -0
  280. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/translation-memory/importing-tmx.md +0 -0
  281. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/translation-memory/managing-tms.md +0 -0
  282. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/translation-memory/supermemory.md +0 -0
  283. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/troubleshooting/api-issues.md +0 -0
  284. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/troubleshooting/common-issues.md +0 -0
  285. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/troubleshooting/import-export-errors.md +0 -0
  286. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/troubleshooting/linux.md +0 -0
  287. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/superdocs/troubleshooting/performance.md +0 -0
  288. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/sv-icon.svg +0 -0
  289. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/technical/AI_ASSISTANT_GUIDE.md +0 -0
  290. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/technical/AI_ASSISTANT_IMPLEMENTATION.md +0 -0
  291. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/technical/AI_ASSISTANT_INTEGRATION.md +0 -0
  292. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/technical/AI_ASSISTANT_QUICK_REFERENCE.md +0 -0
  293. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/technical/DATABASE_LOCATIONS.md +0 -0
  294. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/technical/FILTER_HIGHLIGHTING_FIX.md +0 -0
  295. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/technical/MODULE_HEADER_PATTERN.md +0 -0
  296. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/technical/README.md +0 -0
  297. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/technical/SUPERBROWSER_GUIDE.md +0 -0
  298. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/technical/SUPERVOICE_TROUBLESHOOTING.md +0 -0
  299. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/technical/UNIFIED_PROMPT_LIBRARY_GUIDE.md +0 -0
  300. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/technical/VOICE_DICTATION_GUIDE.md +0 -0
  301. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/tests/test_encoding_corruption.txt +0 -0
  302. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/web-app-manifest-192x192.png +0 -0
  303. {supervertaler-1.9.195 → supervertaler-1.9.196}/docs/web-app-manifest-512x512.png +0 -0
  304. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/__init__.py +0 -0
  305. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/ai_actions.py +0 -0
  306. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/ai_attachment_manager.py +0 -0
  307. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/ai_file_viewer_dialog.py +0 -0
  308. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/autofingers_engine.py +0 -0
  309. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/cafetran_docx_handler.py +0 -0
  310. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/config_manager.py +0 -0
  311. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/database_manager.py +0 -0
  312. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/database_migrations.py +0 -0
  313. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/dejavurtf_handler.py +0 -0
  314. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/document_analyzer.py +0 -0
  315. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/docx_handler.py +0 -0
  316. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/encoding_repair.py +0 -0
  317. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/encoding_repair_Qt.py +0 -0
  318. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/encoding_repair_ui.py +0 -0
  319. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/extract_tm.py +0 -0
  320. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/feature_manager.py +0 -0
  321. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/figure_context_manager.py +0 -0
  322. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/file_dialog_helper.py +0 -0
  323. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/find_replace.py +0 -0
  324. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/find_replace_qt.py +0 -0
  325. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/glossary_manager.py +0 -0
  326. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/image_extractor.py +0 -0
  327. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/keyboard_shortcuts_widget.py +0 -0
  328. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/llm_leaderboard.py +0 -0
  329. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/llm_superbench_ui.py +0 -0
  330. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/local_llm_setup.py +0 -0
  331. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/model_update_dialog.py +0 -0
  332. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/model_version_checker.py +0 -0
  333. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/mqxliff_handler.py +0 -0
  334. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/non_translatables_manager.py +0 -0
  335. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/pdf_rescue_Qt.py +0 -0
  336. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/pdf_rescue_tkinter.py +0 -0
  337. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/phrase_docx_handler.py +0 -0
  338. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/project_home_panel.py +0 -0
  339. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/project_tm.py +0 -0
  340. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/prompt_assistant.py +0 -0
  341. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/prompt_library.py +0 -0
  342. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/prompt_library_migration.py +0 -0
  343. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/quick_access_sidebar.py +0 -0
  344. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/quicktrans.py +0 -0
  345. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/ribbon_widget.py +0 -0
  346. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/sdlppx_handler.py +0 -0
  347. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/setup_wizard.py +0 -0
  348. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/shortcut_manager.py +0 -0
  349. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/simple_segmenter.py +0 -0
  350. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/spellcheck_manager.py +0 -0
  351. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/statuses.py +0 -0
  352. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/style_guide_manager.py +0 -0
  353. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/superbench_ui.py +0 -0
  354. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/superbrowser.py +0 -0
  355. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/supercleaner.py +0 -0
  356. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/supercleaner_ui.py +0 -0
  357. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/superdocs.py +0 -0
  358. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/superdocs_viewer_qt.py +0 -0
  359. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/superlookup.py +0 -0
  360. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/tag_cleaner.py +0 -0
  361. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/tag_manager.py +0 -0
  362. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/term_extractor.py +0 -0
  363. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/termbase_entry_editor.py +0 -0
  364. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/termbase_import_export.py +0 -0
  365. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/termbase_manager.py +0 -0
  366. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/termview_widget.py +0 -0
  367. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/theme_manager.py +0 -0
  368. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/tm_editor_dialog.py +0 -0
  369. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/tm_manager_qt.py +0 -0
  370. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/tm_metadata_manager.py +0 -0
  371. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/tmx_editor.py +0 -0
  372. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/tmx_editor_qt.py +0 -0
  373. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/tmx_generator.py +0 -0
  374. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/tracked_changes.py +0 -0
  375. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/trados_docx_handler.py +0 -0
  376. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/translation_memory.py +0 -0
  377. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/translation_results_panel.py +0 -0
  378. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/translation_services.py +0 -0
  379. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/unified_prompt_library.py +0 -0
  380. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/voice_commands.py +0 -0
  381. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/voice_dictation.py +0 -0
  382. {supervertaler-1.9.195 → supervertaler-1.9.196}/modules/voice_dictation_lite.py +0 -0
  383. {supervertaler-1.9.195 → supervertaler-1.9.196}/setup.cfg +0 -0
  384. {supervertaler-1.9.195 → supervertaler-1.9.196}/setup.py +0 -0
  385. {supervertaler-1.9.195 → supervertaler-1.9.196}/supervertaler.egg-info/dependency_links.txt +0 -0
  386. {supervertaler-1.9.195 → supervertaler-1.9.196}/supervertaler.egg-info/entry_points.txt +0 -0
  387. {supervertaler-1.9.195 → supervertaler-1.9.196}/supervertaler.egg-info/not-zip-safe +0 -0
  388. {supervertaler-1.9.195 → supervertaler-1.9.196}/supervertaler.egg-info/requires.txt +0 -0
  389. {supervertaler-1.9.195 → supervertaler-1.9.196}/supervertaler.egg-info/top_level.txt +0 -0
@@ -2,10 +2,28 @@
2
2
 
3
3
  All notable changes to Supervertaler are documented in this file.
4
4
 
5
- **Current Version:** v1.9.195 (February 2, 2026)
5
+ **Current Version:** v1.9.196 (February 2, 2026)
6
6
 
7
7
 
8
8
 
9
+ ## v1.9.196 - February 2, 2026
10
+
11
+ ### 🐛 Bug Fixes
12
+
13
+ - **AI Assistant "Analyze Project" Fixed**: Fixed a bug where clicking "Analyze Project & Generate Prompts" in the AI Assistant would fail with "AI responded but no actions were found". The issue was that the LLM wasn't receiving a system prompt explaining the ACTION format. Now all providers (OpenAI, Claude, Gemini, Ollama) receive proper instructions on how to format their responses.
14
+
15
+ ### 🎨 UI Improvements
16
+
17
+ - **Supervoice Settings Two-Column Layout**: Reorganized the Supervoice settings tab into a two-column layout. Voice commands table now displays on the right side, allowing more commands to be visible at once. Settings (Always-On Listening, Speech Recognition Model, AutoHotkey) remain on the left.
18
+
19
+ - **Green Checkmark Checkbox**: The "Enable voice commands" checkbox in Supervoice settings now uses the standard green checkmark style (CheckmarkCheckBox) for visual consistency with the rest of the application.
20
+
21
+ ### 🏗️ Code Architecture
22
+
23
+ - **LLM Client System Prompt Support**: Added `system_prompt` parameter to the LLM client's `translate()` method and all provider-specific methods. This enables passing behavioral instructions to AI models for features like the AI Assistant.
24
+
25
+ ---
26
+
9
27
  ## v1.9.195 - February 2, 2026
10
28
 
11
29
  ### 🏗️ Code Architecture
@@ -672,6 +672,34 @@ ollama pull qwen2.5:3b
672
672
  - Multiple API keys (GPT-4o, Claude, Gemini)
673
673
  - Sufficient API credits for testing runs
674
674
 
675
+ ### Why is my antivirus flagging Supervertaler as malware?
676
+
677
+ This is a **known false positive** that affects applications built with PyInstaller (the tool used to create the Windows EXE).
678
+
679
+ **Why it happens:**
680
+ - PyInstaller bundles Python + all libraries into a single package
681
+ - This binary pattern triggers heuristic detection in some AV software (especially Norton 360)
682
+ - Generic detections like "Win64:Malware-gen" are pattern matches, not actual malware signatures
683
+ - The executable is not code-signed (certificates cost ~$300/year)
684
+
685
+ **Solutions:**
686
+
687
+ 1. **Use pip install (Recommended)**
688
+ - Install: `pip install supervertaler`
689
+ - Run: `supervertaler`
690
+ - No AV warnings because it runs from Python source
691
+
692
+ 2. **Whitelist the application**
693
+ - Add an exception in your antivirus settings
694
+ - The application is safe - you can verify by checking the [source code on GitHub](https://github.com/michaelbeijer/Supervertaler)
695
+
696
+ 3. **Report as false positive**
697
+ - Norton: https://submit.norton.com/
698
+ - Windows Defender: Click "More info" → "Run anyway"
699
+ - Other AV: Check vendor's false positive submission page
700
+
701
+ **This is common for PyInstaller apps** - it affects tools like Calibre, many game mods, and scientific software. See the [PyInstaller FAQ](https://pyinstaller.org/en/stable/faq.html) for more details.
702
+
675
703
  ---
676
704
 
677
705
  ## Workflow & Integration
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: supervertaler
3
- Version: 1.9.195
3
+ Version: 1.9.196
4
4
  Summary: Professional AI-enhanced translation workbench with multi-LLM support, glossary system, TM, spellcheck, voice commands, and PyQt6 interface. Batteries included (core).
5
5
  Home-page: https://supervertaler.com
6
6
  Author: Michael Beijer
@@ -32,7 +32,7 @@ License: MIT
32
32
  """
33
33
 
34
34
  # Version Information.
35
- __version__ = "1.9.195"
35
+ __version__ = "1.9.196"
36
36
  __phase__ = "0.9"
37
37
  __release_date__ = "2026-02-02"
38
38
  __edition__ = "Qt"
@@ -18307,14 +18307,15 @@ class SupervertalerQt(QMainWindow):
18307
18307
 
18308
18308
  def _create_voice_dictation_settings_tab(self):
18309
18309
  """Create Supervoice Settings tab content with Voice Commands"""
18310
- from PyQt6.QtWidgets import (QGroupBox, QPushButton, QComboBox, QSpinBox,
18310
+ from PyQt6.QtWidgets import (QGroupBox, QPushButton, QComboBox, QSpinBox,
18311
18311
  QTableWidget, QTableWidgetItem, QHeaderView,
18312
- QAbstractItemView, QCheckBox)
18312
+ QAbstractItemView, QCheckBox, QSplitter)
18313
+ from modules.keyboard_shortcuts_widget import CheckmarkCheckBox
18313
18314
 
18314
18315
  tab = QWidget()
18315
- layout = QVBoxLayout(tab)
18316
- layout.setContentsMargins(20, 20, 20, 20)
18317
- layout.setSpacing(15)
18316
+ main_layout = QVBoxLayout(tab)
18317
+ main_layout.setContentsMargins(20, 20, 20, 20)
18318
+ main_layout.setSpacing(15)
18318
18319
 
18319
18320
  # Load current dictation settings
18320
18321
  dictation_settings = self.load_dictation_settings()
@@ -18327,19 +18328,33 @@ class SupervertalerQt(QMainWindow):
18327
18328
  header_info.setTextFormat(Qt.TextFormat.RichText)
18328
18329
  header_info.setStyleSheet("font-size: 9pt; color: #444; padding: 10px; background-color: #E3F2FD; border-radius: 4px;")
18329
18330
  header_info.setWordWrap(True)
18330
- layout.addWidget(header_info)
18331
+ main_layout.addWidget(header_info)
18331
18332
 
18332
- # ===== Voice Commands Section =====
18333
- commands_group = QGroupBox("🗣️ Voice Commands (Talon-style)")
18334
- commands_layout = QVBoxLayout()
18333
+ # ===== Two-column layout: Left = Settings, Right = Voice Commands Table =====
18334
+ columns_layout = QHBoxLayout()
18335
+ columns_layout.setSpacing(15)
18335
18336
 
18336
- # Enable voice commands checkbox
18337
- voice_cmd_enabled = QCheckBox("Enable voice commands (spoken phrases trigger actions)")
18337
+ # --- LEFT COLUMN: Settings ---
18338
+ left_column = QVBoxLayout()
18339
+ left_column.setSpacing(15)
18340
+
18341
+ # Enable voice commands checkbox (green checkmark style)
18342
+ voice_cmd_enabled = CheckmarkCheckBox("Enable voice commands (spoken phrases trigger actions)")
18338
18343
  voice_cmd_enabled.setChecked(dictation_settings.get('voice_commands_enabled', True))
18339
18344
  voice_cmd_enabled.setToolTip("When enabled, spoken phrases like 'confirm' or 'next segment' will execute commands instead of being inserted as text")
18340
- commands_layout.addWidget(voice_cmd_enabled)
18345
+ left_column.addWidget(voice_cmd_enabled)
18341
18346
  self.voice_commands_enabled_checkbox = voice_cmd_enabled
18342
18347
 
18348
+ # Create a layout variable for settings sections to be added below
18349
+ layout = left_column
18350
+
18351
+ # --- RIGHT COLUMN: Voice Commands Table ---
18352
+ right_column = QVBoxLayout()
18353
+ right_column.setSpacing(10)
18354
+
18355
+ commands_group = QGroupBox("🗣️ Voice Commands (Talon-style)")
18356
+ commands_layout = QVBoxLayout()
18357
+
18343
18358
  commands_info = QLabel(
18344
18359
  "Voice commands let you control Supervertaler by voice. Say a phrase to execute an action.\n"
18345
18360
  "If no command matches, the spoken text is inserted as dictation."
@@ -18358,38 +18373,47 @@ class SupervertalerQt(QMainWindow):
18358
18373
  self.voice_commands_table.horizontalHeader().setSectionResizeMode(3, QHeaderView.ResizeMode.ResizeToContents)
18359
18374
  self.voice_commands_table.setSelectionBehavior(QAbstractItemView.SelectionBehavior.SelectRows)
18360
18375
  self.voice_commands_table.setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers)
18361
- self.voice_commands_table.setMinimumHeight(200)
18362
- self.voice_commands_table.setMaximumHeight(300)
18363
-
18376
+ self.voice_commands_table.setMinimumHeight(350)
18377
+
18364
18378
  # Populate table with current commands
18365
18379
  self._populate_voice_commands_table()
18366
18380
  commands_layout.addWidget(self.voice_commands_table)
18367
18381
 
18368
18382
  # Command buttons
18369
18383
  cmd_btn_layout = QHBoxLayout()
18370
-
18371
- add_cmd_btn = QPushButton("➕ Add Command")
18384
+
18385
+ add_cmd_btn = QPushButton("➕ Add")
18372
18386
  add_cmd_btn.clicked.connect(self._add_voice_command)
18373
18387
  cmd_btn_layout.addWidget(add_cmd_btn)
18374
-
18375
- edit_cmd_btn = QPushButton("✏️ Edit Command")
18388
+
18389
+ edit_cmd_btn = QPushButton("✏️ Edit")
18376
18390
  edit_cmd_btn.clicked.connect(self._edit_voice_command)
18377
18391
  cmd_btn_layout.addWidget(edit_cmd_btn)
18378
-
18379
- remove_cmd_btn = QPushButton("🗑️ Remove Command")
18392
+
18393
+ remove_cmd_btn = QPushButton("🗑️ Remove")
18380
18394
  remove_cmd_btn.clicked.connect(self._remove_voice_command)
18381
18395
  cmd_btn_layout.addWidget(remove_cmd_btn)
18382
-
18396
+
18383
18397
  cmd_btn_layout.addStretch()
18384
-
18385
- reset_cmd_btn = QPushButton("🔄 Reset to Defaults")
18398
+
18399
+ reset_cmd_btn = QPushButton("🔄 Reset")
18386
18400
  reset_cmd_btn.clicked.connect(self._reset_voice_commands)
18387
18401
  cmd_btn_layout.addWidget(reset_cmd_btn)
18388
-
18402
+
18389
18403
  commands_layout.addLayout(cmd_btn_layout)
18390
18404
 
18391
18405
  commands_group.setLayout(commands_layout)
18392
- layout.addWidget(commands_group)
18406
+ right_column.addWidget(commands_group)
18407
+ right_column.addStretch()
18408
+
18409
+ # Add columns to the two-column layout
18410
+ left_widget = QWidget()
18411
+ left_widget.setLayout(left_column)
18412
+ right_widget = QWidget()
18413
+ right_widget.setLayout(right_column)
18414
+
18415
+ columns_layout.addWidget(left_widget, stretch=1)
18416
+ columns_layout.addWidget(right_widget, stretch=1)
18393
18417
 
18394
18418
  # ===== Always-On Mode Section =====
18395
18419
  alwayson_group = QGroupBox("🎧 Always-On Listening Mode")
@@ -18552,7 +18576,13 @@ class SupervertalerQt(QMainWindow):
18552
18576
  ahk_group.setLayout(ahk_layout)
18553
18577
  layout.addWidget(ahk_group)
18554
18578
 
18555
- # Save button
18579
+ # Add stretch to left column to push content up
18580
+ layout.addStretch()
18581
+
18582
+ # Add two-column layout to main layout
18583
+ main_layout.addLayout(columns_layout, stretch=1)
18584
+
18585
+ # Save button (full width, below the two columns)
18556
18586
  save_btn = QPushButton("💾 Save Supervoice Settings")
18557
18587
  save_btn.setStyleSheet("background-color: #4CAF50; color: white; font-weight: bold; padding: 10px; border: none; outline: none;")
18558
18588
  save_btn.clicked.connect(lambda: self._save_voice_settings(
@@ -18561,15 +18591,13 @@ class SupervertalerQt(QMainWindow):
18561
18591
  lang_combo.currentText(),
18562
18592
  voice_cmd_enabled.isChecked()
18563
18593
  ))
18564
- layout.addWidget(save_btn)
18594
+ main_layout.addWidget(save_btn)
18565
18595
 
18566
18596
  # Store references
18567
18597
  self.dictation_model_combo = model_combo
18568
18598
  self.dictation_duration_spin = duration_spin
18569
18599
  self.dictation_lang_combo = lang_combo
18570
18600
 
18571
- layout.addStretch()
18572
-
18573
18601
  return tab
18574
18602
 
18575
18603
  def _populate_voice_commands_table(self):
@@ -17,7 +17,7 @@
17
17
  <link rel="apple-touch-icon" href="apple-touch-icon.png">
18
18
  <link rel="manifest" href="site.webmanifest">
19
19
 
20
- <link rel="stylesheet" href="styles.css?v=1.9.194">
20
+ <link rel="stylesheet" href="styles.css?v=1.9.196">
21
21
  <link rel="preconnect" href="https://fonts.googleapis.com">
22
22
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
23
23
  <link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&display=swap"
@@ -50,7 +50,7 @@
50
50
  class="nav-discussions">💬 Discussions</a></li>
51
51
  <li class="nav-action">
52
52
  <a href="https://github.com/michaelbeijer/Supervertaler/blob/main/CHANGELOG.md" target="_blank"
53
- class="nav-version" title="Current version">v1.9.194</a>
53
+ class="nav-version" title="Current version">v1.9.196</a>
54
54
  </li>
55
55
  <li class="nav-action">
56
56
  <a href="https://github.com/michaelbeijer/Supervertaler" target="_blank" class="nav-icon-link"
@@ -74,7 +74,7 @@
74
74
  Supervertaler
75
75
  <span class="gradient-text">The Ultimate Translation Workbench</span>
76
76
  </h1>
77
- <p class="version-badge">v1.9.194</p>
77
+ <p class="version-badge">v1.9.196</p>
78
78
  <p class="hero-subtitle">
79
79
  AI-enhanced translation workbench. Work with ChatGPT, Claude, and Gemini simultaneously.
80
80
  Built by translators, for translators and writers.
@@ -711,7 +711,7 @@
711
711
  <div style="text-align: center; margin: 40px 0;">
712
712
  <div class="download-card featured"
713
713
  style="border: 3px solid #6366F1; max-width: 700px; margin: 0 auto;">
714
- <div class="download-badge" style="background: #6366F1;">v1.9.194</div>
714
+ <div class="download-badge" style="background: #6366F1;">v1.9.196</div>
715
715
  <h3>🎨 Supervertaler</h3>
716
716
  <p class="download-description" style="font-weight: 600; color: #6366F1; margin-bottom: 10px;">
717
717
  Modern Professional Interface
@@ -823,6 +823,22 @@
823
823
  <p class="section-subtitle">See Supervertaler in action</p>
824
824
 
825
825
  <div class="screenshots-grid">
826
+ <div class="screenshot-card" style="border: 3px solid #6366F1;">
827
+ <a href="screenshots/Supervertalerv1.9.196_2026-02-02.png" class="screenshot-link" target="_blank">
828
+ <img src="screenshots/Supervertalerv1.9.196_2026-02-02.png"
829
+ alt="Supervertaler v1.9.196 with QuickTrans" loading="lazy">
830
+ <div class="screenshot-overlay">
831
+ <span class="zoom-icon">🔍 Click to enlarge</span>
832
+ </div>
833
+ </a>
834
+ <div class="screenshot-caption">
835
+ <h3>⚡ QuickTrans & Modern UI <span class="badge"
836
+ style="background: #6366F1; color: white; padding: 3px 8px; border-radius: 12px; font-size: 11px; margin-left: 5px;">v1.9.196</span>
837
+ </h3>
838
+ <p>QuickTrans instant translation popup with MT engines and LLMs. Global hotkey (Ctrl+Alt+M) works from any application.</p>
839
+ </div>
840
+ </div>
841
+
826
842
  <div class="screenshot-card" style="border: 3px solid #2196F3;">
827
843
  <a href="screenshots/Supervertaler_v1.9.102_grid_2026-01-14.png" class="screenshot-link" target="_blank">
828
844
  <img src="screenshots/Supervertaler_v1.9.102_grid_2026-01-14.png"
@@ -1207,7 +1223,7 @@
1207
1223
  </svg>
1208
1224
  </button>
1209
1225
 
1210
- <script src="script.js?v=1.9.191"></script>
1226
+ <script src="script.js?v=1.9.196"></script>
1211
1227
  </body>
1212
1228
 
1213
1229
  </html>
@@ -722,6 +722,34 @@ ollama pull qwen2.5:3b
722
722
  - Multiple API keys (GPT-4o, Claude, Gemini)
723
723
  - Sufficient API credits for testing runs
724
724
 
725
+ ### Why is my antivirus flagging Supervertaler as malware?
726
+
727
+ This is a **known false positive** that affects applications built with PyInstaller (the tool used to create the Windows EXE).
728
+
729
+ **Why it happens:**
730
+ - PyInstaller bundles Python + all libraries into a single package
731
+ - This binary pattern triggers heuristic detection in some AV software (especially Norton 360)
732
+ - Generic detections like "Win64:Malware-gen" are pattern matches, not actual malware signatures
733
+ - The executable is not code-signed (certificates cost ~$300/year)
734
+
735
+ **Solutions:**
736
+
737
+ 1. **Use pip install (Recommended)**
738
+ - Install: `pip install supervertaler`
739
+ - Run: `supervertaler`
740
+ - No AV warnings because it runs from Python source
741
+
742
+ 2. **Whitelist the application**
743
+ - Add an exception in your antivirus settings
744
+ - The application is safe - you can verify by checking the [source code on GitHub](https://github.com/michaelbeijer/Supervertaler)
745
+
746
+ 3. **Report as false positive**
747
+ - Norton: https://submit.norton.com/
748
+ - Windows Defender: Click "More info" → "Run anyway"
749
+ - Other AV: Check vendor's false positive submission page
750
+
751
+ **This is common for PyInstaller apps** - it affects tools like Calibre, many game mods, and scientific software. See the [PyInstaller FAQ](https://pyinstaller.org/en/stable/faq.html) for more details.
752
+
725
753
  ---
726
754
 
727
755
  ## Workflow & Integration
@@ -594,18 +594,20 @@ class LLMClient:
594
594
  context: Optional[str] = None,
595
595
  custom_prompt: Optional[str] = None,
596
596
  max_tokens: Optional[int] = None,
597
- images: Optional[List] = None
597
+ images: Optional[List] = None,
598
+ system_prompt: Optional[str] = None
598
599
  ) -> str:
599
600
  """
600
601
  Translate text using configured LLM
601
-
602
+
602
603
  Args:
603
604
  text: Text to translate
604
605
  source_lang: Source language code
605
606
  target_lang: Target language code
606
607
  context: Optional context for translation
607
608
  custom_prompt: Optional custom prompt (overrides default simple prompt)
608
-
609
+ system_prompt: Optional system prompt for AI behavior context
610
+
609
611
  Returns:
610
612
  Translated text
611
613
  """
@@ -615,30 +617,30 @@ class LLMClient:
615
617
  else:
616
618
  # Build prompt
617
619
  prompt = f"Translate the following text from {source_lang} to {target_lang}:\n\n{text}"
618
-
620
+
619
621
  if context:
620
622
  prompt = f"Context: {context}\n\n{prompt}"
621
-
623
+
622
624
  # Log warning if images provided but model doesn't support vision
623
625
  if images and not self.model_supports_vision(self.provider, self.model):
624
626
  print(f"⚠️ Warning: Model {self.model} doesn't support vision. Images will be ignored.")
625
627
  images = None # Don't pass to API
626
-
628
+
627
629
  # Call appropriate provider
628
630
  if self.provider == "openai":
629
- return self._call_openai(prompt, max_tokens=max_tokens, images=images)
631
+ return self._call_openai(prompt, max_tokens=max_tokens, images=images, system_prompt=system_prompt)
630
632
  elif self.provider == "claude":
631
- return self._call_claude(prompt, max_tokens=max_tokens, images=images)
633
+ return self._call_claude(prompt, max_tokens=max_tokens, images=images, system_prompt=system_prompt)
632
634
  elif self.provider == "gemini":
633
- return self._call_gemini(prompt, max_tokens=max_tokens, images=images)
635
+ return self._call_gemini(prompt, max_tokens=max_tokens, images=images, system_prompt=system_prompt)
634
636
  elif self.provider == "ollama":
635
- return self._call_ollama(prompt, max_tokens=max_tokens)
637
+ return self._call_ollama(prompt, max_tokens=max_tokens, system_prompt=system_prompt)
636
638
  else:
637
639
  raise ValueError(f"Unsupported provider: {self.provider}")
638
640
 
639
- def _call_openai(self, prompt: str, max_tokens: Optional[int] = None, images: Optional[List] = None) -> str:
641
+ def _call_openai(self, prompt: str, max_tokens: Optional[int] = None, images: Optional[List] = None, system_prompt: Optional[str] = None) -> str:
640
642
  """Call OpenAI API with GPT-5/o1/o3 reasoning model support and vision capability"""
641
- print(f"🔵 _call_openai START: model={self.model}, prompt_len={len(prompt)}, max_tokens={max_tokens}, images={len(images) if images else 0}")
643
+ print(f"🔵 _call_openai START: model={self.model}, prompt_len={len(prompt)}, max_tokens={max_tokens}, images={len(images) if images else 0}, has_system={bool(system_prompt)}")
642
644
 
643
645
  try:
644
646
  from openai import OpenAI
@@ -686,10 +688,16 @@ class LLMClient:
686
688
  # Standard text-only format
687
689
  content = prompt
688
690
 
691
+ # Build messages list
692
+ messages = []
693
+ if system_prompt:
694
+ messages.append({"role": "system", "content": system_prompt})
695
+ messages.append({"role": "user", "content": content})
696
+
689
697
  # Build API call parameters
690
698
  api_params = {
691
699
  "model": self.model,
692
- "messages": [{"role": "user", "content": content}],
700
+ "messages": messages,
693
701
  "timeout": timeout_seconds
694
702
  }
695
703
 
@@ -742,7 +750,7 @@ class LLMClient:
742
750
  print(f" Response: {e.response}")
743
751
  raise # Re-raise to be caught by calling code
744
752
 
745
- def _call_claude(self, prompt: str, max_tokens: Optional[int] = None, images: Optional[List] = None) -> str:
753
+ def _call_claude(self, prompt: str, max_tokens: Optional[int] = None, images: Optional[List] = None, system_prompt: Optional[str] = None) -> str:
746
754
  """Call Anthropic Claude API with vision support"""
747
755
  try:
748
756
  import anthropic
@@ -786,12 +794,19 @@ class LLMClient:
786
794
  # Standard text-only format
787
795
  content = prompt
788
796
 
789
- response = client.messages.create(
790
- model=self.model,
791
- max_tokens=tokens_to_use,
792
- messages=[{"role": "user", "content": content}],
793
- timeout=timeout_seconds # Explicit timeout
794
- )
797
+ # Build API call parameters
798
+ api_params = {
799
+ "model": self.model,
800
+ "max_tokens": tokens_to_use,
801
+ "messages": [{"role": "user", "content": content}],
802
+ "timeout": timeout_seconds # Explicit timeout
803
+ }
804
+
805
+ # Add system prompt if provided (Claude uses 'system' parameter, not a message)
806
+ if system_prompt:
807
+ api_params["system"] = system_prompt
808
+
809
+ response = client.messages.create(**api_params)
795
810
 
796
811
  translation = response.content[0].text.strip()
797
812
 
@@ -800,7 +815,7 @@ class LLMClient:
800
815
 
801
816
  return translation
802
817
 
803
- def _call_gemini(self, prompt: str, max_tokens: Optional[int] = None, images: Optional[List] = None) -> str:
818
+ def _call_gemini(self, prompt: str, max_tokens: Optional[int] = None, images: Optional[List] = None, system_prompt: Optional[str] = None) -> str:
804
819
  """Call Google Gemini API with vision support"""
805
820
  try:
806
821
  import google.generativeai as genai
@@ -809,10 +824,15 @@ class LLMClient:
809
824
  raise ImportError(
810
825
  "Google AI library not installed. Install with: pip install google-generativeai pillow"
811
826
  )
812
-
827
+
813
828
  genai.configure(api_key=self.api_key)
814
- model = genai.GenerativeModel(self.model)
815
-
829
+
830
+ # Gemini supports system instructions via GenerativeModel parameter
831
+ if system_prompt:
832
+ model = genai.GenerativeModel(self.model, system_instruction=system_prompt)
833
+ else:
834
+ model = genai.GenerativeModel(self.model)
835
+
816
836
  # Build content (text + optional images)
817
837
  if images:
818
838
  # Gemini format: list with prompt text followed by PIL Image objects
@@ -823,7 +843,7 @@ class LLMClient:
823
843
  else:
824
844
  # Standard text-only
825
845
  content = prompt
826
-
846
+
827
847
  response = model.generate_content(content)
828
848
  translation = response.text.strip()
829
849
 
@@ -832,20 +852,21 @@ class LLMClient:
832
852
 
833
853
  return translation
834
854
 
835
- def _call_ollama(self, prompt: str, max_tokens: Optional[int] = None) -> str:
855
+ def _call_ollama(self, prompt: str, max_tokens: Optional[int] = None, system_prompt: Optional[str] = None) -> str:
836
856
  """
837
857
  Call local Ollama server for translation.
838
-
858
+
839
859
  Ollama provides a simple REST API compatible with local LLM inference.
840
860
  Models run entirely on the user's computer - no API keys, no internet required.
841
-
861
+
842
862
  Args:
843
863
  prompt: The full prompt to send
844
864
  max_tokens: Maximum tokens to generate (default: 4096)
845
-
865
+ system_prompt: Optional system prompt for AI behavior context
866
+
846
867
  Returns:
847
868
  Translated text
848
-
869
+
849
870
  Raises:
850
871
  ConnectionError: If Ollama is not running
851
872
  ValueError: If model is not available
@@ -866,13 +887,17 @@ class LLMClient:
866
887
  print(f"🟠 _call_ollama START: model={self.model}, prompt_len={len(prompt)}, max_tokens={tokens_to_use}")
867
888
  print(f"🟠 Ollama endpoint: {endpoint}")
868
889
 
890
+ # Build messages list
891
+ messages = []
892
+ if system_prompt:
893
+ messages.append({"role": "system", "content": system_prompt})
894
+ messages.append({"role": "user", "content": prompt})
895
+
869
896
  # Build request payload
870
897
  # Using /api/chat for chat-style interaction (better for translation prompts)
871
898
  payload = {
872
899
  "model": self.model,
873
- "messages": [
874
- {"role": "user", "content": prompt}
875
- ],
900
+ "messages": messages,
876
901
  "stream": False, # Get complete response at once
877
902
  "options": {
878
903
  "temperature": 0.3, # Low temperature for consistent translations
@@ -3795,6 +3795,26 @@ Output complete ACTION."""
3795
3795
  from PyQt6.QtWidgets import QApplication
3796
3796
  QApplication.processEvents()
3797
3797
 
3798
+ # System prompt that explains the ACTION format to the AI
3799
+ ai_system_prompt = """You are an AI assistant for Supervertaler, a professional translation workbench.
3800
+
3801
+ You can execute actions using a special format. When you need to create, modify, or manage prompts, output ACTION blocks in this EXACT format:
3802
+
3803
+ ACTION:function_name PARAMS:{"param1": "value1", "param2": "value2"}
3804
+
3805
+ Available actions:
3806
+ - create_prompt: Create a new prompt. Required params: name, content. Optional: folder, description, activate
3807
+ - update_prompt: Update an existing prompt. Required params: name. Optional: content, folder, description
3808
+ - delete_prompt: Delete a prompt. Required params: name
3809
+ - list_prompts: List all prompts. Optional params: folder
3810
+ - activate_prompt: Set a prompt as active. Required params: name
3811
+
3812
+ IMPORTANT:
3813
+ 1. Output ONLY the ACTION block when asked to create/modify prompts - no explanatory text
3814
+ 2. The ACTION must be on a single line (PARAMS JSON can be multiline if needed)
3815
+ 3. Use valid JSON for PARAMS (double quotes for strings, escape special characters)
3816
+ 4. Do not wrap in code fences or add any markdown formatting"""
3817
+
3798
3818
  # Call LLM using translate method with custom prompt
3799
3819
  # The translate method accepts a custom_prompt parameter that we can use for any text generation
3800
3820
  self.log_message("[AI Assistant] Calling LLM translate method...")
@@ -3802,7 +3822,8 @@ Output complete ACTION."""
3802
3822
  text="", # Empty text since we're using custom_prompt
3803
3823
  source_lang="en",
3804
3824
  target_lang="en",
3805
- custom_prompt=prompt
3825
+ custom_prompt=prompt,
3826
+ system_prompt=ai_system_prompt
3806
3827
  )
3807
3828
 
3808
3829
  # Log the response
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "supervertaler"
7
- version = "1.9.195"
7
+ version = "1.9.196"
8
8
  description = "Professional AI-enhanced translation workbench with multi-LLM support, glossary system, TM, spellcheck, voice commands, and PyQt6 interface. Batteries included (core)."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: supervertaler
3
- Version: 1.9.195
3
+ Version: 1.9.196
4
4
  Summary: Professional AI-enhanced translation workbench with multi-LLM support, glossary system, TM, spellcheck, voice commands, and PyQt6 interface. Batteries included (core).
5
5
  Home-page: https://supervertaler.com
6
6
  Author: Michael Beijer
@@ -179,6 +179,7 @@ docs/idea_beijer.bot_integration_idea/README.md
179
179
  docs/idea_tag-cleaner/tag_cleaner.md
180
180
  docs/idea_use_vscode_as_cat_tool/ai-agent-translation-workflow.md
181
181
  docs/screenshots/2025-10-13_00-46-16.jpg
182
+ docs/screenshots/QuickTrans.png
182
183
  docs/screenshots/Superlookup_Web_resources.jpg
183
184
  docs/screenshots/Supervertaler_AI-Assistant.jpg
184
185
  docs/screenshots/Supervertaler_CLASSIC_v2.4.1_(tkinter).jpg
@@ -192,6 +193,7 @@ docs/screenshots/Supervertaler_grid.jpg
192
193
  docs/screenshots/Supervertaler_tkinter (v3.7.7).jpg
193
194
  docs/screenshots/Supervertaler_v1.9.102_compare_panel_2026-01-14.png
194
195
  docs/screenshots/Supervertaler_v1.9.102_grid_2026-01-14.png
196
+ docs/screenshots/Supervertalerv1.9.195_2026-02-02.png
195
197
  docs/screenshots/new/Supervertaler-grid.jpg
196
198
  docs/screenshots/new/Supervertaler_AI-Assistant.jpg
197
199
  docs/screenshots/new/Supervertaler_Prompt-Library.jpg
File without changes