TalkPipe 1.0.2__tar.gz → 1.0.2b1__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 (366) hide show
  1. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/.github/workflows/ci-cd.yml +84 -6
  2. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/AGENTS.md +7 -0
  3. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/CHANGELOG.md +62 -26
  4. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/PKG-INFO +24 -12
  5. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/README.md +21 -11
  6. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/RELEASING.md +23 -4
  7. talkpipe-1.0.2b1/appcenter/README.md +300 -0
  8. talkpipe-1.0.2b1/appcenter/install.ps1 +59 -0
  9. talkpipe-1.0.2b1/appcenter/install.sh +87 -0
  10. talkpipe-1.0.2b1/appcenter/talkpipe.toml +71 -0
  11. talkpipe-1.0.2b1/appcenter/talkpipe_appcenter.py +2665 -0
  12. talkpipe-1.0.2b1/appcenter/tests/conftest.py +314 -0
  13. talkpipe-1.0.2b1/appcenter/tests/test_actions.py +298 -0
  14. talkpipe-1.0.2b1/appcenter/tests/test_bootstrap.py +117 -0
  15. talkpipe-1.0.2b1/appcenter/tests/test_catalog.py +328 -0
  16. talkpipe-1.0.2b1/appcenter/tests/test_channel.py +256 -0
  17. talkpipe-1.0.2b1/appcenter/tests/test_cli.py +321 -0
  18. talkpipe-1.0.2b1/appcenter/tests/test_packaging.py +62 -0
  19. talkpipe-1.0.2b1/appcenter/tests/test_shortcut.py +340 -0
  20. talkpipe-1.0.2b1/appcenter/tests/test_status.py +251 -0
  21. talkpipe-1.0.2b1/appcenter/tests/test_tui.py +257 -0
  22. talkpipe-1.0.2b1/appcenter/tests/test_uv.py +126 -0
  23. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/architecture/chatterlang.md +0 -22
  24. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/pyproject.toml +15 -4
  25. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/pytest.ini +5 -0
  26. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/llm/chat.py +0 -40
  27. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/llm/prompt_adapter_base.py +1 -14
  28. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/llm/prompt_adapters_anthropic.py +1 -5
  29. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/llm/prompt_adapters_ollama.py +1 -6
  30. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/llm/prompt_adapters_openai.py +0 -4
  31. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe.egg-info/PKG-INFO +24 -12
  32. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe.egg-info/SOURCES.txt +16 -1
  33. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe.egg-info/requires.txt +2 -0
  34. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe.egg-info/scm_file_list.json +16 -1
  35. talkpipe-1.0.2b1/src/talkpipe.egg-info/scm_version.json +8 -0
  36. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/llm/test_chat.py +0 -68
  37. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/llm/test_prompt_adapters_anthropic.py +0 -19
  38. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/llm/test_prompt_adapters_eliza.py +0 -18
  39. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/llm/test_prompt_adapters_ollama.py +0 -36
  40. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/llm/test_prompt_adapters_openai.py +0 -36
  41. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/test_config_keys_documented.py +15 -1
  42. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/uv.lock +72 -48
  43. talkpipe-1.0.2/docs/chatterlang_workbench_screenshot.png +0 -0
  44. talkpipe-1.0.2/src/talkpipe.egg-info/scm_version.json +0 -8
  45. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/.cursor/skills/changelog-update/SKILL.md +0 -0
  46. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/.cursor/skills/doc-example-formatting/SKILL.md +0 -0
  47. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/.cursor/skills/run-documentation-examples/SKILL.md +0 -0
  48. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/.cursor/skills/run-documentation-examples/scripts/run_documentation_examples.py +0 -0
  49. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/.cursor/skills/test-driven-development/SKILL.md +0 -0
  50. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/.cursor/skills/update-entry-points/SKILL.md +0 -0
  51. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/.cursor/skills/update-entry-points/scripts/update_entry_points.py +0 -0
  52. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/.dockerignore +0 -0
  53. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/.gitea/default_merge_message/MERGE_TEMPLATE.md +0 -0
  54. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/.gitea/default_merge_message/SQUASH_TEMPLATE.md +0 -0
  55. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/.github/CICD.md +0 -0
  56. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/.github/ISSUE_TEMPLATE/release-checklist.md +0 -0
  57. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/.github/SECURITY.md +0 -0
  58. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/.github/copilot-instructions.md +0 -0
  59. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/.github/dependabot.yml +0 -0
  60. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/.github/prompts/add-segment.prompt.md +0 -0
  61. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/.github/prompts/changelog.prompt.md +0 -0
  62. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/.github/prompts/doc-examples.prompt.md +0 -0
  63. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/.github/prompts/tdd.prompt.md +0 -0
  64. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/.github/prompts/update-entry-points.prompt.md +0 -0
  65. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/.gitignore +0 -0
  66. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/.pre-commit-config.yaml +0 -0
  67. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/.safety-policy.yml +0 -0
  68. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/.safety-project.ini +0 -0
  69. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/.vscode/settings.json +0 -0
  70. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/.vscode/tasks.json +0 -0
  71. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/COPYRIGHT +0 -0
  72. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/Dockerfile +0 -0
  73. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/LICENSE +0 -0
  74. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/.gitignore +0 -0
  75. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/LLMChat.png +0 -0
  76. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/LLMEvaluateWebPage.png +0 -0
  77. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/README.md +0 -0
  78. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/TalkPipe.png +0 -0
  79. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/TalkPipe.xcf +0 -0
  80. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/api-reference/README.md +0 -0
  81. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/api-reference/chatterlang-script.md +0 -0
  82. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/api-reference/chatterlang-server.md +0 -0
  83. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/api-reference/chatterlang-workbench.md +0 -0
  84. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/api-reference/lazy-loading.md +0 -0
  85. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/api-reference/talkpipe-plugin-manager.md +0 -0
  86. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/api-reference/talkpipe-ref.md +0 -0
  87. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/architecture/README.md +0 -0
  88. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/architecture/configuration.md +0 -0
  89. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/architecture/documentation-formatting.md +0 -0
  90. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/architecture/extending-talkpipe.md +0 -0
  91. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/architecture/metadata-stream.md +0 -0
  92. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/architecture/pipe-api.md +0 -0
  93. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/architecture/protocol.md +0 -0
  94. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/architecture/security.md +0 -0
  95. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/architecture/streaming.md +0 -0
  96. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/contributing/developer-handbook.md +0 -0
  97. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/guides/container-images.md +0 -0
  98. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/guides/makevectordatabase-and-serverag.md +0 -0
  99. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/guides/model-and-source-configuration.md +0 -0
  100. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/guides/model2vec-embeddings.md +0 -0
  101. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/make_structure_diagram.sh +0 -0
  102. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/quickstart.md +0 -0
  103. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/structure.tex +0 -0
  104. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/talkpipe_architecture.png +0 -0
  105. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/talkpipe_architecture.tex +0 -0
  106. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/talkpipe_diagram.png +0 -0
  107. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/tutorials/.gitignore +0 -0
  108. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/tutorials/README.md +0 -0
  109. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/tutorials/Tutorial_1-Document_Indexing/README.md +0 -0
  110. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/tutorials/Tutorial_1-Document_Indexing/Step_1_CreateSyntheticData.bat +0 -0
  111. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/tutorials/Tutorial_1-Document_Indexing/Step_1_CreateSyntheticData.script +0 -0
  112. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/tutorials/Tutorial_1-Document_Indexing/Step_1_CreateSyntheticData.sh +0 -0
  113. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/tutorials/Tutorial_1-Document_Indexing/Step_2_IndexStories.bat +0 -0
  114. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/tutorials/Tutorial_1-Document_Indexing/Step_2_IndexStories.script +0 -0
  115. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/tutorials/Tutorial_1-Document_Indexing/Step_2_IndexStories.sh +0 -0
  116. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/tutorials/Tutorial_1-Document_Indexing/Step_3_SearchStories.bat +0 -0
  117. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/tutorials/Tutorial_1-Document_Indexing/Step_3_SearchStories.script +0 -0
  118. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/tutorials/Tutorial_1-Document_Indexing/Step_3_SearchStories.sh +0 -0
  119. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/tutorials/Tutorial_1-Document_Indexing/stories.json +0 -0
  120. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/tutorials/Tutorial_1-Document_Indexing/story_search_ui.yml +0 -0
  121. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/README.md +0 -0
  122. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_1_CreateVectorDatabase.bat +0 -0
  123. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_1_CreateVectorDatabase.script +0 -0
  124. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_1_CreateVectorDatabase.sh +0 -0
  125. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_2_SearchByExample.bat +0 -0
  126. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_2_SearchByExample.script +0 -0
  127. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_2_SearchByExample.sh +0 -0
  128. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_3_SpecializedRag.bat +0 -0
  129. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_3_SpecializedRag.script +0 -0
  130. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_3_SpecializedRag.sh +0 -0
  131. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/step_3_extras.py +0 -0
  132. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/story_by_example_ui.yml +0 -0
  133. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/tutorials/Tutorial_3_Report_Writing/README.md +0 -0
  134. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/tutorials/Tutorial_3_Report_Writing/Step_1_ExecutiveSummaryGeneration.bat +0 -0
  135. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/tutorials/Tutorial_3_Report_Writing/Step_1_ExecutiveSummaryGeneration.script +0 -0
  136. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/tutorials/Tutorial_3_Report_Writing/Step_1_ExecutiveSummaryGeneration.sh +0 -0
  137. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/tutorials/Tutorial_3_Report_Writing/Step_2_DetailedAnalysisReportGeneration.bat +0 -0
  138. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/tutorials/Tutorial_3_Report_Writing/Step_2_DetailedAnalysisReportGeneration.script +0 -0
  139. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/tutorials/Tutorial_3_Report_Writing/Step_2_DetailedAnalysisReportGeneration.sh +0 -0
  140. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/tutorials/Tutorial_3_Report_Writing/Step_3_MultiFormatReportGeneration.bat +0 -0
  141. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/tutorials/Tutorial_3_Report_Writing/Step_3_MultiFormatReportGeneration.script +0 -0
  142. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/tutorials/Tutorial_3_Report_Writing/Step_3_MultiFormatReportGeneration.sh +0 -0
  143. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/tutorials/Tutorial_3_Report_Writing/file_structure.md +0 -0
  144. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/tutorials/Tutorial_3_Report_Writing/multi_format_ui.yml +0 -0
  145. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/tutorials/Tutorial_3_Report_Writing/report_topic_ui.yml +0 -0
  146. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/tutorials/Tutorial_3_Report_Writing/step_1_extras.py +0 -0
  147. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/tutorials/Tutorial_3_Report_Writing/step_2_extras.py +0 -0
  148. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/tutorials/Tutorial_3_Report_Writing/step_3_extras.py +0 -0
  149. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/docs/workbench_demo.mp4 +0 -0
  150. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/frontend/.gitignore +0 -0
  151. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/frontend/README.md +0 -0
  152. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/frontend/build.mjs +0 -0
  153. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/frontend/package-lock.json +0 -0
  154. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/frontend/package.json +0 -0
  155. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/frontend/src/cm.js +0 -0
  156. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/scripts/extract_documentation_examples.py +0 -0
  157. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/setup.cfg +0 -0
  158. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/__init__.py +0 -0
  159. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/app/__init__.py +0 -0
  160. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/app/chatterlang_generate_entry_points.py +0 -0
  161. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/app/chatterlang_reference_browser.py +0 -0
  162. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/app/chatterlang_reference_generator.py +0 -0
  163. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/app/chatterlang_script.py +0 -0
  164. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/app/chatterlang_serve.py +0 -0
  165. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/app/chatterlang_workbench.py +0 -0
  166. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/app/doc_examples.py +0 -0
  167. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/app/makevectordatabase.py +0 -0
  168. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/app/precache_model2vec.py +0 -0
  169. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/app/server_common.py +0 -0
  170. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/app/serverag.py +0 -0
  171. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/app/static/favicon.ico +0 -0
  172. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/app/static/serve/common.js +0 -0
  173. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/app/static/serve/index.css +0 -0
  174. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/app/static/serve/index.js +0 -0
  175. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/app/static/serve/stream.css +0 -0
  176. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/app/static/serve/stream.js +0 -0
  177. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/app/static/serve/vendor/LICENSES.txt +0 -0
  178. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/app/static/serve/vendor/marked.min.js +0 -0
  179. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/app/static/serve/vendor/purify.min.js +0 -0
  180. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/app/static/talkpipe_logo.png +0 -0
  181. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/app/static/workbench/app.js +0 -0
  182. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/app/static/workbench/editor.js +0 -0
  183. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/app/static/workbench/index.html +0 -0
  184. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/app/static/workbench/styles.css +0 -0
  185. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/app/static/workbench/suggest.js +0 -0
  186. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/app/static/workbench/vendor/LICENSES.txt +0 -0
  187. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/app/static/workbench/vendor/codemirror.js +0 -0
  188. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/app/static/workbench/workspace.js +0 -0
  189. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/app/talkpipe_plugin_manager.py +0 -0
  190. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/app/templates/chatterlang_serve/index.html +0 -0
  191. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/app/templates/chatterlang_serve/stream.html +0 -0
  192. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/app/workbench/__init__.py +0 -0
  193. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/app/workbench/corpus.py +0 -0
  194. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/app/workbench/reference_api.py +0 -0
  195. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/app/workbench/suggest.py +0 -0
  196. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/app/workbench/suggest_api.py +0 -0
  197. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/app/workbench/workspace.py +0 -0
  198. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/app/workbench/workspace_api.py +0 -0
  199. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/app/workbench_data/seed_scripts/README.md +0 -0
  200. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/app/workbench_data/seed_scripts/tutorial_1-document_indexing__step_1_createsyntheticdata.script +0 -0
  201. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/app/workbench_data/seed_scripts/tutorial_1-document_indexing__step_2_indexstories.script +0 -0
  202. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/app/workbench_data/seed_scripts/tutorial_1-document_indexing__step_3_searchstories.script +0 -0
  203. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/app/workbench_data/seed_scripts/tutorial_2-search_by_example_and_rag__step_1_createvectordatabase.script +0 -0
  204. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/app/workbench_data/seed_scripts/tutorial_2-search_by_example_and_rag__step_2_searchbyexample.script +0 -0
  205. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/app/workbench_data/seed_scripts/tutorial_2-search_by_example_and_rag__step_3_specializedrag.script +0 -0
  206. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/app/workbench_data/seed_scripts/tutorial_3_report_writing__step_1_executivesummarygeneration.script +0 -0
  207. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/app/workbench_data/seed_scripts/tutorial_3_report_writing__step_2_detailedanalysisreportgeneration.script +0 -0
  208. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/app/workbench_data/seed_scripts/tutorial_3_report_writing__step_3_multiformatreportgeneration.script +0 -0
  209. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/chatterlang/__init__.py +0 -0
  210. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/chatterlang/compiler.py +0 -0
  211. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/chatterlang/parsers.py +0 -0
  212. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/chatterlang/registry.py +0 -0
  213. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/data/__init__.py +0 -0
  214. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/data/email.py +0 -0
  215. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/data/extraction.py +0 -0
  216. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/data/html.py +0 -0
  217. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/data/image.py +0 -0
  218. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/data/mongo.py +0 -0
  219. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/data/rss.py +0 -0
  220. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/data/text/__init__.py +0 -0
  221. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/data/text/chunking_units.py +0 -0
  222. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/data/text/cleaning.py +0 -0
  223. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/data/text/englishnormalize.py +0 -0
  224. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/data/text/operations.py +0 -0
  225. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/llm/__init__.py +0 -0
  226. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/llm/_ollama_common.py +0 -0
  227. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/llm/config.py +0 -0
  228. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/llm/content.py +0 -0
  229. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/llm/embedding.py +0 -0
  230. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/llm/embedding_adapters.py +0 -0
  231. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/llm/embedding_adapters_model2vec.py +0 -0
  232. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/llm/embedding_adapters_openai.py +0 -0
  233. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/llm/embedding_errors.py +0 -0
  234. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/llm/model2vec_embeddings.py +0 -0
  235. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/llm/multimodal.py +0 -0
  236. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/llm/prompt_adapter_memory.py +0 -0
  237. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/llm/prompt_adapters.py +0 -0
  238. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/llm/prompt_adapters_eliza.py +0 -0
  239. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/llm/vision.py +0 -0
  240. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/operations/__init__.py +0 -0
  241. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/operations/filtering.py +0 -0
  242. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/operations/matrices.py +0 -0
  243. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/operations/thread_ops.py +0 -0
  244. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/operations/transforms.py +0 -0
  245. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/pipe/__init__.py +0 -0
  246. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/pipe/basic.py +0 -0
  247. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/pipe/collect.py +0 -0
  248. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/pipe/core.py +0 -0
  249. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/pipe/debug.py +0 -0
  250. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/pipe/fields.py +0 -0
  251. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/pipe/filters.py +0 -0
  252. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/pipe/flow.py +0 -0
  253. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/pipe/fork.py +0 -0
  254. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/pipe/hashing.py +0 -0
  255. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/pipe/io.py +0 -0
  256. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/pipe/math.py +0 -0
  257. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/pipe/metadata.py +0 -0
  258. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/pipe/shell.py +0 -0
  259. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/pipelines/__init__.py +0 -0
  260. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/pipelines/basic_rag.py +0 -0
  261. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/pipelines/vector_databases.py +0 -0
  262. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/py.typed +0 -0
  263. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/search/__init__.py +0 -0
  264. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/search/abstract.py +0 -0
  265. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/search/lancedb.py +0 -0
  266. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/search/whoosh.py +0 -0
  267. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/util/__init__.py +0 -0
  268. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/util/collections.py +0 -0
  269. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/util/config.py +0 -0
  270. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/util/constants.py +0 -0
  271. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/util/data_manipulation.py +0 -0
  272. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/util/doc_extraction.py +0 -0
  273. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/util/iterators.py +0 -0
  274. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/util/os.py +0 -0
  275. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe/util/plugin_loader.py +0 -0
  276. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe.egg-info/dependency_links.txt +0 -0
  277. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe.egg-info/entry_points.txt +0 -0
  278. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/src/talkpipe.egg-info/top_level.txt +0 -0
  279. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/conftest.py +0 -0
  280. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/embedding_adapter_contract_suite.py +0 -0
  281. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/prompt_adapter_contract_suite.py +0 -0
  282. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/app/test_chatterlang_generate_entry_points.py +0 -0
  283. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/app/test_chatterlang_reference_browser.py +0 -0
  284. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/app/test_chatterlang_reference_generator.py +0 -0
  285. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/app/test_chatterlang_script.py +0 -0
  286. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/app/test_chatterlang_serve.py +0 -0
  287. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/app/test_makevectordatabase.py +0 -0
  288. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/app/test_precache_model2vec.py +0 -0
  289. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/app/test_serve_static.py +0 -0
  290. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/app/test_server_common.py +0 -0
  291. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/app/test_server_hardening.py +0 -0
  292. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/app/test_serverag.py +0 -0
  293. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/app/test_talkpipe_plugin_manager.py +0 -0
  294. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/app/test_workbench_corpus.py +0 -0
  295. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/app/test_workbench_load_module.py +0 -0
  296. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/app/test_workbench_reference_api.py +0 -0
  297. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/app/test_workbench_static.py +0 -0
  298. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/app/test_workbench_suggest.py +0 -0
  299. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/app/test_workbench_workspace.py +0 -0
  300. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/chatterlang/test_chatterlang_workbench.py +0 -0
  301. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/chatterlang/test_compiler.py +0 -0
  302. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/chatterlang/test_entry_point_drift.py +0 -0
  303. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/chatterlang/test_entry_points.py +0 -0
  304. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/chatterlang/test_parsers.py +0 -0
  305. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/chatterlang/test_registry.py +0 -0
  306. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/data/sample_feed.pkl +0 -0
  307. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/data/test.docx +0 -0
  308. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/data/test_email.py +0 -0
  309. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/data/test_extraction.py +0 -0
  310. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/data/test_html.py +0 -0
  311. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/data/test_html_exceptions.py +0 -0
  312. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/data/test_image.py +0 -0
  313. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/data/test_mogomock.py +0 -0
  314. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/data/test_mongo.py +0 -0
  315. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/data/test_mongo_integration.py +0 -0
  316. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/data/test_mongo_timeouts.py +0 -0
  317. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/data/test_rss.py +0 -0
  318. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/data/text/test_chunking_units.py +0 -0
  319. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/data/text/test_cleaning.py +0 -0
  320. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/data/text/test_englishnormalize.py +0 -0
  321. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/data/text/test_operations.py +0 -0
  322. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/llm/test_content.py +0 -0
  323. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/llm/test_embedding.py +0 -0
  324. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/llm/test_embedding_adapters_contract.py +0 -0
  325. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/llm/test_embedding_batch.py +0 -0
  326. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/llm/test_embedding_model2vec.py +0 -0
  327. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/llm/test_embedding_token_overflow.py +0 -0
  328. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/llm/test_multimodal.py +0 -0
  329. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/llm/test_prompt_adapters_base.py +0 -0
  330. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/llm/test_prompt_adapters_memory.py +0 -0
  331. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/llm/test_timeouts.py +0 -0
  332. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/llm/test_vision.py +0 -0
  333. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/llm/test_vision_adapters.py +0 -0
  334. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/operations/test_filtering.py +0 -0
  335. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/operations/test_matrices.py +0 -0
  336. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/operations/test_threading.py +0 -0
  337. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/operations/test_transforms.py +0 -0
  338. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/pipe/test_basic.py +0 -0
  339. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/pipe/test_basic_split.py +0 -0
  340. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/pipe/test_core.py +0 -0
  341. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/pipe/test_fork.py +0 -0
  342. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/pipe/test_io.py +0 -0
  343. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/pipe/test_math.py +0 -0
  344. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/pipe/test_metadata.py +0 -0
  345. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/pipelines/test_basic_rag.py +0 -0
  346. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/pipelines/test_vector_databases.py +0 -0
  347. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/search/test_abstract.py +0 -0
  348. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/search/test_lancedb.py +0 -0
  349. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/search/test_lancedb_cache.py +0 -0
  350. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/search/test_whoosh.py +0 -0
  351. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/test_documentation_examples.py +0 -0
  352. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/test_heavy_imports_are_lazy.py +0 -0
  353. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/test_py_typed.py +0 -0
  354. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/test_version.py +0 -0
  355. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/util/test_collections.py +0 -0
  356. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/util/test_config.py +0 -0
  357. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/util/test_data_manipulation.py +0 -0
  358. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/util/test_doc_extraction.py +0 -0
  359. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/util/test_iterators.py +0 -0
  360. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/util/test_os.py +0 -0
  361. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/util/test_plugin_loader.py +0 -0
  362. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/talkpipe/util/test_util.py +0 -0
  363. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/test_doc_examples.py +0 -0
  364. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/test_security_vulnerabilities.py +0 -0
  365. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/test_tutorial_scripts.py +0 -0
  366. {talkpipe-1.0.2 → talkpipe-1.0.2b1}/tests/testutils.py +0 -0
@@ -52,7 +52,7 @@ jobs:
52
52
  # --cov-report=term makes the [tool.coverage.report] fail_under floor
53
53
  # in pyproject.toml fail this step; xml/html are for Codecov and
54
54
  # local inspection.
55
- pytest --cov=src --cov-report=term --cov-report=xml --cov-report=html
55
+ pytest --cov=src --cov=appcenter --cov-report=term --cov-report=xml --cov-report=html
56
56
 
57
57
  - name: Upload coverage to Codecov
58
58
  if: matrix.python-version == '3.11'
@@ -152,6 +152,17 @@ jobs:
152
152
  print("all entry points resolve")
153
153
  PY
154
154
 
155
+ - name: Run the TalkPipe App Center the way users do
156
+ run: |
157
+ # appcenter/talkpipe_appcenter.py is a single file users run with `uv run`; it
158
+ # must work from a plain interpreter that has only its one declared
159
+ # dependency, from any directory, without the talkpipe package.
160
+ python -m venv .appcenter
161
+ .appcenter/bin/pip install "textual>=8,<9"
162
+ cp appcenter/talkpipe_appcenter.py /tmp/talkpipe_appcenter.py
163
+ (cd /tmp && TALKPIPE_APPCENTER_OFFLINE=1 UV=/bin/true "$GITHUB_WORKSPACE/.appcenter/bin/python" talkpipe_appcenter.py list)
164
+ .appcenter/bin/python /tmp/talkpipe_appcenter.py --version
165
+
155
166
  lockfile-check:
156
167
  # uv.lock is a development convenience only -- CI installs with pip on
157
168
  # purpose (see README, "Development environment"). This job installs
@@ -208,8 +219,8 @@ jobs:
208
219
 
209
220
  - name: Run Bandit security scan
210
221
  run: |
211
- bandit -c pyproject.toml -r src/ -f json -o bandit-report.json
212
- bandit -c pyproject.toml -r src/ -f txt
222
+ bandit -c pyproject.toml -r src/ appcenter/talkpipe_appcenter.py -f json -o bandit-report.json
223
+ bandit -c pyproject.toml -r src/ appcenter/talkpipe_appcenter.py -f txt
213
224
 
214
225
  - name: Run Safety dependency scan
215
226
  run: |
@@ -353,9 +364,9 @@ jobs:
353
364
  # blocked behind a skipped job everywhere else. The container image is
354
365
  # published independently by that job on github.com.
355
366
  needs: [test, lint, package, security-scan]
356
- # Version tags only: publishing a release under any other tag would upload
357
- # a distribution whose setuptools_scm version came from a tag that is not
358
- # one.
367
+ # Version tags only. The rolling `experimental` release is a container for
368
+ # assets, not a version: publishing from it would upload a distribution
369
+ # whose setuptools_scm version came from a tag that is not one.
359
370
  if: github.event_name == 'release' && github.event.action == 'published' && startsWith(github.event.release.tag_name, 'v')
360
371
 
361
372
  steps:
@@ -384,3 +395,70 @@ jobs:
384
395
  TWINE_USERNAME: __token__
385
396
  TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}
386
397
  run: twine upload dist/*
398
+
399
+ release-assets:
400
+ # The TalkPipe App Center is one file users run with `uv run <url>`; each
401
+ # release attaches it, stamped with the tag so a copy can report which
402
+ # release it came from, plus the two bootstrap scripts. GitHub only: the
403
+ # upload uses the GitHub token and the releases/latest/download URL.
404
+ runs-on: ubuntu-latest
405
+ needs: [test, lint, package, security-scan]
406
+ # Version tags only, so a re-publish of the rolling `experimental` release
407
+ # cannot stamp its own tag name into the file it then re-attaches.
408
+ if: github.event_name == 'release' && github.event.action == 'published' && github.server_url == 'https://github.com' && startsWith(github.event.release.tag_name, 'v')
409
+ permissions:
410
+ contents: write
411
+
412
+ steps:
413
+ - uses: actions/checkout@v7
414
+
415
+ - name: Set up Python
416
+ uses: actions/setup-python@v7
417
+ with:
418
+ python-version: '3.11'
419
+
420
+ - name: Stamp the release version into the App Center file
421
+ run: |
422
+ tag="${{ github.event.release.tag_name }}"
423
+ version="${tag#v}"
424
+ sed -i "s/^STAMPED_VERSION = \"0.0.0+unknown\"$/STAMPED_VERSION = \"${version}\"/" appcenter/talkpipe_appcenter.py
425
+ grep -q "^STAMPED_VERSION = \"${version}\"$" appcenter/talkpipe_appcenter.py
426
+ python -m venv .appcenter
427
+ .appcenter/bin/pip install "textual>=8,<9"
428
+ reported="$(.appcenter/bin/python appcenter/talkpipe_appcenter.py --version)"
429
+ test "$reported" = "talkpipe-appcenter ${version}"
430
+
431
+ - name: Attach the App Center and its bootstrap scripts to the release
432
+ env:
433
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
434
+ run: |
435
+ gh release upload "${{ github.event.release.tag_name }}" \
436
+ appcenter/talkpipe_appcenter.py appcenter/install.sh appcenter/install.ps1 --clobber
437
+
438
+ - name: Refresh the rolling experimental channel
439
+ # `releases/latest/download/` resolves to the newest release GitHub does
440
+ # not consider a pre-release, so it cannot serve a beta at all. The
441
+ # `experimental` release is a fixed anchor that always holds the assets of
442
+ # the newest release of either kind -- deliberately unlike the container
443
+ # `experimental` tag above, which pre-releases only, so that a beta is not
444
+ # served forever after a full release supersedes it.
445
+ #
446
+ # Assets move; the tag does not. `upload --clobber` replaces the files
447
+ # without touching the commit the release points at, so nobody's fetched
448
+ # tags are ever rewritten. That commit is therefore meaningless, which is
449
+ # what the notes below exist to say.
450
+ env:
451
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
452
+ run: |
453
+ tag="${{ github.event.release.tag_name }}"
454
+ notes="Rolling channel: these assets are from ${tag}."
455
+ notes="${notes} The \`experimental\` tag itself is a fixed anchor and does not track that release's commit."
456
+ notes="${notes} See RELEASING.md."
457
+ gh release view experimental >/dev/null 2>&1 || \
458
+ gh release create experimental --prerelease \
459
+ --title "Experimental (rolling)" --notes "${notes}"
460
+ gh release upload experimental \
461
+ appcenter/talkpipe_appcenter.py appcenter/install.sh appcenter/install.ps1 --clobber
462
+ gh release edit experimental --prerelease --notes "${notes}"
463
+ reported="$(.appcenter/bin/python appcenter/talkpipe_appcenter.py --version)"
464
+ echo "experimental channel now serves ${reported}"
@@ -52,3 +52,10 @@ TalkPipe is a Python toolkit for creating, testing, and deploying workflows that
52
52
  - When creating a new source or segment, add it to the talkpipe.sources or talkpipe.segments entry points in [pyproject.toml](pyproject.toml). Use the update-entry-points skill to generate and apply entry points automatically: `.venv/bin/python .cursor/skills/update-entry-points/scripts/update_entry_points.py`. See [docs/architecture/protocol.md](docs/architecture/protocol.md) for protocol conventions.
53
53
  - When writing documentation for segments or sources, do not document the parameters.
54
54
  - When writing new sources or segments, use Annotated in the parameter lists to explain the type and purpose of each parameter.
55
+
56
+ ## The TalkPipe App Center (appcenter/)
57
+ - `appcenter/talkpipe_appcenter.py` is a single file users run with `uv run <url>`; it is **not** part of the `talkpipe` package and has one dependency, Textual (dev extra only, capped at its major). Do not split it into a package, add a dependency, or import talkpipe from it.
58
+ - Every external touchpoint (uv, HTTP, the launcher's helper commands, home directory, platform) is injectable; `appcenter/tests/` never runs the real uv or touches the network (see the fake uv in `appcenter/tests/conftest.py`).
59
+ - Applications need no awareness of the App Center; never ask an app to change for the App Center's sake. The catalog (`appcenter/talkpipe.toml`, embedded in the file, a test checks they match) carries only what PyPI cannot supply: launch command, port, health path, icon, data dirs, external services.
60
+ - The file reports the talkpipe release it shipped with: CI stamps the tag into `STAMPED_VERSION` on release; never edit that line by hand. `appcenter/README.md` is its user documentation.
61
+ - Two delivery channels, because `releases/latest` skips pre-releases: the stable assets, and a rolling `experimental` release CI refreshes on every release (a fixed anchor tag — its assets move, its commit does not, and the release jobs ignore any tag not starting with `v`). Which copy you run and which versions it installs are **independent**: the channel for installs comes from `--experimental` / `TALKPIPE_APPCENTER_CHANNEL`, never from this file's own version, and is recorded per application so a later `uv tool install --upgrade` cannot replace a pre-release with the newest release.
@@ -2,32 +2,6 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
- ## 1.0.2 (2026-09-25)
6
-
7
- - **`max_tokens` caps the length of an LLM response.** `llmPrompt` and the
8
- guided-generation segments built on it (`llmScore`, `llmExtractTerms`,
9
- `llmBinaryAnswer`) accept `max_tokens`, as do the Ollama/OpenAI/Anthropic
10
- prompt adapters: the most tokens the model may generate per response
11
- (output only; prompt tokens do not count). The Ollama adapter's chat path
12
- sent only `temperature`, so a model that never emitted a stop token
13
- generated until its context window filled; `timeout` fails the pipeline
14
- in that case, while `max_tokens` bounds the item. It maps to `num_predict`
15
- on Ollama, `max_output_tokens` on the OpenAI Responses API, and
16
- `max_tokens` on Anthropic, where it replaces the adapter's 4096 (still the
17
- value when unset). The default is `None`, which leaves every request
18
- exactly as it was; there is no global config key, the option is
19
- per-segment. On reasoning/thinking models the thinking tokens count
20
- against the cap, and a truncated response from a guided-generation segment
21
- fails schema validation rather than returning a partial result. Prompt
22
- adapters that take no `max_tokens` (such as `eliza`, or third-party
23
- adapters that predate it) keep working and ignore it.
24
- - **Removed: the TalkPipe App Center.** The single-file installer previewed in
25
- the 1.0.2 betas (`appcenter/`, its release assets, and the rolling
26
- `experimental` GitHub release that served them) is gone; it never shipped in
27
- a full release. The TalkPipe applications install directly with
28
- `uv tool install` — the README lists them with the commands. Textual and
29
- pytest-asyncio left the `dev` extra. The `experimental` *container* image
30
- tag for pre-releases is unaffected.
31
5
  - **Deprecated: omitting the `|` between an input source and the first
32
6
  segment.** `INPUT FROM echo[data="1,2"] print` has always parsed as though
33
7
  the pipe were there — an accident of the grammar, and an inconsistent one,
@@ -41,6 +15,38 @@
41
15
  input source of its own — a fork branch, a fork consumer
42
16
  (`fork_name -> print`), or a fragment such as `| print` — still begins with
43
17
  a bare segment, and spellings that were errors before are still errors.
18
+ - **An experimental channel for the App Center, so pre-releases are reachable
19
+ at all.** `releases/latest/download/` resolves to the newest release GitHub
20
+ does not consider a pre-release, so a beta was not merely hard to get — the
21
+ documented one-liner returned "Not Found", which uv then ran as Python and
22
+ reported as `SyntaxError`. Release assets are now also attached to a rolling
23
+ `experimental` release, refreshed on every release, giving a stable URL that
24
+ serves the newest one of either kind:
25
+ `releases/download/experimental/talkpipe_appcenter.py`. The bootstrap scripts
26
+ take the channel by name — `install.sh --experimental`, or
27
+ `TALKPIPE_APPCENTER_CHANNEL=experimental` for both scripts, the only
28
+ mechanism Windows has since a piped `irm | iex` cannot receive arguments.
29
+
30
+ Installing pre-release *applications* is a separate choice, so that a
31
+ released App Center can install betas and a beta one installs releases unless
32
+ told otherwise: `--experimental` (or `--pre`), before or after the
33
+ subcommand, passes `--prerelease allow` to uv — which covers the application
34
+ and its dependencies, since a pre-release application may require a
35
+ pre-release library. The choice is recorded per application beside the saved
36
+ catalogs, because uv replays its own recorded settings for `uv tool upgrade`
37
+ but not for the `uv tool install --upgrade` the App Center runs; without the
38
+ record, a later upgrade would quietly reinstall the newest release over a
39
+ pre-release. `--no-experimental` leaves the channel and forgets the record.
40
+ On that channel the App Center no longer claims to know the latest version,
41
+ since PyPI's is the newest *release* and not an upgrade target for a
42
+ pre-release: the row reads `installed (pre-release)`.
43
+
44
+ - **Fixed: `appcenter/install.sh` exited with status 2 instead of starting the
45
+ App Center** whenever the process had no controlling terminal — a CI runner, a
46
+ cron job, a detached session. `/dev/tty` exists and passes a readability test
47
+ in those cases, so the redirect that reattaches the keyboard for `curl | sh`
48
+ has to be guarded by actually opening it.
49
+
44
50
  - **Documentation: TalkPipe is provider-neutral, and the docs now say so.**
45
51
  Several places read as though Ollama were required — prerequisite lists that
46
52
  named only Ollama, a quickstart whose LLM section began "requires
@@ -58,6 +64,29 @@
58
64
  `makevectordatabase` / `chatterlang_workbench` help text, and the workbench's
59
65
  example scripts name the alternatives too.
60
66
 
67
+ - **The TalkPipe App Center** (`appcenter/talkpipe_appcenter.py`), the part
68
+ of TalkPipe that installs applications: one file, run with
69
+ `uv run https://github.com/sandialabs/talkpipe/releases/latest/download/talkpipe_appcenter.py`,
70
+ that installs, upgrades, launches, and uninstalls applications with
71
+ `uv tool install`, each into its own environment, and adds desktop
72
+ launchers on Linux, macOS, and Windows. It is designed to make the
73
+ TalkPipe-based applications (TalkPipe Vault, the TalkPipe Writing
74
+ Assistant, the ChatterLang Workbench) easy to install and ships with a
75
+ catalog of them, but any pip-installable Python application with a
76
+ console script can be listed in a catalog of one's own: `--catalog`
77
+ (before or after the subcommand) uses one for a run, `--remember` or
78
+ `catalog add` saves it so every later run loads it (`catalog list`,
79
+ `catalog remove`). An app-store-like terminal screen
80
+ plus equivalent subcommands (`list`, `info`, `install`, `upgrade`,
81
+ `uninstall`, `launch`, `stop`, `open`, `shortcut`). Driven by a TOML
82
+ catalog (`appcenter/talkpipe.toml`, embedded; `--catalog` overlays or
83
+ replaces it) whose entries name only what PyPI cannot supply; summaries,
84
+ publishers, homepages, and latest versions come from PyPI at run time.
85
+ `appcenter/install.sh` and `appcenter/install.ps1` install uv when it is missing
86
+ and hand over to the App Center. Each GitHub release attaches the file, stamped
87
+ with the release version, and the two scripts. The library gained no
88
+ runtime dependency; Textual and pytest-asyncio joined the `dev` extra.
89
+
61
90
  - **`serverag` no longer fails silently.** With no embedding or completion
62
91
  model configured — the state a first-time user is in — it exited 1 with
63
92
  nothing on stdout or stderr, in both web and `--interactive` mode. The
@@ -101,6 +130,10 @@
101
130
  the snippet actually passes, the Python-API example passes the model it
102
131
  precaches, and the offline section warns that a model missing from the
103
132
  cache fails under `HF_HUB_OFFLINE=1` with an error that does not name it.
133
+ - The App Center's `uv run <release asset>` commands are documented as
134
+ needing a release that post-dates the App Center, with the checkout
135
+ invocation as the alternative; against an older release the URL 404s and
136
+ uv reports it as a `SyntaxError`.
104
137
  - The reference-browser walkthrough showed invented transcripts —
105
138
  `filterEmails`, `extractAttachments`, `mongoConnect`, `mongoQuery`,
106
139
  `parseEmailHeaders`, and a `readEmail` parameter list the source never
@@ -120,6 +153,8 @@
120
153
  `pip install "talkpipe[...]"` extras so they work in zsh, and pointed the
121
154
  Python prerequisite at the versions CI actually tests.
122
155
 
156
+ ## 1.0.2
157
+
123
158
  - `chatterlang_workbench` now exits within a couple of seconds of Ctrl-C even
124
159
  while a request is still running. It used to wait for that request to
125
160
  finish — a script started from the editor, or the suggestions sidebar's LLM
@@ -133,6 +168,7 @@
133
168
  `TreeObject.insert_child`; the floor is a security minimum, and every
134
169
  fresh install already resolved above it.
135
170
 
171
+
136
172
  ## 1.0.1
137
173
 
138
174
  - The Anthropic adapter no longer sends the `temperature` parameter. The
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: talkpipe
3
- Version: 1.0.2
3
+ Version: 1.0.2b1
4
4
  Summary: Python internal and external DSL for writing generative AI analytics
5
5
  Author-email: Travis Bauer <tlbauer@sandia.gov>
6
6
  Maintainer-email: Travis Bauer <tlbauer@sandia.gov>
@@ -46,6 +46,8 @@ Requires-Dist: pytest>=9.0.3; extra == "dev"
46
46
  Requires-Dist: pytest-mock; extra == "dev"
47
47
  Requires-Dist: pytest-cov>=2.0.0; extra == "dev"
48
48
  Requires-Dist: mongomock; extra == "dev"
49
+ Requires-Dist: textual<9,>=8; extra == "dev"
50
+ Requires-Dist: pytest-asyncio>=0.23.0; extra == "dev"
49
51
  Requires-Dist: ruff<0.17,>=0.16.3; extra == "dev"
50
52
  Requires-Dist: mypy<3,>=2.3; extra == "dev"
51
53
  Requires-Dist: pre-commit>=4.0; extra == "dev"
@@ -111,7 +113,12 @@ Entry points for different usage scenarios, from interactive development to prod
111
113
  - **[chatterlang_workbench](docs/api-reference/chatterlang-workbench.md)**
112
114
  A browser-based IDE for writing, testing, and running ChatterLang scripts: editor with autocomplete and live error checking, real-time execution, pipeline save/load, next-component suggestions, logging, and documentation lookup.
113
115
 
114
- <center><img src="docs/chatterlang_workbench_screenshot.png" width=700 alt="ChatterLang Workbench: pipeline editor with autocomplete, next-component suggestions, and pipeline output"></center>
116
+ <video width="640" height="360" controls>
117
+ <source src="docs/workbench_demo.mp4" type="video/mp4">
118
+ Your browser does not support the video tag.
119
+ </video>
120
+
121
+ ([workbench demo video](docs/workbench_demo.mp4) — direct link, for renderers that strip the embed above.)
115
122
 
116
123
  - **[chatterlang_script](docs/api-reference/chatterlang-script.md)**
117
124
  Runs ChatterLang scripts from files or directly from the command line, for batch processing and automation.
@@ -131,16 +138,21 @@ Entry points for different usage scenarios, from interactive development to prod
131
138
  - **[Container images](docs/guides/container-images.md)**
132
139
  Pull release images from GitHub Container Registry (multi-platform on each GitHub release).
133
140
 
134
- - **Applications built on TalkPipe**
135
- Install them as standalone commands with [uv](https://docs.astral.sh/uv/getting-started/installation/), each into its own environment:
136
-
137
- | Application | Install | Run |
138
- |---|---|---|
139
- | [TalkPipe Vault](https://github.com/sandialabs/talkpipe-vault) — chat with your own documents | `uv tool install talkpipe-vault` | `vault-server` |
140
- | [TalkPipe Writing Assistant](https://github.com/sandialabs/talkpipe-writing-assistant) — multi-user writing assistant | `uv tool install talkpipe-writing-assistant` | `writing-assistant` |
141
- | ChatterLang Workbench and the other TalkPipe commands | `uv tool install "talkpipe[all]"` | `chatterlang_workbench` |
142
-
143
- `uv tool upgrade <package>` upgrades one, `uv tool uninstall <package>` removes it, and `uv tool update-shell` puts the commands on your `PATH` if they are not found. For a pre-release, add `--prerelease allow` to the install; to go back to the latest release afterwards, reinstall with `--reinstall` (`uv tool install --upgrade` never moves a package backwards).
141
+ - **[TalkPipe App Center](appcenter/README.md)**
142
+ The part of TalkPipe that installs applications: an app-store-like terminal screen that installs, upgrades, launches, and uninstalls them with [uv](https://docs.astral.sh/uv/), each into its own environment, with desktop launchers. It ships with a catalog of the TalkPipe-based applications (the vault, the writing assistant, the workbench), and works just as well for any pip-installable Python application with a command of its own, listed in a catalog of your own. One file, nothing to install first but uv:
143
+
144
+ ```bash
145
+ uv run https://github.com/sandialabs/talkpipe/releases/latest/download/talkpipe_appcenter.py
146
+ ```
147
+
148
+ Each release attaches the version-stamped file, so the URL above needs a full
149
+ release that post-dates the App Center — against an older one, or where the
150
+ only such release so far is a pre-release, it returns "Not Found" and uv
151
+ reports that as a `SyntaxError`. Pre-releases are served by the experimental
152
+ channel instead (`releases/download/experimental/talkpipe_appcenter.py`; see
153
+ [Channels](appcenter/README.md#channels-stable-and-experimental)). From a
154
+ checkout of this branch, run the file directly:
155
+ `uv run appcenter/talkpipe_appcenter.py`.
144
156
 
145
157
  ## Quick Start
146
158
 
@@ -44,7 +44,12 @@ Entry points for different usage scenarios, from interactive development to prod
44
44
  - **[chatterlang_workbench](docs/api-reference/chatterlang-workbench.md)**
45
45
  A browser-based IDE for writing, testing, and running ChatterLang scripts: editor with autocomplete and live error checking, real-time execution, pipeline save/load, next-component suggestions, logging, and documentation lookup.
46
46
 
47
- <center><img src="docs/chatterlang_workbench_screenshot.png" width=700 alt="ChatterLang Workbench: pipeline editor with autocomplete, next-component suggestions, and pipeline output"></center>
47
+ <video width="640" height="360" controls>
48
+ <source src="docs/workbench_demo.mp4" type="video/mp4">
49
+ Your browser does not support the video tag.
50
+ </video>
51
+
52
+ ([workbench demo video](docs/workbench_demo.mp4) — direct link, for renderers that strip the embed above.)
48
53
 
49
54
  - **[chatterlang_script](docs/api-reference/chatterlang-script.md)**
50
55
  Runs ChatterLang scripts from files or directly from the command line, for batch processing and automation.
@@ -64,16 +69,21 @@ Entry points for different usage scenarios, from interactive development to prod
64
69
  - **[Container images](docs/guides/container-images.md)**
65
70
  Pull release images from GitHub Container Registry (multi-platform on each GitHub release).
66
71
 
67
- - **Applications built on TalkPipe**
68
- Install them as standalone commands with [uv](https://docs.astral.sh/uv/getting-started/installation/), each into its own environment:
69
-
70
- | Application | Install | Run |
71
- |---|---|---|
72
- | [TalkPipe Vault](https://github.com/sandialabs/talkpipe-vault) — chat with your own documents | `uv tool install talkpipe-vault` | `vault-server` |
73
- | [TalkPipe Writing Assistant](https://github.com/sandialabs/talkpipe-writing-assistant) — multi-user writing assistant | `uv tool install talkpipe-writing-assistant` | `writing-assistant` |
74
- | ChatterLang Workbench and the other TalkPipe commands | `uv tool install "talkpipe[all]"` | `chatterlang_workbench` |
75
-
76
- `uv tool upgrade <package>` upgrades one, `uv tool uninstall <package>` removes it, and `uv tool update-shell` puts the commands on your `PATH` if they are not found. For a pre-release, add `--prerelease allow` to the install; to go back to the latest release afterwards, reinstall with `--reinstall` (`uv tool install --upgrade` never moves a package backwards).
72
+ - **[TalkPipe App Center](appcenter/README.md)**
73
+ The part of TalkPipe that installs applications: an app-store-like terminal screen that installs, upgrades, launches, and uninstalls them with [uv](https://docs.astral.sh/uv/), each into its own environment, with desktop launchers. It ships with a catalog of the TalkPipe-based applications (the vault, the writing assistant, the workbench), and works just as well for any pip-installable Python application with a command of its own, listed in a catalog of your own. One file, nothing to install first but uv:
74
+
75
+ ```bash
76
+ uv run https://github.com/sandialabs/talkpipe/releases/latest/download/talkpipe_appcenter.py
77
+ ```
78
+
79
+ Each release attaches the version-stamped file, so the URL above needs a full
80
+ release that post-dates the App Center — against an older one, or where the
81
+ only such release so far is a pre-release, it returns "Not Found" and uv
82
+ reports that as a `SyntaxError`. Pre-releases are served by the experimental
83
+ channel instead (`releases/download/experimental/talkpipe_appcenter.py`; see
84
+ [Channels](appcenter/README.md#channels-stable-and-experimental)). From a
85
+ checkout of this branch, run the file directly:
86
+ `uv run appcenter/talkpipe_appcenter.py`.
77
87
 
78
88
  ## Quick Start
79
89
 
@@ -48,10 +48,29 @@ history and only made version sorting harder. Semantic versioning rules
48
48
  sdist and wheel, `twine check`s them, and uploads to PyPI with the
49
49
  `PYPI_API_TOKEN` repository secret. Mark betas and release candidates as
50
50
  pre-releases. Watch the run finish; the package job and the container build
51
- (GitHub only) run in the same workflow. `publish-package` ignores any tag
52
- that does not start with `v`, so a stray publish cannot upload to PyPI.
51
+ (GitHub only) run in the same workflow, and so does `release-assets`
52
+ (GitHub only), which stamps the tag into `appcenter/talkpipe_appcenter.py` and
53
+ attaches it with `appcenter/install.sh` and `appcenter/install.ps1` to the
54
+ release. Those per-tag assets are what
55
+ `releases/download/vX.Y.Z/` serves, and for a full release they are what
56
+ `releases/latest/download/` serves too — but **`latest` skips pre-releases**,
57
+ so a beta is reachable only by its own tag or through the rolling
58
+ `experimental` release, which the same job refreshes on every release.
59
+ `experimental` is a fixed anchor tag managed only by CI: its assets move,
60
+ its commit does not, and it is never hand-published (the release jobs ignore
61
+ any tag that does not start with `v`, so a stray publish cannot upload to
62
+ PyPI).
53
63
  5. **Verify** with a fresh environment: `pip install talkpipe==X.Y.Z`,
54
- `python -c "import talkpipe; print(talkpipe.__version__)"`.
64
+ `python -c "import talkpipe; print(talkpipe.__version__)"`, and
65
+ `uv run https://github.com/sandialabs/talkpipe/releases/download/vX.Y.Z/talkpipe_appcenter.py --version`,
66
+ which must print `talkpipe-appcenter X.Y.Z`. Check the same of the rolling
67
+ channel, which should now report this release either way:
68
+ `uv run https://github.com/sandialabs/talkpipe/releases/download/experimental/talkpipe_appcenter.py --version`.
69
+ For a pre-release, also confirm that `releases/latest/download/` still
70
+ serves the previous full release. Before a *final* release, also
71
+ try the App Center by hand (`appcenter/README.md`, "Development") on a Linux
72
+ desktop; its macOS and Windows launcher code paths are unit-tested only,
73
+ so try those there when a machine is at hand.
55
74
 
56
75
  Nothing is bumped afterwards; the next commit on `main` reports itself as
57
76
  `X.Y.(Z+1).devN` automatically.
@@ -59,6 +78,6 @@ Nothing is bumped afterwards; the next commit on `main` reports itself as
59
78
  ## Downstream
60
79
 
61
80
  The consumers in this suite pin a floor on talkpipe (`talkpipe_vault`,
62
- `talkpipe-agents`, `talkpipe-writing-assistant`, `local-m2v`).
81
+ `talkpipe-agents`, `talkpipe-writing-assistant`, `privateer`, `local-m2v`).
63
82
  When a release adds API they rely on, or when the major version changes,
64
83
  raise their floors in a follow-up merge request in each repo.