textflowkit 0.1.13__tar.gz → 0.1.14__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 (237) hide show
  1. {textflowkit-0.1.13 → textflowkit-0.1.14}/AGENTS.md +9 -1
  2. {textflowkit-0.1.13 → textflowkit-0.1.14}/CHANGELOG.md +9 -0
  3. {textflowkit-0.1.13 → textflowkit-0.1.14}/CONTRIBUTING.md +4 -0
  4. {textflowkit-0.1.13 → textflowkit-0.1.14}/PKG-INFO +11 -9
  5. {textflowkit-0.1.13 → textflowkit-0.1.14}/README.md +10 -8
  6. {textflowkit-0.1.13 → textflowkit-0.1.14}/docs/adapters.md +8 -4
  7. {textflowkit-0.1.13 → textflowkit-0.1.14}/docs/architecture.md +1 -1
  8. textflowkit-0.1.14/docs/deepseek-worker.md +29 -0
  9. {textflowkit-0.1.13 → textflowkit-0.1.14}/docs/index.html +6 -5
  10. {textflowkit-0.1.13 → textflowkit-0.1.14}/docs/install.md +6 -4
  11. {textflowkit-0.1.13 → textflowkit-0.1.14}/docs/release-checklist.md +7 -1
  12. {textflowkit-0.1.13 → textflowkit-0.1.14}/docs/roadmap.md +5 -0
  13. {textflowkit-0.1.13 → textflowkit-0.1.14}/docs/streaming.md +4 -4
  14. {textflowkit-0.1.13 → textflowkit-0.1.14}/docs/user-manual.md +8 -6
  15. {textflowkit-0.1.13 → textflowkit-0.1.14}/pyproject.toml +1 -1
  16. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/__init__.py +1 -1
  17. {textflowkit-0.1.13 → textflowkit-0.1.14}/.dockerignore +0 -0
  18. {textflowkit-0.1.13 → textflowkit-0.1.14}/.env.example +0 -0
  19. {textflowkit-0.1.13 → textflowkit-0.1.14}/.gitattributes +0 -0
  20. {textflowkit-0.1.13 → textflowkit-0.1.14}/.github/dependabot.yml +0 -0
  21. {textflowkit-0.1.13 → textflowkit-0.1.14}/.github/workflows/ci.yml +0 -0
  22. {textflowkit-0.1.13 → textflowkit-0.1.14}/.github/workflows/publish-pypi.yml +0 -0
  23. {textflowkit-0.1.13 → textflowkit-0.1.14}/.gitignore +0 -0
  24. {textflowkit-0.1.13 → textflowkit-0.1.14}/.pre-commit-config.yaml +0 -0
  25. {textflowkit-0.1.13 → textflowkit-0.1.14}/Dockerfile +0 -0
  26. {textflowkit-0.1.13 → textflowkit-0.1.14}/LEGAL.md +0 -0
  27. {textflowkit-0.1.13 → textflowkit-0.1.14}/LICENSE +0 -0
  28. {textflowkit-0.1.13 → textflowkit-0.1.14}/SECURITY.md +0 -0
  29. {textflowkit-0.1.13 → textflowkit-0.1.14}/compose.yaml +0 -0
  30. {textflowkit-0.1.13 → textflowkit-0.1.14}/docs/.nojekyll +0 -0
  31. {textflowkit-0.1.13 → textflowkit-0.1.14}/docs/404.html +0 -0
  32. {textflowkit-0.1.13 → textflowkit-0.1.14}/docs/assets/architecture-overview.svg +0 -0
  33. {textflowkit-0.1.13 → textflowkit-0.1.14}/docs/assets/live-streaming-flow.svg +0 -0
  34. {textflowkit-0.1.13 → textflowkit-0.1.14}/docs/assets/local-ui-flow.svg +0 -0
  35. {textflowkit-0.1.13 → textflowkit-0.1.14}/docs/assets/whistle-resume.svg +0 -0
  36. {textflowkit-0.1.13 → textflowkit-0.1.14}/docs/site-deployment.md +0 -0
  37. {textflowkit-0.1.13 → textflowkit-0.1.14}/docs/sources.md +0 -0
  38. {textflowkit-0.1.13 → textflowkit-0.1.14}/docs/verification/whistle-coverage-20261019.md +0 -0
  39. {textflowkit-0.1.13 → textflowkit-0.1.14}/docs/verification/windows-sources-20261019.md +0 -0
  40. {textflowkit-0.1.13 → textflowkit-0.1.14}/packaging/windows/README.md +0 -0
  41. {textflowkit-0.1.13 → textflowkit-0.1.14}/packaging/windows/THIRD-PARTY-NOTICES.txt +0 -0
  42. {textflowkit-0.1.13 → textflowkit-0.1.14}/packaging/windows/assets.lock.json +0 -0
  43. {textflowkit-0.1.13 → textflowkit-0.1.14}/packaging/windows/launch.py +0 -0
  44. {textflowkit-0.1.13 → textflowkit-0.1.14}/packaging/windows/source-materials.json +0 -0
  45. {textflowkit-0.1.13 → textflowkit-0.1.14}/packaging/windows/textflowkit.iss +0 -0
  46. {textflowkit-0.1.13 → textflowkit-0.1.14}/scripts/build_windows_installer.py +0 -0
  47. {textflowkit-0.1.13 → textflowkit-0.1.14}/scripts/fetch_published_fonts.py +0 -0
  48. {textflowkit-0.1.13 → textflowkit-0.1.14}/scripts/prepare_windows_payload.py +0 -0
  49. {textflowkit-0.1.13 → textflowkit-0.1.14}/scripts/run_deepseek_worker.py +0 -0
  50. {textflowkit-0.1.13 → textflowkit-0.1.14}/scripts/smoke_installed_wheel.py +0 -0
  51. {textflowkit-0.1.13 → textflowkit-0.1.14}/scripts/smoke_live_youtube.py +0 -0
  52. {textflowkit-0.1.13 → textflowkit-0.1.14}/scripts/verify_readme_release.py +0 -0
  53. {textflowkit-0.1.13 → textflowkit-0.1.14}/scripts/verify_release_ci.py +0 -0
  54. {textflowkit-0.1.13 → textflowkit-0.1.14}/scripts/verify_release_versions.py +0 -0
  55. {textflowkit-0.1.13 → textflowkit-0.1.14}/scripts/write_release_manifest.py +0 -0
  56. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/adapters/__init__.py +0 -0
  57. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/adapters/http_server.py +0 -0
  58. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/adapters/mcp_server.py +0 -0
  59. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/adapters/streaming_ws.py +0 -0
  60. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/assets/README.md +0 -0
  61. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/assets/selftest-speech.wav +0 -0
  62. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/cli.py +0 -0
  63. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/core/__init__.py +0 -0
  64. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/core/batch.py +0 -0
  65. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/core/bind.py +0 -0
  66. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/core/cancel.py +0 -0
  67. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/core/checkpoint.py +0 -0
  68. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/core/diarize.py +0 -0
  69. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/core/engine.py +0 -0
  70. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/core/executor.py +0 -0
  71. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/core/jobs.py +0 -0
  72. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/core/model.py +0 -0
  73. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/core/paths.py +0 -0
  74. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/core/pipeline.py +0 -0
  75. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/core/retrieval.py +0 -0
  76. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/core/runner.py +0 -0
  77. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/core/service.py +0 -0
  78. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/core/sqlite_store.py +0 -0
  79. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/core/startup.py +0 -0
  80. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/core/stream_worker.py +0 -0
  81. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/core/streaming.py +0 -0
  82. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/core/streaming_assets.py +0 -0
  83. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/core/streaming_events.py +0 -0
  84. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/core/streaming_process.py +0 -0
  85. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/core/submission.py +0 -0
  86. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/core/timeutil.py +0 -0
  87. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/core/translate.py +0 -0
  88. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/core/whistle.py +0 -0
  89. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/core/whistle_assets.py +0 -0
  90. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/core/windows_process.py +0 -0
  91. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/render/__init__.py +0 -0
  92. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/render/_cue_layout.py +0 -0
  93. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/render/_cue_text.py +0 -0
  94. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/render/_rename_excl.py +0 -0
  95. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/render/_rename_noreplace.py +0 -0
  96. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/render/docx.py +0 -0
  97. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/render/markdown.py +0 -0
  98. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/render/pdf.py +0 -0
  99. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/render/srt.py +0 -0
  100. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/render/txt.py +0 -0
  101. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/render/vtt.py +0 -0
  102. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/sources/__init__.py +0 -0
  103. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/sources/acquire.py +0 -0
  104. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/sources/detect.py +0 -0
  105. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/sources/scratch.py +0 -0
  106. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/ui/__init__.py +0 -0
  107. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/ui/app.py +0 -0
  108. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/ui/capabilities.py +0 -0
  109. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/ui/cleanup.py +0 -0
  110. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/ui/launcher.py +0 -0
  111. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/ui/ownership.py +0 -0
  112. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/ui/paths.py +0 -0
  113. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/ui/security.py +0 -0
  114. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/ui/static/app.css +0 -0
  115. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/ui/static/app.js +0 -0
  116. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/ui/static/cleanup.js +0 -0
  117. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/ui/static/index.html +0 -0
  118. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/ui/static/streaming-capture-worklet.js +0 -0
  119. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/ui/static/streaming-example.html +0 -0
  120. {textflowkit-0.1.13 → textflowkit-0.1.14}/src/textflowkit/ui/uploads.py +0 -0
  121. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/__init__.py +0 -0
  122. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/fixtures/whistle_seam_regressions.json +0 -0
  123. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/ollama_stub.py +0 -0
  124. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_acquire.py +0 -0
  125. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_adapters.py +0 -0
  126. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_admission_ownership.py +0 -0
  127. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_atomic_resume.py +0 -0
  128. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_atomic_resume_aba.py +0 -0
  129. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_batch.py +0 -0
  130. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_batch_item_boundary.py +0 -0
  131. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_batch_resume_shared.py +0 -0
  132. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_bind.py +0 -0
  133. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_cancellation_finalization.py +0 -0
  134. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_checkpoint.py +0 -0
  135. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_checkpoint_single_copy.py +0 -0
  136. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_cli.py +0 -0
  137. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_cli_batch_feedback.py +0 -0
  138. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_cli_owning_recovery.py +0 -0
  139. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_cli_resume_batch.py +0 -0
  140. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_cli_stage_feedback.py +0 -0
  141. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_cli_stdout_format.py +0 -0
  142. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_confined_decoder_boundary.py +0 -0
  143. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_confined_indirect_media.py +0 -0
  144. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_confined_resume_boundary.py +0 -0
  145. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_container_example.py +0 -0
  146. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_cue_layout.py +0 -0
  147. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_diarize.py +0 -0
  148. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_diarize_example_flags.py +0 -0
  149. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_diarize_token_docs.py +0 -0
  150. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_docx_publication_identity.py +0 -0
  151. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_done_output_integrity.py +0 -0
  152. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_empty_formats_resume.py +0 -0
  153. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_engine_adapters.py +0 -0
  154. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_engine_cache.py +0 -0
  155. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_engine_faster.py +0 -0
  156. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_engine_quiet.py +0 -0
  157. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_executor.py +0 -0
  158. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_executor_store_failure.py +0 -0
  159. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_export.py +0 -0
  160. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_export_file_mode.py +0 -0
  161. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_export_preflight.py +0 -0
  162. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_faster_whisper_docs.py +0 -0
  163. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_fetch_published_fonts.py +0 -0
  164. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_font_notices.py +0 -0
  165. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_http_host_boundary.py +0 -0
  166. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_http_trusted_proxy.py +0 -0
  167. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_job_progress.py +0 -0
  168. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_jobs.py +0 -0
  169. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_landing_commands.py +0 -0
  170. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_landing_page.py +0 -0
  171. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_legal_summary.py +0 -0
  172. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_linux_no_hardlink.py +0 -0
  173. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_live_smoke_script.py +0 -0
  174. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_macos_no_hardlink.py +0 -0
  175. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_mcp_batch_cookie_docs.py +0 -0
  176. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_mcp_http_boundary.py +0 -0
  177. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_mcp_protocol_cleanliness.py +0 -0
  178. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_mcp_terminal_guidance.py +0 -0
  179. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_mcp_tool_descriptions.py +0 -0
  180. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_mcp_work_root.py +0 -0
  181. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_model.py +0 -0
  182. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_partial_output_resume.py +0 -0
  183. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_partial_pdf_resume.py +0 -0
  184. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_paths.py +0 -0
  185. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_pipeline_integrity.py +0 -0
  186. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_pipeline_resume_setup.py +0 -0
  187. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_production_browser_cookies.py +0 -0
  188. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_publish_ci_gate.py +0 -0
  189. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_publish_fonts_wiring.py +0 -0
  190. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_publish_manifest_wiring.py +0 -0
  191. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_publish_workflow_gate.py +0 -0
  192. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_readme_layout.py +0 -0
  193. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_readme_release_guard.py +0 -0
  194. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_release_boundaries.py +0 -0
  195. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_release_manifest.py +0 -0
  196. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_release_surfaces.py +0 -0
  197. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_render.py +0 -0
  198. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_retrieval.py +0 -0
  199. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_sdist_allowlist.py +0 -0
  200. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_service_profile.py +0 -0
  201. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_site_not_found.py +0 -0
  202. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_sources.py +0 -0
  203. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_stage_reuse_resume.py +0 -0
  204. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_startup_recovery.py +0 -0
  205. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_stdio_protocol.py +0 -0
  206. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_streaming_assets.py +0 -0
  207. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_streaming_browser_lifecycle.py +0 -0
  208. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_streaming_core.py +0 -0
  209. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_streaming_example.py +0 -0
  210. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_streaming_repairs.py +0 -0
  211. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_streaming_transport.py +0 -0
  212. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_streaming_u5_repairs.py +0 -0
  213. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_streaming_ui_integration.py +0 -0
  214. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_submission.py +0 -0
  215. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_submission_validation.py +0 -0
  216. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_translate.py +0 -0
  217. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_translate_completeness.py +0 -0
  218. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_ui_assets_and_capabilities.py +0 -0
  219. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_ui_cleanup.py +0 -0
  220. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_ui_consoleless_logging.py +0 -0
  221. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_ui_existing_routes_unchanged.py +0 -0
  222. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_ui_launcher.py +0 -0
  223. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_ui_ownership_and_shutdown.py +0 -0
  224. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_ui_packaging.py +0 -0
  225. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_ui_real_serve.py +0 -0
  226. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_ui_security.py +0 -0
  227. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_ui_submission_and_download.py +0 -0
  228. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_ui_uploads.py +0 -0
  229. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_verify_release_versions.py +0 -0
  230. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_whistle_assets.py +0 -0
  231. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_whistle_defaults.py +0 -0
  232. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_whistle_engine.py +0 -0
  233. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_whistle_job_resume.py +0 -0
  234. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_whistle_seams.py +0 -0
  235. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_windows_installer.py +0 -0
  236. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_windows_no_hardlink.py +0 -0
  237. {textflowkit-0.1.13 → textflowkit-0.1.14}/tests/test_windows_payload.py +0 -0
@@ -10,7 +10,15 @@ The main assistant coordinates, plans and oversees. A worker invoked for an impl
10
10
 
11
11
  Follow Scott's active task selection; do not impose a project-wide Ollama default. His normal substantial-work/coordination preference is gpt-6.1-sol at medium, with gpt-6-luna at xhigh for small bounded work when available. Do not spawn a worker merely to switch models or add providers without authorization.
12
12
 
13
- For the explicitly authorized current Whistle release and issue #31 source-recovery work, Scott requested Ollama `deepseek-v4.1-flash:1017-cloud`, reasoning OFF. `scripts/run_deepseek_worker.py` is an explicit opt-in runner for those assigned DeepSeek units: it sends `think: false`, allows no model fallback, and records the actual response model. Ollama currently returns canonical ID `deepseek-v4.1-flash:1017` without the `-cloud` transport suffix. Do not confuse a worker's self-description with the transport receipts. Preserve existing DeepSeek integrations with reasoning off, but do not turn this task-specific instruction into the default for unrelated future work.
13
+ ## Required harness for all TextFlowKit DeepSeek coding (owner directive, 2026-10-19)
14
+
15
+ Whenever DeepSeek is selected for coding work on TextFlowKit, use native **headless Codex exec through Ollama**, model **`deepseek-v4.1-flash:1017-cloud`**, thinking OFF (`model_reasoning_effort = "none"`). This is a standing project instruction, not limited to one release. The observed provider response ID is `deepseek-v4.1-flash:1017`; verify it from transport receipts, not model self-description.
16
+
17
+ **Do not use `scripts/run_deepseek_worker.py`, another custom agent loop, or Claude Code for this work.** If the approved setup is missing, blocked or broken after restart, inspect/repair it within authorization or report the concrete blocker; never silently fall back, change the model, enable reasoning, or bypass safeguards.
18
+
19
+ Use the dedicated worker worktree, separate CODEX_HOME/profile/temp directories, allowlisted environment and supported Windows workspace-write sandbox. No personal auth/settings/hooks/MCP configuration copied; no inherited provider/GitHub tokens; no nested workers or publishing. A worktree isolates changes, not all disk reads. Supply a scoped brief through stdin and retain native Codex events, provider model/reasoning evidence and actual tool results.
20
+
21
+ Read `docs/deepseek-worker.md` before the next DeepSeek unit and after restart. Verified local launcher: `C:\Users\scott\Documents\Codex\2026-09-21\re\outputs\headless-codex-deepseek-20261019\run-codex.ps1`; local state and evidence are alongside it. This selects the harness whenever DeepSeek is used; it does not make DeepSeek the default for unrelated work.
14
22
 
15
23
  This does not change the application's transcription or AI-cleanup defaults. Whistle remains the default transcription engine.
16
24
 
@@ -1,5 +1,14 @@
1
1
  # Changelog
2
2
 
3
+ ## v0.1.14 — 2026-10-19
4
+
5
+ Documentation-only patch; core 0.1.14, unchanged optional fonts 0.1.6.
6
+
7
+ - Persist the required native headless Codex workflow for all TextFlowKit DeepSeek coding: exact `deepseek-v4.1-flash:1017-cloud`, thinking off, isolated worktree/configuration/environment, supported Windows sandbox, and no silent fallback to the historical Python runner or Claude Code.
8
+ - Link the workflow from contributor and integration documentation and update current package/manual/website release references.
9
+ - No transcription, cleanup, streaming, dependency, or installer behavior change. The latest verified Windows installer remains v0.1.13 and retains its matching FFmpeg sources/notices. Native/live proof remains explicitly attributed to that earlier release; no new accuracy claim.
10
+ - Math comparison fixtures, local logs, model credentials and machine-local launcher/profile files are not included.
11
+
3
12
  ## v0.1.13 — 2026-10-19
4
13
 
5
14
  Core: 0.1.13; unchanged optional fonts: 0.1.6. Whistle missing-speech fixes and a
@@ -99,3 +99,7 @@ Read [LEGAL.md](LEGAL.md) before adding a source adapter.
99
99
  ## Security
100
100
 
101
101
  Do not open a public issue for a vulnerability. See [SECURITY.md](SECURITY.md).
102
+
103
+ ## DeepSeek coding workers
104
+
105
+ When DeepSeek is selected for TextFlowKit coding, follow the required [isolated headless Codex workflow](docs/deepseek-worker.md): exact `deepseek-v4.1-flash:1017-cloud`, thinking off. Do not use the historical Python agent loop or Claude Code. This does not change application engines or make DeepSeek the default for unrelated work.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: textflowkit
3
- Version: 0.1.13
3
+ Version: 0.1.14
4
4
  Summary: Cross-platform media transcription toolkit: URL or file in, timestamped transcripts and subtitle files out.
5
5
  Project-URL: Homepage, https://www.textflowkit.org/
6
6
  Project-URL: Issues, https://github.com/scottconverse/textflowkit/issues
@@ -73,7 +73,7 @@ Cross-platform media transcription toolkit. **One core, one CLI, thin adapters.*
73
73
  [User manual](https://github.com/scottconverse/textflowkit/blob/main/docs/user-manual.md) ·
74
74
  [Developer and integration manual](https://github.com/scottconverse/textflowkit/blob/main/docs/adapters.md)
75
75
 
76
- **Current release: [v0.1.13](https://github.com/scottconverse/textflowkit/releases/tag/v0.1.13).**
76
+ **Current release: [v0.1.14](https://github.com/scottconverse/textflowkit/releases/tag/v0.1.14).**
77
77
 
78
78
  The [static site deployment](https://github.com/scottconverse/textflowkit/blob/main/docs/site-deployment.md) is hosted on Cloudflare
79
79
  Pages. GitHub remains the source and CI host; the website does not run the
@@ -134,7 +134,7 @@ DOCX and PDF are available through the optional `export` extra.
134
134
 
135
135
  ## Architecture
136
136
 
137
- ![TextFlowKit shared-core architecture: five thin entry points feed one core. The CLI, Python API, MCP, HTTP API, and the local browser UI (a fifth door that mounts the existing HTTP app under /api and shares the same job store, adding transport only, not a new pipeline) sit above one core that acquires and decodes media, transcribes with the default Whistle engine or an explicitly selected openai-whisper, keeps job state and resume checkpoints in an optional SQLite store, adds optional speaker or translation postprocessing, and publishes TXT, SRT, VTT, JSON, Markdown, and optional DOCX/PDF exports.](https://raw.githubusercontent.com/scottconverse/textflowkit/v0.1.13/docs/assets/architecture-overview.svg)
137
+ ![TextFlowKit shared-core architecture: five thin entry points feed one core. The CLI, Python API, MCP, HTTP API, and the local browser UI (a fifth door that mounts the existing HTTP app under /api and shares the same job store, adding transport only, not a new pipeline) sit above one core that acquires and decodes media, transcribes with the default Whistle engine or an explicitly selected openai-whisper, keeps job state and resume checkpoints in an optional SQLite store, adds optional speaker or translation postprocessing, and publishes TXT, SRT, VTT, JSON, Markdown, and optional DOCX/PDF exports.](https://raw.githubusercontent.com/scottconverse/textflowkit/v0.1.14/docs/assets/architecture-overview.svg)
138
138
 
139
139
  The design principle is **one shared core, thin doors**. Everything of substance
140
140
  lives in the core; the interfaces are thin — the local browser UI is a fifth door
@@ -158,7 +158,7 @@ see [docs/architecture.md](https://github.com/scottconverse/textflowkit/blob/mai
158
158
 
159
159
  ## Live microphone streaming (opt-in)
160
160
 
161
- In v0.1.13, live streaming supports **Windows x86_64 only**. When
161
+ In v0.1.14, live streaming supports **Windows x86_64 only**. When
162
162
  `TEXTFLOWKIT_STREAMING=1` is set, the developer HTTP app serves a `/stream`
163
163
  WebSocket and the local UI serves `/api/stream`, both transcribing a live microphone
164
164
  as you speak. A **runnable, self-hosted browser example** ships at
@@ -167,7 +167,7 @@ as you speak. A **runnable, self-hosted browser example** ships at
167
167
  No CDN, no analytics, no external fetch. Requires the `streaming` extra:
168
168
 
169
169
  ```bash
170
- python -m pip install "textflowkit[streaming]==0.1.13"
170
+ python -m pip install "textflowkit[streaming]==0.1.14"
171
171
  ```
172
172
 
173
173
  It is **off by default** — with the switch unset the endpoint does not exist — and
@@ -233,7 +233,7 @@ installs `textflowkit-fonts` for offline multilingual PDF rendering:
233
233
  python -m pip install 'textflowkit[export]'
234
234
  ```
235
235
 
236
- ## Windows desktop installer (v0.1.13)
236
+ ## Windows desktop installer (latest verified installer: v0.1.13)
237
237
 
238
238
  [Download Windows x64 setup](https://github.com/scottconverse/textflowkit/releases/download/v0.1.13/TextFlowKit-0.1.13-windows-x64-setup.exe) · [Matching sources and notices](https://github.com/scottconverse/textflowkit/releases/tag/v0.1.13)
239
239
 
@@ -362,7 +362,7 @@ textflowkit export ./transcript.json --format vtt
362
362
  needs no PyTorch, so a fresh `pip install textflowkit` stays small and pulls no
363
363
  torch; `openai-whisper` is an explicitly selectable opt-in engine.
364
364
 
365
- ![Whistle bounded block run and durable resume: a decoded PCM WAV is split into 11-second cores with up to 2 seconds of context (each clip ≤ 15 s), each core runs as one owned child with forced telemetry-off flags, a partial checkpoint is written after each core, and a resume validates the source and decoded-WAV hashes then re-runs only the unfinished cores.](https://raw.githubusercontent.com/scottconverse/textflowkit/v0.1.13/docs/assets/whistle-resume.svg)
365
+ ![Whistle bounded block run and durable resume: a decoded PCM WAV is split into 11-second cores with up to 2 seconds of context (each clip ≤ 15 s), each core runs as one owned child with forced telemetry-off flags, a partial checkpoint is written after each core, and a resume validates the source and decoded-WAV hashes then re-runs only the unfinished cores.](https://raw.githubusercontent.com/scottconverse/textflowkit/v0.1.14/docs/assets/whistle-resume.svg)
366
366
 
367
367
  - **CPU only, no torch.** It runs a pinned native binary and downloads one pinned
368
368
  model on first use. Naming a GPU device is refused rather than silently
@@ -483,7 +483,7 @@ its own beyond the `http` extra. It ships with the core package as of v0.1.10:
483
483
  a regular install of the current release carries it.
484
484
 
485
485
  ```bash
486
- python -m pip install 'textflowkit[http,export]==0.1.13'
486
+ python -m pip install 'textflowkit[http,export]==0.1.14'
487
487
  textflowkit-ui
488
488
  ```
489
489
 
@@ -554,7 +554,9 @@ browser interface share the job contract without blocking a request.
554
554
 
555
555
  ## Status
556
556
 
557
- **v0.1.13 release.** Fixes reproduced Whistle speech omissions. Native decode
557
+ **v0.1.14 release.** Documentation-only patch: records the required isolated headless Codex workflow for DeepSeek coding contributors. Transcription, AI cleanup and streaming behavior are unchanged from v0.1.13; fonts remain 0.1.6. The latest verified Windows installer remains v0.1.13, with its matching source and notice bundles. No new native transcription proof is claimed for this documentation patch.
558
+
559
+ **Whistle behavior introduced in v0.1.13.** Fixes reproduced Whistle speech omissions. Native decode
558
560
  inputs are now bounded to 15 seconds (11-second owned cores with up to 2 seconds
559
561
  of context per side), short interior speech gaps get a bounded second listen that
560
562
  accepts words only between matching timed anchors, and shared-context words are
@@ -8,7 +8,7 @@ Cross-platform media transcription toolkit. **One core, one CLI, thin adapters.*
8
8
  [User manual](https://github.com/scottconverse/textflowkit/blob/main/docs/user-manual.md) ·
9
9
  [Developer and integration manual](https://github.com/scottconverse/textflowkit/blob/main/docs/adapters.md)
10
10
 
11
- **Current release: [v0.1.13](https://github.com/scottconverse/textflowkit/releases/tag/v0.1.13).**
11
+ **Current release: [v0.1.14](https://github.com/scottconverse/textflowkit/releases/tag/v0.1.14).**
12
12
 
13
13
  The [static site deployment](https://github.com/scottconverse/textflowkit/blob/main/docs/site-deployment.md) is hosted on Cloudflare
14
14
  Pages. GitHub remains the source and CI host; the website does not run the
@@ -69,7 +69,7 @@ DOCX and PDF are available through the optional `export` extra.
69
69
 
70
70
  ## Architecture
71
71
 
72
- ![TextFlowKit shared-core architecture: five thin entry points feed one core. The CLI, Python API, MCP, HTTP API, and the local browser UI (a fifth door that mounts the existing HTTP app under /api and shares the same job store, adding transport only, not a new pipeline) sit above one core that acquires and decodes media, transcribes with the default Whistle engine or an explicitly selected openai-whisper, keeps job state and resume checkpoints in an optional SQLite store, adds optional speaker or translation postprocessing, and publishes TXT, SRT, VTT, JSON, Markdown, and optional DOCX/PDF exports.](https://raw.githubusercontent.com/scottconverse/textflowkit/v0.1.13/docs/assets/architecture-overview.svg)
72
+ ![TextFlowKit shared-core architecture: five thin entry points feed one core. The CLI, Python API, MCP, HTTP API, and the local browser UI (a fifth door that mounts the existing HTTP app under /api and shares the same job store, adding transport only, not a new pipeline) sit above one core that acquires and decodes media, transcribes with the default Whistle engine or an explicitly selected openai-whisper, keeps job state and resume checkpoints in an optional SQLite store, adds optional speaker or translation postprocessing, and publishes TXT, SRT, VTT, JSON, Markdown, and optional DOCX/PDF exports.](https://raw.githubusercontent.com/scottconverse/textflowkit/v0.1.14/docs/assets/architecture-overview.svg)
73
73
 
74
74
  The design principle is **one shared core, thin doors**. Everything of substance
75
75
  lives in the core; the interfaces are thin — the local browser UI is a fifth door
@@ -93,7 +93,7 @@ see [docs/architecture.md](https://github.com/scottconverse/textflowkit/blob/mai
93
93
 
94
94
  ## Live microphone streaming (opt-in)
95
95
 
96
- In v0.1.13, live streaming supports **Windows x86_64 only**. When
96
+ In v0.1.14, live streaming supports **Windows x86_64 only**. When
97
97
  `TEXTFLOWKIT_STREAMING=1` is set, the developer HTTP app serves a `/stream`
98
98
  WebSocket and the local UI serves `/api/stream`, both transcribing a live microphone
99
99
  as you speak. A **runnable, self-hosted browser example** ships at
@@ -102,7 +102,7 @@ as you speak. A **runnable, self-hosted browser example** ships at
102
102
  No CDN, no analytics, no external fetch. Requires the `streaming` extra:
103
103
 
104
104
  ```bash
105
- python -m pip install "textflowkit[streaming]==0.1.13"
105
+ python -m pip install "textflowkit[streaming]==0.1.14"
106
106
  ```
107
107
 
108
108
  It is **off by default** — with the switch unset the endpoint does not exist — and
@@ -168,7 +168,7 @@ installs `textflowkit-fonts` for offline multilingual PDF rendering:
168
168
  python -m pip install 'textflowkit[export]'
169
169
  ```
170
170
 
171
- ## Windows desktop installer (v0.1.13)
171
+ ## Windows desktop installer (latest verified installer: v0.1.13)
172
172
 
173
173
  [Download Windows x64 setup](https://github.com/scottconverse/textflowkit/releases/download/v0.1.13/TextFlowKit-0.1.13-windows-x64-setup.exe) · [Matching sources and notices](https://github.com/scottconverse/textflowkit/releases/tag/v0.1.13)
174
174
 
@@ -297,7 +297,7 @@ textflowkit export ./transcript.json --format vtt
297
297
  needs no PyTorch, so a fresh `pip install textflowkit` stays small and pulls no
298
298
  torch; `openai-whisper` is an explicitly selectable opt-in engine.
299
299
 
300
- ![Whistle bounded block run and durable resume: a decoded PCM WAV is split into 11-second cores with up to 2 seconds of context (each clip ≤ 15 s), each core runs as one owned child with forced telemetry-off flags, a partial checkpoint is written after each core, and a resume validates the source and decoded-WAV hashes then re-runs only the unfinished cores.](https://raw.githubusercontent.com/scottconverse/textflowkit/v0.1.13/docs/assets/whistle-resume.svg)
300
+ ![Whistle bounded block run and durable resume: a decoded PCM WAV is split into 11-second cores with up to 2 seconds of context (each clip ≤ 15 s), each core runs as one owned child with forced telemetry-off flags, a partial checkpoint is written after each core, and a resume validates the source and decoded-WAV hashes then re-runs only the unfinished cores.](https://raw.githubusercontent.com/scottconverse/textflowkit/v0.1.14/docs/assets/whistle-resume.svg)
301
301
 
302
302
  - **CPU only, no torch.** It runs a pinned native binary and downloads one pinned
303
303
  model on first use. Naming a GPU device is refused rather than silently
@@ -418,7 +418,7 @@ its own beyond the `http` extra. It ships with the core package as of v0.1.10:
418
418
  a regular install of the current release carries it.
419
419
 
420
420
  ```bash
421
- python -m pip install 'textflowkit[http,export]==0.1.13'
421
+ python -m pip install 'textflowkit[http,export]==0.1.14'
422
422
  textflowkit-ui
423
423
  ```
424
424
 
@@ -489,7 +489,9 @@ browser interface share the job contract without blocking a request.
489
489
 
490
490
  ## Status
491
491
 
492
- **v0.1.13 release.** Fixes reproduced Whistle speech omissions. Native decode
492
+ **v0.1.14 release.** Documentation-only patch: records the required isolated headless Codex workflow for DeepSeek coding contributors. Transcription, AI cleanup and streaming behavior are unchanged from v0.1.13; fonts remain 0.1.6. The latest verified Windows installer remains v0.1.13, with its matching source and notice bundles. No new native transcription proof is claimed for this documentation patch.
493
+
494
+ **Whistle behavior introduced in v0.1.13.** Fixes reproduced Whistle speech omissions. Native decode
493
495
  inputs are now bounded to 15 seconds (11-second owned cores with up to 2 seconds
494
496
  of context per side), short interior speech gaps get a bounded second listen that
495
497
  accepts words only between matching timed anchors, and shared-context words are
@@ -1,6 +1,10 @@
1
1
  # Developer and integration manual
2
2
 
3
- Current release: [v0.1.13](https://github.com/scottconverse/textflowkit/releases/tag/v0.1.13).
3
+ Current release: [v0.1.14](https://github.com/scottconverse/textflowkit/releases/tag/v0.1.14).
4
+
5
+ v0.1.14 updates developer workflow documentation only; runtime behavior is unchanged. The latest verified Windows installer remains v0.1.13 with its matching sources and notices.
6
+ For DeepSeek coding contributions, use the required [headless Codex worker workflow](deepseek-worker.md); this is a development tool, not a transcription-engine setting.
7
+
4
8
  Start with the [user manual](user-manual.md) for everyday use. Harness versions
5
9
  in the compatibility table below identify **historical test sessions**, not
6
10
  the version of TextFlowKit currently published.
@@ -553,7 +557,7 @@ observation rather than forwarding the caller's header, and keep
553
557
 
554
558
  ## Live microphone streaming (`/stream`, opt-in)
555
559
 
556
- In v0.1.13, native live streaming (introduced in v0.1.11) supports **Windows x86_64 only**. Other live
560
+ In v0.1.14, native live streaming (introduced in v0.1.11) supports **Windows x86_64 only**. Other live
557
561
  platforms are unsupported; existing standalone defaults and platform support are
558
562
  unchanged. Physical browser microphone capture was not verified. The public site
559
563
  is static documentation and serves no streams. Both local server surfaces can
@@ -564,7 +568,7 @@ exist and a connection is refused before any session is allocated - and it needs
564
568
  `streaming` extra (`websockets`).
565
569
 
566
570
  ```powershell
567
- python -m pip install "textflowkit[streaming]==0.1.13"
571
+ python -m pip install "textflowkit[streaming]==0.1.14"
568
572
  # Native Windows PowerShell:
569
573
  $env:TEXTFLOWKIT_API_TOKEN="choose-a-long-random-token"
570
574
  $env:TEXTFLOWKIT_STREAMING="1"
@@ -604,7 +608,7 @@ supplies FastAPI and uvicorn, and adds no new dependency). It has no public site
604
608
  of its own: it is a local app, not a hosted service.
605
609
 
606
610
  ```bash
607
- python -m pip install 'textflowkit[http,export]==0.1.13'
611
+ python -m pip install 'textflowkit[http,export]==0.1.14'
608
612
  textflowkit-ui # serve on 127.0.0.1 and open a browser
609
613
  textflowkit-ui --no-browser --port 8901
610
614
  ```
@@ -1,4 +1,4 @@
1
- # Architecture and job lifecycle — v0.1.13
1
+ # Architecture and job lifecycle — v0.1.14
2
2
 
3
3
  This guide describes how textflowkit is put together and how a job moves through
4
4
  it. It is orientation for maintainers and integrators; it is not a deployment
@@ -0,0 +1,29 @@
1
+ # Required DeepSeek coding harness
2
+
3
+ Owner directive, 2026-10-19: all DeepSeek coding work on TextFlowKit uses native headless Codex exec through Ollama. No custom agent loop or Claude Code. This remains binding after restart unless Scott changes it.
4
+
5
+ - Exact requested model: `deepseek-v4.1-flash:1017-cloud`. Provider-reported canonical ID: `deepseek-v4.1-flash:1017`.
6
+ - Thinking off: `model_reasoning_effort = "none"`; verify actual provider effort and reasoning-token receipts.
7
+ - No model/provider/harness fallback. Missing setup is a repair task or blocker, not permission to revert to `scripts/run_deepseek_worker.py`.
8
+ - Use dedicated worktree/branch, isolated CODEX_HOME/profile/temp, cleared-and-allowlisted process environment, no copied personal auth/settings/hooks/MCP configuration, and native Windows workspace-write sandbox. Do not bypass enforced controls. This is not a VM or full read-confidentiality boundary.
9
+ - Send a scoped brief on stdin. Preserve native JSONL events, stderr, session/metadata, PID ownership and terminal state. Workers do not publish or launch nested workers. Main assistant coordinates/audits; worker implements the assigned unit.
10
+
11
+ ## Local installation on Scott's Windows machine
12
+
13
+ - Worktree: `C:\Users\scott\Desktop\Code\textflowkit-headless-worker`
14
+ - Branch: `worker/headless-codex-deepseek`
15
+ - Setup directory: `C:\Users\scott\Documents\Codex\2026-09-21\re\outputs\headless-codex-deepseek-20261019`
16
+ - Launcher: `run-codex.ps1` in that directory (Brief, Unit and optional Resume parameters).
17
+ - Configuration: `codex-home\config.toml`; model metadata: `codex-home\models.json`.
18
+ - Endpoint: `http://127.0.0.1:11434/v1`. IPv6 localhost refused the setup probe; no service configuration was changed.
19
+ - Tested Codex: `0.163.0-alpha.10.2`; launcher pins the tested executable path. If an app upgrade removes that path, verify the replacement executable/configuration and affected behavior, preserving the exact model and thinking-off setting. Do not silently revert to another harness.
20
+ - Evidence: `verification.json`, `runs\`, `README.md`, current `STATE.md` alongside the launcher.
21
+
22
+ ## Restart checklist
23
+
24
+ 1. Read repository AGENTS.md, this document and the setup STATE.md.
25
+ 2. Inspect worktree status and the scoped brief; preserve unrelated changes.
26
+ 3. Check the launcher/config still select exact model, none effort, isolation and sandbox. Reuse unaffected verification evidence; retest changed inputs or unresolved acceptance only.
27
+ 4. Use native Codex, never the historical Python runner. Report actual provider/model, reasoning setting and tool results separately from configuration.
28
+
29
+ The old Python runner remains historical repository code; its presence is not authorization to use it. This instruction does not change Whistle, application cleanup models, normal non-DeepSeek preferences, or existing release authorization boundaries.
@@ -206,7 +206,7 @@
206
206
  <main id="main">
207
207
  <div class="wrap hero">
208
208
  <div>
209
- <span class="eyebrow">Open source · Apache 2.0 · v0.1.13</span>
209
+ <span class="eyebrow">Open source · Apache 2.0 · v0.1.14</span>
210
210
  <h1>Media in.<br><em>Useful text</em> out.</h1>
211
211
  <p class="lead">Transcribe video and audio into timestamped, searchable text. One shared core for your command line, AI harness, and application.</p>
212
212
  <div class="actions">
@@ -214,7 +214,8 @@
214
214
  <a class="button secondary" href="https://pypi.org/project/textflowkit/">Install from PyPI <span aria-hidden="true">&nbsp;↗</span></a>
215
215
  </div>
216
216
  <p class="micro">Self-hosted toolkit · Native Windows, macOS, Linux · No account required</p>
217
- <p class="micro">Latest verified release: <a href="https://github.com/scottconverse/textflowkit/releases/tag/v0.1.13">v0.1.13</a> · <a href="https://github.com/scottconverse/textflowkit/blob/main/docs/user-manual.md">User manual</a></p>
217
+ <p class="micro">Latest verified release: <a href="https://github.com/scottconverse/textflowkit/releases/tag/v0.1.14">v0.1.14</a> · <a href="https://github.com/scottconverse/textflowkit/blob/main/docs/user-manual.md">User manual</a></p>
218
+ <p class="micro">v0.1.14 is a developer-documentation patch; transcription behavior is unchanged. The verified Windows installer remains v0.1.13.</p>
218
219
  </div>
219
220
  <div class="terminal" aria-label="Example transcription command and output">
220
221
  <div class="terminal-top"><span class="dot"></span><span class="dot"></span><span class="dot"></span><span class="terminal-label">textflowkit / terminal</span></div>
@@ -308,7 +309,7 @@
308
309
  <div class="install-grid">
309
310
  <div>
310
311
  <ul>
311
- <li><strong>Install and launch:</strong> <code>python -m pip install "textflowkit[http,export]==0.1.13"</code> then <code>textflowkit-ui</code>. It adds no dependency beyond the <code>http</code> extra.</li>
312
+ <li><strong>Install and launch:</strong> <code>python -m pip install "textflowkit[http,export]==0.1.14"</code> then <code>textflowkit-ui</code>. It adds no dependency beyond the <code>http</code> extra.</li>
312
313
  <li><strong>Desktop shortcut (Windows):</strong> <code>textflowkit-ui --create-shortcut</code> makes a Start Menu entry that launches with <code>pythonw</code> (no console) and needs no <code>pywin32</code>. That shortcut is the normal way to open it.</li>
313
314
  <li><strong>Loopback only:</strong> it binds <code>127.0.0.1</code> and is never reachable off the machine, whatever <code>TEXTFLOWKIT_ALLOW_REMOTE</code> is set to.</li>
314
315
  <li><strong>Durable jobs, cancel, and resume:</strong> jobs and checkpoints are stored durably; you can cancel a running job and resume a saved one. Shutdown <em>drains</em> — it waits for current jobs to finish rather than cancelling them.</li>
@@ -319,7 +320,7 @@
319
320
  <a class="button secondary" href="https://github.com/scottconverse/textflowkit/blob/main/docs/user-manual.md#7-local-browser-interface">Read the local UI guide ↗</a>
320
321
  </div>
321
322
  <div>
322
- <pre class="codebox"><span class="prompt">$ </span>python -m pip install "textflowkit[http,export]==0.1.13"
323
+ <pre class="codebox"><span class="prompt">$ </span>python -m pip install "textflowkit[http,export]==0.1.14"
323
324
  <span class="prompt">$ </span>textflowkit-ui --create-shortcut
324
325
  <span class="comment"># then open it from the Start Menu shortcut</span></pre>
325
326
  <p class="note"><strong>Public page vs. local app.</strong> This landing page is the public, static site. The browser workspace is a separate, local program: it never runs here and is not reachable from the internet. v0.1.12 added optional UI-only local Ollama cleanup and native Windows packaging (that cleanup remains as introduced in v0.1.12); existing standalone defaults, file/URL jobs, CLI, and MCP behavior remain unchanged. This public site serves no streaming endpoint.</p>
@@ -387,7 +388,7 @@
387
388
  <li>Find the right setup for AMD ROCm in the install guide before installing dependencies — this applies to the optional <code>openai-whisper</code> engine and to diarization.</li>
388
389
  </ul>
389
390
  <a class="button secondary" href="https://github.com/scottconverse/textflowkit/blob/main/docs/install.md">Read install guide ↗</a>
390
- <p class="note">New here? Follow the <a href="https://github.com/scottconverse/textflowkit/blob/main/docs/user-manual.md">v0.1.13 user manual</a> for CLI, MCP, HTTP, the local browser interface, export, and troubleshooting examples, or the <a href="https://github.com/scottconverse/textflowkit/blob/main/docs/adapters.md">developer and integration manual</a> for harness configuration and production settings.</p>
391
+ <p class="note">New here? Follow the <a href="https://github.com/scottconverse/textflowkit/blob/main/docs/user-manual.md">v0.1.14 user manual</a> for CLI, MCP, HTTP, the local browser interface, export, and troubleshooting examples, or the <a href="https://github.com/scottconverse/textflowkit/blob/main/docs/adapters.md">developer and integration manual</a> for harness configuration and production settings.</p>
391
392
  </div>
392
393
  <div>
393
394
  <pre class="codebox"><span class="prompt">$ </span>python -m pip install "textflowkit[mcp,http]"
@@ -1,6 +1,8 @@
1
1
  # Install notes
2
2
 
3
- Current release: [v0.1.13](https://github.com/scottconverse/textflowkit/releases/tag/v0.1.13).
3
+ Current release: [v0.1.14](https://github.com/scottconverse/textflowkit/releases/tag/v0.1.14).
4
+
5
+ v0.1.14 updates developer workflow documentation only; runtime behavior is unchanged. The latest verified Windows installer remains v0.1.13 with its matching sources and notices.
4
6
  Use `textflowkit --version` to confirm the installed version. For everyday
5
7
  commands and outputs, start with the [user manual](user-manual.md).
6
8
 
@@ -55,7 +57,7 @@ The local browser workspace **ships in the core package as of v0.1.10**. A
55
57
  regular install of the current release carries the `textflowkit-ui` command:
56
58
 
57
59
  ```bash
58
- python -m pip install 'textflowkit[http,export]==0.1.13'
60
+ python -m pip install 'textflowkit[http,export]==0.1.14'
59
61
  textflowkit-ui
60
62
  ```
61
63
 
@@ -84,14 +86,14 @@ them; cancel a job first to stop it early. See the
84
86
 
85
87
  ## Live microphone streaming
86
88
 
87
- Live streaming in v0.1.13 (introduced in v0.1.11) is **Windows x86_64 only, opt-in and off by default**.
89
+ Live streaming in v0.1.14 (introduced in v0.1.11) is **Windows x86_64 only, opt-in and off by default**.
88
90
  Other live platforms are unsupported; existing standalone platform support and
89
91
  Whistle defaults are unchanged. Physical browser microphone capture has not been
90
92
  verified; the public website is static documentation and does not accept streams. It needs one extra dependency
91
93
  (the WebSocket implementation for the ASGI server):
92
94
 
93
95
  ```bash
94
- python -m pip install "textflowkit[streaming]==0.1.13"
96
+ python -m pip install "textflowkit[streaming]==0.1.14"
95
97
  ```
96
98
 
97
99
  Set `TEXTFLOWKIT_STREAMING=1` to serve it, then open the shipped browser example.
@@ -1,6 +1,12 @@
1
1
  # Release verification checklist
2
2
 
3
- ## v0.1.13 release preparation
3
+ ## v0.1.14 documentation-only patch
4
+
5
+ Core 0.1.14; fonts 0.1.6 reused unchanged. This release changes developer workflow documentation and current version metadata only, not application logic/dependencies. Run `python scripts/verify_release_versions.py --tag v0.1.14`, `python scripts/verify_readme_release.py --version v0.1.14`, affected release-surface tests and required CI. Merge only after green PR CI; require exact merged-main CI before tagging/publishing. Verify published distribution hashes, fresh installed version and the deployed website.
6
+
7
+ The verified Windows installer and its corresponding sources/notices remain v0.1.13; keep those download links explicitly versioned. Do not relabel/rebuild unchanged installer artifacts merely for this documentation patch. Reuse unaffected v0.1.13 native/live evidence with its original commit/version and do not claim a new live YouTube or native accuracy verification for v0.1.14. No changes to the live-check script or its requirements.
8
+
9
+ ## Historical v0.1.13 release preparation
4
10
 
5
11
  Core is 0.1.13; fonts remain 0.1.6, unchanged. Run the existing guards from the candidate root:
6
12
 
@@ -262,3 +262,8 @@ the full five-role audit of v0.1.6 main commit
262
262
  Deferral does not remove these findings or waive their acceptance criteria.
263
263
  Core engineering/runtime bugs and the major documentation corrections remain
264
264
  in the active repair goal. See the [changelog](../CHANGELOG.md).
265
+
266
+ ## v0.1.14 — developer workflow documentation
267
+
268
+ - [x] Ship v0.1.14 review follow-ups: persist the headless-Codex-only DeepSeek coding policy across restarts; require the exact 1017-cloud model, thinking off, isolated worktree/config/environment and native Windows sandbox, with no silent fallback.
269
+ - [x] Update current package/documentation release references; retain the verified v0.1.13 Windows installer and historical native evidence unchanged. No new application capability.
@@ -1,4 +1,4 @@
1
- # Live microphone streaming — v0.1.13
1
+ # Live microphone streaming — v0.1.14
2
2
 
3
3
  TextFlowKit can transcribe a **live microphone** as you speak: audio is captured in
4
4
  the browser, resampled to 16 kHz mono, and streamed to a local WebSocket, and the
@@ -9,7 +9,7 @@ commands, and the limits.
9
9
  The capability is **opt-in, loopback-only, and verified on this machine's native
10
10
  engine for bounded live runs** — 65 s and 300 s end-to-end native streams ran
11
11
  locally on Windows x86_64 (see *Limits and known constraints*). Native live support is **Windows x86_64 only**; other live platforms are
12
- unsupported. This v0.1.13 release surface (introduced in v0.1.11) is gated behind an environment switch
12
+ unsupported. This v0.1.14 release surface (introduced in v0.1.11) is gated behind an environment switch
13
13
  so a default install never serves it. The public website is static documentation,
14
14
  not a streaming service. Publication and remote CI are separate release gates.
15
15
 
@@ -45,7 +45,7 @@ audio buffer is allocated.
45
45
  ### Option A — the local browser UI (point and click)
46
46
 
47
47
  ```bat
48
- python -m pip install "textflowkit[streaming]==0.1.13"
48
+ python -m pip install "textflowkit[streaming]==0.1.14"
49
49
  set TEXTFLOWKIT_STREAMING=1
50
50
  textflowkit-ui
51
51
  ```
@@ -61,7 +61,7 @@ first WebSocket message; it is never written into the page, its JavaScript, or a
61
61
  ### Option B — the developer HTTP API (programmatic clients)
62
62
 
63
63
  ```bat
64
- python -m pip install "textflowkit[streaming]==0.1.13"
64
+ python -m pip install "textflowkit[streaming]==0.1.14"
65
65
  set TEXTFLOWKIT_STREAMING=1
66
66
  set TEXTFLOWKIT_API_TOKEN=choose-a-long-random-token
67
67
  textflowkit-http --streaming
@@ -1,4 +1,6 @@
1
- # TextFlowKit user manual — v0.1.13
1
+ # TextFlowKit user manual — v0.1.14
2
+
3
+ v0.1.14 is a documentation-only patch. Transcription behavior is unchanged from v0.1.13; the latest verified Windows installer remains v0.1.13. Developer workflow changes are described in the [integration manual](adapters.md).
2
4
 
3
5
  TextFlowKit turns a local audio/video file or a supported media URL into a
4
6
  timestamped transcript. It is a **self-hosted developer tool**, not a hosted
@@ -79,7 +81,7 @@ Install Python 3.10 or later and `ffmpeg`/`ffprobe` on `PATH`. For a standard
79
81
  CPU setup, install the current release from PyPI:
80
82
 
81
83
  ```bash
82
- python -m pip install 'textflowkit[export,mcp,http]==0.1.13'
84
+ python -m pip install 'textflowkit[export,mcp,http]==0.1.14'
83
85
  textflowkit --version
84
86
  textflowkit doctor
85
87
  textflowkit selftest
@@ -347,7 +349,7 @@ point from the developer HTTP API, reuses the same pipeline and job store, and i
347
349
  served on loopback only.
348
350
 
349
351
  ```bash
350
- python -m pip install 'textflowkit[http,export]==0.1.13'
352
+ python -m pip install 'textflowkit[http,export]==0.1.14'
351
353
  textflowkit-ui
352
354
  ```
353
355
 
@@ -439,7 +441,7 @@ and nowhere else.
439
441
 
440
442
  It is **off by default**: with the switch unset the endpoint
441
443
  does not exist. It needs the `streaming` extra
442
- (`python -m pip install "textflowkit[streaming]==0.1.13"`). This is a capability of the
444
+ (`python -m pip install "textflowkit[streaming]==0.1.14"`). This is a capability of the
443
445
  **servers**, not the command-line `textflowkit` tool — the CLI never opens a
444
446
  microphone. See [streaming.md](streaming.md) for the full contract and the
445
447
  programmatic API.
@@ -523,8 +525,8 @@ passes with Whistle's own real speech output.
523
525
 
524
526
  ## 9. Release and help
525
527
 
526
- - [v0.1.13 GitHub release](https://github.com/scottconverse/textflowkit/releases/tag/v0.1.13)
527
- - [Core package 0.1.13 on PyPI](https://pypi.org/project/textflowkit/0.1.13/) and [unchanged optional font package 0.1.6](https://pypi.org/project/textflowkit-fonts/0.1.6/)
528
+ - [v0.1.14 GitHub release](https://github.com/scottconverse/textflowkit/releases/tag/v0.1.14)
529
+ - [Core package 0.1.14 on PyPI](https://pypi.org/project/textflowkit/0.1.14/) and [unchanged optional font package 0.1.6](https://pypi.org/project/textflowkit-fonts/0.1.6/)
528
530
  - [Release verification procedure](release-checklist.md), [security policy](../SECURITY.md), and [issues](https://github.com/scottconverse/textflowkit/issues)
529
531
 
530
532
  The v0.1.13 release fixes reproduced Whistle speech omissions with a 15-second
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "textflowkit"
7
- version = "0.1.13"
7
+ version = "0.1.14"
8
8
  description = "Cross-platform media transcription toolkit: URL or file in, timestamped transcripts and subtitle files out."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -18,7 +18,7 @@ from textflowkit.core.streaming_events import (
18
18
  WorkerProcessError,
19
19
  )
20
20
 
21
- __version__ = "0.1.13"
21
+ __version__ = "0.1.14"
22
22
 
23
23
  __all__ = [
24
24
  "PipelineError",
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes