sovara 0.2.4__tar.gz → 0.2.6__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.4 → sovara-0.2.6}/PKG-INFO +6 -2
  2. {sovara-0.2.4 → sovara-0.2.6}/pyproject.toml +8 -4
  3. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/assets/SKILL.md +104 -39
  4. sovara-0.2.6/src/sovara/assets/web_app/assets/AttachmentPreview-Di2_OG_9.js +1 -0
  5. sovara-0.2.4/src/sovara/assets/web_app/assets/DocumentPreviewModal-B9FumoYT.js → sovara-0.2.6/src/sovara/assets/web_app/assets/DocumentPreviewModal-CvQFa4di.js +5 -5
  6. sovara-0.2.6/src/sovara/assets/web_app/assets/LayoutBreadcrumb-CJhx8VyY.js +1 -0
  7. sovara-0.2.6/src/sovara/assets/web_app/assets/LayoutBreadcrumb-CPgbqAJg.css +1 -0
  8. sovara-0.2.6/src/sovara/assets/web_app/assets/OrgRoute-CKAmaA4W.js +1 -0
  9. sovara-0.2.6/src/sovara/assets/web_app/assets/OrgRoute-Syy1k3se.css +1 -0
  10. sovara-0.2.6/src/sovara/assets/web_app/assets/PriorsRoute-BveozA7x.css +1 -0
  11. sovara-0.2.6/src/sovara/assets/web_app/assets/PriorsRoute-K5s0QhMy.js +3 -0
  12. sovara-0.2.6/src/sovara/assets/web_app/assets/ProjectRoute-C3Jzk4jL.css +1 -0
  13. sovara-0.2.6/src/sovara/assets/web_app/assets/ProjectRoute-djLnqcoS.js +33 -0
  14. sovara-0.2.6/src/sovara/assets/web_app/assets/ProjectRunsRoute-ChqTPgDi.css +1 -0
  15. sovara-0.2.6/src/sovara/assets/web_app/assets/ProjectRunsRoute-Df4n91j5.js +1 -0
  16. sovara-0.2.6/src/sovara/assets/web_app/assets/RunRoute-BXKXUvYa.js +33 -0
  17. sovara-0.2.6/src/sovara/assets/web_app/assets/RunRoute-CRAJ9hM9.css +1 -0
  18. sovara-0.2.6/src/sovara/assets/web_app/assets/SettingsRoute-CJYubNN5.js +1 -0
  19. sovara-0.2.4/src/sovara/assets/web_app/assets/eye-DljehhmM.js → sovara-0.2.6/src/sovara/assets/web_app/assets/eye-BwLFOixq.js +1 -1
  20. sovara-0.2.6/src/sovara/assets/web_app/assets/index-Cu0VGrcx.js +12 -0
  21. sovara-0.2.4/src/sovara/assets/web_app/assets/index-veNT10PX.css → sovara-0.2.6/src/sovara/assets/web_app/assets/index-NbFqPLEC.css +1 -1
  22. sovara-0.2.6/src/sovara/assets/web_app/assets/navigation-BBqqpNGD.js +1 -0
  23. sovara-0.2.4/src/sovara/assets/web_app/assets/plus-CkqVCne8.js → sovara-0.2.6/src/sovara/assets/web_app/assets/plus-LepfYku6.js +1 -1
  24. sovara-0.2.4/src/sovara/assets/web_app/assets/prismTheme-Bx8cYzkm.js → sovara-0.2.6/src/sovara/assets/web_app/assets/prismTheme-BK3YfG66.js +23 -23
  25. sovara-0.2.6/src/sovara/assets/web_app/assets/runtime-CCiRiliL.css +1 -0
  26. sovara-0.2.6/src/sovara/assets/web_app/assets/runtime-rMDdBrlz.js +1 -0
  27. sovara-0.2.6/src/sovara/assets/web_app/assets/settings-BS_NcxJU.css +1 -0
  28. sovara-0.2.6/src/sovara/assets/web_app/assets/settings-CP5l-jN0.js +1 -0
  29. sovara-0.2.6/src/sovara/assets/web_app/assets/tierState-CVxZC5KD.js +1 -0
  30. sovara-0.2.6/src/sovara/assets/web_app/assets/tiny-invariant-BCXflckp.js +1 -0
  31. sovara-0.2.4/src/sovara/assets/web_app/assets/trash-2-DYeReTGL.js → sovara-0.2.6/src/sovara/assets/web_app/assets/trash-2-QBj_Tw9w.js +1 -1
  32. sovara-0.2.6/src/sovara/assets/web_app/assets/useTheme-BfCfHZeA.js +1 -0
  33. sovara-0.2.6/src/sovara/assets/web_app/assets/value-BlxarHmt.js +1 -0
  34. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/assets/web_app/index.html +13 -3
  35. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/cli/so_server.py +70 -40
  36. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/cli/so_tool.py +462 -56
  37. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/common/config.py +91 -2
  38. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/common/constants.py +27 -0
  39. sovara-0.2.6/src/sovara/common/priors_block.py +43 -0
  40. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/common/project.py +59 -9
  41. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/common/user.py +21 -12
  42. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/runner/agent_runner.py +8 -1
  43. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/runner/context_manager.py +10 -0
  44. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/runner/monkey_patching/api_parser.py +38 -51
  45. sovara-0.2.6/src/sovara/runner/monkey_patching/api_parsers/claude_code_messages_api_parser.py +47 -0
  46. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/runner/monkey_patching/apply_monkey_patches.py +6 -1
  47. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/runner/monkey_patching/edit_io_filters.py +24 -0
  48. sovara-0.2.6/src/sovara/runner/monkey_patching/patches/adk_patch.py +153 -0
  49. sovara-0.2.6/src/sovara/runner/monkey_patching/patches/claude_sdk_patch.py +181 -0
  50. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/runner/monkey_patching/patches/langchain_patch.py +39 -55
  51. sovara-0.2.6/src/sovara/runner/monkey_patching/patches/openai_agents_patch.py +292 -0
  52. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/runner/monkey_patching/patching_utils.py +68 -14
  53. sovara-0.2.6/src/sovara/runner/monkey_patching/tool_trace_utils.py +178 -0
  54. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/runner/node_execution.py +50 -9
  55. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/runner/priors.py +271 -181
  56. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/runner/priors_pipeline.py +104 -25
  57. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/runner/runtime_client.py +80 -4
  58. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/app.py +11 -1
  59. sovara-0.2.6/src/sovara/server/claude_proxy_utils.py +277 -0
  60. sovara-0.2.6/src/sovara/server/database/__init__.py +21 -0
  61. sovara-0.2.6/src/sovara/server/database/backend_protocol.py +626 -0
  62. sovara-0.2.6/src/sovara/server/database/blob_storage.py +123 -0
  63. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/database/llm_calls.py +88 -23
  64. sovara-0.2.6/src/sovara/server/database/manager.py +107 -0
  65. sovara-0.2.6/src/sovara/server/database/mongodb/__init__.py +3 -0
  66. sovara-0.2.6/src/sovara/server/database/mongodb/backend.py +2143 -0
  67. sovara-0.2.6/src/sovara/server/database/mongodb/connection.py +163 -0
  68. sovara-0.2.6/src/sovara/server/database/postgresql/backend.py +768 -0
  69. sovara-0.2.6/src/sovara/server/database/postgresql/connection.py +64 -0
  70. sovara-0.2.6/src/sovara/server/database/postgresql/schema.py +161 -0
  71. sovara-0.2.6/src/sovara/server/database/priors.py +678 -0
  72. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/database/projects.py +101 -5
  73. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/database/runs.py +20 -1
  74. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/database/sqlite/__init__.py +14 -1
  75. sovara-0.2.6/src/sovara/server/database/sqlite/backend.py +1002 -0
  76. sovara-0.2.6/src/sovara/server/database/sqlite/connection.py +278 -0
  77. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/database/sqlite/llm_calls.py +148 -0
  78. sovara-0.2.6/src/sovara/server/database/sqlite/priors.py +739 -0
  79. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/database/sqlite/projects.py +84 -14
  80. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/database/sqlite/runs.py +99 -6
  81. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/database/sqlite/schema.py +284 -108
  82. sovara-0.2.6/src/sovara/server/database/sqlite/users.py +78 -0
  83. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/graph_models.py +2 -1
  84. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/handlers/runner_handlers.py +2 -0
  85. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/llm_backend.py +179 -37
  86. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/llm_settings.py +77 -19
  87. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/llm_settings_verification.py +134 -12
  88. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/prior_display.py +24 -6
  89. sovara-0.2.6/src/sovara/server/priors_backend/constants.py +32 -0
  90. sovara-0.2.6/src/sovara/server/priors_backend/llm/folder_rebalancer.py +305 -0
  91. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/priors_backend/llm/lesson_restructurer.py +107 -33
  92. sovara-0.2.6/src/sovara/server/priors_backend/llm/lesson_retriever.py +1026 -0
  93. sovara-0.2.6/src/sovara/server/priors_backend/llm/lesson_summarizer.py +187 -0
  94. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/priors_backend/llm/lesson_validator.py +10 -14
  95. sovara-0.2.6/src/sovara/server/priors_backend/llm/prior_metadata_suggester.py +145 -0
  96. sovara-0.2.6/src/sovara/server/priors_backend/llm_client.py +158 -0
  97. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/priors_backend/logger.py +1 -1
  98. sovara-0.2.6/src/sovara/server/priors_backend/path_utils.py +61 -0
  99. sovara-0.2.6/src/sovara/server/priors_backend/retrieval_service.py +504 -0
  100. sovara-0.2.6/src/sovara/server/priors_backend/routes.py +1721 -0
  101. sovara-0.2.6/src/sovara/server/priors_backend/storage.py +1631 -0
  102. sovara-0.2.6/src/sovara/server/priors_backend/tools/adjudication.py +419 -0
  103. sovara-0.2.6/src/sovara/server/priors_backend/tools/bm25_search.py +51 -0
  104. sovara-0.2.6/src/sovara/server/priors_backend/tools/dense_search.py +96 -0
  105. sovara-0.2.6/src/sovara/server/priors_backend/tools/folder_groups.py +57 -0
  106. sovara-0.2.6/src/sovara/server/priors_backend/tools/keyword_search.py +72 -0
  107. sovara-0.2.6/src/sovara/server/priors_backend/tools/parallel_search.py +150 -0
  108. sovara-0.2.6/src/sovara/server/priors_backend/tools/preprocess_context.py +195 -0
  109. sovara-0.2.6/src/sovara/server/priors_backend/tools/prior_adherence.py +421 -0
  110. sovara-0.2.6/src/sovara/server/priors_backend/tools/prior_coverage.py +506 -0
  111. sovara-0.2.6/src/sovara/server/priors_backend/tools/rerank.py +76 -0
  112. sovara-0.2.6/src/sovara/server/priors_backend/tools/utils.py +138 -0
  113. sovara-0.2.6/src/sovara/server/routes/__init__.py +0 -0
  114. sovara-0.2.6/src/sovara/server/routes/claude_proxy.py +435 -0
  115. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/routes/internal.py +253 -18
  116. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/routes/ui.py +125 -7
  117. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/routes/ui_projects.py +58 -45
  118. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/routes/ui_runs.py +87 -1
  119. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/services/trace_chat_service.py +3 -7
  120. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/state.py +60 -1
  121. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/third_party_model_catalog.py +23 -10
  122. {sovara-0.2.4 → sovara-0.2.6}/src/sovara.egg-info/PKG-INFO +6 -2
  123. {sovara-0.2.4 → sovara-0.2.6}/src/sovara.egg-info/SOURCES.txt +62 -25
  124. {sovara-0.2.4 → sovara-0.2.6}/src/sovara.egg-info/requires.txt +5 -1
  125. sovara-0.2.4/src/sovara/assets/web_app/assets/AttachmentPreview-h01XSt_Q.js +0 -1
  126. sovara-0.2.4/src/sovara/assets/web_app/assets/LayoutBreadcrumb-D8Jj9PNg.js +0 -1
  127. sovara-0.2.4/src/sovara/assets/web_app/assets/LayoutBreadcrumb-DopPRSia.css +0 -1
  128. sovara-0.2.4/src/sovara/assets/web_app/assets/OrgRoute-BcO5LcH1.js +0 -1
  129. sovara-0.2.4/src/sovara/assets/web_app/assets/OrgRoute-DIln18S1.css +0 -1
  130. sovara-0.2.4/src/sovara/assets/web_app/assets/PriorsRoute-BSsFm0pQ.css +0 -1
  131. sovara-0.2.4/src/sovara/assets/web_app/assets/PriorsRoute-CaMBZzP_.js +0 -5
  132. sovara-0.2.4/src/sovara/assets/web_app/assets/ProjectRoute-BCA5W9t8.js +0 -1
  133. sovara-0.2.4/src/sovara/assets/web_app/assets/ProjectRoute-DtQqJb1n.css +0 -1
  134. sovara-0.2.4/src/sovara/assets/web_app/assets/RunRoute-BWs7EUiD.css +0 -1
  135. sovara-0.2.4/src/sovara/assets/web_app/assets/RunRoute-rUSpBhsI.js +0 -21
  136. sovara-0.2.4/src/sovara/assets/web_app/assets/SettingsRoute-BtETGx6c.js +0 -1
  137. sovara-0.2.4/src/sovara/assets/web_app/assets/SettingsRoute-C4VU70zq.css +0 -1
  138. sovara-0.2.4/src/sovara/assets/web_app/assets/api-1mbBSn7v.css +0 -1
  139. sovara-0.2.4/src/sovara/assets/web_app/assets/api-tVJBLHUH.js +0 -1
  140. sovara-0.2.4/src/sovara/assets/web_app/assets/index-BygN1cJK.js +0 -12
  141. sovara-0.2.4/src/sovara/assets/web_app/assets/tierState-Bq39H0kz.js +0 -1
  142. sovara-0.2.4/src/sovara/runner/monkey_patching/api_parsers/claude_sdk_api_parser.py +0 -83
  143. sovara-0.2.4/src/sovara/runner/monkey_patching/api_parsers/langchain_tool_api_parser.py +0 -33
  144. sovara-0.2.4/src/sovara/runner/monkey_patching/patches/claude_sdk_patch.py +0 -335
  145. sovara-0.2.4/src/sovara/server/database/__init__.py +0 -11
  146. sovara-0.2.4/src/sovara/server/database/manager.py +0 -34
  147. sovara-0.2.4/src/sovara/server/database/priors.py +0 -285
  148. sovara-0.2.4/src/sovara/server/database/sqlite/connection.py +0 -74
  149. sovara-0.2.4/src/sovara/server/database/sqlite/priors.py +0 -363
  150. sovara-0.2.4/src/sovara/server/database/sqlite/users.py +0 -133
  151. sovara-0.2.4/src/sovara/server/priors_backend/constants.py +0 -11
  152. sovara-0.2.4/src/sovara/server/priors_backend/llm/lesson_retriever.py +0 -390
  153. sovara-0.2.4/src/sovara/server/priors_backend/llm/lesson_summarizer.py +0 -82
  154. sovara-0.2.4/src/sovara/server/priors_backend/llm_client.py +0 -42
  155. sovara-0.2.4/src/sovara/server/priors_backend/routes.py +0 -1105
  156. sovara-0.2.4/src/sovara/server/priors_backend/storage.py +0 -478
  157. {sovara-0.2.4 → sovara-0.2.6}/LICENSE +0 -0
  158. {sovara-0.2.4 → sovara-0.2.6}/README.md +0 -0
  159. {sovara-0.2.4 → sovara-0.2.6}/docs/release/PYPI_DESC.md +0 -0
  160. {sovara-0.2.4 → sovara-0.2.6}/setup.cfg +0 -0
  161. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/__init__.py +0 -0
  162. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/assets/__init__.py +0 -0
  163. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/assets/web_app/assets/AttachmentPreview-CFrNMdfC.css +0 -0
  164. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/assets/web_app/assets/arrow_lr-ByI2ndPB.png +0 -0
  165. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/assets/web_app/assets/arrow_spiral_tr_bl-XHIpf338.png +0 -0
  166. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/assets/web_app/assets/codicon-BYm2YbZ6.ttf +0 -0
  167. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/assets/web_app/assets/pdf.worker.min-qwK7q_zL.mjs +0 -0
  168. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/assets/web_app/assets/sovara_wordmark-CjkpVR0a.png +0 -0
  169. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/assets/web_app/favicon.png +0 -0
  170. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/assets/web_app/marketplace_icon.png +0 -0
  171. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/cli/__init__.py +0 -0
  172. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/cli/so_config.py +0 -0
  173. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/cli/so_record.py +0 -0
  174. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/common/__init__.py +0 -0
  175. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/common/custom_metrics.py +0 -0
  176. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/common/lifecycle.py +0 -0
  177. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/common/log_redaction.py +0 -0
  178. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/common/logger.py +0 -0
  179. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/common/runtime.py +0 -0
  180. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/common/utils.py +0 -0
  181. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/runner/__init__.py +0 -0
  182. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/runner/monkey_patching/__init__.py +0 -0
  183. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/runner/monkey_patching/api_parsers/__init__.py +0 -0
  184. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/runner/monkey_patching/api_parsers/aiohttp_api_parser.py +0 -0
  185. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/runner/monkey_patching/api_parsers/httpx_api_parser.py +0 -0
  186. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/runner/monkey_patching/api_parsers/mcp_api_parser.py +0 -0
  187. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/runner/monkey_patching/api_parsers/requests_api_parser.py +0 -0
  188. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/runner/monkey_patching/api_parsers/sse_utils.py +0 -0
  189. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/runner/monkey_patching/api_parsers/urllib3_api_parser.py +0 -0
  190. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/runner/monkey_patching/async_streaming.py +0 -0
  191. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/runner/monkey_patching/endpoint_whitelist.py +0 -0
  192. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/runner/monkey_patching/node_naming.py +0 -0
  193. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/runner/monkey_patching/patches/__init__.py +0 -0
  194. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/runner/monkey_patching/patches/aiohttp_patch.py +0 -0
  195. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/runner/monkey_patching/patches/httpx_patch.py +0 -0
  196. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/runner/monkey_patching/patches/mcp_patches.py +0 -0
  197. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/runner/monkey_patching/patches/randomness_patch.py +0 -0
  198. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/runner/monkey_patching/patches/requests_patch.py +0 -0
  199. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/runner/monkey_patching/patches/urllib3_patch.py +0 -0
  200. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/runner/run_log_capture.py +0 -0
  201. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/runner/string_matching.py +0 -0
  202. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/__init__.py +0 -0
  203. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/database/_shared.py +0 -0
  204. {sovara-0.2.4/src/sovara/server/graph_analysis/trace_chat → sovara-0.2.6/src/sovara/server/database/postgresql}/__init__.py +0 -0
  205. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/database/users.py +0 -0
  206. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/graph_analysis/inference_server.py +0 -0
  207. {sovara-0.2.4/src/sovara/server/graph_analysis/trace_chat/utils → sovara-0.2.6/src/sovara/server/graph_analysis/trace_chat}/__init__.py +0 -0
  208. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/graph_analysis/trace_chat/cancel.py +0 -0
  209. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/graph_analysis/trace_chat/main.py +0 -0
  210. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/graph_analysis/trace_chat/tools/__init__.py +0 -0
  211. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/graph_analysis/trace_chat/tools/ask_step.py +0 -0
  212. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/graph_analysis/trace_chat/tools/edit_content.py +0 -0
  213. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/graph_analysis/trace_chat/tools/get_step_overview.py +0 -0
  214. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/graph_analysis/trace_chat/tools/get_step_snapshot.py +0 -0
  215. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/graph_analysis/trace_chat/tools/get_trace_overview.py +0 -0
  216. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/graph_analysis/trace_chat/tools/search.py +0 -0
  217. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/graph_analysis/trace_chat/tools/summarize_trace.py +0 -0
  218. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/graph_analysis/trace_chat/tools/verify.py +0 -0
  219. {sovara-0.2.4/src/sovara/server/routes → sovara-0.2.6/src/sovara/server/graph_analysis/trace_chat/utils}/__init__.py +0 -0
  220. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/graph_analysis/trace_chat/utils/content_utils.py +0 -0
  221. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/graph_analysis/trace_chat/utils/context.py +0 -0
  222. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/graph_analysis/trace_chat/utils/edit_persist.py +0 -0
  223. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/graph_analysis/trace_chat/utils/step_content_view.py +0 -0
  224. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/graph_analysis/trace_chat/utils/step_ids.py +0 -0
  225. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/graph_analysis/trace_chat/utils/trace.py +0 -0
  226. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/graph_analysis/trace_chat/utils/verdict_persist.py +0 -0
  227. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/handlers/__init__.py +0 -0
  228. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/handlers/cli_handlers.py +0 -0
  229. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/handlers/handler_utils.py +0 -0
  230. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/handlers/ui_handlers.py +0 -0
  231. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/llm_provider_catalog.py +0 -0
  232. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/package_version.py +0 -0
  233. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/priors_backend/__init__.py +0 -0
  234. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/priors_backend/events.py +0 -0
  235. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/priors_backend/llm/__init__.py +0 -0
  236. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/priors_scope.py +0 -0
  237. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/routes/events.py +0 -0
  238. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/routes/runner.py +0 -0
  239. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/routes/ui_common.py +0 -0
  240. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/routes/ui_trace_chat.py +0 -0
  241. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/services/__init__.py +0 -0
  242. {sovara-0.2.4 → sovara-0.2.6}/src/sovara/server/web_app_assets.py +0 -0
  243. {sovara-0.2.4 → sovara-0.2.6}/src/sovara.egg-info/dependency_links.txt +0 -0
  244. {sovara-0.2.4 → sovara-0.2.6}/src/sovara.egg-info/entry_points.txt +0 -0
  245. {sovara-0.2.4 → sovara-0.2.6}/src/sovara.egg-info/top_level.txt +0 -0
  246. {sovara-0.2.4 → sovara-0.2.6}/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.4
3
+ Version: 0.2.6
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
@@ -8,6 +8,8 @@ License-File: LICENSE
8
8
  Requires-Dist: pyyaml
9
9
  Requires-Dist: dill
10
10
  Requires-Dist: boto3
11
+ Requires-Dist: bm25s
12
+ Requires-Dist: cohere
11
13
  Requires-Dist: debugpy
12
14
  Requires-Dist: psutil
13
15
  Requires-Dist: psycopg2-binary
@@ -20,14 +22,15 @@ Requires-Dist: google-auth
20
22
  Requires-Dist: google-cloud-aiplatform
21
23
  Requires-Dist: flatten_dict
22
24
  Requires-Dist: flatten_json
25
+ Requires-Dist: pymongo
23
26
  Provides-Extra: dev
24
27
  Requires-Dist: black==25.1.0; extra == "dev"
25
28
  Requires-Dist: pytest; extra == "dev"
26
29
  Requires-Dist: pre-commit; extra == "dev"
27
30
  Requires-Dist: responses; extra == "dev"
31
+ Requires-Dist: mongomock; extra == "dev"
28
32
  Requires-Dist: openai; extra == "dev"
29
33
  Requires-Dist: anthropic; extra == "dev"
30
- Requires-Dist: openai-agents; extra == "dev"
31
34
  Requires-Dist: google-genai; extra == "dev"
32
35
  Requires-Dist: hydra-core; extra == "dev"
33
36
  Requires-Dist: e2b_code_interpreter; extra == "dev"
@@ -43,6 +46,7 @@ Requires-Dist: openai; extra == "examples"
43
46
  Requires-Dist: anthropic; extra == "examples"
44
47
  Requires-Dist: openai-agents; extra == "examples"
45
48
  Requires-Dist: google-genai; extra == "examples"
49
+ Requires-Dist: claude-agent-sdk; extra == "examples"
46
50
  Provides-Extra: docs
47
51
  Requires-Dist: mkdocs-material>=9.5; extra == "docs"
48
52
  Requires-Dist: mkdocs-minify-plugin; extra == "docs"
@@ -26,7 +26,7 @@ line-length = 100
26
26
 
27
27
  [project]
28
28
  name = "sovara"
29
- version = "0.2.4"
29
+ version = "0.2.6"
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"
@@ -35,6 +35,8 @@ dependencies = [
35
35
  "pyyaml",
36
36
  "dill",
37
37
  "boto3",
38
+ "bm25s",
39
+ "cohere",
38
40
  "debugpy",
39
41
  "psutil",
40
42
  "psycopg2-binary",
@@ -46,7 +48,8 @@ dependencies = [
46
48
  "google-auth",
47
49
  "google-cloud-aiplatform",
48
50
  "flatten_dict",
49
- "flatten_json"
51
+ "flatten_json",
52
+ "pymongo"
50
53
  ]
51
54
 
52
55
  [project.optional-dependencies]
@@ -55,9 +58,9 @@ dev = [
55
58
  "pytest",
56
59
  "pre-commit",
57
60
  "responses",
61
+ "mongomock",
58
62
  "openai",
59
63
  "anthropic",
60
- "openai-agents",
61
64
  "google-genai",
62
65
  "hydra-core",
63
66
  "e2b_code_interpreter",
@@ -76,7 +79,8 @@ examples = [
76
79
  "openai",
77
80
  "anthropic",
78
81
  "openai-agents",
79
- "google-genai"
82
+ "google-genai",
83
+ "claude-agent-sdk"
80
84
  ]
81
85
 
82
86
  docs = [
@@ -19,6 +19,7 @@ description: sovara helps you develop and maintain adaptable agentic systems. It
19
19
  2. **Check setup state before the first run**: Start with `uv run so-cli status --path <script-or-project-dir>`. This reports whether the local Sovara user is configured and whether the target directory already belongs to a Sovara project.
20
20
  3. **Initialize explicitly when setup is missing**: If the user or project is missing, run `uv run so-cli init --user-name "<full name>" --user-email "<email>" [--project-root <dir> --project-name "<name>"]`. Do not reason about `~/.sovara/.user_id` or `.sovara/.project_id` directly if the CLI can tell you the setup state.
21
21
  4. **For non-interactive runs, pass setup through the CLI**: When running through Codex or another non-interactive shell, do not rely on prompts. Use `so-cli init` first or pass `--user-name`, `--user-email`, `--project-root`, `--project-name`, and `--project-description` directly to `so-cli record`.
22
+ 5. **Use explicit project selection when needed**: Run `uv run so-cli projects` to list visible projects and their `project_id`s. Project-scoped CLI commands such as `so-cli runs ...` and `so-cli priors ...` accept `--project-id` / `--proj-id`, and these flags accept any unambiguous project-id prefix. If you do not pass a project ID, priors commands resolve scope from the client workspace. Do not assume the server process's cwd will select the right project.
22
23
 
23
24
  ## Integrated Observability
24
25
 
@@ -417,7 +418,9 @@ Then compare results across the three runs using `so-cli probe` and `so-cli runs
417
418
 
418
419
  ## Priors
419
420
 
420
- Priors are small snippets that augment a context at runtime to inform the agent of specifics like company policies, specific domain knowledge, or conventions. Priors are organized in folders (e.g. `beaver/retriever/`) so different parts of an agent system can have their own priors. `so-cli` provides capability to create and manage priors.
421
+ Priors are small snippets that augment a context at runtime to inform the agent of specifics like company policies, specific domain knowledge, or conventions. Priors are organized in folders (e.g. `path/to/subfolder/`) so different parts of an agent system can have their own priors. `so-cli` provides capability to create and manage priors.
422
+
423
+ **Default retrieval scope:** Automatic runtime prior injection is the default and is project-wide. It retrieves from root scope (`""`), so it can consider priors anywhere in the project, including subfolders. Use folders for organization, or to narrow scope explicitly with `inject_priors(path="path/to/subfolder/", ...)`. If you manually call `inject_priors(...)`, that inserts a managed `<sovara-priors>` block and automatic retrieval for that same call is skipped.
421
424
 
422
425
  ### When to use
423
426
  If injecting additional information that resolves ambiguity, introduces domain knowledge, or specifies company policy, can resolve the issue – construct a prior.
@@ -429,6 +432,23 @@ The ideal prior has three properties:
429
432
 
430
433
  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.
431
434
  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
+ 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
+ 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
+
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.
432
452
 
433
453
  ### How to use
434
454
 
@@ -438,7 +458,7 @@ First, inject priors into the context by modifying the user code.
438
458
  from sovara.runner.priors import inject_priors
439
459
 
440
460
  # Inject all priors from a specific folder into a <sovara-priors> block
441
- priors_context = inject_priors(path="beaver/retriever/")
461
+ priors_context = inject_priors(path="path/to/subfolder/")
442
462
 
443
463
  # Prepend to your prompt
444
464
  prompt = f"{priors_context}\n\n{user_query}" if priors_context else user_query
@@ -453,7 +473,7 @@ If you want LLM-filtered retrieval instead of loading all priors in a path:
453
473
 
454
474
  ```python
455
475
  priors_context = inject_priors(
456
- path="beaver/retriever/",
476
+ path="path/to/subfolder/",
457
477
  context=user_query,
458
478
  method="retrieve",
459
479
  )
@@ -469,12 +489,29 @@ priors_context = inject_priors(
469
489
  usage: so-cli priors [-h] {start-server,list,get,create,update,delete,query,retrieve,migrate,restructure,ls,mkdir,mv,cp,rm} ...
470
490
  ```
471
491
 
492
+ When you need to target a project explicitly, list projects first:
493
+
494
+ ```bash
495
+ uv run so-cli projects
496
+ ```
497
+
498
+ Then pass `--project-id` or `--proj-id` with a full project ID or any unambiguous prefix:
499
+
500
+ ```bash
501
+ uv run so-cli runs --project-id a6cbns64
502
+ uv run so-cli priors ls --proj-id a6cbns64
503
+ 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
505
+ ```
506
+
507
+ 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`.
508
+
472
509
  The main commands are:
473
510
 
474
511
  - `list`: list priors, optionally filtered by `--path`
475
512
  - `get <prior_id>`: fetch one prior
476
- - `create`: create a prior; supports `--creation-trace-id` and `--trace-source`
477
- - `update <prior_id>`: update `--name`, `--summary`, `--content`, and/or `--path`
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.
478
515
  - `delete <prior_id>`: delete one prior
479
516
  - `query`: return all priors in a path plus an injected `<sovara-priors>` block
480
517
  - `retrieve "<context>"`: use the LLM retriever to select relevant priors
@@ -485,21 +522,21 @@ The main commands are:
485
522
  Examples:
486
523
 
487
524
  ```bash
488
- so-cli priors list --path "beaver/retriever/"
525
+ so-cli priors list --path "path/to/subfolder/"
489
526
  so-cli priors get <prior_id>
490
- so-cli priors create --name "<name>" --summary "<summary>" --content "<content>" --path "beaver/retriever/"
491
- so-cli priors update <prior_id> --content "<new_content>" --path "beaver/validator/"
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>"
492
529
  so-cli priors delete <prior_id>
493
- so-cli priors query --path "beaver/retriever/"
494
- so-cli priors retrieve "Find SQL validation guidance" --path "beaver/"
530
+ so-cli priors query --path "path/to/subfolder/"
531
+ so-cli priors retrieve "Find validation guidance"
495
532
  so-cli priors migrate
496
- so-cli priors restructure propose --path "beaver/" --comments "Group priors by subsystem" > proposal.json
533
+ so-cli priors restructure propose --path "path/to/root/" --comments "Group priors by subsystem" > proposal.json
497
534
  so-cli priors restructure execute --proposal-file proposal.json
498
535
  so-cli priors restructure abort <task_id>
499
- so-cli priors ls beaver/
500
- so-cli priors mv -i abc123,def456 beaver/dest/
501
- so-cli priors cp beaver/retriever/ beaver/retriever-backup/
502
- so-cli priors rm -r beaver/old/
536
+ so-cli priors ls
537
+ so-cli priors mv -i abc123,def456 path/to/destination/
538
+ so-cli priors cp path/to/subfolder/ path/to/subfolder-backup/
539
+ so-cli priors rm -r path/to/old-folder/
503
540
  ```
504
541
 
505
542
  Restructure workflow:
@@ -511,30 +548,58 @@ Restructure workflow:
511
548
 
512
549
  Representative outputs:
513
550
 
514
- `so-cli priors list` returns a JSON array:
551
+ `so-cli priors list` returns a JSON object:
515
552
 
516
553
  ```json
517
- [
518
- {
519
- "id": "24d90294",
520
- "name": "Rate Limiting Best Practices",
521
- "summary": "How to implement exponential backoff for API rate limits",
522
- "content": "When dealing with rate limits, implement exponential backoff...",
523
- "path": "beaver/retriever/"
524
- }
525
- ]
554
+ {
555
+ "priors": [
556
+ {
557
+ "id": "24d90294",
558
+ "title": "Rate Limiting Best Practices",
559
+ "summary": "Use exponential backoff with jitter when upstream APIs rate-limit requests.",
560
+ "content": "When dealing with rate limits, implement exponential backoff...",
561
+ "path": "path/to/subfolder/",
562
+ "prior_status": "active",
563
+ "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
+ "aliases": ["rate limit retries", "429 retry policy"],
567
+ "keywords": ["rate-limit", "backoff", "jitter", "429"],
568
+ "related_priors": []
569
+ }
570
+ ]
571
+ }
526
572
  ```
527
573
 
574
+ Active priors now store:
575
+
576
+ - `title`: mandatory, separate from the markdown body
577
+ - `summary`: mandatory persisted summary; generated by the cheap model with a fallback unless you pass `--summary` on create
578
+ - `content`: mandatory raw markdown without a title heading
579
+ - `status`: active or draft
580
+ - `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
584
+ - `created_at`, `updated_at`: UTC timestamps
585
+ - `validation_metadata`: latest validation payload
586
+
528
587
  `so-cli priors create` returns the server's creation response:
529
588
 
530
589
  ```json
531
590
  {
532
591
  "status": "created",
533
592
  "id": "<prior_id>",
534
- "name": "<name>",
535
- "summary": "<summary>",
593
+ "title": "<title>",
594
+ "summary": "<manual_or_generated_summary>",
536
595
  "content": "<content>",
537
- "path": "beaver/retriever/"
596
+ "path": "path/to/subfolder/",
597
+ "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
+ "aliases": ["<manual_or_generated_alias>"],
601
+ "keywords": ["<manual_or_generated_keyword>"],
602
+ "related_priors": ["<prior_id>"]
538
603
  }
539
604
  ```
540
605
 
@@ -542,14 +607,14 @@ Representative outputs:
542
607
 
543
608
  ```json
544
609
  {
545
- "path": "beaver/retriever/",
610
+ "path": "path/to/subfolder/",
546
611
  "priors": [
547
612
  {
548
613
  "id": "<prior_id>",
549
614
  "name": "<name>",
550
615
  "summary": "<summary>",
551
616
  "content": "<content>",
552
- "path": "beaver/retriever/"
617
+ "path": "path/to/subfolder/"
553
618
  }
554
619
  ],
555
620
  "injected_context": "<sovara-priors>\n<!-- {\"priors\":[{\"id\":\"<prior_id>\"}]} -->\n## <name>\n<content>\n</sovara-priors>"
@@ -561,14 +626,14 @@ Representative outputs:
561
626
  ```json
562
627
  {
563
628
  "context": "Find SQL validation guidance",
564
- "base_path": "beaver/",
629
+ "base_path": "path/to/root/",
565
630
  "priors": [
566
631
  {
567
632
  "id": "<prior_id>",
568
633
  "name": "<name>",
569
634
  "summary": "<summary>",
570
635
  "content": "<content>",
571
- "path": "beaver/validator/"
636
+ "path": "path/to/another-subfolder/"
572
637
  }
573
638
  ],
574
639
  "prior_count": 1
@@ -581,13 +646,13 @@ Representative outputs:
581
646
  {
582
647
  "task_id": "<task_id>",
583
648
  "summary": "<summary>",
584
- "new_folders": ["beaver/validator/"],
649
+ "new_folders": ["path/to/another-subfolder/"],
585
650
  "removed_folders": [],
586
651
  "moves": [
587
652
  {
588
653
  "prior_id": "<prior_id>",
589
- "current_path": "beaver/",
590
- "new_path": "beaver/validator/",
654
+ "current_path": "path/to/root/",
655
+ "new_path": "path/to/another-subfolder/",
591
656
  "reason": "<reason>"
592
657
  }
593
658
  ],
@@ -601,10 +666,10 @@ Representative outputs:
601
666
 
602
667
  ```json
603
668
  {
604
- "path": "beaver/",
669
+ "path": "path/to/root/",
605
670
  "folders": [
606
671
  {
607
- "path": "beaver/retriever/",
672
+ "path": "path/to/subfolder/",
608
673
  "prior_count": 3
609
674
  }
610
675
  ],
@@ -614,7 +679,7 @@ Representative outputs:
614
679
  "name": "Some Prior",
615
680
  "summary": "...",
616
681
  "content": "...",
617
- "path": "beaver/"
682
+ "path": "path/to/root/"
618
683
  }
619
684
  ],
620
685
  "prior_count": 4
@@ -626,7 +691,7 @@ Representative outputs:
626
691
  ```json
627
692
  {
628
693
  "status": "moved",
629
- "dst": "beaver/dest/",
694
+ "dst": "path/to/destination/",
630
695
  "moved_count": 2
631
696
  }
632
697
  ```
@@ -0,0 +1 @@
1
+ import{r,j as e}from"./index-Cu0VGrcx.js";import{D as n,a as l,P as o,G as p}from"./DocumentPreviewModal-CvQFa4di.js";import{M as c,i as d,a as h,h as u,s as x,d as j}from"./RunRoute-BXKXUvYa.js";import"./tiny-invariant-BCXflckp.js";import"./LayoutBreadcrumb-CJhx8VyY.js";import"./tierState-CVxZC5KD.js";import"./navigation-BBqqpNGD.js";import"./runtime-rMDdBrlz.js";import"./plus-LepfYku6.js";import"./value-BlxarHmt.js";import"./prismTheme-BK3YfG66.js";import"./useTheme-BfCfHZeA.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};