contextweave 0.2.2__tar.gz → 0.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (550) hide show
  1. {contextweave-0.2.2 → contextweave-0.3.0}/PKG-INFO +9 -2
  2. {contextweave-0.2.2 → contextweave-0.3.0}/README.md +7 -1
  3. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/application/contracts/app_setup.py +6 -3
  4. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/application/contracts/common.py +1 -0
  5. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/application/runtime.py +3 -2
  6. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/cli/config_file.py +2 -2
  7. contextweave-0.3.0/context_aware_translation/cli/galgame_skill.py +106 -0
  8. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/cli/main.py +131 -0
  9. contextweave-0.3.0/context_aware_translation/core/galgame_document_handler.py +101 -0
  10. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/documents/base.py +2 -1
  11. contextweave-0.3.0/context_aware_translation/documents/galgame.py +2143 -0
  12. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/features/app_setup_view.py +4 -4
  13. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/workflow/bootstrap.py +12 -0
  14. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/workflow/ops/export_ops.py +2 -0
  15. {contextweave-0.2.2 → contextweave-0.3.0}/pyproject.toml +3 -1
  16. {contextweave-0.2.2 → contextweave-0.3.0}/scripts/generate_readme_screenshots.py +1 -1
  17. {contextweave-0.2.2 → contextweave-0.3.0}/tests/application/test_composition.py +2 -2
  18. {contextweave-0.2.2 → contextweave-0.3.0}/tests/application/test_contracts.py +8 -1
  19. {contextweave-0.2.2 → contextweave-0.3.0}/tests/cli/test_cli.py +73 -0
  20. contextweave-0.3.0/tests/core/test_galgame_document_handler.py +98 -0
  21. {contextweave-0.2.2 → contextweave-0.3.0}/tests/documents/test_base.py +18 -2
  22. contextweave-0.3.0/tests/documents/test_galgame.py +696 -0
  23. {contextweave-0.2.2 → contextweave-0.3.0}/tests/ui/test_app_setup_view.py +1 -1
  24. {contextweave-0.2.2 → contextweave-0.3.0}/tests/workflow/test_import_export.py +59 -0
  25. {contextweave-0.2.2 → contextweave-0.3.0}/uv.lock +24 -1
  26. contextweave-0.2.2/data/cat-library/registry.db +0 -0
  27. contextweave-0.2.2/data/cat-library/task_store.db +0 -0
  28. {contextweave-0.2.2 → contextweave-0.3.0}/.github/workflows/release.yml +0 -0
  29. {contextweave-0.2.2 → contextweave-0.3.0}/.gitignore +0 -0
  30. {contextweave-0.2.2 → contextweave-0.3.0}/AGENTS.md +0 -0
  31. {contextweave-0.2.2 → contextweave-0.3.0}/LICENSE +0 -0
  32. {contextweave-0.2.2 → contextweave-0.3.0}/Makefile +0 -0
  33. {contextweave-0.2.2 → contextweave-0.3.0}/README_ZH.md +0 -0
  34. {contextweave-0.2.2 → contextweave-0.3.0}/cat-ui.spec +0 -0
  35. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/AGENTS.md +0 -0
  36. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/__init__.py +0 -0
  37. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/adapters/__init__.py +0 -0
  38. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/adapters/files/__init__.py +0 -0
  39. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/adapters/files/glossary_io.py +0 -0
  40. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/adapters/qt/__init__.py +0 -0
  41. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/adapters/qt/application_event_bridge.py +0 -0
  42. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/adapters/qt/task_engine.py +0 -0
  43. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/adapters/qt/workers/__init__.py +0 -0
  44. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/adapters/qt/workers/base_worker.py +0 -0
  45. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/adapters/qt/workers/batch_task_overlap_guard.py +0 -0
  46. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/adapters/qt/workers/batch_translation_task_worker.py +0 -0
  47. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/adapters/qt/workers/chunk_retranslation_task_worker.py +0 -0
  48. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/adapters/qt/workers/export_worker.py +0 -0
  49. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/adapters/qt/workers/glossary_export_task_worker.py +0 -0
  50. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/adapters/qt/workers/glossary_extraction_task_worker.py +0 -0
  51. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/adapters/qt/workers/glossary_review_task_worker.py +0 -0
  52. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/adapters/qt/workers/glossary_translation_task_worker.py +0 -0
  53. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/adapters/qt/workers/image_reembedding_task_worker.py +0 -0
  54. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/adapters/qt/workers/import_worker.py +0 -0
  55. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/adapters/qt/workers/ocr_task_worker.py +0 -0
  56. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/adapters/qt/workers/operation_tracker.py +0 -0
  57. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/adapters/qt/workers/translate_and_export_task_worker.py +0 -0
  58. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/adapters/qt/workers/translation_manga_task_worker.py +0 -0
  59. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/adapters/qt/workers/translation_text_task_worker.py +0 -0
  60. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/app_identity.py +0 -0
  61. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/application/__init__.py +0 -0
  62. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/application/composition.py +0 -0
  63. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/application/contracts/__init__.py +0 -0
  64. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/application/contracts/document.py +0 -0
  65. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/application/contracts/project_setup.py +0 -0
  66. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/application/contracts/projects.py +0 -0
  67. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/application/contracts/queue.py +0 -0
  68. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/application/contracts/terms.py +0 -0
  69. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/application/contracts/work.py +0 -0
  70. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/application/errors.py +0 -0
  71. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/application/events.py +0 -0
  72. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/application/services/__init__.py +0 -0
  73. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/application/services/_export_support.py +0 -0
  74. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/application/services/app_setup.py +0 -0
  75. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/application/services/document.py +0 -0
  76. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/application/services/project_setup.py +0 -0
  77. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/application/services/projects.py +0 -0
  78. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/application/services/queue.py +0 -0
  79. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/application/services/terms.py +0 -0
  80. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/application/services/work.py +0 -0
  81. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/cli/__init__.py +0 -0
  82. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/cli/output.py +0 -0
  83. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/cli/runtime.py +0 -0
  84. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/cli/wait.py +0 -0
  85. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/config.py +0 -0
  86. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/core/AGENTS.md +0 -0
  87. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/core/__init__.py +0 -0
  88. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/core/cancellation.py +0 -0
  89. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/core/context_extractor.py +0 -0
  90. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/core/context_manager.py +0 -0
  91. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/core/manga_document_handler.py +0 -0
  92. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/core/models.py +0 -0
  93. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/core/progress.py +0 -0
  94. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/core/term_memory.py +0 -0
  95. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/core/term_memory_builder.py +0 -0
  96. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/core/translation_strategies.py +0 -0
  97. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/documents/AGENTS.md +0 -0
  98. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/documents/__init__.py +0 -0
  99. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/documents/content/AGENTS.md +0 -0
  100. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/documents/content/__init__.py +0 -0
  101. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/documents/content/ocr_content.py +0 -0
  102. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/documents/content/ocr_items.py +0 -0
  103. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/documents/epub.py +0 -0
  104. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/documents/epub_container.py +0 -0
  105. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/documents/epub_support/AGENTS.md +0 -0
  106. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/documents/epub_support/__init__.py +0 -0
  107. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/documents/epub_support/container_model.py +0 -0
  108. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/documents/epub_support/container_patch.py +0 -0
  109. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/documents/epub_support/container_reader.py +0 -0
  110. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/documents/epub_support/container_shared.py +0 -0
  111. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/documents/epub_support/container_writer.py +0 -0
  112. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/documents/epub_support/inline_markers.py +0 -0
  113. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/documents/epub_support/nav_ops.py +0 -0
  114. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/documents/epub_support/slot_lines.py +0 -0
  115. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/documents/epub_support/xml_utils.py +0 -0
  116. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/documents/epub_xhtml_utils.py +0 -0
  117. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/documents/manga.py +0 -0
  118. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/documents/manga_alignment.py +0 -0
  119. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/documents/manga_reembed_planner.py +0 -0
  120. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/documents/pdf.py +0 -0
  121. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/documents/scanned_book.py +0 -0
  122. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/documents/subtitle.py +0 -0
  123. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/documents/text.py +0 -0
  124. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/llm/AGENTS.md +0 -0
  125. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/llm/__init__.py +0 -0
  126. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/llm/batch_jobs/AGENTS.md +0 -0
  127. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/llm/batch_jobs/__init__.py +0 -0
  128. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/llm/batch_jobs/base.py +0 -0
  129. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/llm/batch_jobs/gemini_gateway.py +0 -0
  130. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/llm/client.py +0 -0
  131. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/llm/epub_ocr.py +0 -0
  132. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/llm/extractor.py +0 -0
  133. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/llm/glossary_translator.py +0 -0
  134. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/llm/image_backend_base.py +0 -0
  135. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/llm/image_backends/AGENTS.md +0 -0
  136. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/llm/image_backends/__init__.py +0 -0
  137. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/llm/image_backends/gemini_backend.py +0 -0
  138. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/llm/image_backends/openai_backend.py +0 -0
  139. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/llm/image_backends/qwen_backend.py +0 -0
  140. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/llm/image_generator.py +0 -0
  141. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/llm/language_detector.py +0 -0
  142. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/llm/manga_ocr.py +0 -0
  143. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/llm/manga_translator.py +0 -0
  144. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/llm/ocr.py +0 -0
  145. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/llm/reviewer.py +0 -0
  146. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/llm/session_trace.py +0 -0
  147. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/llm/summarizor.py +0 -0
  148. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/llm/token_tracker.py +0 -0
  149. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/llm/translation_strategies.py +0 -0
  150. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/llm/translator.py +0 -0
  151. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/resources/opencc/config/hk2s.json +0 -0
  152. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/resources/opencc/config/jp2s.json +0 -0
  153. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/resources/opencc/config/s2hk.json +0 -0
  154. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/resources/opencc/config/s2t.json +0 -0
  155. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/resources/opencc/config/s2tw.json +0 -0
  156. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/resources/opencc/config/s2twp.json +0 -0
  157. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/resources/opencc/config/t2hk.json +0 -0
  158. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/resources/opencc/config/t2s.json +0 -0
  159. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/resources/opencc/config/t2tw.json +0 -0
  160. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/resources/opencc/config/tw2s.json +0 -0
  161. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/resources/opencc/config/tw2sp.json +0 -0
  162. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/resources/opencc/dictionary/HKVariants.txt +0 -0
  163. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/resources/opencc/dictionary/HKVariantsPhrases.txt +0 -0
  164. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/resources/opencc/dictionary/HKVariantsRev.txt +0 -0
  165. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/resources/opencc/dictionary/HKVariantsRevPhrases.txt +0 -0
  166. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/resources/opencc/dictionary/JPVariants.txt +0 -0
  167. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/resources/opencc/dictionary/JPVariantsRev.txt +0 -0
  168. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/resources/opencc/dictionary/STCharacters.txt +0 -0
  169. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/resources/opencc/dictionary/STPhrases.txt +0 -0
  170. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/resources/opencc/dictionary/TSCharacters.txt +0 -0
  171. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/resources/opencc/dictionary/TSPhrases.txt +0 -0
  172. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/resources/opencc/dictionary/TWPhrases.txt +0 -0
  173. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/resources/opencc/dictionary/TWPhrasesRev.txt +0 -0
  174. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/resources/opencc/dictionary/TWVariants.txt +0 -0
  175. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/resources/opencc/dictionary/TWVariantsRev.txt +0 -0
  176. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/resources/opencc/dictionary/TWVariantsRevPhrases.txt +0 -0
  177. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/resources/tokenizers/deepseek-v3/special_tokens_map.json +0 -0
  178. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/resources/tokenizers/deepseek-v3/tokenizer.json +0 -0
  179. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/resources/tokenizers/deepseek-v3/tokenizer_config.json +0 -0
  180. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/storage/AGENTS.md +0 -0
  181. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/storage/__init__.py +0 -0
  182. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/storage/library/__init__.py +0 -0
  183. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/storage/library/book_manager.py +0 -0
  184. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/storage/models/__init__.py +0 -0
  185. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/storage/models/book.py +0 -0
  186. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/storage/models/config_profile.py +0 -0
  187. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/storage/models/endpoint_profile.py +0 -0
  188. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/storage/repositories/__init__.py +0 -0
  189. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/storage/repositories/document_repository.py +0 -0
  190. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/storage/repositories/llm_batch_store.py +0 -0
  191. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/storage/repositories/task_store.py +0 -0
  192. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/storage/repositories/term_repository.py +0 -0
  193. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/storage/repositories/translation_batch_task_store.py +0 -0
  194. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/storage/schema/__init__.py +0 -0
  195. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/storage/schema/book_db.py +0 -0
  196. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/storage/schema/registry_db.py +0 -0
  197. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/storage/sqlite_locking.py +0 -0
  198. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/AGENTS.md +0 -0
  199. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/__init__.py +0 -0
  200. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/chrome_sizing.py +0 -0
  201. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/constants.py +0 -0
  202. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/features/app_settings_pane.py +0 -0
  203. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/features/document_images_view.py +0 -0
  204. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/features/document_ocr_tab.py +0 -0
  205. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/features/document_translation_view.py +0 -0
  206. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/features/document_workspace_view.py +0 -0
  207. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/features/library_view.py +0 -0
  208. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/features/project_settings_pane.py +0 -0
  209. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/features/queue_drawer_view.py +0 -0
  210. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/features/terms_table_widget.py +0 -0
  211. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/features/terms_view.py +0 -0
  212. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/features/work_view.py +0 -0
  213. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/features/workflow_profile_editor.py +0 -0
  214. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/i18n.py +0 -0
  215. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/json_utils.py +0 -0
  216. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/main.py +0 -0
  217. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/main_window.py +0 -0
  218. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/qml/BootstrapProbe.qml +0 -0
  219. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/qml/app/AppShellChrome.qml +0 -0
  220. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/qml/dialogs/app_settings/AppSettingsDialogChrome.qml +0 -0
  221. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/qml/dialogs/app_settings/AppSettingsPane.qml +0 -0
  222. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/qml/dialogs/project_settings/ProjectSettingsDialogChrome.qml +0 -0
  223. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/qml/dialogs/project_settings/ProjectSettingsPane.qml +0 -0
  224. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/qml/document/DocumentShellChrome.qml +0 -0
  225. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/qml/document/export/DocumentExportPaneChrome.qml +0 -0
  226. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/qml/document/images/DocumentImagesPaneChrome.qml +0 -0
  227. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/qml/document/ocr/DocumentOCRPaneChrome.qml +0 -0
  228. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/qml/document/translation/DocumentTranslationPaneChrome.qml +0 -0
  229. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/qml/project/ProjectShellChrome.qml +0 -0
  230. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/qml/project/terms/TermsPaneChrome.qml +0 -0
  231. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/qml/project/work_home/WorkHomeChrome.qml +0 -0
  232. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/qml/queue/QueueShellChrome.qml +0 -0
  233. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/qml_resources.py +0 -0
  234. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/resources/__init__.py +0 -0
  235. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/resources/styles.qss +0 -0
  236. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/shell_hosts/__init__.py +0 -0
  237. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/shell_hosts/app_settings_dialog_host.py +0 -0
  238. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/shell_hosts/app_shell_host.py +0 -0
  239. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/shell_hosts/document_shell_host.py +0 -0
  240. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/shell_hosts/hybrid.py +0 -0
  241. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/shell_hosts/project_settings_dialog_host.py +0 -0
  242. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/shell_hosts/project_shell_host.py +0 -0
  243. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/shell_hosts/queue_shell_host.py +0 -0
  244. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/sleep_inhibitor.py +0 -0
  245. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/startup.py +0 -0
  246. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/tips.py +0 -0
  247. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/translations/zh_CN.qm +0 -0
  248. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/translations/zh_CN.ts +0 -0
  249. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/viewmodels/__init__.py +0 -0
  250. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/viewmodels/app_settings_dialog.py +0 -0
  251. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/viewmodels/app_settings_pane.py +0 -0
  252. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/viewmodels/app_shell.py +0 -0
  253. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/viewmodels/base.py +0 -0
  254. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/viewmodels/document_export_pane.py +0 -0
  255. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/viewmodels/document_images_pane.py +0 -0
  256. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/viewmodels/document_ocr_pane.py +0 -0
  257. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/viewmodels/document_shell.py +0 -0
  258. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/viewmodels/document_translation_pane.py +0 -0
  259. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/viewmodels/project_settings_dialog.py +0 -0
  260. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/viewmodels/project_settings_pane.py +0 -0
  261. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/viewmodels/project_shell.py +0 -0
  262. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/viewmodels/queue_shell.py +0 -0
  263. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/viewmodels/router.py +0 -0
  264. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/viewmodels/terms_pane.py +0 -0
  265. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/viewmodels/work_home.py +0 -0
  266. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/widgets/AGENTS.md +0 -0
  267. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/widgets/hybrid_controls.py +0 -0
  268. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/widgets/image_viewer.py +0 -0
  269. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/widgets/progress_widget.py +0 -0
  270. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/widgets/table_support.py +0 -0
  271. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/ui/window_controllers.py +0 -0
  272. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/utils/AGENTS.md +0 -0
  273. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/utils/__init__.py +0 -0
  274. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/utils/chunking.py +0 -0
  275. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/utils/cjk_normalize.py +0 -0
  276. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/utils/compression_marker.py +0 -0
  277. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/utils/file_utils.py +0 -0
  278. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/utils/hard_wrap.py +0 -0
  279. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/utils/hashing.py +0 -0
  280. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/utils/image_utils.py +0 -0
  281. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/utils/llm_json_cleaner.py +0 -0
  282. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/utils/markdown_escape.py +0 -0
  283. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/utils/pandoc_export.py +0 -0
  284. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/utils/semantic_chunker.py +0 -0
  285. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/utils/string_similarity.py +0 -0
  286. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/utils/symbol_check.py +0 -0
  287. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/workflow/AGENTS.md +0 -0
  288. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/workflow/__init__.py +0 -0
  289. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/workflow/image_fetcher.py +0 -0
  290. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/workflow/ops/__init__.py +0 -0
  291. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/workflow/ops/bootstrap_ops.py +0 -0
  292. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/workflow/ops/glossary_ops.py +0 -0
  293. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/workflow/ops/import_ops.py +0 -0
  294. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/workflow/ops/import_support.py +0 -0
  295. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/workflow/ops/ocr_ops.py +0 -0
  296. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/workflow/ops/translation_ops.py +0 -0
  297. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/workflow/runtime.py +0 -0
  298. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/workflow/session.py +0 -0
  299. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/workflow/task_runtime.py +0 -0
  300. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/workflow/tasks/AGENTS.md +0 -0
  301. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/workflow/tasks/__init__.py +0 -0
  302. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/workflow/tasks/claims.py +0 -0
  303. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/workflow/tasks/engine_core.py +0 -0
  304. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/workflow/tasks/exceptions.py +0 -0
  305. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/workflow/tasks/execution/AGENTS.md +0 -0
  306. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/workflow/tasks/execution/__init__.py +0 -0
  307. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/workflow/tasks/execution/batch_translation_executor.py +0 -0
  308. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/workflow/tasks/execution/batch_translation_ops.py +0 -0
  309. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/workflow/tasks/glossary_preflight.py +0 -0
  310. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/workflow/tasks/handlers/AGENTS.md +0 -0
  311. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/workflow/tasks/handlers/__init__.py +0 -0
  312. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/workflow/tasks/handlers/base.py +0 -0
  313. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/workflow/tasks/handlers/batch_translation.py +0 -0
  314. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/workflow/tasks/handlers/chunk_retranslation.py +0 -0
  315. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/workflow/tasks/handlers/glossary_export.py +0 -0
  316. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/workflow/tasks/handlers/glossary_extraction.py +0 -0
  317. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/workflow/tasks/handlers/glossary_review.py +0 -0
  318. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/workflow/tasks/handlers/glossary_translation.py +0 -0
  319. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/workflow/tasks/handlers/image_reembedding.py +0 -0
  320. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/workflow/tasks/handlers/ocr.py +0 -0
  321. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/workflow/tasks/handlers/translate_and_export.py +0 -0
  322. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/workflow/tasks/handlers/translation_manga.py +0 -0
  323. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/workflow/tasks/handlers/translation_text.py +0 -0
  324. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/workflow/tasks/models.py +0 -0
  325. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/workflow/tasks/translate_and_export_support.py +0 -0
  326. {contextweave-0.2.2 → contextweave-0.3.0}/context_aware_translation/workflow/tasks/worker_deps.py +0 -0
  327. {contextweave-0.2.2 → contextweave-0.3.0}/demo/The Count of Monte Cristo.epub +0 -0
  328. {contextweave-0.2.2 → contextweave-0.3.0}/demo//345/237/272/347/235/243/345/261/261/344/274/257/347/210/265.epub" +0 -0
  329. {contextweave-0.2.2 → contextweave-0.3.0}/docs/.nojekyll +0 -0
  330. {contextweave-0.2.2 → contextweave-0.3.0}/docs/examples/contextweave-cli.yaml +0 -0
  331. {contextweave-0.2.2 → contextweave-0.3.0}/docs/index.html +0 -0
  332. {contextweave-0.2.2 → contextweave-0.3.0}/docs/project-terms-manual-entry-ux.md +0 -0
  333. {contextweave-0.2.2 → contextweave-0.3.0}/docs/screenshots/CN/API/351/205/215/347/275/256.png" +0 -0
  334. {contextweave-0.2.2 → contextweave-0.3.0}/docs/screenshots/CN/latest_new_project_dialog.png +0 -0
  335. {contextweave-0.2.2 → contextweave-0.3.0}/docs/screenshots/CN/latest_project_work_overview.png +0 -0
  336. {contextweave-0.2.2 → contextweave-0.3.0}/docs/screenshots/CN/latest_projects_overview.png +0 -0
  337. {contextweave-0.2.2 → contextweave-0.3.0}/docs/screenshots/CN/latest_setup_wizard_provider_selection.png +0 -0
  338. {contextweave-0.2.2 → contextweave-0.3.0}/docs/screenshots/CN/latest_setup_wizard_workflow_profile_review.png +0 -0
  339. {contextweave-0.2.2 → contextweave-0.3.0}/docs/screenshots/CN/latest_terms_overview.png +0 -0
  340. {contextweave-0.2.2 → contextweave-0.3.0}/docs/screenshots/CN//345/257/274/345/205/245.png" +0 -0
  341. {contextweave-0.2.2 → contextweave-0.3.0}/docs/screenshots/CN//345/257/274/345/207/272.png" +0 -0
  342. {contextweave-0.2.2 → contextweave-0.3.0}/docs/screenshots/CN//346/226/260/351/241/271/347/233/256.png" +0 -0
  343. {contextweave-0.2.2 → contextweave-0.3.0}/docs/screenshots/CN//346/234/257/350/257/255.png" +0 -0
  344. {contextweave-0.2.2 → contextweave-0.3.0}/docs/screenshots/CN//347/277/273/350/257/221.png" +0 -0
  345. {contextweave-0.2.2 → contextweave-0.3.0}/docs/screenshots/CN//350/256/276/347/275/256.png" +0 -0
  346. {contextweave-0.2.2 → contextweave-0.3.0}/docs/screenshots/CN//350/256/276/347/275/256/345/220/221/345/257/274.png" +0 -0
  347. {contextweave-0.2.2 → contextweave-0.3.0}/docs/screenshots/CN//350/256/276/347/275/256/347/273/223/346/235/237.png" +0 -0
  348. {contextweave-0.2.2 → contextweave-0.3.0}/docs/screenshots/EN/APISetup.png +0 -0
  349. {contextweave-0.2.2 → contextweave-0.3.0}/docs/screenshots/EN/Export.png +0 -0
  350. {contextweave-0.2.2 → contextweave-0.3.0}/docs/screenshots/EN/Import.png +0 -0
  351. {contextweave-0.2.2 → contextweave-0.3.0}/docs/screenshots/EN/InitialSetup.png +0 -0
  352. {contextweave-0.2.2 → contextweave-0.3.0}/docs/screenshots/EN/Language.png +0 -0
  353. {contextweave-0.2.2 → contextweave-0.3.0}/docs/screenshots/EN/NewProject.png +0 -0
  354. {contextweave-0.2.2 → contextweave-0.3.0}/docs/screenshots/EN/Terms.png +0 -0
  355. {contextweave-0.2.2 → contextweave-0.3.0}/docs/screenshots/EN/Translate.png +0 -0
  356. {contextweave-0.2.2 → contextweave-0.3.0}/docs/screenshots/EN/TranslateAndExport.png +0 -0
  357. {contextweave-0.2.2 → contextweave-0.3.0}/docs/screenshots/EN/Wizard.png +0 -0
  358. {contextweave-0.2.2 → contextweave-0.3.0}/docs/screenshots/EN/latest_new_project_dialog.png +0 -0
  359. {contextweave-0.2.2 → contextweave-0.3.0}/docs/screenshots/EN/latest_project_work_overview.png +0 -0
  360. {contextweave-0.2.2 → contextweave-0.3.0}/docs/screenshots/EN/latest_projects_overview.png +0 -0
  361. {contextweave-0.2.2 → contextweave-0.3.0}/docs/screenshots/EN/latest_setup_wizard_provider_selection.png +0 -0
  362. {contextweave-0.2.2 → contextweave-0.3.0}/docs/screenshots/EN/latest_setup_wizard_workflow_profile_review.png +0 -0
  363. {contextweave-0.2.2 → contextweave-0.3.0}/docs/screenshots/EN/latest_terms_overview.png +0 -0
  364. {contextweave-0.2.2 → contextweave-0.3.0}/docs/styles.css +0 -0
  365. {contextweave-0.2.2 → contextweave-0.3.0}/installer/AGENTS.md +0 -0
  366. {contextweave-0.2.2 → contextweave-0.3.0}/installer/macos/AGENTS.md +0 -0
  367. {contextweave-0.2.2 → contextweave-0.3.0}/installer/macos/entitlements.plist +0 -0
  368. {contextweave-0.2.2 → contextweave-0.3.0}/installer/windows/AGENTS.md +0 -0
  369. {contextweave-0.2.2 → contextweave-0.3.0}/scripts/AGENTS.md +0 -0
  370. {contextweave-0.2.2 → contextweave-0.3.0}/scripts/build_ui.py +0 -0
  371. {contextweave-0.2.2 → contextweave-0.3.0}/scripts/run_ui_tests.py +0 -0
  372. {contextweave-0.2.2 → contextweave-0.3.0}/tests/AGENTS.md +0 -0
  373. {contextweave-0.2.2 → contextweave-0.3.0}/tests/adapters/AGENTS.md +0 -0
  374. {contextweave-0.2.2 → contextweave-0.3.0}/tests/adapters/files/test_glossary_io.py +0 -0
  375. {contextweave-0.2.2 → contextweave-0.3.0}/tests/application/fakes.py +0 -0
  376. {contextweave-0.2.2 → contextweave-0.3.0}/tests/application/test_document_service.py +0 -0
  377. {contextweave-0.2.2 → contextweave-0.3.0}/tests/application/test_document_translation_service.py +0 -0
  378. {contextweave-0.2.2 → contextweave-0.3.0}/tests/application/test_events.py +0 -0
  379. {contextweave-0.2.2 → contextweave-0.3.0}/tests/application/test_export_services.py +0 -0
  380. {contextweave-0.2.2 → contextweave-0.3.0}/tests/application/test_queue_service.py +0 -0
  381. {contextweave-0.2.2 → contextweave-0.3.0}/tests/application/test_terms_service.py +0 -0
  382. {contextweave-0.2.2 → contextweave-0.3.0}/tests/application/test_ui_harness_pattern.py +0 -0
  383. {contextweave-0.2.2 → contextweave-0.3.0}/tests/architecture/test_migrated_ui_boundaries.py +0 -0
  384. {contextweave-0.2.2 → contextweave-0.3.0}/tests/architecture/test_packaging_hidden_imports.py +0 -0
  385. {contextweave-0.2.2 → contextweave-0.3.0}/tests/architecture/test_qml_ui_boundaries.py +0 -0
  386. {contextweave-0.2.2 → contextweave-0.3.0}/tests/config/AGENTS.md +0 -0
  387. {contextweave-0.2.2 → contextweave-0.3.0}/tests/config/__init__.py +0 -0
  388. {contextweave-0.2.2 → contextweave-0.3.0}/tests/config/test_endpoint_profiles.py +0 -0
  389. {contextweave-0.2.2 → contextweave-0.3.0}/tests/conftest.py +0 -0
  390. {contextweave-0.2.2 → contextweave-0.3.0}/tests/core/AGENTS.md +0 -0
  391. {contextweave-0.2.2 → contextweave-0.3.0}/tests/core/__init__.py +0 -0
  392. {contextweave-0.2.2 → contextweave-0.3.0}/tests/core/expected_batching_output.json +0 -0
  393. {contextweave-0.2.2 → contextweave-0.3.0}/tests/core/test-terms.json +0 -0
  394. {contextweave-0.2.2 → contextweave-0.3.0}/tests/core/test_context_extractor.py +0 -0
  395. {contextweave-0.2.2 → contextweave-0.3.0}/tests/core/test_context_manager.py +0 -0
  396. {contextweave-0.2.2 → contextweave-0.3.0}/tests/core/test_manga_document_handler.py +0 -0
  397. {contextweave-0.2.2 → contextweave-0.3.0}/tests/core/test_models.py +0 -0
  398. {contextweave-0.2.2 → contextweave-0.3.0}/tests/core/test_noise_filtering_pipeline.py +0 -0
  399. {contextweave-0.2.2 → contextweave-0.3.0}/tests/core/test_term_memory_builder.py +0 -0
  400. {contextweave-0.2.2 → contextweave-0.3.0}/tests/core/test_translation_context_manager_strategy_api.py +0 -0
  401. {contextweave-0.2.2 → contextweave-0.3.0}/tests/data/test_chunk.txt +0 -0
  402. {contextweave-0.2.2 → contextweave-0.3.0}/tests/data/test_chunk2.txt +0 -0
  403. {contextweave-0.2.2 → contextweave-0.3.0}/tests/documents/AGENTS.md +0 -0
  404. {contextweave-0.2.2 → contextweave-0.3.0}/tests/documents/__init__.py +0 -0
  405. {contextweave-0.2.2 → contextweave-0.3.0}/tests/documents/content/AGENTS.md +0 -0
  406. {contextweave-0.2.2 → contextweave-0.3.0}/tests/documents/content/test_ocr_content.py +0 -0
  407. {contextweave-0.2.2 → contextweave-0.3.0}/tests/documents/content/test_ocr_items.py +0 -0
  408. {contextweave-0.2.2 → contextweave-0.3.0}/tests/documents/test_epub.py +0 -0
  409. {contextweave-0.2.2 → contextweave-0.3.0}/tests/documents/test_epub_container.py +0 -0
  410. {contextweave-0.2.2 → contextweave-0.3.0}/tests/documents/test_epub_inline_markers.py +0 -0
  411. {contextweave-0.2.2 → contextweave-0.3.0}/tests/documents/test_epub_xhtml_utils.py +0 -0
  412. {contextweave-0.2.2 → contextweave-0.3.0}/tests/documents/test_manga.py +0 -0
  413. {contextweave-0.2.2 → contextweave-0.3.0}/tests/documents/test_manga_alignment.py +0 -0
  414. {contextweave-0.2.2 → contextweave-0.3.0}/tests/documents/test_ocr_image_embedded_text.py +0 -0
  415. {contextweave-0.2.2 → contextweave-0.3.0}/tests/documents/test_pdf.py +0 -0
  416. {contextweave-0.2.2 → contextweave-0.3.0}/tests/documents/test_scanned_book.py +0 -0
  417. {contextweave-0.2.2 → contextweave-0.3.0}/tests/documents/test_subtitle.py +0 -0
  418. {contextweave-0.2.2 → contextweave-0.3.0}/tests/documents/test_text.py +0 -0
  419. {contextweave-0.2.2 → contextweave-0.3.0}/tests/integration/AGENTS.md +0 -0
  420. {contextweave-0.2.2 → contextweave-0.3.0}/tests/integration/__init__.py +0 -0
  421. {contextweave-0.2.2 → contextweave-0.3.0}/tests/integration/test_business_logic.py +0 -0
  422. {contextweave-0.2.2 → contextweave-0.3.0}/tests/llm/AGENTS.md +0 -0
  423. {contextweave-0.2.2 → contextweave-0.3.0}/tests/llm/__init__.py +0 -0
  424. {contextweave-0.2.2 → contextweave-0.3.0}/tests/llm/test_extractor.py +0 -0
  425. {contextweave-0.2.2 → contextweave-0.3.0}/tests/llm/test_extractor_unit.py +0 -0
  426. {contextweave-0.2.2 → contextweave-0.3.0}/tests/llm/test_gemini_backend.py +0 -0
  427. {contextweave-0.2.2 → contextweave-0.3.0}/tests/llm/test_gemini_batch_gateway.py +0 -0
  428. {contextweave-0.2.2 → contextweave-0.3.0}/tests/llm/test_glossary_translator.py +0 -0
  429. {contextweave-0.2.2 → contextweave-0.3.0}/tests/llm/test_image_generator.py +0 -0
  430. {contextweave-0.2.2 → contextweave-0.3.0}/tests/llm/test_image_token_usage.py +0 -0
  431. {contextweave-0.2.2 → contextweave-0.3.0}/tests/llm/test_language_detector.py +0 -0
  432. {contextweave-0.2.2 → contextweave-0.3.0}/tests/llm/test_llm_client.py +0 -0
  433. {contextweave-0.2.2 → contextweave-0.3.0}/tests/llm/test_manga_translator.py +0 -0
  434. {contextweave-0.2.2 → contextweave-0.3.0}/tests/llm/test_ocr.py +0 -0
  435. {contextweave-0.2.2 → contextweave-0.3.0}/tests/llm/test_reviewer.py +0 -0
  436. {contextweave-0.2.2 → contextweave-0.3.0}/tests/llm/test_session_trace.py +0 -0
  437. {contextweave-0.2.2 → contextweave-0.3.0}/tests/llm/test_summarizor.py +0 -0
  438. {contextweave-0.2.2 → contextweave-0.3.0}/tests/llm/test_token_tracker.py +0 -0
  439. {contextweave-0.2.2 → contextweave-0.3.0}/tests/llm/test_token_usage_extraction.py +0 -0
  440. {contextweave-0.2.2 → contextweave-0.3.0}/tests/llm/test_translator.py +0 -0
  441. {contextweave-0.2.2 → contextweave-0.3.0}/tests/storage/AGENTS.md +0 -0
  442. {contextweave-0.2.2 → contextweave-0.3.0}/tests/storage/__init__.py +0 -0
  443. {contextweave-0.2.2 → contextweave-0.3.0}/tests/storage/test_book_db.py +0 -0
  444. {contextweave-0.2.2 → contextweave-0.3.0}/tests/storage/test_book_manager.py +0 -0
  445. {contextweave-0.2.2 → contextweave-0.3.0}/tests/storage/test_document_repository.py +0 -0
  446. {contextweave-0.2.2 → contextweave-0.3.0}/tests/storage/test_document_tables.py +0 -0
  447. {contextweave-0.2.2 → contextweave-0.3.0}/tests/storage/test_llm_batch_store.py +0 -0
  448. {contextweave-0.2.2 → contextweave-0.3.0}/tests/storage/test_task_store.py +0 -0
  449. {contextweave-0.2.2 → contextweave-0.3.0}/tests/storage/test_term_repository.py +0 -0
  450. {contextweave-0.2.2 → contextweave-0.3.0}/tests/storage/test_token_tracking.py +0 -0
  451. {contextweave-0.2.2 → contextweave-0.3.0}/tests/storage/test_translation_batch_task_store.py +0 -0
  452. {contextweave-0.2.2 → contextweave-0.3.0}/tests/test_logging_handlers.py +0 -0
  453. {contextweave-0.2.2 → contextweave-0.3.0}/tests/ui/AGENTS.md +0 -0
  454. {contextweave-0.2.2 → contextweave-0.3.0}/tests/ui/__init__.py +0 -0
  455. {contextweave-0.2.2 → contextweave-0.3.0}/tests/ui/conftest.py +0 -0
  456. {contextweave-0.2.2 → contextweave-0.3.0}/tests/ui/tasks/test_task_engine.py +0 -0
  457. {contextweave-0.2.2 → contextweave-0.3.0}/tests/ui/test_app_settings_dialog_host.py +0 -0
  458. {contextweave-0.2.2 → contextweave-0.3.0}/tests/ui/test_app_settings_dialog_viewmodel.py +0 -0
  459. {contextweave-0.2.2 → contextweave-0.3.0}/tests/ui/test_app_settings_pane.py +0 -0
  460. {contextweave-0.2.2 → contextweave-0.3.0}/tests/ui/test_app_settings_pane_viewmodel.py +0 -0
  461. {contextweave-0.2.2 → contextweave-0.3.0}/tests/ui/test_app_shell_host.py +0 -0
  462. {contextweave-0.2.2 → contextweave-0.3.0}/tests/ui/test_app_shell_viewmodel.py +0 -0
  463. {contextweave-0.2.2 → contextweave-0.3.0}/tests/ui/test_document_export_pane_viewmodel.py +0 -0
  464. {contextweave-0.2.2 → contextweave-0.3.0}/tests/ui/test_document_images_pane_viewmodel.py +0 -0
  465. {contextweave-0.2.2 → contextweave-0.3.0}/tests/ui/test_document_images_view.py +0 -0
  466. {contextweave-0.2.2 → contextweave-0.3.0}/tests/ui/test_document_ocr_tab.py +0 -0
  467. {contextweave-0.2.2 → contextweave-0.3.0}/tests/ui/test_document_shell_host.py +0 -0
  468. {contextweave-0.2.2 → contextweave-0.3.0}/tests/ui/test_document_shell_viewmodel.py +0 -0
  469. {contextweave-0.2.2 → contextweave-0.3.0}/tests/ui/test_document_translation_pane_viewmodel.py +0 -0
  470. {contextweave-0.2.2 → contextweave-0.3.0}/tests/ui/test_document_translation_view.py +0 -0
  471. {contextweave-0.2.2 → contextweave-0.3.0}/tests/ui/test_document_workspace_view.py +0 -0
  472. {contextweave-0.2.2 → contextweave-0.3.0}/tests/ui/test_i18n_progress_messages.py +0 -0
  473. {contextweave-0.2.2 → contextweave-0.3.0}/tests/ui/test_image_viewer.py +0 -0
  474. {contextweave-0.2.2 → contextweave-0.3.0}/tests/ui/test_library_view.py +0 -0
  475. {contextweave-0.2.2 → contextweave-0.3.0}/tests/ui/test_main.py +0 -0
  476. {contextweave-0.2.2 → contextweave-0.3.0}/tests/ui/test_main_window_shell.py +0 -0
  477. {contextweave-0.2.2 → contextweave-0.3.0}/tests/ui/test_progress_widget.py +0 -0
  478. {contextweave-0.2.2 → contextweave-0.3.0}/tests/ui/test_project_settings_dialog_host.py +0 -0
  479. {contextweave-0.2.2 → contextweave-0.3.0}/tests/ui/test_project_settings_dialog_viewmodel.py +0 -0
  480. {contextweave-0.2.2 → contextweave-0.3.0}/tests/ui/test_project_settings_pane.py +0 -0
  481. {contextweave-0.2.2 → contextweave-0.3.0}/tests/ui/test_project_settings_pane_viewmodel.py +0 -0
  482. {contextweave-0.2.2 → contextweave-0.3.0}/tests/ui/test_project_shell_host.py +0 -0
  483. {contextweave-0.2.2 → contextweave-0.3.0}/tests/ui/test_project_shell_viewmodel.py +0 -0
  484. {contextweave-0.2.2 → contextweave-0.3.0}/tests/ui/test_qml_bootstrap.py +0 -0
  485. {contextweave-0.2.2 → contextweave-0.3.0}/tests/ui/test_qml_viewmodel_harness.py +0 -0
  486. {contextweave-0.2.2 → contextweave-0.3.0}/tests/ui/test_queue_drawer_view.py +0 -0
  487. {contextweave-0.2.2 → contextweave-0.3.0}/tests/ui/test_queue_shell_host.py +0 -0
  488. {contextweave-0.2.2 → contextweave-0.3.0}/tests/ui/test_queue_shell_viewmodel.py +0 -0
  489. {contextweave-0.2.2 → contextweave-0.3.0}/tests/ui/test_shell_host_infrastructure.py +0 -0
  490. {contextweave-0.2.2 → contextweave-0.3.0}/tests/ui/test_sleep_inhibitor.py +0 -0
  491. {contextweave-0.2.2 → contextweave-0.3.0}/tests/ui/test_terms_pane_viewmodel.py +0 -0
  492. {contextweave-0.2.2 → contextweave-0.3.0}/tests/ui/test_terms_view.py +0 -0
  493. {contextweave-0.2.2 → contextweave-0.3.0}/tests/ui/test_ui_clickthrough_smoke.py +0 -0
  494. {contextweave-0.2.2 → contextweave-0.3.0}/tests/ui/test_viewmodel_base.py +0 -0
  495. {contextweave-0.2.2 → contextweave-0.3.0}/tests/ui/test_work_view.py +0 -0
  496. {contextweave-0.2.2 → contextweave-0.3.0}/tests/ui/test_worker_cancellation_reporting.py +0 -0
  497. {contextweave-0.2.2 → contextweave-0.3.0}/tests/ui/test_workflow_profile_editor.py +0 -0
  498. {contextweave-0.2.2 → contextweave-0.3.0}/tests/ui/workers/test_batch_task_overlap_guard.py +0 -0
  499. {contextweave-0.2.2 → contextweave-0.3.0}/tests/ui/workers/test_chunk_retranslation_task_worker.py +0 -0
  500. {contextweave-0.2.2 → contextweave-0.3.0}/tests/ui/workers/test_config_snapshot_workers.py +0 -0
  501. {contextweave-0.2.2 → contextweave-0.3.0}/tests/ui/workers/test_glossary_export_task_worker.py +0 -0
  502. {contextweave-0.2.2 → contextweave-0.3.0}/tests/ui/workers/test_glossary_review_task_worker.py +0 -0
  503. {contextweave-0.2.2 → contextweave-0.3.0}/tests/ui/workers/test_ocr_task_worker.py +0 -0
  504. {contextweave-0.2.2 → contextweave-0.3.0}/tests/ui/workers/test_operation_tracker.py +0 -0
  505. {contextweave-0.2.2 → contextweave-0.3.0}/tests/ui/workers/test_translate_and_export_task_worker.py +0 -0
  506. {contextweave-0.2.2 → contextweave-0.3.0}/tests/ui/workers/test_translation_manga_task_worker.py +0 -0
  507. {contextweave-0.2.2 → contextweave-0.3.0}/tests/ui/workers/test_translation_text_task_worker.py +0 -0
  508. {contextweave-0.2.2 → contextweave-0.3.0}/tests/utils/AGENTS.md +0 -0
  509. {contextweave-0.2.2 → contextweave-0.3.0}/tests/utils/__init__.py +0 -0
  510. {contextweave-0.2.2 → contextweave-0.3.0}/tests/utils/test_chunking.py +0 -0
  511. {contextweave-0.2.2 → contextweave-0.3.0}/tests/utils/test_cjk_normalize.py +0 -0
  512. {contextweave-0.2.2 → contextweave-0.3.0}/tests/utils/test_file_utils.py +0 -0
  513. {contextweave-0.2.2 → contextweave-0.3.0}/tests/utils/test_hard_wrap.py +0 -0
  514. {contextweave-0.2.2 → contextweave-0.3.0}/tests/utils/test_hashing.py +0 -0
  515. {contextweave-0.2.2 → contextweave-0.3.0}/tests/utils/test_llm_json_cleaner.py +0 -0
  516. {contextweave-0.2.2 → contextweave-0.3.0}/tests/utils/test_markdown_escape.py +0 -0
  517. {contextweave-0.2.2 → contextweave-0.3.0}/tests/utils/test_semantic_chunker.py +0 -0
  518. {contextweave-0.2.2 → contextweave-0.3.0}/tests/utils/test_string_similarity.py +0 -0
  519. {contextweave-0.2.2 → contextweave-0.3.0}/tests/utils/test_symbol_check.py +0 -0
  520. {contextweave-0.2.2 → contextweave-0.3.0}/tests/workflow/AGENTS.md +0 -0
  521. {contextweave-0.2.2 → contextweave-0.3.0}/tests/workflow/__init__.py +0 -0
  522. {contextweave-0.2.2 → contextweave-0.3.0}/tests/workflow/tasks/AGENTS.md +0 -0
  523. {contextweave-0.2.2 → contextweave-0.3.0}/tests/workflow/tasks/__init__.py +0 -0
  524. {contextweave-0.2.2 → contextweave-0.3.0}/tests/workflow/tasks/execution/AGENTS.md +0 -0
  525. {contextweave-0.2.2 → contextweave-0.3.0}/tests/workflow/tasks/execution/__init__.py +0 -0
  526. {contextweave-0.2.2 → contextweave-0.3.0}/tests/workflow/tasks/execution/test_batch_translation_executor.py +0 -0
  527. {contextweave-0.2.2 → contextweave-0.3.0}/tests/workflow/tasks/handlers/AGENTS.md +0 -0
  528. {contextweave-0.2.2 → contextweave-0.3.0}/tests/workflow/tasks/handlers/__init__.py +0 -0
  529. {contextweave-0.2.2 → contextweave-0.3.0}/tests/workflow/tasks/handlers/test_batch_translation_handler.py +0 -0
  530. {contextweave-0.2.2 → contextweave-0.3.0}/tests/workflow/tasks/handlers/test_chunk_retranslation_handler.py +0 -0
  531. {contextweave-0.2.2 → contextweave-0.3.0}/tests/workflow/tasks/handlers/test_glossary_export_handler.py +0 -0
  532. {contextweave-0.2.2 → contextweave-0.3.0}/tests/workflow/tasks/handlers/test_glossary_extraction_handler.py +0 -0
  533. {contextweave-0.2.2 → contextweave-0.3.0}/tests/workflow/tasks/handlers/test_glossary_review_handler.py +0 -0
  534. {contextweave-0.2.2 → contextweave-0.3.0}/tests/workflow/tasks/handlers/test_glossary_translation_handler.py +0 -0
  535. {contextweave-0.2.2 → contextweave-0.3.0}/tests/workflow/tasks/handlers/test_image_reembedding_handler.py +0 -0
  536. {contextweave-0.2.2 → contextweave-0.3.0}/tests/workflow/tasks/handlers/test_ocr_handler.py +0 -0
  537. {contextweave-0.2.2 → contextweave-0.3.0}/tests/workflow/tasks/handlers/test_translate_and_export_handler.py +0 -0
  538. {contextweave-0.2.2 → contextweave-0.3.0}/tests/workflow/tasks/handlers/test_translation_manga_handler.py +0 -0
  539. {contextweave-0.2.2 → contextweave-0.3.0}/tests/workflow/tasks/handlers/test_translation_text_handler.py +0 -0
  540. {contextweave-0.2.2 → contextweave-0.3.0}/tests/workflow/tasks/test_claims.py +0 -0
  541. {contextweave-0.2.2 → contextweave-0.3.0}/tests/workflow/tasks/test_engine_core.py +0 -0
  542. {contextweave-0.2.2 → contextweave-0.3.0}/tests/workflow/test_glossary_ops_scoping.py +0 -0
  543. {contextweave-0.2.2 → contextweave-0.3.0}/tests/workflow/test_multi_document.py +0 -0
  544. {contextweave-0.2.2 → contextweave-0.3.0}/tests/workflow/test_ocr_required_for_translation.py +0 -0
  545. {contextweave-0.2.2 → contextweave-0.3.0}/tests/workflow/test_run_ocr.py +0 -0
  546. {contextweave-0.2.2 → contextweave-0.3.0}/tests/workflow/test_service_bootstrap_lock.py +0 -0
  547. {contextweave-0.2.2 → contextweave-0.3.0}/tests/workflow/test_service_cancellation_semantics.py +0 -0
  548. {contextweave-0.2.2 → contextweave-0.3.0}/tests/workflow/test_session.py +0 -0
  549. {contextweave-0.2.2 → contextweave-0.3.0}/tests/workflow/test_translator_image_fetcher.py +0 -0
  550. {contextweave-0.2.2 → contextweave-0.3.0}/tests/workflow/test_translator_import_path.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: contextweave
3
- Version: 0.2.2
3
+ Version: 0.3.0
4
4
  Summary: ContextWeave: context-aware document translation with glossary management
5
5
  Project-URL: Homepage, https://github.com/bot-32142/ContextWeave
6
6
  Project-URL: Documentation, https://bot-32142.github.io/ContextWeave/
@@ -28,6 +28,7 @@ Requires-Dist: jellyfish>=1.0.0
28
28
  Requires-Dist: numpy<2.0.0,>=1.26.4
29
29
  Requires-Dist: openai>=1.0.0
30
30
  Requires-Dist: opencc-python-reimplemented>=0.1.7
31
+ Requires-Dist: openpyxl>=3.1.5
31
32
  Requires-Dist: pikepdf>=9.0.0
32
33
  Requires-Dist: pillow>=10.0.0
33
34
  Requires-Dist: platformdirs>=4.5.1
@@ -155,13 +156,18 @@ contextweave-cli config validate
155
156
  contextweave-cli run ./book.epub --output ./translated/book.epub
156
157
  contextweave-cli run ./chapter.txt --output ./translated/chapter.txt --json
157
158
  contextweave-cli run ./episode.srt --output ./translated/episode.srt --no-polish
159
+ contextweave-cli galgame inspect ./extracted-game --json
160
+ contextweave-cli galgame skill --output ./contextweave-galgame-translation
161
+ contextweave-cli run ./extracted-game --type galgame --output ./translated-patch --preserve-structure --json
158
162
 
159
163
  contextweave-cli books list
160
164
  contextweave-cli books show BOOK_ID
161
165
  contextweave-cli books delete BOOK_ID --yes
162
166
  ```
163
167
 
164
- The CLI resolves config from `--config`, then `CONTEXTWEAVE_CONFIG`, then the nearest `contextweave.yaml`/`.contextweave.yaml` walking upward, then the platform default shown by `contextweave-cli config path`. The config mirrors the setup UI: `connections` define provider endpoints and `workflow_profiles` route each translation step. Prefer `api_key_env` so API keys stay in environment variables instead of config files or task snapshots. Use `--no-polish` when a one-shot run should skip the polish pass, which can be useful for timing-sensitive subtitle output.
168
+ The CLI resolves config from `--config`, then `CONTEXTWEAVE_CONFIG`, then the nearest `contextweave.yaml`/`.contextweave.yaml` walking upward, then the platform default shown by `contextweave-cli config path`. The config mirrors the setup UI: `connections` define provider endpoints and `workflow_profiles` route each translation step. Prefer `api_key_env` so API keys stay in environment variables instead of config files or task snapshots. Use `--no-polish` when a one-shot run should skip the polish pass, which can be useful for timing-sensitive subtitle output. Use `--preserve-structure` for patchable galgame/script exports.
169
+
170
+ For unsupported game engines, convert extracted script text into a supported intermediate format such as ParaTranz JSON or Translator++ `.trans`, then import that file or folder as `--type galgame`. `contextweave-cli galgame skill` writes a Codex/OpenAI-style skill file with this workflow for external extractor agents.
165
171
 
166
172
  A commented starting point is available at [docs/examples/contextweave-cli.yaml](https://github.com/bot-32142/ContextWeave/blob/master/docs/examples/contextweave-cli.yaml).
167
173
 
@@ -183,3 +189,4 @@ A commented starting point is available at [docs/examples/contextweave-cli.yaml]
183
189
  | Manga | `.cbz`, image folders | `cbz` | Yes |
184
190
  | EPUB | `.epub` | `epub`, `md`, `docx`, `html` | No, but image OCR is supported |
185
191
  | Subtitle | `.srt`, `.vtt`, `.ass`, `.ssa` | `srt`, `vtt`, `ass`, `ssa` | No |
192
+ | Galgame | `.rpy`, `.ks`, RPG Maker MV/MZ JSON, MTool JSON, Translator++ `.trans`, VNText JSON, ParaTranz JSON, TPP/Translator++ `.xlsx`, Wolf RPG `.xlsx` | `txt`, preserve-structure folder | No |
@@ -106,13 +106,18 @@ contextweave-cli config validate
106
106
  contextweave-cli run ./book.epub --output ./translated/book.epub
107
107
  contextweave-cli run ./chapter.txt --output ./translated/chapter.txt --json
108
108
  contextweave-cli run ./episode.srt --output ./translated/episode.srt --no-polish
109
+ contextweave-cli galgame inspect ./extracted-game --json
110
+ contextweave-cli galgame skill --output ./contextweave-galgame-translation
111
+ contextweave-cli run ./extracted-game --type galgame --output ./translated-patch --preserve-structure --json
109
112
 
110
113
  contextweave-cli books list
111
114
  contextweave-cli books show BOOK_ID
112
115
  contextweave-cli books delete BOOK_ID --yes
113
116
  ```
114
117
 
115
- The CLI resolves config from `--config`, then `CONTEXTWEAVE_CONFIG`, then the nearest `contextweave.yaml`/`.contextweave.yaml` walking upward, then the platform default shown by `contextweave-cli config path`. The config mirrors the setup UI: `connections` define provider endpoints and `workflow_profiles` route each translation step. Prefer `api_key_env` so API keys stay in environment variables instead of config files or task snapshots. Use `--no-polish` when a one-shot run should skip the polish pass, which can be useful for timing-sensitive subtitle output.
118
+ The CLI resolves config from `--config`, then `CONTEXTWEAVE_CONFIG`, then the nearest `contextweave.yaml`/`.contextweave.yaml` walking upward, then the platform default shown by `contextweave-cli config path`. The config mirrors the setup UI: `connections` define provider endpoints and `workflow_profiles` route each translation step. Prefer `api_key_env` so API keys stay in environment variables instead of config files or task snapshots. Use `--no-polish` when a one-shot run should skip the polish pass, which can be useful for timing-sensitive subtitle output. Use `--preserve-structure` for patchable galgame/script exports.
119
+
120
+ For unsupported game engines, convert extracted script text into a supported intermediate format such as ParaTranz JSON or Translator++ `.trans`, then import that file or folder as `--type galgame`. `contextweave-cli galgame skill` writes a Codex/OpenAI-style skill file with this workflow for external extractor agents.
116
121
 
117
122
  A commented starting point is available at [docs/examples/contextweave-cli.yaml](https://github.com/bot-32142/ContextWeave/blob/master/docs/examples/contextweave-cli.yaml).
118
123
 
@@ -134,3 +139,4 @@ A commented starting point is available at [docs/examples/contextweave-cli.yaml]
134
139
  | Manga | `.cbz`, image folders | `cbz` | Yes |
135
140
  | EPUB | `.epub` | `epub`, `md`, `docx`, `html` | No, but image OCR is supported |
136
141
  | Subtitle | `.srt`, `.vtt`, `.ass`, `.ssa` | `srt`, `vtt`, `ass`, `ssa` | No |
142
+ | Galgame | `.rpy`, `.ks`, RPG Maker MV/MZ JSON, MTool JSON, Translator++ `.trans`, VNText JSON, ParaTranz JSON, TPP/Translator++ `.xlsx`, Wolf RPG `.xlsx` | `txt`, preserve-structure folder | No |
@@ -45,11 +45,14 @@ class WorkflowStepId(StrEnum):
45
45
 
46
46
 
47
47
  _DEFAULT_CONNECTION_CONCURRENCY = 5
48
- _DEEPSEEK_DEFAULT_CONNECTION_CONCURRENCY = 15
48
+ _DEEPSEEK_DEFAULT_CONNECTION_CONCURRENCY = 500
49
+ _DEEPSEEK_FLASH_DEFAULT_CONNECTION_CONCURRENCY = 2500
49
50
 
50
51
 
51
- def default_connection_concurrency(provider: ProviderKind | None) -> int:
52
+ def default_connection_concurrency(provider: ProviderKind | None, model: str | None = None) -> int:
52
53
  if provider is ProviderKind.DEEPSEEK:
54
+ if (model or "").strip().lower() == "deepseek-v4-flash":
55
+ return _DEEPSEEK_FLASH_DEFAULT_CONNECTION_CONCURRENCY
53
56
  return _DEEPSEEK_DEFAULT_CONNECTION_CONCURRENCY
54
57
  return _DEFAULT_CONNECTION_CONCURRENCY
55
58
 
@@ -122,7 +125,7 @@ class ConnectionDraft(ContractModel):
122
125
  return data
123
126
 
124
127
  payload = dict(data)
125
- payload["concurrency"] = default_connection_concurrency(provider)
128
+ payload["concurrency"] = default_connection_concurrency(provider, data.get("default_model"))
126
129
  return payload
127
130
 
128
131
 
@@ -90,6 +90,7 @@ class DocumentTypeCode(StrEnum):
90
90
  SUBTITLE = "subtitle"
91
91
  SCANNED_BOOK = "scanned_book"
92
92
  MANGA = "manga"
93
+ GALGAME = "galgame"
93
94
  OTHER = "other"
94
95
 
95
96
 
@@ -264,7 +264,7 @@ _WIZARD_MODEL_CATALOG: dict[ProviderKind, tuple[WizardModelTemplate, ...]] = {
264
264
  "DeepSeek V4 Flash",
265
265
  "deepseek-v4-flash",
266
266
  "https://api.deepseek.com",
267
- concurrency=default_connection_concurrency(ProviderKind.DEEPSEEK),
267
+ concurrency=default_connection_concurrency(ProviderKind.DEEPSEEK, "deepseek-v4-flash"),
268
268
  ),
269
269
  WizardModelTemplate(
270
270
  ProviderKind.DEEPSEEK,
@@ -272,7 +272,7 @@ _WIZARD_MODEL_CATALOG: dict[ProviderKind, tuple[WizardModelTemplate, ...]] = {
272
272
  "deepseek-v4-pro",
273
273
  "https://api.deepseek.com",
274
274
  timeout=300,
275
- concurrency=default_connection_concurrency(ProviderKind.DEEPSEEK),
275
+ concurrency=default_connection_concurrency(ProviderKind.DEEPSEEK, "deepseek-v4-pro"),
276
276
  ),
277
277
  ),
278
278
  ProviderKind.ANTHROPIC: (
@@ -1123,6 +1123,7 @@ def map_document_type_code(document_type: str | None) -> DocumentTypeCode:
1123
1123
  "subtitle": DocumentTypeCode.SUBTITLE,
1124
1124
  "scanned_book": DocumentTypeCode.SCANNED_BOOK,
1125
1125
  "manga": DocumentTypeCode.MANGA,
1126
+ "galgame": DocumentTypeCode.GALGAME,
1126
1127
  }
1127
1128
  return mapping.get(str(document_type or ""), DocumentTypeCode.OTHER)
1128
1129
 
@@ -43,7 +43,7 @@ connections:
43
43
  temperature: 0
44
44
  timeout: 180
45
45
  max_retries: 3
46
- concurrency: 15
46
+ concurrency: 2500
47
47
 
48
48
  deepseek_pro:
49
49
  display_name: DeepSeek V4 Pro
@@ -54,7 +54,7 @@ connections:
54
54
  temperature: 0
55
55
  timeout: 300
56
56
  max_retries: 3
57
- concurrency: 15
57
+ concurrency: 500
58
58
 
59
59
  workflow_profiles:
60
60
  balanced_deepseek:
@@ -0,0 +1,106 @@
1
+ GALGAME_CODEX_SKILL_TEXT = """---
2
+ name: contextweave-galgame-translation
3
+ description: Use ContextWeave CLI to translate extracted galgame scripts and intermediate files while preserving patchable structure.
4
+ ---
5
+
6
+ # ContextWeave Galgame Translation
7
+
8
+ Use this skill when the user wants to translate a visual novel / galgame with ContextWeave from extracted scripts or tool exports.
9
+
10
+ ## Ground Rules
11
+
12
+ - Work on a copy of the game or extracted files, never the original install folder.
13
+ - Do not import `.exe`, `.dll`, save data, images, audio, video, or opaque archives directly.
14
+ - Prefer stable intermediate formats over raw text dumps.
15
+ - Preserve placeholders/control codes exactly, including Ren'Py `{...}`, RPG Maker `\\N[1]`, and KAG/Tyrano `[l]` tags.
16
+ - If a game is packed, use external extractors only when the user explicitly asks and the tool is installed.
17
+ - ContextWeave translates supported extracted files; external tools are still responsible for unpacking/repacking proprietary archives.
18
+
19
+ ## Supported Direct Inputs
20
+
21
+ - Ren'Py `.rpy`
22
+ - TyranoScript / KAG / extracted KiriKiri `.ks`
23
+ - RPG Maker MV/MZ `data/*.json` or `www/data/*.json`
24
+ - MTool JSON dictionaries
25
+ - Translator++ `.trans`
26
+ - VNText JSON
27
+ - ParaTranz JSON
28
+ - TPP / Translator++ `.xlsx`
29
+ - Wolf RPG extracted `.xlsx`
30
+
31
+ ## Preferred Unsupported-Engine Bridge
32
+
33
+ When a game engine or extractor output is not directly supported by ContextWeave, ask the extractor/converter agent to normalize the extracted script text into ParaTranz-style JSON:
34
+
35
+ ```json
36
+ [
37
+ {
38
+ "key": "script001:000001",
39
+ "original": "こんにちは",
40
+ "translation": "",
41
+ "speaker": "Alice",
42
+ "context": "script001 line 1"
43
+ }
44
+ ]
45
+ ```
46
+
47
+ Rules for the converter:
48
+
49
+ - Output UTF-8 JSON.
50
+ - Use one object per translatable game entry.
51
+ - Keep `translation` empty before ContextWeave translation.
52
+ - Make `key` stable and unique from source file plus entry index.
53
+ - Preserve control codes/placeholders exactly in `original`.
54
+ - Do not merge entries.
55
+ - Generate a separate injector that writes translated JSON back to the original extracted script format by `key` or original order.
56
+
57
+ ## CLI Workflow
58
+
59
+ 1. Validate config:
60
+
61
+ ```bash
62
+ contextweave-cli --config ./contextweave.yaml config validate
63
+ ```
64
+
65
+ 2. Inspect source support:
66
+
67
+ ```bash
68
+ contextweave-cli --json galgame inspect ./extracted_or_exported_source
69
+ ```
70
+
71
+ 3. If the source is unsupported, inspect possible external helper hints:
72
+
73
+ ```bash
74
+ contextweave-cli --json galgame helpers ./game_copy
75
+ ```
76
+
77
+ 4. Translate and preserve structure:
78
+
79
+ ```bash
80
+ contextweave-cli \
81
+ --config ./contextweave.yaml \
82
+ --library-root ./contextweave-library \
83
+ --json \
84
+ run ./extracted_or_exported_source \
85
+ --type galgame \
86
+ --output ./translated_patch \
87
+ --preserve-structure
88
+ ```
89
+
90
+ 5. Use the corresponding injector/repacker to apply `./translated_patch` back to the copied game or extracted script tree.
91
+
92
+ ## Useful Inspection Commands
93
+
94
+ ```bash
95
+ contextweave-cli galgame inspect ./source
96
+ contextweave-cli galgame glossary-seeds ./source
97
+ contextweave-cli galgame helpers ./source
98
+ ```
99
+
100
+ ## Failure Handling
101
+
102
+ - If import is ambiguous, rerun `run` with `--type galgame`.
103
+ - If placeholder validation fails, repair the translated entry so all source control codes are present exactly once.
104
+ - If an extracted dump is raw plain text, convert it to ParaTranz JSON before using ContextWeave.
105
+ - If only opaque binary chunks remain after extraction, stop and ask for a game-specific adapter/extractor instead of guessing.
106
+ """
@@ -8,10 +8,16 @@ from context_aware_translation.application.contracts.common import ContractModel
8
8
  from context_aware_translation.application.contracts.document import RunTranslateAndExportRequest
9
9
  from context_aware_translation.application.contracts.work import ImportDocumentsRequest, InspectImportPathsRequest
10
10
  from context_aware_translation.application.errors import ApplicationError
11
+ from context_aware_translation.documents.galgame import (
12
+ inspect_galgame_external_helpers,
13
+ inspect_galgame_glossary_seeds,
14
+ inspect_galgame_import,
15
+ )
11
16
  from context_aware_translation.storage.models.book import BookStatus
12
17
  from context_aware_translation.workflow.tasks.models import STATUS_COMPLETED
13
18
 
14
19
  from .config_file import load_cli_config, resolve_config_path, write_starter_config
20
+ from .galgame_skill import GALGAME_CODEX_SKILL_TEXT
15
21
  from .output import (
16
22
  EXIT_BLOCKED,
17
23
  EXIT_TASK_FAILED,
@@ -89,8 +95,25 @@ def build_parser() -> argparse.ArgumentParser:
89
95
  run_parser.add_argument("--book-name")
90
96
  run_parser.add_argument("--type", dest="document_type")
91
97
  run_parser.add_argument("--format", dest="format_id")
98
+ run_parser.add_argument("--preserve-structure", action="store_true")
99
+ run_parser.add_argument("--allow-original-fallback", action="store_true")
92
100
  run_parser.add_argument("--no-polish", action="store_true")
93
101
 
102
+ galgame_parser = subparsers.add_parser("galgame", parents=[common])
103
+ galgame_subparsers = galgame_parser.add_subparsers(dest="galgame_command", required=True)
104
+ galgame_inspect_parser = galgame_subparsers.add_parser("inspect", parents=[common])
105
+ galgame_inspect_parser.add_argument("input")
106
+ galgame_inspect_parser.add_argument("--adapter")
107
+ galgame_helpers_parser = galgame_subparsers.add_parser("helpers", parents=[common])
108
+ galgame_helpers_parser.add_argument("input")
109
+ galgame_helpers_parser.add_argument("--output-folder")
110
+ galgame_helpers_parser.add_argument("--tool", action="append", dest="tools")
111
+ galgame_glossary_parser = galgame_subparsers.add_parser("glossary-seeds", parents=[common])
112
+ galgame_glossary_parser.add_argument("input")
113
+ galgame_glossary_parser.add_argument("--adapter")
114
+ galgame_skill_parser = galgame_subparsers.add_parser("skill", parents=[common])
115
+ galgame_skill_parser.add_argument("--output")
116
+
94
117
  books_parser = subparsers.add_parser("books", parents=[common])
95
118
  books_subparsers = books_parser.add_subparsers(dest="books_command", required=True)
96
119
  books_subparsers.add_parser("list", parents=[common])
@@ -109,6 +132,8 @@ def command_name(args: argparse.Namespace) -> str:
109
132
  return f"config.{getattr(args, 'config_command', '')}"
110
133
  if command == "books":
111
134
  return f"books.{getattr(args, 'books_command', '')}"
135
+ if command == "galgame":
136
+ return f"galgame.{getattr(args, 'galgame_command', '')}"
112
137
  return command
113
138
 
114
139
 
@@ -118,6 +143,8 @@ def dispatch(args: argparse.Namespace) -> dict[str, Any]:
118
143
  return dispatch_config(args)
119
144
  if command == "books":
120
145
  return dispatch_books(args)
146
+ if command == "galgame":
147
+ return dispatch_galgame(args)
121
148
  if command == "run":
122
149
  return run_one_shot(args)
123
150
  raise CliError("usage", f"Unsupported command: {command}", exit_code=EXIT_USAGE)
@@ -158,6 +185,77 @@ def dispatch_books(args: argparse.Namespace) -> dict[str, Any]:
158
185
  raise CliError("usage", f"Unsupported books command: {books_command}", exit_code=EXIT_USAGE)
159
186
 
160
187
 
188
+ def dispatch_galgame(args: argparse.Namespace) -> dict[str, Any]:
189
+ galgame_command = str(args.galgame_command)
190
+ if galgame_command == "inspect":
191
+ path = Path(str(args.input)).expanduser().resolve()
192
+ import_summary = inspect_galgame_import(path, adapter_name=getattr(args, "adapter", None))
193
+ return {
194
+ "path": str(path),
195
+ "imported": import_summary.imported,
196
+ "skipped": import_summary.skipped,
197
+ "total_units": import_summary.total_units,
198
+ "adapters": list(import_summary.adapters),
199
+ "files": [
200
+ {
201
+ "relative_path": source.relative_path,
202
+ "adapter_name": source.adapter_name,
203
+ "unit_count": source.unit_count,
204
+ "confidence": source.confidence,
205
+ }
206
+ for source in import_summary.files
207
+ ],
208
+ }
209
+ if galgame_command == "helpers":
210
+ path = Path(str(args.input)).expanduser().resolve()
211
+ output_folder = _optional_path(getattr(args, "output_folder", None))
212
+ helper_summary = inspect_galgame_external_helpers(
213
+ path,
214
+ output_folder=output_folder,
215
+ tool_names=getattr(args, "tools", None),
216
+ )
217
+ return {
218
+ "path": str(path),
219
+ "usable": helper_summary.usable,
220
+ "commands": [
221
+ {
222
+ "source_path": command.source_path,
223
+ "output_folder": command.output_folder,
224
+ "tool_name": command.tool_name,
225
+ "executable": command.executable,
226
+ "argv": list(command.argv),
227
+ "note": command.note,
228
+ }
229
+ for command in helper_summary.commands
230
+ ],
231
+ "issues": [
232
+ {
233
+ "source_path": issue.source_path,
234
+ "source_extension": issue.source_extension,
235
+ "message": issue.message,
236
+ }
237
+ for issue in helper_summary.issues
238
+ ],
239
+ }
240
+ if galgame_command == "glossary-seeds":
241
+ path = Path(str(args.input)).expanduser().resolve()
242
+ seeds = inspect_galgame_glossary_seeds(path, adapter_name=getattr(args, "adapter", None))
243
+ return {
244
+ "path": str(path),
245
+ "seeds": [
246
+ {"term": seed.term, "category": seed.category, "source": seed.source, "context": seed.context}
247
+ for seed in seeds
248
+ ],
249
+ }
250
+ if galgame_command == "skill":
251
+ output = getattr(args, "output", None)
252
+ if output is None:
253
+ return {"skill": GALGAME_CODEX_SKILL_TEXT, "written": False, "path": None}
254
+ output_path = _write_galgame_skill(Path(str(output)).expanduser())
255
+ return {"skill": GALGAME_CODEX_SKILL_TEXT, "written": True, "path": str(output_path)}
256
+ raise CliError("usage", f"Unsupported galgame command: {galgame_command}", exit_code=EXIT_USAGE)
257
+
258
+
161
259
  def run_one_shot(args: argparse.Namespace) -> dict[str, Any]:
162
260
  library_root = _optional_path(getattr(args, "library_root", None))
163
261
  input_path = Path(str(args.input)).expanduser().resolve()
@@ -208,6 +306,10 @@ def run_one_shot(args: argparse.Namespace) -> dict[str, Any]:
208
306
  use_batch=False,
209
307
  use_reembedding=False,
210
308
  enable_polish=not bool(getattr(args, "no_polish", False)),
309
+ options={
310
+ "preserve_structure": bool(getattr(args, "preserve_structure", False)),
311
+ "allow_original_fallback": bool(getattr(args, "allow_original_fallback", False)),
312
+ },
211
313
  )
212
314
  )
213
315
  task_id = accepted.queue_item_id or accepted.command_id
@@ -222,6 +324,7 @@ def run_one_shot(args: argparse.Namespace) -> dict[str, Any]:
222
324
  "status": record.status,
223
325
  "phase": record.phase,
224
326
  "output_path": str(output_path),
327
+ "preserve_structure": bool(getattr(args, "preserve_structure", False)),
225
328
  }
226
329
  if record.status != STATUS_COMPLETED:
227
330
  raise CliError(
@@ -326,6 +429,27 @@ def print_human_success(command: str, data: dict[str, Any]) -> None:
326
429
  print(f"Task: {data['task_id']}")
327
430
  print(f"Done: {data['output_path']}")
328
431
  return
432
+ if command == "galgame.inspect":
433
+ print(f"Importable files: {data['imported']} ({data['total_units']} units)")
434
+ for item in data.get("files", []):
435
+ print(f"{item['relative_path']}\t{item['adapter_name']}\t{item['unit_count']}\t{item['confidence']}")
436
+ return
437
+ if command == "galgame.helpers":
438
+ for command_item in data.get("commands", []):
439
+ print(" ".join(command_item["argv"]))
440
+ for issue in data.get("issues", []):
441
+ print(f"{issue['source_path']}: {issue['message']}")
442
+ return
443
+ if command == "galgame.glossary-seeds":
444
+ for seed in data.get("seeds", []):
445
+ print(f"{seed['term']}\t{seed['category']}\t{seed['source']}")
446
+ return
447
+ if command == "galgame.skill":
448
+ if data.get("written"):
449
+ print(f"Wrote skill: {data['path']}")
450
+ else:
451
+ print(data["skill"])
452
+ return
329
453
  print(data)
330
454
 
331
455
 
@@ -350,6 +474,13 @@ def _optional_path(value: str | None) -> Path | None:
350
474
  return Path(value).expanduser().resolve()
351
475
 
352
476
 
477
+ def _write_galgame_skill(output_path: Path) -> Path:
478
+ skill_path = output_path / "SKILL.md" if output_path.suffix == "" else output_path
479
+ skill_path.parent.mkdir(parents=True, exist_ok=True)
480
+ skill_path.write_text(GALGAME_CODEX_SKILL_TEXT, encoding="utf-8")
481
+ return skill_path.resolve()
482
+
483
+
353
484
  def _payload(value: Any) -> Any:
354
485
  if isinstance(value, ContractModel):
355
486
  return value.to_payload()
@@ -0,0 +1,101 @@
1
+ from __future__ import annotations
2
+
3
+ from collections.abc import Callable
4
+ from typing import TYPE_CHECKING
5
+
6
+ from context_aware_translation.core.cancellation import raise_if_cancelled
7
+ from context_aware_translation.documents.galgame import deserialize_translation_unit_stream
8
+ from context_aware_translation.storage.schema.book_db import ChunkRecord
9
+ from context_aware_translation.utils.hashing import compute_chunk_hash
10
+
11
+ if TYPE_CHECKING:
12
+ from context_aware_translation.core.context_manager import TranslationContextManager
13
+ from context_aware_translation.core.progress import ProgressCallback
14
+
15
+
16
+ class GalgameDocumentHandler:
17
+ """DocumentTypeHandler for unit-preserving galgame translation."""
18
+
19
+ def __init__(
20
+ self,
21
+ *,
22
+ concurrency: int = 5,
23
+ batch_size: int = 0,
24
+ max_tokens_per_batch: int = 2000,
25
+ ) -> None:
26
+ self._concurrency = max(1, concurrency)
27
+ self._batch_size = batch_size
28
+ self._max_tokens_per_batch = max(1, max_tokens_per_batch)
29
+
30
+ def add_text(
31
+ self,
32
+ text: str,
33
+ max_token_size_per_chunk: int, # noqa: ARG002
34
+ document_id: int,
35
+ manager: TranslationContextManager,
36
+ ) -> int:
37
+ """Store one chunk per translation unit without deduping repeated dialogue text."""
38
+ units = deserialize_translation_unit_stream(text)
39
+ chunk_records: list[ChunkRecord] = []
40
+ chunk_id = manager.term_repo.get_next_chunk_id()
41
+ for unit in units:
42
+ if not unit.text.strip():
43
+ continue
44
+ identity_text = f"{unit.relative_path}\0{unit.unit_id}\0{unit.text}"
45
+ chunk_records.append(
46
+ ChunkRecord(
47
+ chunk_id=chunk_id,
48
+ hash=compute_chunk_hash(identity_text, document_id=document_id),
49
+ text=unit.text,
50
+ document_id=document_id,
51
+ is_extracted=False,
52
+ is_summarized=False,
53
+ )
54
+ )
55
+ chunk_id += 1
56
+
57
+ new_chunk_records = [
58
+ chunk_record for chunk_record in chunk_records if not manager.term_repo.chunk_exists_by_hash(chunk_record.hash)
59
+ ]
60
+ if new_chunk_records:
61
+ manager._state_update([], new_chunk_records)
62
+ return chunk_id - 1
63
+
64
+ async def translate_chunks(
65
+ self,
66
+ document_ids: list[int],
67
+ manager: TranslationContextManager,
68
+ force: bool = False,
69
+ source_ids: list[int] | None = None,
70
+ cancel_check: Callable[[], bool] | None = None,
71
+ progress_callback: ProgressCallback | None = None,
72
+ ) -> None:
73
+ """Delegate to the generic text translator while preserving one chunk per unit."""
74
+ _ = source_ids
75
+ raise_if_cancelled(cancel_check)
76
+ await manager.translate_chunks(
77
+ concurrency=self._concurrency,
78
+ batch_size=self._batch_size,
79
+ max_tokens_per_batch=self._max_tokens_per_batch,
80
+ document_ids=document_ids,
81
+ force=force,
82
+ cancel_check=cancel_check,
83
+ progress_callback=progress_callback,
84
+ )
85
+
86
+ def get_translated_lines(
87
+ self,
88
+ document_id: int,
89
+ manager: TranslationContextManager,
90
+ ) -> list[str]:
91
+ """Return one translated entry per galgame translation unit."""
92
+ chunks = manager.term_repo.list_chunks(document_id=document_id)
93
+ if not chunks:
94
+ raise ValueError("No chunks found in the database")
95
+
96
+ sorted_chunks = sorted(chunks, key=lambda chunk: chunk.chunk_id)
97
+ untranslated = [chunk for chunk in sorted_chunks if not chunk.is_translated or chunk.translation is None]
98
+ if untranslated:
99
+ untranslated_ids = [chunk.chunk_id for chunk in untranslated]
100
+ raise ValueError(f"Cannot export: chunks {untranslated_ids} are not translated yet")
101
+ return [chunk.translation for chunk in sorted_chunks if chunk.translation is not None]
@@ -266,13 +266,14 @@ def get_document_classes() -> list[type[Document]]:
266
266
  Uses late imports to avoid circular dependencies.
267
267
  """
268
268
  from context_aware_translation.documents.epub import EPUBDocument
269
+ from context_aware_translation.documents.galgame import GalgameDocument
269
270
  from context_aware_translation.documents.manga import MangaDocument
270
271
  from context_aware_translation.documents.pdf import PDFDocument
271
272
  from context_aware_translation.documents.scanned_book import ScannedBookDocument
272
273
  from context_aware_translation.documents.subtitle import SubtitleDocument
273
274
  from context_aware_translation.documents.text import TextDocument
274
275
 
275
- return [TextDocument, SubtitleDocument, PDFDocument, ScannedBookDocument, MangaDocument, EPUBDocument]
276
+ return [TextDocument, SubtitleDocument, GalgameDocument, PDFDocument, ScannedBookDocument, MangaDocument, EPUBDocument]
276
277
 
277
278
 
278
279
  def is_ocr_required_for_type(document_type: str) -> bool: