TalkPipe 1.0.2b1__tar.gz → 1.0.2b2__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 (367) hide show
  1. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/CHANGELOG.md +108 -14
  2. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/PKG-INFO +8 -3
  3. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/README.md +7 -2
  4. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/appcenter/README.md +127 -39
  5. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/appcenter/install.ps1 +13 -3
  6. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/appcenter/install.sh +16 -7
  7. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/appcenter/talkpipe.toml +14 -4
  8. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/appcenter/talkpipe_appcenter.py +705 -145
  9. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/appcenter/tests/conftest.py +38 -2
  10. talkpipe-1.0.2b2/appcenter/tests/test_actions.py +601 -0
  11. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/appcenter/tests/test_bootstrap.py +12 -0
  12. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/appcenter/tests/test_catalog.py +29 -2
  13. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/appcenter/tests/test_channel.py +130 -18
  14. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/appcenter/tests/test_cli.py +17 -6
  15. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/appcenter/tests/test_shortcut.py +4 -3
  16. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/appcenter/tests/test_status.py +38 -2
  17. talkpipe-1.0.2b2/appcenter/tests/test_tui.py +545 -0
  18. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/appcenter/tests/test_uv.py +30 -0
  19. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe.egg-info/PKG-INFO +8 -3
  20. talkpipe-1.0.2b2/src/talkpipe.egg-info/scm_version.json +8 -0
  21. talkpipe-1.0.2b1/appcenter/tests/test_actions.py +0 -298
  22. talkpipe-1.0.2b1/appcenter/tests/test_tui.py +0 -257
  23. talkpipe-1.0.2b1/src/talkpipe.egg-info/scm_version.json +0 -8
  24. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/.cursor/skills/changelog-update/SKILL.md +0 -0
  25. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/.cursor/skills/doc-example-formatting/SKILL.md +0 -0
  26. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/.cursor/skills/run-documentation-examples/SKILL.md +0 -0
  27. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/.cursor/skills/run-documentation-examples/scripts/run_documentation_examples.py +0 -0
  28. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/.cursor/skills/test-driven-development/SKILL.md +0 -0
  29. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/.cursor/skills/update-entry-points/SKILL.md +0 -0
  30. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/.cursor/skills/update-entry-points/scripts/update_entry_points.py +0 -0
  31. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/.dockerignore +0 -0
  32. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/.gitea/default_merge_message/MERGE_TEMPLATE.md +0 -0
  33. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/.gitea/default_merge_message/SQUASH_TEMPLATE.md +0 -0
  34. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/.github/CICD.md +0 -0
  35. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/.github/ISSUE_TEMPLATE/release-checklist.md +0 -0
  36. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/.github/SECURITY.md +0 -0
  37. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/.github/copilot-instructions.md +0 -0
  38. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/.github/dependabot.yml +0 -0
  39. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/.github/prompts/add-segment.prompt.md +0 -0
  40. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/.github/prompts/changelog.prompt.md +0 -0
  41. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/.github/prompts/doc-examples.prompt.md +0 -0
  42. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/.github/prompts/tdd.prompt.md +0 -0
  43. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/.github/prompts/update-entry-points.prompt.md +0 -0
  44. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/.github/workflows/ci-cd.yml +0 -0
  45. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/.gitignore +0 -0
  46. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/.pre-commit-config.yaml +0 -0
  47. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/.safety-policy.yml +0 -0
  48. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/.safety-project.ini +0 -0
  49. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/.vscode/settings.json +0 -0
  50. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/.vscode/tasks.json +0 -0
  51. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/AGENTS.md +0 -0
  52. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/COPYRIGHT +0 -0
  53. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/Dockerfile +0 -0
  54. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/LICENSE +0 -0
  55. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/RELEASING.md +0 -0
  56. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/appcenter/tests/test_packaging.py +0 -0
  57. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/.gitignore +0 -0
  58. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/LLMChat.png +0 -0
  59. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/LLMEvaluateWebPage.png +0 -0
  60. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/README.md +0 -0
  61. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/TalkPipe.png +0 -0
  62. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/TalkPipe.xcf +0 -0
  63. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/api-reference/README.md +0 -0
  64. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/api-reference/chatterlang-script.md +0 -0
  65. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/api-reference/chatterlang-server.md +0 -0
  66. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/api-reference/chatterlang-workbench.md +0 -0
  67. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/api-reference/lazy-loading.md +0 -0
  68. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/api-reference/talkpipe-plugin-manager.md +0 -0
  69. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/api-reference/talkpipe-ref.md +0 -0
  70. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/architecture/README.md +0 -0
  71. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/architecture/chatterlang.md +0 -0
  72. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/architecture/configuration.md +0 -0
  73. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/architecture/documentation-formatting.md +0 -0
  74. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/architecture/extending-talkpipe.md +0 -0
  75. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/architecture/metadata-stream.md +0 -0
  76. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/architecture/pipe-api.md +0 -0
  77. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/architecture/protocol.md +0 -0
  78. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/architecture/security.md +0 -0
  79. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/architecture/streaming.md +0 -0
  80. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/contributing/developer-handbook.md +0 -0
  81. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/guides/container-images.md +0 -0
  82. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/guides/makevectordatabase-and-serverag.md +0 -0
  83. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/guides/model-and-source-configuration.md +0 -0
  84. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/guides/model2vec-embeddings.md +0 -0
  85. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/make_structure_diagram.sh +0 -0
  86. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/quickstart.md +0 -0
  87. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/structure.tex +0 -0
  88. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/talkpipe_architecture.png +0 -0
  89. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/talkpipe_architecture.tex +0 -0
  90. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/talkpipe_diagram.png +0 -0
  91. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/tutorials/.gitignore +0 -0
  92. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/tutorials/README.md +0 -0
  93. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_1-Document_Indexing/README.md +0 -0
  94. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_1-Document_Indexing/Step_1_CreateSyntheticData.bat +0 -0
  95. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_1-Document_Indexing/Step_1_CreateSyntheticData.script +0 -0
  96. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_1-Document_Indexing/Step_1_CreateSyntheticData.sh +0 -0
  97. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_1-Document_Indexing/Step_2_IndexStories.bat +0 -0
  98. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_1-Document_Indexing/Step_2_IndexStories.script +0 -0
  99. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_1-Document_Indexing/Step_2_IndexStories.sh +0 -0
  100. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_1-Document_Indexing/Step_3_SearchStories.bat +0 -0
  101. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_1-Document_Indexing/Step_3_SearchStories.script +0 -0
  102. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_1-Document_Indexing/Step_3_SearchStories.sh +0 -0
  103. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_1-Document_Indexing/stories.json +0 -0
  104. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_1-Document_Indexing/story_search_ui.yml +0 -0
  105. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/README.md +0 -0
  106. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_1_CreateVectorDatabase.bat +0 -0
  107. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_1_CreateVectorDatabase.script +0 -0
  108. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_1_CreateVectorDatabase.sh +0 -0
  109. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_2_SearchByExample.bat +0 -0
  110. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_2_SearchByExample.script +0 -0
  111. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_2_SearchByExample.sh +0 -0
  112. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_3_SpecializedRag.bat +0 -0
  113. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_3_SpecializedRag.script +0 -0
  114. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/Step_3_SpecializedRag.sh +0 -0
  115. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/step_3_extras.py +0 -0
  116. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_2-Search_by_Example_and_RAG/story_by_example_ui.yml +0 -0
  117. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_3_Report_Writing/README.md +0 -0
  118. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_3_Report_Writing/Step_1_ExecutiveSummaryGeneration.bat +0 -0
  119. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_3_Report_Writing/Step_1_ExecutiveSummaryGeneration.script +0 -0
  120. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_3_Report_Writing/Step_1_ExecutiveSummaryGeneration.sh +0 -0
  121. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_3_Report_Writing/Step_2_DetailedAnalysisReportGeneration.bat +0 -0
  122. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_3_Report_Writing/Step_2_DetailedAnalysisReportGeneration.script +0 -0
  123. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_3_Report_Writing/Step_2_DetailedAnalysisReportGeneration.sh +0 -0
  124. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_3_Report_Writing/Step_3_MultiFormatReportGeneration.bat +0 -0
  125. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_3_Report_Writing/Step_3_MultiFormatReportGeneration.script +0 -0
  126. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_3_Report_Writing/Step_3_MultiFormatReportGeneration.sh +0 -0
  127. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_3_Report_Writing/file_structure.md +0 -0
  128. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_3_Report_Writing/multi_format_ui.yml +0 -0
  129. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_3_Report_Writing/report_topic_ui.yml +0 -0
  130. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_3_Report_Writing/step_1_extras.py +0 -0
  131. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_3_Report_Writing/step_2_extras.py +0 -0
  132. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/tutorials/Tutorial_3_Report_Writing/step_3_extras.py +0 -0
  133. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/docs/workbench_demo.mp4 +0 -0
  134. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/frontend/.gitignore +0 -0
  135. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/frontend/README.md +0 -0
  136. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/frontend/build.mjs +0 -0
  137. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/frontend/package-lock.json +0 -0
  138. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/frontend/package.json +0 -0
  139. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/frontend/src/cm.js +0 -0
  140. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/pyproject.toml +0 -0
  141. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/pytest.ini +0 -0
  142. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/scripts/extract_documentation_examples.py +0 -0
  143. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/setup.cfg +0 -0
  144. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/__init__.py +0 -0
  145. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/app/__init__.py +0 -0
  146. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/app/chatterlang_generate_entry_points.py +0 -0
  147. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/app/chatterlang_reference_browser.py +0 -0
  148. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/app/chatterlang_reference_generator.py +0 -0
  149. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/app/chatterlang_script.py +0 -0
  150. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/app/chatterlang_serve.py +0 -0
  151. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/app/chatterlang_workbench.py +0 -0
  152. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/app/doc_examples.py +0 -0
  153. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/app/makevectordatabase.py +0 -0
  154. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/app/precache_model2vec.py +0 -0
  155. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/app/server_common.py +0 -0
  156. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/app/serverag.py +0 -0
  157. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/app/static/favicon.ico +0 -0
  158. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/app/static/serve/common.js +0 -0
  159. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/app/static/serve/index.css +0 -0
  160. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/app/static/serve/index.js +0 -0
  161. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/app/static/serve/stream.css +0 -0
  162. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/app/static/serve/stream.js +0 -0
  163. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/app/static/serve/vendor/LICENSES.txt +0 -0
  164. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/app/static/serve/vendor/marked.min.js +0 -0
  165. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/app/static/serve/vendor/purify.min.js +0 -0
  166. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/app/static/talkpipe_logo.png +0 -0
  167. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/app/static/workbench/app.js +0 -0
  168. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/app/static/workbench/editor.js +0 -0
  169. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/app/static/workbench/index.html +0 -0
  170. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/app/static/workbench/styles.css +0 -0
  171. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/app/static/workbench/suggest.js +0 -0
  172. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/app/static/workbench/vendor/LICENSES.txt +0 -0
  173. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/app/static/workbench/vendor/codemirror.js +0 -0
  174. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/app/static/workbench/workspace.js +0 -0
  175. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/app/talkpipe_plugin_manager.py +0 -0
  176. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/app/templates/chatterlang_serve/index.html +0 -0
  177. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/app/templates/chatterlang_serve/stream.html +0 -0
  178. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/app/workbench/__init__.py +0 -0
  179. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/app/workbench/corpus.py +0 -0
  180. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/app/workbench/reference_api.py +0 -0
  181. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/app/workbench/suggest.py +0 -0
  182. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/app/workbench/suggest_api.py +0 -0
  183. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/app/workbench/workspace.py +0 -0
  184. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/app/workbench/workspace_api.py +0 -0
  185. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/app/workbench_data/seed_scripts/README.md +0 -0
  186. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/app/workbench_data/seed_scripts/tutorial_1-document_indexing__step_1_createsyntheticdata.script +0 -0
  187. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/app/workbench_data/seed_scripts/tutorial_1-document_indexing__step_2_indexstories.script +0 -0
  188. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/app/workbench_data/seed_scripts/tutorial_1-document_indexing__step_3_searchstories.script +0 -0
  189. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/app/workbench_data/seed_scripts/tutorial_2-search_by_example_and_rag__step_1_createvectordatabase.script +0 -0
  190. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/app/workbench_data/seed_scripts/tutorial_2-search_by_example_and_rag__step_2_searchbyexample.script +0 -0
  191. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/app/workbench_data/seed_scripts/tutorial_2-search_by_example_and_rag__step_3_specializedrag.script +0 -0
  192. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/app/workbench_data/seed_scripts/tutorial_3_report_writing__step_1_executivesummarygeneration.script +0 -0
  193. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/app/workbench_data/seed_scripts/tutorial_3_report_writing__step_2_detailedanalysisreportgeneration.script +0 -0
  194. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/app/workbench_data/seed_scripts/tutorial_3_report_writing__step_3_multiformatreportgeneration.script +0 -0
  195. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/chatterlang/__init__.py +0 -0
  196. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/chatterlang/compiler.py +0 -0
  197. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/chatterlang/parsers.py +0 -0
  198. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/chatterlang/registry.py +0 -0
  199. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/data/__init__.py +0 -0
  200. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/data/email.py +0 -0
  201. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/data/extraction.py +0 -0
  202. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/data/html.py +0 -0
  203. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/data/image.py +0 -0
  204. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/data/mongo.py +0 -0
  205. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/data/rss.py +0 -0
  206. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/data/text/__init__.py +0 -0
  207. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/data/text/chunking_units.py +0 -0
  208. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/data/text/cleaning.py +0 -0
  209. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/data/text/englishnormalize.py +0 -0
  210. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/data/text/operations.py +0 -0
  211. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/llm/__init__.py +0 -0
  212. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/llm/_ollama_common.py +0 -0
  213. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/llm/chat.py +0 -0
  214. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/llm/config.py +0 -0
  215. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/llm/content.py +0 -0
  216. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/llm/embedding.py +0 -0
  217. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/llm/embedding_adapters.py +0 -0
  218. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/llm/embedding_adapters_model2vec.py +0 -0
  219. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/llm/embedding_adapters_openai.py +0 -0
  220. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/llm/embedding_errors.py +0 -0
  221. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/llm/model2vec_embeddings.py +0 -0
  222. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/llm/multimodal.py +0 -0
  223. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/llm/prompt_adapter_base.py +0 -0
  224. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/llm/prompt_adapter_memory.py +0 -0
  225. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/llm/prompt_adapters.py +0 -0
  226. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/llm/prompt_adapters_anthropic.py +0 -0
  227. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/llm/prompt_adapters_eliza.py +0 -0
  228. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/llm/prompt_adapters_ollama.py +0 -0
  229. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/llm/prompt_adapters_openai.py +0 -0
  230. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/llm/vision.py +0 -0
  231. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/operations/__init__.py +0 -0
  232. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/operations/filtering.py +0 -0
  233. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/operations/matrices.py +0 -0
  234. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/operations/thread_ops.py +0 -0
  235. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/operations/transforms.py +0 -0
  236. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/pipe/__init__.py +0 -0
  237. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/pipe/basic.py +0 -0
  238. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/pipe/collect.py +0 -0
  239. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/pipe/core.py +0 -0
  240. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/pipe/debug.py +0 -0
  241. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/pipe/fields.py +0 -0
  242. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/pipe/filters.py +0 -0
  243. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/pipe/flow.py +0 -0
  244. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/pipe/fork.py +0 -0
  245. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/pipe/hashing.py +0 -0
  246. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/pipe/io.py +0 -0
  247. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/pipe/math.py +0 -0
  248. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/pipe/metadata.py +0 -0
  249. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/pipe/shell.py +0 -0
  250. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/pipelines/__init__.py +0 -0
  251. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/pipelines/basic_rag.py +0 -0
  252. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/pipelines/vector_databases.py +0 -0
  253. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/py.typed +0 -0
  254. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/search/__init__.py +0 -0
  255. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/search/abstract.py +0 -0
  256. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/search/lancedb.py +0 -0
  257. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/search/whoosh.py +0 -0
  258. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/util/__init__.py +0 -0
  259. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/util/collections.py +0 -0
  260. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/util/config.py +0 -0
  261. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/util/constants.py +0 -0
  262. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/util/data_manipulation.py +0 -0
  263. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/util/doc_extraction.py +0 -0
  264. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/util/iterators.py +0 -0
  265. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/util/os.py +0 -0
  266. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe/util/plugin_loader.py +0 -0
  267. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe.egg-info/SOURCES.txt +0 -0
  268. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe.egg-info/dependency_links.txt +0 -0
  269. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe.egg-info/entry_points.txt +0 -0
  270. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe.egg-info/requires.txt +0 -0
  271. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe.egg-info/scm_file_list.json +0 -0
  272. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/src/talkpipe.egg-info/top_level.txt +0 -0
  273. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/conftest.py +0 -0
  274. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/embedding_adapter_contract_suite.py +0 -0
  275. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/prompt_adapter_contract_suite.py +0 -0
  276. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/app/test_chatterlang_generate_entry_points.py +0 -0
  277. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/app/test_chatterlang_reference_browser.py +0 -0
  278. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/app/test_chatterlang_reference_generator.py +0 -0
  279. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/app/test_chatterlang_script.py +0 -0
  280. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/app/test_chatterlang_serve.py +0 -0
  281. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/app/test_makevectordatabase.py +0 -0
  282. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/app/test_precache_model2vec.py +0 -0
  283. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/app/test_serve_static.py +0 -0
  284. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/app/test_server_common.py +0 -0
  285. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/app/test_server_hardening.py +0 -0
  286. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/app/test_serverag.py +0 -0
  287. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/app/test_talkpipe_plugin_manager.py +0 -0
  288. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/app/test_workbench_corpus.py +0 -0
  289. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/app/test_workbench_load_module.py +0 -0
  290. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/app/test_workbench_reference_api.py +0 -0
  291. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/app/test_workbench_static.py +0 -0
  292. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/app/test_workbench_suggest.py +0 -0
  293. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/app/test_workbench_workspace.py +0 -0
  294. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/chatterlang/test_chatterlang_workbench.py +0 -0
  295. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/chatterlang/test_compiler.py +0 -0
  296. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/chatterlang/test_entry_point_drift.py +0 -0
  297. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/chatterlang/test_entry_points.py +0 -0
  298. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/chatterlang/test_parsers.py +0 -0
  299. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/chatterlang/test_registry.py +0 -0
  300. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/data/sample_feed.pkl +0 -0
  301. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/data/test.docx +0 -0
  302. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/data/test_email.py +0 -0
  303. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/data/test_extraction.py +0 -0
  304. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/data/test_html.py +0 -0
  305. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/data/test_html_exceptions.py +0 -0
  306. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/data/test_image.py +0 -0
  307. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/data/test_mogomock.py +0 -0
  308. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/data/test_mongo.py +0 -0
  309. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/data/test_mongo_integration.py +0 -0
  310. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/data/test_mongo_timeouts.py +0 -0
  311. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/data/test_rss.py +0 -0
  312. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/data/text/test_chunking_units.py +0 -0
  313. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/data/text/test_cleaning.py +0 -0
  314. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/data/text/test_englishnormalize.py +0 -0
  315. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/data/text/test_operations.py +0 -0
  316. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/llm/test_chat.py +0 -0
  317. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/llm/test_content.py +0 -0
  318. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/llm/test_embedding.py +0 -0
  319. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/llm/test_embedding_adapters_contract.py +0 -0
  320. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/llm/test_embedding_batch.py +0 -0
  321. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/llm/test_embedding_model2vec.py +0 -0
  322. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/llm/test_embedding_token_overflow.py +0 -0
  323. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/llm/test_multimodal.py +0 -0
  324. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/llm/test_prompt_adapters_anthropic.py +0 -0
  325. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/llm/test_prompt_adapters_base.py +0 -0
  326. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/llm/test_prompt_adapters_eliza.py +0 -0
  327. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/llm/test_prompt_adapters_memory.py +0 -0
  328. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/llm/test_prompt_adapters_ollama.py +0 -0
  329. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/llm/test_prompt_adapters_openai.py +0 -0
  330. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/llm/test_timeouts.py +0 -0
  331. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/llm/test_vision.py +0 -0
  332. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/llm/test_vision_adapters.py +0 -0
  333. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/operations/test_filtering.py +0 -0
  334. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/operations/test_matrices.py +0 -0
  335. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/operations/test_threading.py +0 -0
  336. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/operations/test_transforms.py +0 -0
  337. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/pipe/test_basic.py +0 -0
  338. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/pipe/test_basic_split.py +0 -0
  339. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/pipe/test_core.py +0 -0
  340. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/pipe/test_fork.py +0 -0
  341. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/pipe/test_io.py +0 -0
  342. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/pipe/test_math.py +0 -0
  343. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/pipe/test_metadata.py +0 -0
  344. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/pipelines/test_basic_rag.py +0 -0
  345. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/pipelines/test_vector_databases.py +0 -0
  346. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/search/test_abstract.py +0 -0
  347. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/search/test_lancedb.py +0 -0
  348. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/search/test_lancedb_cache.py +0 -0
  349. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/search/test_whoosh.py +0 -0
  350. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/test_documentation_examples.py +0 -0
  351. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/test_heavy_imports_are_lazy.py +0 -0
  352. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/test_py_typed.py +0 -0
  353. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/test_version.py +0 -0
  354. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/util/test_collections.py +0 -0
  355. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/util/test_config.py +0 -0
  356. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/util/test_data_manipulation.py +0 -0
  357. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/util/test_doc_extraction.py +0 -0
  358. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/util/test_iterators.py +0 -0
  359. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/util/test_os.py +0 -0
  360. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/util/test_plugin_loader.py +0 -0
  361. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/talkpipe/util/test_util.py +0 -0
  362. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/test_config_keys_documented.py +0 -0
  363. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/test_doc_examples.py +0 -0
  364. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/test_security_vulnerabilities.py +0 -0
  365. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/test_tutorial_scripts.py +0 -0
  366. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/tests/testutils.py +0 -0
  367. {talkpipe-1.0.2b1 → talkpipe-1.0.2b2}/uv.lock +0 -0
@@ -2,6 +2,62 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ - **App Center: a launch opens the page of a released application that does
6
+ not open its own.** A second newcomer run against the PyPI releases. The
7
+ catalog's `opens_browser` describes the newest version of an application,
8
+ and the released writing assistant 1.1.0 has no browser-opening at all, so
9
+ a launch reported "is running at ..." and nothing appeared. `opens_browser`
10
+ now also takes a version (`"1.1.1"`): the first one that opens its own tab,
11
+ with the App Center opening the page for older installed versions; the
12
+ writing assistant's entry says `"1.1.1"`. Also: an action that fails ends
13
+ on a `==> Failed:` line, the counterpart of `==> Done:`, and its toast is
14
+ titled Failed rather than Finished; when all the App Center knows is that
15
+ something answers on an application's port (no 200 from the health path,
16
+ and not a process it started), `launch` and `stop` say "something answers
17
+ on port 8002" instead of stating that the application is running; `l` and
18
+ `o` on an application that is not installed both say to install it (`o`
19
+ used to say "launch it first", and `l` then "not installed"); `list` sizes
20
+ its columns from their content, so `installed (pre-release)` no longer
21
+ pushes its row out of line; the screen moves the detail pane under the
22
+ table below 140 columns, where a fixed side pane cut the Running and
23
+ Launcher columns off at the widths most terminals have; and a Linux
24
+ launcher for a package that ships no icon names a standard generic one,
25
+ which the README already promised.
26
+ - **App Center: the release channel launches, and the way back to it
27
+ works.** Found by a newcomer run against the released applications rather
28
+ than the checkouts. A catalog `health` path that answers 404 no longer
29
+ counts as "down": the catalog describes the newest version, and the
30
+ released vault 1.0.0 and writing assistant 1.1.0 serve their ports without
31
+ the routes their catalog entries name, so on the default channel every
32
+ launch was reported as a failure while the app sat open in the browser —
33
+ and from there `open` refused, a second launch treated the app as "another
34
+ program" on its port, started a second copy on the next one, overwrote the
35
+ pid record, and `stop` killed the wrong one. Any HTTP answer on the port
36
+ now counts as running, and a launch never starts a second copy while the
37
+ pid file names a live process of the App Center's own. Leaving the
38
+ experimental channel (`e` again, `--no-experimental`) passes
39
+ `--reinstall`: `uv tool install --upgrade` never moves a package backwards,
40
+ so the switch silently kept the beta, reported "already the newest version",
41
+ forgot the channel record, and left the row offering the release as an
42
+ "upgrade" that the next `i` could not perform. If a fresh resolution still
43
+ lands on a pre-release, the App Center says so and keeps the record. A
44
+ pre-release with no record (installed by hand, or by an earlier copy) now
45
+ counts as being on the experimental channel, and `(pre-release)` describes
46
+ the installed version rather than the run's flag. Also: uninstall stops an
47
+ instance the App Center started before removing its environment; PyPI
48
+ lookups are no longer capped at 1 MiB, which blanked the latest version and
49
+ summary of any long-lived package (ruff's record is over 6 MB); `latest`
50
+ reads `?` rather than `None (<date>)` on the experimental channel; the
51
+ table's columns grow to fit `installed (pre-release)` instead of clipping
52
+ it; `c Stop` appears in the footer while the row's app is one the App
53
+ Center started; the uninstall question wraps; `i`, `l`, `x`, and `o` on the
54
+ App Center's own row say to move to an application's row instead of doing
55
+ nothing; the `list` hint no longer names a `talkpipe-appcenter` command
56
+ that the documented `uv run <url>` never creates; the language-model note
57
+ mentions an Ollama server on another computer; and the documented uv floor
58
+ (0.7) is checked, with the version named in the error — only when the
59
+ version parses, so a stand-in whose `--version` answers with words is not
60
+ mistaken for an old uv.
5
61
  - **Deprecated: omitting the `|` between an input source and the first
6
62
  segment.** `INPUT FROM echo[data="1,2"] print` has always parsed as though
7
63
  the pipe were there — an accident of the grammar, and an inconsistent one,
@@ -26,20 +82,58 @@
26
82
  take the channel by name — `install.sh --experimental`, or
27
83
  `TALKPIPE_APPCENTER_CHANNEL=experimental` for both scripts, the only
28
84
  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)`.
85
+ That variable chooses only which copy of the App Center runs; the App
86
+ Center itself does not read it.
87
+
88
+ **Any one copy of the App Center installs either the release or the
89
+ pre-release of each application**, so a released App Center can install
90
+ betas and a beta one installs releases unless told otherwise. On the
91
+ screen the choice is a `Channel` column and two keys: `e` on an
92
+ application's row toggles its channel between `stable` and `pre-release`
93
+ and installs nothing, and `i` installs (or switches, or upgrades) from
94
+ whichever channel the row shows — choosing and acting are separate keys,
95
+ because one key that changed what you were looking at and installed it in
96
+ the same stroke proved confusing. The Status column says where the two
97
+ disagree (`installed (pre-release)`, `release available`), and the detail
98
+ pane repeats the channel. On the command line, `--experimental` (or
99
+ `--pre`), before or after the subcommand, chooses and installs in one.
100
+ Both pass `--prerelease allow` to uv — which covers the application and
101
+ its dependencies, since a pre-release application may require a
102
+ pre-release library. The choice is recorded per application beside the
103
+ saved catalogs, because uv replays its own recorded settings for `uv tool
104
+ upgrade` but not for the `uv tool install --upgrade` the App Center runs;
105
+ without the record, a later upgrade would quietly reinstall the newest
106
+ release over a pre-release. Installing the release again (`e` then `i`, or
107
+ `--no-experimental`) forgets the record. On the pre-release channel the
108
+ App Center no longer claims to know the latest version, since PyPI's is
109
+ the newest *release* and not an upgrade target for a pre-release: the row
110
+ reads `installed (pre-release)`.
111
+
112
+ - **Fixed: the App Center never said an install had finished.** uv's output
113
+ scrolled through the log for minutes and then simply stopped, and its own
114
+ last lines start with "Installed", so the App Center's summary of what had
115
+ happened was one indistinguishable line in the middle of it — leaving
116
+ "is it still working?" unanswered. Every action now ends with a line marked
117
+ `==> Done:` that says what it did (`==> Done: Installed talkpipe-vault
118
+ 1.0.0.`), placed last, after any notes about what the application still
119
+ needs. On the screen a notification carries the same news over the top of
120
+ the log, so an install walked away from still reports itself — including
121
+ when it failed, which the screen also never used to say out loud.
122
+
123
+ - **Fixed: the App Center left a launch that hit a busy port to time out.** An
124
+ application whose port is already held by another program — a second copy of
125
+ it, or an unrelated server — either failed to bind or quietly relocated to a
126
+ port the App Center was not watching; both ended the same way, in a
127
+ thirty-second wait and "did not answer on port 8001". A web app's port is now
128
+ checked before it is started: when something else holds it, the App Center
129
+ finds the next free port above it and starts the app there, announcing the
130
+ move, and records that port so status, the browser, and `open` all follow the
131
+ app to where it actually runs. Doing so needs the new catalog key
132
+ `port_option` — the option the app takes a port on, `--port` for all three
133
+ bundled applications; without it the conflict is reported immediately rather
134
+ than launched into. A server that dies at startup for any other reason is
135
+ also reported as soon as it exits, with the last lines of its log, instead of
136
+ being waited out.
43
137
 
44
138
  - **Fixed: `appcenter/install.sh` exited with status 2 instead of starting the
45
139
  App Center** whenever the process had no controlling terminal — a CI runner, a
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: talkpipe
3
- Version: 1.0.2b1
3
+ Version: 1.0.2b2
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>
@@ -148,8 +148,13 @@ Entry points for different usage scenarios, from interactive development to prod
148
148
  Each release attaches the version-stamped file, so the URL above needs a full
149
149
  release that post-dates the App Center — against an older one, or where the
150
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
151
+ reports that as a `SyntaxError`. Pre-releases *of the App Center itself* are
152
+ served by the experimental channel instead
153
+ (`releases/download/experimental/talkpipe_appcenter.py`). Either copy
154
+ installs the release or the pre-release of each application — press `e` on
155
+ its row to choose the channel and `i` to install, or pass
156
+ `--experimental` — so you never need a particular copy to
157
+ get a beta of an application (see
153
158
  [Channels](appcenter/README.md#channels-stable-and-experimental)). From a
154
159
  checkout of this branch, run the file directly:
155
160
  `uv run appcenter/talkpipe_appcenter.py`.
@@ -79,8 +79,13 @@ Entry points for different usage scenarios, from interactive development to prod
79
79
  Each release attaches the version-stamped file, so the URL above needs a full
80
80
  release that post-dates the App Center — against an older one, or where the
81
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
82
+ reports that as a `SyntaxError`. Pre-releases *of the App Center itself* are
83
+ served by the experimental channel instead
84
+ (`releases/download/experimental/talkpipe_appcenter.py`). Either copy
85
+ installs the release or the pre-release of each application — press `e` on
86
+ its row to choose the channel and `i` to install, or pass
87
+ `--experimental` — so you never need a particular copy to
88
+ get a beta of an application (see
84
89
  [Channels](appcenter/README.md#channels-stable-and-experimental)). From a
85
90
  checkout of this branch, run the file directly:
86
91
  `uv run appcenter/talkpipe_appcenter.py`.
@@ -44,6 +44,72 @@ uv run appcenter/talkpipe_appcenter.py
44
44
 
45
45
  ## Channels: stable and experimental
46
46
 
47
+ **Any one copy of the App Center installs either the release or the
48
+ pre-release of each application.** You never need a different copy of the App
49
+ Center to get a beta of the vault, and running a beta of the App Center does
50
+ not put betas of the applications on your computer. The two are separate
51
+ choices, and only the second one comes up in normal use.
52
+
53
+ ### Which versions of the applications it installs
54
+
55
+ Every application installs as its newest **release** unless you ask for its
56
+ pre-release. On the screen the choice is a column of the table, `Channel`,
57
+ and two keys: `e` on an application's row toggles its channel between
58
+ `stable` and `pre-release` (installing nothing), and `i` installs — or
59
+ switches, or upgrades — from whichever channel the row shows. So to try the
60
+ vault's beta, press `e` then `i` on its row; to go back, `e` then `i` again.
61
+ The Status column says where the two disagree: `installed (pre-release)`
62
+ while a beta is installed on the pre-release channel, `release available`
63
+ once the release channel is chosen over it (when PyPI knows of one). With
64
+ several applications selected, `e` puts them all on the pre-release channel,
65
+ unless every one of them is there already, in which case all back. From the
66
+ command line, ask with `--experimental` (or `--pre`), before or after the
67
+ subcommand:
68
+
69
+ ```bash
70
+ uv run <url> --experimental install vault
71
+ uv run <url> install vault --pre
72
+ ```
73
+
74
+ That passes `--prerelease allow` to uv, which applies to the application **and
75
+ its dependencies** — a pre-release vault may require a pre-release talkpipe, and
76
+ a narrower setting would reject it and fail to resolve at all.
77
+
78
+ The choice is remembered per application, in `channels.txt` beside the saved
79
+ catalogs, so a later `upgrade` keeps it: uv replays its own recorded settings
80
+ for `uv tool upgrade`, but the App Center runs `uv tool install --upgrade`,
81
+ which takes them from the command line, so without the record an upgrade would
82
+ reinstall the newest release over your pre-release. A pre-release that has no
83
+ record — installed by hand with uv, say — counts as being on the channel all
84
+ the same: the version decides, so the App Center never offers an application's
85
+ own release to it as an "upgrade". Choose the release channel again with `e`
86
+ on the screen (then `i` to install it) or with `--no-experimental` on the
87
+ command line; installing the release forgets the record, and so does
88
+ `uninstall`. Going back reinstalls the application's environment (`uv tool
89
+ install --reinstall`): uv never moves a package backwards on its own, and an
90
+ installed pre-release satisfies the requirement, so only a resolution from
91
+ scratch puts the release over it. If even that lands on a pre-release — an
92
+ application whose only releases so far are betas — the App Center says so and
93
+ leaves the choice standing, rather than reporting the switch as done.
94
+
95
+ On that channel the App Center stops claiming to know the newest version —
96
+ PyPI's own "latest" is the newest *release*, which is not an upgrade target
97
+ for a pre-release — so the row reads `installed (pre-release)` with `?` for
98
+ latest, and `info` prints the channel.
99
+
100
+ `--experimental` placed before `ui` (or given with no subcommand) sets the
101
+ channel for every install of that screen session and says so in the title;
102
+ `e` then declines, since one flag for the run and a choice per application
103
+ would contradict each other — the footer leaves the key out and pressing it
104
+ says why. Start without the flag to choose per application.
105
+
106
+ `--experimental` before `install`, or `--pre` after it, is the command line's
107
+ `e` and `i` in one: it both chooses the channel for that application and
108
+ installs from it.
109
+
110
+ ### Which copy of the App Center you run
111
+
112
+ This choice matters only while no full release carries the App Center.
47
113
  `releases/latest` is the newest release GitHub does *not* consider a
48
114
  pre-release, so those URLs serve the last full release even while a beta is
49
115
  out — and if the only release carrying the App Center is a beta, they return
@@ -70,31 +136,11 @@ $env:TALKPIPE_APPCENTER_CHANNEL="experimental"
70
136
  powershell -ExecutionPolicy Bypass -c "irm .../install.ps1 | iex"
71
137
  ```
72
138
 
73
- **Which copy you run and which versions it installs are separate choices.**
74
- A released App Center can install pre-release applications, and a pre-release
75
- one installs releases unless told otherwise. Ask for pre-release applications
76
- with `--experimental` (or `--pre`), before or after the subcommand:
77
-
78
- ```bash
79
- uv run <url> --experimental install vault
80
- uv run <url> install vault --pre
81
- ```
82
-
83
- That passes `--prerelease allow` to uv, which applies to the application **and
84
- its dependencies** — a pre-release vault may require a pre-release talkpipe, and
85
- a narrower setting would reject it and fail to resolve at all.
86
-
87
- The choice is remembered per application, in `channels.txt` beside the saved
88
- catalogs, so a later `upgrade` keeps it: uv replays its own recorded settings
89
- for `uv tool upgrade`, but the App Center runs `uv tool install --upgrade`,
90
- which takes them from the command line, so without the record an upgrade would
91
- reinstall the newest release over your pre-release. Leave the channel with
92
- `--no-experimental`, which also forgets the record; so does `uninstall`.
93
-
94
- On that channel the App Center stops claiming to know the newest version —
95
- PyPI's own "latest" is the newest *release*, which is not an upgrade target
96
- for a pre-release — so the row reads `installed (pre-release)` with `?` for
97
- latest, and `info` prints the channel.
139
+ Both forms choose only which copy of the file runs. The App Center itself does
140
+ not read `TALKPIPE_APPCENTER_CHANNEL`, so the pre-release copy fetched this way
141
+ installs releases of the applications exactly like the released copy does,
142
+ until you choose the pre-release channel with `e` (and install with `i`) or
143
+ pass `--experimental` for one of them.
98
144
 
99
145
  The experimental channel is published from github.com only; the Gitea mirror
100
146
  attaches no release assets.
@@ -107,11 +153,12 @@ desktop launcher. Keys:
107
153
  |---|---|
108
154
  | `i` | Install (or upgrade) the app under the cursor, or every selected app |
109
155
  | `u` | Upgrade only apps that are installed |
156
+ | `e` | Choose the app's channel, `stable` or `pre-release` (the `Channel` column); `i` then installs from it (see [Channels](#channels-stable-and-experimental)) |
110
157
  | `x` | Uninstall (asks first; your data stays) |
111
158
  | `l` | Launch. Web apps start in the background and open in your browser |
112
159
  | `o` | Open a running web app in the browser |
113
160
  | `s` | Add or remove a desktop launcher (menu entry, `~/Applications`, or Start Menu) |
114
- | `c` | Stop a web app the App Center started |
161
+ | `c` | Stop a web app the App Center started — the footer shows it while the row's app is one it started |
115
162
  | `space` | Select for a batch install |
116
163
  | `r` | Refresh |
117
164
  | `q` | Quit |
@@ -119,6 +166,15 @@ desktop launcher. Keys:
119
166
  The last row is the App Center itself: press `s` there to give the App Center a launcher
120
167
  of its own, so nobody has to type a URL twice.
121
168
 
169
+ An install can run for minutes, and uv's output scrolls through the pane at
170
+ the bottom of the screen while it does. **You do not have to read it to know
171
+ when it is over.** The App Center's own lines are the ones that begin `==>`,
172
+ and the last one of an action begins `==> Done:` and says what happened —
173
+ `==> Done: Installed talkpipe-vault 1.0.0.` — or `==> Failed:` and says what
174
+ did not. A notification says the same thing over the screen, so an install
175
+ you walked away from is still reporting itself when you come back. The same
176
+ markers end the run in the subcommands below.
177
+
122
178
  ## Without the screen
123
179
 
124
180
  Every action is also a subcommand, for scripts and for people who prefer
@@ -128,6 +184,7 @@ typing. Arguments after `sh -s --` pass straight through the bootstrap script.
128
184
  uv run <url> list # every app and its status (--json for machines)
129
185
  uv run <url> info vault
130
186
  uv run <url> install vault writing-assistant
187
+ uv run <url> install vault --experimental # its pre-release; --no-experimental returns to releases
131
188
  uv run <url> upgrade --all
132
189
  uv run <url> launch vault
133
190
  uv run <url> stop vault
@@ -144,29 +201,52 @@ curl -fsSL .../install.sh | sh -s -- install vault
144
201
 
145
202
  - **Applications install with `uv tool install`**, each into its own
146
203
  environment with its own Python. Nothing else on the computer is touched,
147
- and uninstalling removes exactly that environment and its commands. User
148
- data (the vault's `~/.talkpipe-vault`, the writing assistant's
149
- `~/.writing_assistant`) is never deleted; the App Center tells you where it is.
204
+ and uninstalling removes exactly that environment and its commands (stopping
205
+ the app first if the App Center started it). User data (the vault's
206
+ `~/.talkpipe-vault`, the writing assistant's `~/.writing_assistant`) is never
207
+ deleted; the App Center tells you where it is.
150
208
  - **Re-running an install upgrades.** "Latest" is read from PyPI every time
151
209
  the App Center starts, so the screen always knows whether an upgrade exists.
152
210
  - **Launchers open a visible terminal** on purpose: the applications have no
153
211
  tray icon or Quit command, so that window is how you stop them and see
154
212
  their messages. The launcher targets the stable `~/.local/bin` command, so
155
213
  it survives upgrades.
214
+ - **A busy port moves the app, it does not sink the launch.** When something
215
+ else already holds a web app's port, the App Center starts it on the next
216
+ free port above it, says which one it used, and opens and tracks the app
217
+ there. That needs the catalog's `port_option` (the option the app takes its
218
+ port on); without it, the conflict is reported straight away instead of
219
+ waiting out a server that will never come up. Either way you get an answer
220
+ in seconds, with the last lines of the app's log when it failed to start.
221
+ An app the App Center itself started is never treated as "another program"
222
+ on its port: while that process is alive, a second launch reports it
223
+ instead of starting a second copy beside it.
224
+ - **"Running" means something answers on the app's port.** A catalog `health`
225
+ path that answers 200 settles it; one that answers with any other status
226
+ does not count against the app, because the catalog describes the newest
227
+ version and an older release may serve the same port without that route.
228
+ The price is that an unrelated program on the port is not told apart — the
229
+ App Center would rather open the wrong page than call a running app down and
230
+ start a second one — so when that is all it knows (no 200 from the health
231
+ path, and not a process it started itself), its messages say "something
232
+ answers on port 8002" rather than naming the app.
156
233
  - **Language models are not installed.** The catalog says which apps need a
157
234
  language model; the App Center detects a local Ollama and shows its download
158
- link when it is missing, or you enter an OpenAI or Anthropic key in the app's
159
- own settings.
235
+ link when it is missing. An Ollama server on another computer, or an OpenAI
236
+ or Anthropic key, is entered in the app's own settings.
160
237
  - **The App Center needs the network** to start (uv fetches the file) and to show
161
238
  latest versions. Set `TALKPIPE_APPCENTER_OFFLINE=1` to skip the PyPI lookups;
162
239
  versions then show as `?`.
163
- - **`TALKPIPE_APPCENTER_CHANNEL=experimental`** defaults both the copy the
164
- bootstrap scripts run and the versions it installs to the pre-release channel
165
- (see [Channels](#channels-stable-and-experimental)). `UV_PRERELEASE` is uv's
166
- own equivalent and is not used here, so that the setting reaches only the
167
- installs meant to have it; setting it yourself is a power-user escape hatch.
240
+ - **`TALKPIPE_APPCENTER_CHANNEL=experimental`** makes the bootstrap scripts
241
+ run the pre-release copy of the App Center, and nothing more: which versions
242
+ of the applications it installs is chosen per application with `e` (then
243
+ `i`) or `--experimental` (see [Channels](#channels-stable-and-experimental)).
244
+ `UV_PRERELEASE` is uv's own setting and is not used here, so that pre-release
245
+ resolution reaches only the installs meant to have it; setting it yourself
246
+ is a power-user escape hatch.
168
247
 
169
- uv is the only prerequisite. It must be at least 0.7.
248
+ uv is the only prerequisite. It must be at least 0.7; the App Center checks,
249
+ and says so if yours is older.
170
250
 
171
251
  ## The catalog: listing any pip-installable application
172
252
 
@@ -197,8 +277,16 @@ command = "vault-server" # required; the console script to launch
197
277
  args = ["--resume"]
198
278
  kind = "web" # web | cli | tui (default cli)
199
279
  port = 8002 # web only
200
- health = "/api/health" # optional; else /health, /api/health, then TCP
201
- opens_browser = true # the app opens its own tab; the App Center won't
280
+ port_option = "--port" # optional; how to ask the app for another port
281
+ # when this one is taken. Absent: a taken
282
+ # port is reported instead of launched into.
283
+ health = "/api/health" # optional; a path that answers 200 when up. Any
284
+ # HTTP answer on the port counts too (an older
285
+ # release may lack the route); absent, anything
286
+ # listening on the port counts.
287
+ opens_browser = true # the app opens its own tab; the App Center won't.
288
+ # A version ("1.1.1") means from that version
289
+ # on; older installs get the page opened for them.
202
290
  icon = "talkpipe_vault/apps/static/icon-256.png" # a PNG inside the package
203
291
  data = ["~/.talkpipe-vault"] # shown on uninstall, never deleted
204
292
  needs = ["ollama"] # detected and explained, never installed
@@ -13,12 +13,19 @@ runs in its own cached environment:
13
13
  To act without the screen, run that `uv run` line yourself with arguments,
14
14
  e.g. `uv run <url> install vault` (a piped `irm | iex` cannot receive them).
15
15
 
16
- For pre-release versions, set the channel in the environment first -- the only
16
+ The App Center it runs comes from the latest full release. To run the
17
+ pre-release copy of the App Center itself instead (needed only while no full
18
+ release carries it yet), set the channel in the environment first -- the only
17
19
  way here, since a piped `irm | iex` takes no arguments:
18
20
 
19
21
  $env:TALKPIPE_APPCENTER_CHANNEL="experimental"
20
22
  powershell -ExecutionPolicy Bypass -c "irm .../install.ps1 | iex"
21
23
 
24
+ That chooses only which copy of the App Center runs. Either copy installs the
25
+ release version of every application unless told otherwise: press `e` on an
26
+ application's row, or run `uv run <url> install <app> --experimental`, to get
27
+ its pre-release from any copy.
28
+
22
29
  uv is the only thing this script installs. The App Center installs applications
23
30
  with `uv tool install`, each into its own environment; nothing else on the
24
31
  machine is touched.
@@ -28,8 +35,11 @@ $ErrorActionPreference = "Stop"
28
35
  $AppCenterUrl = "https://github.com/sandialabs/talkpipe/releases/latest/download/talkpipe_appcenter.py"
29
36
  $AppCenterExperimentalUrl = "https://github.com/sandialabs/talkpipe/releases/download/experimental/talkpipe_appcenter.py"
30
37
 
31
- # `releases/latest` is the newest release GitHub does not consider a pre-release,
32
- # so it cannot serve a beta; the experimental release is where those assets go.
38
+ # Which copy of the App Center to run. `releases/latest` is the newest release
39
+ # GitHub does not consider a pre-release, so it cannot serve a beta; the
40
+ # experimental release is where those assets go. The App Center itself does not
41
+ # read the variable: the copy chosen here installs release applications unless
42
+ # asked per application.
33
43
  if ($env:TALKPIPE_APPCENTER_CHANNEL -eq "experimental") { $AppCenterUrl = $AppCenterExperimentalUrl }
34
44
 
35
45
  function Start-AppCenter {
@@ -7,11 +7,19 @@
7
7
  #
8
8
  # curl -fsSL .../install.sh | sh -s -- install vault
9
9
  #
10
- # For pre-release versions, pass --experimental first, or set
10
+ # The App Center it runs comes from the latest full release. To run the
11
+ # pre-release copy of the App Center itself instead (needed only while no full
12
+ # release carries it yet), pass --experimental first, or set
11
13
  # TALKPIPE_APPCENTER_CHANNEL=experimental in the environment:
12
14
  #
13
15
  # curl -fsSL .../install.sh | sh -s -- --experimental
14
16
  #
17
+ # That chooses only which copy of the App Center runs. Either copy installs the
18
+ # release version of every application unless told otherwise: press `e` on an
19
+ # application's row to choose its pre-release channel and `i` to install from
20
+ # it, or pass `install <app> --experimental`, to get its pre-release from any
21
+ # copy.
22
+ #
15
23
  # What it does: installs uv (https://docs.astral.sh/uv/) into ~/.local/bin if it
16
24
  # is missing, then hands over to the App Center itself, one Python file that uv runs
17
25
  # in its own cached environment:
@@ -38,18 +46,19 @@ download() {
38
46
  }
39
47
 
40
48
  main() {
41
- # Channel choice. `releases/latest` is the newest release GitHub does not
42
- # consider a pre-release, so it cannot serve a beta at all; the experimental
43
- # release is where those assets go. A channel name rather than a URL, on
44
- # purpose: this script runs what it downloads, so the URLs it will fetch stay
45
- # the two literals above.
49
+ # Which copy of the App Center to run. `releases/latest` is the newest
50
+ # release GitHub does not consider a pre-release, so it cannot serve a beta
51
+ # at all; the experimental release is where those assets go. A channel name
52
+ # rather than a URL, on purpose: this script runs what it downloads, so the
53
+ # URLs it will fetch stay the two literals above. The choice ends here: the
54
+ # App Center does not read the variable, and the copy it picks installs
55
+ # release applications unless asked per application.
46
56
  if [ "${1:-}" = "--experimental" ]; then
47
57
  shift
48
58
  TALKPIPE_APPCENTER_CHANNEL=experimental
49
59
  fi
50
60
  if [ "${TALKPIPE_APPCENTER_CHANNEL:-}" = "experimental" ]; then
51
61
  APPCENTER_URL="$APPCENTER_EXPERIMENTAL_URL"
52
- export TALKPIPE_APPCENTER_CHANNEL
53
62
  fi
54
63
 
55
64
  local_bin="$HOME/.local/bin"
@@ -14,11 +14,18 @@
14
14
  # args launcher arguments (default [])
15
15
  # kind "web" (serves a page), "cli", or "tui" (default "cli")
16
16
  # port web only, required for web
17
- # health web only; a path that answers 200 when up. Absent: /health,
18
- # then /api/health, then a plain TCP connect are tried.
17
+ # port_option web only; the option that sets the app's port, e.g. "--port".
18
+ # With it the App Center starts the app on the next free port
19
+ # when the default one is taken; without it a taken port is
20
+ # reported instead.
21
+ # health web only; a path that answers 200 when up. Any HTTP answer
22
+ # on the port counts as running too (an older release may lack
23
+ # the route); absent, anything listening on the port counts.
19
24
  # url web only; default "http://127.0.0.1:{port}/"
20
25
  # opens_browser web only; true when the app opens the browser itself on
21
- # start, so the App Center does not open a second tab (default false)
26
+ # start, so the App Center does not open a second tab (default
27
+ # false). A version ("1.1.1") means from that version on: the
28
+ # App Center opens the page itself for older installed versions.
22
29
  # icon a PNG inside the installed package (site-packages-relative);
23
30
  # a .ico beside it is used for Windows. Absent or wrong: a
24
31
  # generic icon is used.
@@ -42,6 +49,7 @@ command = "vault-server"
42
49
  args = ["--resume"]
43
50
  kind = "web"
44
51
  port = 8002
52
+ port_option = "--port"
45
53
  health = "/api/health"
46
54
  opens_browser = true
47
55
  icon = "talkpipe_vault/apps/static/icon-256.png"
@@ -55,8 +63,9 @@ package = "talkpipe-writing-assistant"
55
63
  command = "writing-assistant"
56
64
  kind = "web"
57
65
  port = 8001
66
+ port_option = "--port"
58
67
  health = "/health"
59
- opens_browser = true
68
+ opens_browser = "1.1.1"
60
69
  icon = "writing_assistant/app/static/android-chrome-512x512.png"
61
70
  data = ["~/.writing_assistant"]
62
71
  needs = ["ollama"]
@@ -68,4 +77,5 @@ package = "talkpipe[all]"
68
77
  command = "chatterlang_workbench"
69
78
  kind = "web"
70
79
  port = 4143
80
+ port_option = "--port"
71
81
  icon = "talkpipe/app/static/talkpipe_logo.png"