sovara 0.2.7__tar.gz → 0.2.9__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 (246) hide show
  1. {sovara-0.2.7 → sovara-0.2.9}/PKG-INFO +2 -1
  2. {sovara-0.2.7 → sovara-0.2.9}/pyproject.toml +3 -2
  3. sovara-0.2.9/src/sovara/__init__.py +3 -0
  4. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/assets/SKILL.md +21 -40
  5. sovara-0.2.9/src/sovara/assets/web_app/assets/AttachmentPreview-C-SDQn_c.js +1 -0
  6. sovara-0.2.7/src/sovara/assets/web_app/assets/DocumentPreviewModal-CvQFa4di.js → sovara-0.2.9/src/sovara/assets/web_app/assets/DocumentPreviewModal-DLcTPg47.js +1 -1
  7. sovara-0.2.9/src/sovara/assets/web_app/assets/LayoutBreadcrumb-DrZRF2Sb.js +1 -0
  8. sovara-0.2.9/src/sovara/assets/web_app/assets/OrgRoute-Da3YLHXR.js +1 -0
  9. sovara-0.2.9/src/sovara/assets/web_app/assets/PriorsRoute-B1nxA9L9.js +3 -0
  10. sovara-0.2.7/src/sovara/assets/web_app/assets/PriorsRoute-BveozA7x.css → sovara-0.2.9/src/sovara/assets/web_app/assets/PriorsRoute-C-kIcXqp.css +1 -1
  11. sovara-0.2.9/src/sovara/assets/web_app/assets/ProjectRoute-BTYfMx0l.js +33 -0
  12. sovara-0.2.9/src/sovara/assets/web_app/assets/ProjectRunsRoute-DnTtW5z2.js +1 -0
  13. sovara-0.2.7/src/sovara/assets/web_app/assets/RunRoute-CRAJ9hM9.css → sovara-0.2.9/src/sovara/assets/web_app/assets/RunRoute-BokXQNmB.css +1 -1
  14. sovara-0.2.7/src/sovara/assets/web_app/assets/RunRoute-BXKXUvYa.js → sovara-0.2.9/src/sovara/assets/web_app/assets/RunRoute-CjnawiLF.js +25 -25
  15. sovara-0.2.9/src/sovara/assets/web_app/assets/SettingsRoute-BsJ1s1Xa.js +1 -0
  16. sovara-0.2.9/src/sovara/assets/web_app/assets/api-VlLy9MpQ.js +1 -0
  17. sovara-0.2.7/src/sovara/assets/web_app/assets/eye-BwLFOixq.js → sovara-0.2.9/src/sovara/assets/web_app/assets/eye-U4_eeOX-.js +1 -1
  18. sovara-0.2.9/src/sovara/assets/web_app/assets/index-TU6o79pU.js +12 -0
  19. sovara-0.2.7/src/sovara/assets/web_app/assets/plus-LepfYku6.js → sovara-0.2.9/src/sovara/assets/web_app/assets/plus-B1NOTICQ.js +1 -1
  20. sovara-0.2.7/src/sovara/assets/web_app/assets/prismTheme-BK3YfG66.js → sovara-0.2.9/src/sovara/assets/web_app/assets/prismTheme-nMW1SONA.js +3 -3
  21. sovara-0.2.9/src/sovara/assets/web_app/assets/runtime-B1TGbSkq.js +1 -0
  22. sovara-0.2.7/src/sovara/assets/web_app/assets/settings-CP5l-jN0.js → sovara-0.2.9/src/sovara/assets/web_app/assets/settings-BrSnAN-D.js +1 -1
  23. sovara-0.2.9/src/sovara/assets/web_app/assets/tierState-BVmlAt4E.js +1 -0
  24. sovara-0.2.7/src/sovara/assets/web_app/assets/trash-2-QBj_Tw9w.js → sovara-0.2.9/src/sovara/assets/web_app/assets/trash-2-DhTFZ-Hl.js +1 -1
  25. sovara-0.2.7/src/sovara/assets/web_app/assets/useTheme-BfCfHZeA.js → sovara-0.2.9/src/sovara/assets/web_app/assets/useTheme-BMbBHOjM.js +1 -1
  26. sovara-0.2.7/src/sovara/assets/web_app/assets/value-BlxarHmt.js → sovara-0.2.9/src/sovara/assets/web_app/assets/value-Bqe5DuYT.js +1 -1
  27. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/assets/web_app/index.html +1 -1
  28. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/cli/so_server.py +2 -3
  29. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/cli/so_tool.py +100 -156
  30. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/common/logger.py +1 -2
  31. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/common/priors_block.py +9 -6
  32. sovara-0.2.9/src/sovara/common/run_logs.py +74 -0
  33. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/common/utils.py +6 -0
  34. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/runner/context_manager.py +16 -0
  35. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/runner/node_execution.py +0 -9
  36. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/runner/priors.py +32 -85
  37. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/runner/priors_pipeline.py +18 -1
  38. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/runner/runtime_client.py +3 -18
  39. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/app.py +1 -5
  40. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/database/backend_protocol.py +75 -176
  41. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/database/blob_storage.py +16 -14
  42. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/database/llm_calls.py +3 -24
  43. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/database/mongodb/backend.py +413 -672
  44. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/database/mongodb/connection.py +49 -24
  45. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/database/postgresql/backend.py +53 -253
  46. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/database/postgresql/schema.py +19 -32
  47. sovara-0.2.9/src/sovara/server/database/prior_models.py +66 -0
  48. sovara-0.2.9/src/sovara/server/database/priors.py +287 -0
  49. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/database/projects.py +8 -32
  50. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/database/runs.py +24 -1
  51. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/database/sqlite/__init__.py +1 -4
  52. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/database/sqlite/backend.py +121 -359
  53. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/database/sqlite/connection.py +88 -25
  54. sovara-0.2.9/src/sovara/server/database/sqlite/prior_embeddings.py +118 -0
  55. sovara-0.2.9/src/sovara/server/database/sqlite/prior_records.py +323 -0
  56. sovara-0.2.9/src/sovara/server/database/sqlite/priors.py +181 -0
  57. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/database/sqlite/projects.py +52 -37
  58. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/database/sqlite/runs.py +88 -38
  59. sovara-0.2.9/src/sovara/server/database/sqlite/schema.py +355 -0
  60. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/database/sqlite/users.py +13 -6
  61. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/graph_analysis/trace_chat/main.py +57 -11
  62. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/graph_analysis/trace_chat/tools/__init__.py +6 -0
  63. sovara-0.2.9/src/sovara/server/graph_analysis/trace_chat/tools/logs.py +84 -0
  64. sovara-0.2.9/src/sovara/server/graph_analysis/trace_chat/tools/priors.py +636 -0
  65. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/llm_backend.py +20 -0
  66. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/prior_display.py +25 -17
  67. sovara-0.2.9/src/sovara/server/priors_backend/constants.py +21 -0
  68. sovara-0.2.9/src/sovara/server/priors_backend/embeddings.py +48 -0
  69. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/priors_backend/llm/folder_rebalancer.py +42 -71
  70. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/priors_backend/llm/lesson_restructurer.py +33 -14
  71. sovara-0.2.9/src/sovara/server/priors_backend/llm/lesson_retriever.py +420 -0
  72. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/priors_backend/llm/lesson_validator.py +17 -6
  73. sovara-0.2.9/src/sovara/server/priors_backend/llm/prior_content_polisher.py +97 -0
  74. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/priors_backend/llm/prior_metadata_suggester.py +7 -50
  75. sovara-0.2.9/src/sovara/server/priors_backend/llm/prior_quality.py +28 -0
  76. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/priors_backend/path_utils.py +11 -0
  77. sovara-0.2.9/src/sovara/server/priors_backend/retrieval_service.py +274 -0
  78. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/priors_backend/routes.py +296 -520
  79. sovara-0.2.9/src/sovara/server/priors_backend/storage.py +1127 -0
  80. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/priors_backend/tools/adjudication.py +42 -112
  81. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/priors_backend/tools/bm25_search.py +3 -16
  82. sovara-0.2.9/src/sovara/server/priors_backend/tools/dense_search.py +45 -0
  83. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/priors_backend/tools/folder_groups.py +20 -20
  84. sovara-0.2.9/src/sovara/server/priors_backend/tools/keyword_search.py +31 -0
  85. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/priors_backend/tools/parallel_search.py +19 -34
  86. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/priors_backend/tools/preprocess_context.py +11 -32
  87. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/priors_backend/tools/rerank.py +2 -23
  88. sovara-0.2.9/src/sovara/server/priors_backend/tools/utils.py +72 -0
  89. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/routes/claude_proxy.py +1 -85
  90. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/routes/events.py +1 -2
  91. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/routes/internal.py +9 -117
  92. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/routes/runner.py +12 -1
  93. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/routes/ui_projects.py +64 -29
  94. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/routes/ui_runs.py +14 -4
  95. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/state.py +11 -7
  96. sovara-0.2.9/src/sovara/server/web_app_assets.py +79 -0
  97. {sovara-0.2.7 → sovara-0.2.9}/src/sovara.egg-info/PKG-INFO +2 -1
  98. {sovara-0.2.7 → sovara-0.2.9}/src/sovara.egg-info/SOURCES.txt +31 -25
  99. {sovara-0.2.7 → sovara-0.2.9}/src/sovara.egg-info/requires.txt +1 -0
  100. sovara-0.2.7/src/sovara/__init__.py +0 -3
  101. sovara-0.2.7/src/sovara/assets/web_app/assets/AttachmentPreview-Di2_OG_9.js +0 -1
  102. sovara-0.2.7/src/sovara/assets/web_app/assets/LayoutBreadcrumb-CJhx8VyY.js +0 -1
  103. sovara-0.2.7/src/sovara/assets/web_app/assets/OrgRoute-CKAmaA4W.js +0 -1
  104. sovara-0.2.7/src/sovara/assets/web_app/assets/PriorsRoute-K5s0QhMy.js +0 -3
  105. sovara-0.2.7/src/sovara/assets/web_app/assets/ProjectRoute-djLnqcoS.js +0 -33
  106. sovara-0.2.7/src/sovara/assets/web_app/assets/ProjectRunsRoute-Df4n91j5.js +0 -1
  107. sovara-0.2.7/src/sovara/assets/web_app/assets/SettingsRoute-CJYubNN5.js +0 -1
  108. sovara-0.2.7/src/sovara/assets/web_app/assets/index-Cu0VGrcx.js +0 -12
  109. sovara-0.2.7/src/sovara/assets/web_app/assets/navigation-BBqqpNGD.js +0 -1
  110. sovara-0.2.7/src/sovara/assets/web_app/assets/runtime-rMDdBrlz.js +0 -1
  111. sovara-0.2.7/src/sovara/assets/web_app/assets/tierState-CVxZC5KD.js +0 -1
  112. sovara-0.2.7/src/sovara/server/database/priors.py +0 -678
  113. sovara-0.2.7/src/sovara/server/database/sqlite/priors.py +0 -739
  114. sovara-0.2.7/src/sovara/server/database/sqlite/schema.py +0 -975
  115. sovara-0.2.7/src/sovara/server/priors_backend/constants.py +0 -32
  116. sovara-0.2.7/src/sovara/server/priors_backend/events.py +0 -42
  117. sovara-0.2.7/src/sovara/server/priors_backend/llm/lesson_retriever.py +0 -1026
  118. sovara-0.2.7/src/sovara/server/priors_backend/retrieval_service.py +0 -504
  119. sovara-0.2.7/src/sovara/server/priors_backend/storage.py +0 -1631
  120. sovara-0.2.7/src/sovara/server/priors_backend/tools/dense_search.py +0 -96
  121. sovara-0.2.7/src/sovara/server/priors_backend/tools/keyword_search.py +0 -72
  122. sovara-0.2.7/src/sovara/server/priors_backend/tools/prior_adherence.py +0 -421
  123. sovara-0.2.7/src/sovara/server/priors_backend/tools/prior_coverage.py +0 -506
  124. sovara-0.2.7/src/sovara/server/priors_backend/tools/utils.py +0 -138
  125. sovara-0.2.7/src/sovara/server/web_app_assets.py +0 -68
  126. {sovara-0.2.7 → sovara-0.2.9}/LICENSE +0 -0
  127. {sovara-0.2.7 → sovara-0.2.9}/README.md +0 -0
  128. {sovara-0.2.7 → sovara-0.2.9}/docs/release/PYPI_DESC.md +0 -0
  129. {sovara-0.2.7 → sovara-0.2.9}/setup.cfg +0 -0
  130. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/assets/__init__.py +0 -0
  131. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/assets/web_app/assets/AttachmentPreview-CFrNMdfC.css +0 -0
  132. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/assets/web_app/assets/LayoutBreadcrumb-CPgbqAJg.css +0 -0
  133. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/assets/web_app/assets/OrgRoute-Syy1k3se.css +0 -0
  134. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/assets/web_app/assets/ProjectRoute-C3Jzk4jL.css +0 -0
  135. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/assets/web_app/assets/ProjectRunsRoute-ChqTPgDi.css +0 -0
  136. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/assets/web_app/assets/arrow_lr-ByI2ndPB.png +0 -0
  137. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/assets/web_app/assets/arrow_spiral_tr_bl-XHIpf338.png +0 -0
  138. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/assets/web_app/assets/codicon-BYm2YbZ6.ttf +0 -0
  139. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/assets/web_app/assets/index-NbFqPLEC.css +0 -0
  140. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/assets/web_app/assets/pdf.worker.min-qwK7q_zL.mjs +0 -0
  141. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/assets/web_app/assets/runtime-CCiRiliL.css +0 -0
  142. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/assets/web_app/assets/settings-BS_NcxJU.css +0 -0
  143. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/assets/web_app/assets/sovara_wordmark-CjkpVR0a.png +0 -0
  144. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/assets/web_app/assets/tiny-invariant-BCXflckp.js +0 -0
  145. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/assets/web_app/favicon.png +0 -0
  146. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/assets/web_app/marketplace_icon.png +0 -0
  147. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/cli/__init__.py +0 -0
  148. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/cli/so_config.py +0 -0
  149. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/cli/so_record.py +0 -0
  150. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/common/__init__.py +0 -0
  151. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/common/config.py +0 -0
  152. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/common/constants.py +0 -0
  153. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/common/custom_metrics.py +0 -0
  154. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/common/lifecycle.py +0 -0
  155. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/common/log_redaction.py +0 -0
  156. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/common/project.py +0 -0
  157. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/common/runtime.py +0 -0
  158. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/common/user.py +0 -0
  159. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/runner/__init__.py +0 -0
  160. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/runner/agent_runner.py +0 -0
  161. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/runner/monkey_patching/__init__.py +0 -0
  162. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/runner/monkey_patching/api_parser.py +0 -0
  163. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/runner/monkey_patching/api_parsers/__init__.py +0 -0
  164. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/runner/monkey_patching/api_parsers/aiohttp_api_parser.py +0 -0
  165. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/runner/monkey_patching/api_parsers/claude_code_messages_api_parser.py +0 -0
  166. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/runner/monkey_patching/api_parsers/httpx_api_parser.py +0 -0
  167. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/runner/monkey_patching/api_parsers/mcp_api_parser.py +0 -0
  168. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/runner/monkey_patching/api_parsers/requests_api_parser.py +0 -0
  169. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/runner/monkey_patching/api_parsers/sse_utils.py +0 -0
  170. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/runner/monkey_patching/api_parsers/urllib3_api_parser.py +0 -0
  171. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/runner/monkey_patching/apply_monkey_patches.py +0 -0
  172. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/runner/monkey_patching/async_streaming.py +0 -0
  173. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/runner/monkey_patching/edit_io_filters.py +0 -0
  174. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/runner/monkey_patching/endpoint_whitelist.py +0 -0
  175. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/runner/monkey_patching/node_naming.py +0 -0
  176. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/runner/monkey_patching/patches/__init__.py +0 -0
  177. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/runner/monkey_patching/patches/adk_patch.py +0 -0
  178. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/runner/monkey_patching/patches/aiohttp_patch.py +0 -0
  179. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/runner/monkey_patching/patches/claude_sdk_patch.py +0 -0
  180. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/runner/monkey_patching/patches/httpx_patch.py +0 -0
  181. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/runner/monkey_patching/patches/langchain_patch.py +0 -0
  182. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/runner/monkey_patching/patches/mcp_patches.py +0 -0
  183. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/runner/monkey_patching/patches/openai_agents_patch.py +0 -0
  184. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/runner/monkey_patching/patches/randomness_patch.py +0 -0
  185. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/runner/monkey_patching/patches/requests_patch.py +0 -0
  186. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/runner/monkey_patching/patches/urllib3_patch.py +0 -0
  187. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/runner/monkey_patching/patching_utils.py +0 -0
  188. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/runner/monkey_patching/tool_trace_utils.py +0 -0
  189. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/runner/run_log_capture.py +0 -0
  190. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/runner/string_matching.py +0 -0
  191. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/__init__.py +0 -0
  192. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/claude_proxy_utils.py +0 -0
  193. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/database/__init__.py +0 -0
  194. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/database/_shared.py +0 -0
  195. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/database/manager.py +0 -0
  196. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/database/mongodb/__init__.py +0 -0
  197. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/database/postgresql/__init__.py +0 -0
  198. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/database/postgresql/connection.py +0 -0
  199. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/database/sqlite/llm_calls.py +0 -0
  200. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/database/users.py +0 -0
  201. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/graph_analysis/inference_server.py +0 -0
  202. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/graph_analysis/trace_chat/__init__.py +0 -0
  203. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/graph_analysis/trace_chat/cancel.py +0 -0
  204. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/graph_analysis/trace_chat/tools/ask_step.py +0 -0
  205. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/graph_analysis/trace_chat/tools/edit_content.py +0 -0
  206. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/graph_analysis/trace_chat/tools/get_step_overview.py +0 -0
  207. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/graph_analysis/trace_chat/tools/get_step_snapshot.py +0 -0
  208. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/graph_analysis/trace_chat/tools/get_trace_overview.py +0 -0
  209. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/graph_analysis/trace_chat/tools/search.py +0 -0
  210. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/graph_analysis/trace_chat/tools/summarize_trace.py +0 -0
  211. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/graph_analysis/trace_chat/tools/verify.py +0 -0
  212. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/graph_analysis/trace_chat/utils/__init__.py +0 -0
  213. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/graph_analysis/trace_chat/utils/content_utils.py +0 -0
  214. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/graph_analysis/trace_chat/utils/context.py +0 -0
  215. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/graph_analysis/trace_chat/utils/edit_persist.py +0 -0
  216. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/graph_analysis/trace_chat/utils/step_content_view.py +0 -0
  217. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/graph_analysis/trace_chat/utils/step_ids.py +0 -0
  218. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/graph_analysis/trace_chat/utils/trace.py +0 -0
  219. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/graph_analysis/trace_chat/utils/verdict_persist.py +0 -0
  220. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/graph_models.py +0 -0
  221. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/handlers/__init__.py +0 -0
  222. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/handlers/cli_handlers.py +0 -0
  223. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/handlers/handler_utils.py +0 -0
  224. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/handlers/runner_handlers.py +0 -0
  225. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/handlers/ui_handlers.py +0 -0
  226. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/llm_provider_catalog.py +0 -0
  227. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/llm_settings.py +0 -0
  228. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/llm_settings_verification.py +0 -0
  229. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/package_version.py +0 -0
  230. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/priors_backend/__init__.py +0 -0
  231. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/priors_backend/llm/__init__.py +0 -0
  232. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/priors_backend/llm/lesson_summarizer.py +0 -0
  233. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/priors_backend/llm_client.py +0 -0
  234. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/priors_backend/logger.py +0 -0
  235. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/priors_scope.py +0 -0
  236. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/routes/__init__.py +0 -0
  237. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/routes/ui.py +0 -0
  238. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/routes/ui_common.py +0 -0
  239. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/routes/ui_trace_chat.py +0 -0
  240. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/services/__init__.py +0 -0
  241. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/services/trace_chat_service.py +0 -0
  242. {sovara-0.2.7 → sovara-0.2.9}/src/sovara/server/third_party_model_catalog.py +0 -0
  243. {sovara-0.2.7 → sovara-0.2.9}/src/sovara.egg-info/dependency_links.txt +0 -0
  244. {sovara-0.2.7 → sovara-0.2.9}/src/sovara.egg-info/entry_points.txt +0 -0
  245. {sovara-0.2.7 → sovara-0.2.9}/src/sovara.egg-info/top_level.txt +0 -0
  246. {sovara-0.2.7 → sovara-0.2.9}/tests/test_graph_payloads.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sovara
3
- Version: 0.2.7
3
+ Version: 0.2.9
4
4
  Summary: A development tool for LLM call visualization and debugging
5
5
  Requires-Python: >=3.10
6
6
  Description-Content-Type: text/markdown
@@ -23,6 +23,7 @@ Requires-Dist: google-cloud-aiplatform
23
23
  Requires-Dist: flatten_dict
24
24
  Requires-Dist: flatten_json
25
25
  Requires-Dist: pymongo
26
+ Requires-Dist: sqlite-vec==0.1.9
26
27
  Provides-Extra: dev
27
28
  Requires-Dist: black==25.1.0; extra == "dev"
28
29
  Requires-Dist: pytest; extra == "dev"
@@ -26,7 +26,7 @@ line-length = 100
26
26
 
27
27
  [project]
28
28
  name = "sovara"
29
- version = "0.2.7"
29
+ version = "0.2.9"
30
30
  description = "A development tool for LLM call visualization and debugging"
31
31
  readme = "docs/release/PYPI_DESC.md"
32
32
  requires-python = ">=3.10"
@@ -49,7 +49,8 @@ dependencies = [
49
49
  "google-cloud-aiplatform",
50
50
  "flatten_dict",
51
51
  "flatten_json",
52
- "pymongo"
52
+ "pymongo",
53
+ "sqlite-vec==0.1.9",
53
54
  ]
54
55
 
55
56
  [project.optional-dependencies]
@@ -0,0 +1,3 @@
1
+ from sovara.runner.context_manager import disable_prior_injection, log, sovara_launch as launch
2
+
3
+ __all__ = ["launch", "log", "disable_prior_injection"]
@@ -430,26 +430,13 @@ The ideal prior has three properties:
430
430
  2. generalizes well to other scenarios where the same problem could occur in a slightly different way
431
431
  3. and it does not conflict with other existing priors.
432
432
 
433
+ Good priors are actionable, concise, self-contained, specific, generalizable, faithful to the lesson, retrieval-friendly, and non-conflicting. If a prior captures the right lesson but is verbose, vague, overly run-specific, or hard to scan, polish it before saving or updating it. In the UI, use the **Polish** action in the content editor. From the CLI, use `so-cli priors polish <prior_id>` to get a non-mutating polished content proposal.
434
+
433
435
  Once you have constructed a prior, check if the problem is solved by doing A/B testing. You should inject the prior at any point you see fit, and use the `edit-and-rerun` functionality. If you want to try different versions of the prior, run `edit-and-rerun` in parallel.
434
436
  Once you verified that the prior addresses the problem, retrieve the available priors, and check if you introduced a conflict with another prior. If so, resolve the conflict by iteratively tuning and running the agent with the adapted priors, until you are satisfied.
435
437
  If the prior came from debugging or improving a specific Sovara run, attach that provenance when you save it: pass `--run-id <full_run_uuid>` to `so-cli priors create` or `so-cli priors update`. Use the full UUID from `so-cli record` or `so-cli runs`; unlike `probe` and `logs`, this field should not use a short prefix.
436
438
  When you learned the prior from a concrete run and omit `--run-id`, treat that as a mistake and fix it before you move on. The only normal case for a missing `run_id` is when the prior came from broad repository inspection or synthesis across multiple runs rather than one specific trace.
437
439
 
438
- When a prior constrains correctness, also attach prior-adherence metadata:
439
-
440
- - `--consequence-if-not-followed`: the concrete failure mode expected when the prior is relevant but the model violates it.
441
- - `--non-adherence-severity`: an integer from 1 to 10 used as the fixed penalty when the adherence judge finds the prior relevant and not followed.
442
-
443
- Use this severity scale:
444
-
445
- - `1-2`: cosmetic or negligible; unlikely to affect outcome
446
- - `3-4`: minor quality, consistency, or preference issue
447
- - `5-6`: material correctness or interpretation risk
448
- - `7-8`: serious issue likely to cause wrong output, wrong action, output-contract violation, or major degradation
449
- - `9-10`: direct correctness break, safety-critical violation, hard contract violation, or likely primary reason the step failed
450
-
451
- The adherence judge decides whether the prior was relevant and followed, but it does not reinterpret the severity. If the prior is violated, the stored `non_adherence_severity` is used as-is.
452
-
453
440
  ### How to use
454
441
 
455
442
  First, inject priors into the context by modifying the user code.
@@ -486,7 +473,7 @@ priors_context = inject_priors(
486
473
  `so-cli priors` mirrors the public priors API exposed by the main `so-server`.
487
474
 
488
475
  ```
489
- usage: so-cli priors [-h] {start-server,list,get,create,update,delete,query,retrieve,migrate,restructure,ls,mkdir,mv,cp,rm} ...
476
+ usage: so-cli priors [-h] {start-server,list,get,create,update,polish,delete,query,retrieve,migrate,restructure,ls,mkdir,mv,cp,rm} ...
490
477
  ```
491
478
 
492
479
  When you need to target a project explicitly, list projects first:
@@ -501,7 +488,7 @@ Then pass `--project-id` or `--proj-id` with a full project ID or any unambiguou
501
488
  uv run so-cli runs --project-id a6cbns64
502
489
  uv run so-cli priors ls --proj-id a6cbns64
503
490
  uv run so-cli priors ls path/to/subfolder/ --proj-id a6cbns64
504
- uv run so-cli priors create --title "<title>" --content "<content>" --summary "<summary>" --path "path/to/subfolder/" --consequence-if-not-followed "<failure mode>" --non-adherence-severity <severity_1_to_10> --project-id a6cbns64
491
+ uv run so-cli priors create --title "<title>" --content "<content>" --summary "<summary>" --path "path/to/subfolder/" --project-id a6cbns64
505
492
  ```
506
493
 
507
494
  For root scope, omit the path entirely. Examples: `uv run so-cli priors ls --project-id a6cbns64`, `uv run so-cli priors list --project-id a6cbns64`, or `uv run so-cli priors retrieve "<context>" --project-id a6cbns64`.
@@ -510,8 +497,9 @@ The main commands are:
510
497
 
511
498
  - `list`: list priors, optionally filtered by `--path`
512
499
  - `get <prior_id>`: fetch one prior
513
- - `create`: create a prior with `--title`, `--content`, and optional `--summary`, `--path`, `--run-id`, `--when-to-use`, `--consequence-if-not-followed`, `--non-adherence-severity`, `--alias`, `--keyword`, and `--related-prior`. If you omit `--summary`, the server generates one with a cheap model and a fallback. Pass `--run-id <full_run_uuid>` whenever the prior came from a specific run; if you just verified a fix with `so-cli record`, this should usually be present.
514
- - `update <prior_id>`: update `--title`, `--content`, `--path`, `--run-id`, `--when-to-use`, `--consequence-if-not-followed`, `--non-adherence-severity`, `--alias`, `--keyword`, and/or `--related-prior`. Preserve or add `--run-id <full_run_uuid>` when the prior is tied to a run; do not drop provenance during follow-up edits.
500
+ - `create`: create a prior with `--title`, `--content`, and optional `--summary`, `--path`, `--run-id`, `--when-to-use`, `--alias`, and `--keyword`. If you omit `--summary`, the server generates one with a cheap model and a fallback. Pass `--run-id <full_run_uuid>` whenever the prior came from a specific run; if you just verified a fix with `so-cli record`, this should usually be present.
501
+ - `update <prior_id>`: update `--title`, `--content`, `--path`, `--run-id`, `--when-to-use`, `--alias`, and/or `--keyword`. Preserve or add `--run-id <full_run_uuid>` when the prior is tied to a run; do not drop provenance during follow-up edits.
502
+ - `polish <prior_id>`: return a non-mutating polished content proposal for a prior
515
503
  - `delete <prior_id>`: delete one prior
516
504
  - `query`: return all priors in a path plus an injected `<sovara-priors>` block
517
505
  - `retrieve "<context>"`: use the LLM retriever to select relevant priors
@@ -524,8 +512,9 @@ Examples:
524
512
  ```bash
525
513
  so-cli priors list --path "path/to/subfolder/"
526
514
  so-cli priors get <prior_id>
527
- so-cli priors create --title "<title>" --content "<content>" --summary "<summary>" --path "path/to/subfolder/" --run-id "<full_run_uuid>" --consequence-if-not-followed "<failure mode>" --non-adherence-severity <severity_1_to_10> --alias "<alias>" --keyword "<keyword>" --related-prior "<prior_id>"
528
- so-cli priors update <prior_id> --content "<new_content>" --path "path/to/another-subfolder/" --consequence-if-not-followed "<failure mode>" --non-adherence-severity <severity_1_to_10> --alias "<alias>" --keyword "<keyword>"
515
+ so-cli priors create --title "<title>" --content "<content>" --summary "<summary>" --path "path/to/subfolder/" --run-id "<full_run_uuid>" --alias "<alias>" --keyword "<keyword>"
516
+ so-cli priors polish <prior_id>
517
+ so-cli priors update <prior_id> --content "<new_content>" --path "path/to/another-subfolder/" --alias "<alias>" --keyword "<keyword>"
529
518
  so-cli priors delete <prior_id>
530
519
  so-cli priors query --path "path/to/subfolder/"
531
520
  so-cli priors retrieve "Find validation guidance"
@@ -541,7 +530,7 @@ so-cli priors rm -r path/to/old-folder/
541
530
 
542
531
  Restructure workflow:
543
532
 
544
- 1. Run `so-cli priors restructure propose` to get a proposal with `task_id`, `moves`, `new_folders`, and `snapshot`.
533
+ 1. Run `so-cli priors restructure propose` to get a proposal with `task_id`, `moves`, `new_folders`, and `prior_tree_hash`.
545
534
  2. Optionally inspect or edit the JSON proposal file.
546
535
  3. Run `so-cli priors restructure execute --proposal-file proposal.json` to execute it.
547
536
  4. If you do not want to apply it, run `so-cli priors restructure abort <task_id>` to release the lock.
@@ -554,18 +543,15 @@ Representative outputs:
554
543
  {
555
544
  "priors": [
556
545
  {
557
- "id": "24d90294",
546
+ "prior_id": "24d90294",
558
547
  "title": "Rate Limiting Best Practices",
559
548
  "summary": "Use exponential backoff with jitter when upstream APIs rate-limit requests.",
560
549
  "content": "When dealing with rate limits, implement exponential backoff...",
561
550
  "path": "path/to/subfolder/",
562
551
  "prior_status": "active",
563
552
  "run_id": "<run_uuid_or_null>",
564
- "consequence_if_not_followed": "Violating this prior can cause retries to duplicate side-effecting calls.",
565
- "non_adherence_severity": "<integer_1_to_10>",
566
553
  "aliases": ["rate limit retries", "429 retry policy"],
567
- "keywords": ["rate-limit", "backoff", "jitter", "429"],
568
- "related_priors": []
554
+ "keywords": ["rate-limit", "backoff", "jitter", "429"]
569
555
  }
570
556
  ]
571
557
  }
@@ -578,9 +564,7 @@ Active priors now store:
578
564
  - `content`: mandatory raw markdown without a title heading
579
565
  - `status`: active or draft
580
566
  - `run_id`: optional source trace/run UUID; pass it whenever the prior was derived from a specific run
581
- - `consequence_if_not_followed`: optional expected failure mode when a relevant prior is violated
582
- - `non_adherence_severity`: optional integer `1-10` fixed severity penalty for a violated relevant prior
583
- - `aliases`, `keywords`, `related_priors`: optional string lists
567
+ - `aliases`, `keywords`: optional string lists
584
568
  - `created_at`, `updated_at`: UTC timestamps
585
569
  - `validation_metadata`: latest validation payload
586
570
 
@@ -589,17 +573,14 @@ Active priors now store:
589
573
  ```json
590
574
  {
591
575
  "status": "created",
592
- "id": "<prior_id>",
576
+ "prior_id": "<prior_id>",
593
577
  "title": "<title>",
594
578
  "summary": "<manual_or_generated_summary>",
595
579
  "content": "<content>",
596
580
  "path": "path/to/subfolder/",
597
581
  "run_id": "<run_uuid_or_null>",
598
- "consequence_if_not_followed": "<failure_mode_or_empty_string>",
599
- "non_adherence_severity": "<integer_1_to_10>",
600
582
  "aliases": ["<manual_or_generated_alias>"],
601
- "keywords": ["<manual_or_generated_keyword>"],
602
- "related_priors": ["<prior_id>"]
583
+ "keywords": ["<manual_or_generated_keyword>"]
603
584
  }
604
585
  ```
605
586
 
@@ -610,14 +591,14 @@ Active priors now store:
610
591
  "path": "path/to/subfolder/",
611
592
  "priors": [
612
593
  {
613
- "id": "<prior_id>",
594
+ "prior_id": "<prior_id>",
614
595
  "name": "<name>",
615
596
  "summary": "<summary>",
616
597
  "content": "<content>",
617
598
  "path": "path/to/subfolder/"
618
599
  }
619
600
  ],
620
- "injected_context": "<sovara-priors>\n<!-- {\"priors\":[{\"id\":\"<prior_id>\"}]} -->\n## <name>\n<content>\n</sovara-priors>"
601
+ "injected_context": "<sovara-priors>\n<!-- {\"priors\":[{\"prior_id\":\"<prior_id>\"}]} -->\n## <name>\n<content>\n</sovara-priors>"
621
602
  }
622
603
  ```
623
604
 
@@ -629,7 +610,7 @@ Active priors now store:
629
610
  "base_path": "path/to/root/",
630
611
  "priors": [
631
612
  {
632
- "id": "<prior_id>",
613
+ "prior_id": "<prior_id>",
633
614
  "name": "<name>",
634
615
  "summary": "<summary>",
635
616
  "content": "<content>",
@@ -658,7 +639,7 @@ Active priors now store:
658
639
  ],
659
640
  "redundant_prior_ids": [],
660
641
  "total_priors": 4,
661
- "snapshot": "<snapshot>"
642
+ "prior_tree_hash": "<prior_tree_hash>"
662
643
  }
663
644
  ```
664
645
 
@@ -675,7 +656,7 @@ Active priors now store:
675
656
  ],
676
657
  "priors": [
677
658
  {
678
- "id": "abc123",
659
+ "prior_id": "abc123",
679
660
  "name": "Some Prior",
680
661
  "summary": "...",
681
662
  "content": "...",
@@ -0,0 +1 @@
1
+ import{r,j as e}from"./index-TU6o79pU.js";import{D as n,a as l,P as o,G as p}from"./DocumentPreviewModal-DLcTPg47.js";import{M as c,i as d,a as h,h as u,s as x,d as j}from"./RunRoute-CjnawiLF.js";import"./tiny-invariant-BCXflckp.js";import"./LayoutBreadcrumb-DrZRF2Sb.js";import"./tierState-BVmlAt4E.js";import"./api-VlLy9MpQ.js";import"./runtime-B1TGbSkq.js";import"./plus-B1NOTICQ.js";import"./value-Bqe5DuYT.js";import"./prismTheme-nMW1SONA.js";import"./useTheme-BMbBHOjM.js";p.workerSrc=new URL("/assets/pdf.worker.min-qwK7q_zL.mjs",import.meta.url).toString();function b({attachment:m,onClick:i}){const s=`data:${m.mimeType};base64,${m.data}`,t=c[m.mimeType]??m.mimeType.split("/")[1]?.toUpperCase()??"FILE";return e.jsxs("button",{className:"attachment-thumb",onClick:i,title:m.name,children:[e.jsx("div",{className:"attachment-thumb-preview",children:d(m.mimeType)?e.jsx("img",{src:s,alt:m.name,className:"attachment-thumb-img"}):h(m.mimeType)?e.jsx(l,{file:s,loading:e.jsx("div",{className:"attachment-thumb-placeholder",children:"PDF"}),children:e.jsx(o,{pageNumber:1,width:120,renderTextLayer:!1,renderAnnotationLayer:!1})}):e.jsx("div",{className:"attachment-thumb-placeholder",children:t})}),e.jsxs("div",{className:"attachment-thumb-label",children:[e.jsx("span",{className:"attachment-thumb-ext",children:t}),e.jsx("span",{className:"attachment-thumb-name",children:m.name})]})]})}function E({attachments:m}){const[i,s]=r.useState(null);if(m.length===0)return null;function t(a){u(a.mimeType)?s(a):x(j(a.data,{mime_type:a.mimeType,filename:a.name})||{data:a.data,mimeType:a.mimeType,type:"unknown",name:a.name})}return e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"attachment-strip",children:m.map(a=>e.jsx(b,{attachment:a,onClick:()=>t(a)},a.id))}),i&&e.jsx(n,{attachment:i,onClose:()=>s(null)})]})}export{E as AttachmentStrip};