sovara 0.2.0__tar.gz → 0.2.3__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 (155) hide show
  1. {sovara-0.2.0 → sovara-0.2.3}/PKG-INFO +4 -1
  2. {sovara-0.2.0 → sovara-0.2.3}/README.md +52 -10
  3. {sovara-0.2.0 → sovara-0.2.3}/pyproject.toml +13 -3
  4. sovara-0.2.3/src/sovara/assets/SKILL.md +660 -0
  5. {sovara-0.2.0 → sovara-0.2.3}/src/sovara/cli/so_config.py +10 -37
  6. {sovara-0.2.0 → sovara-0.2.3}/src/sovara/cli/so_record.py +11 -2
  7. sovara-0.2.3/src/sovara/cli/so_server.py +319 -0
  8. sovara-0.2.3/src/sovara/cli/so_tool.py +1536 -0
  9. {sovara-0.2.0 → sovara-0.2.3}/src/sovara/common/config.py +0 -2
  10. sovara-0.2.3/src/sovara/common/constants.py +238 -0
  11. sovara-0.2.3/src/sovara/common/custom_metrics.py +82 -0
  12. sovara-0.2.3/src/sovara/common/logger.py +76 -0
  13. {sovara-0.2.0 → sovara-0.2.3}/src/sovara/common/project.py +1 -1
  14. sovara-0.2.3/src/sovara/common/runtime.py +15 -0
  15. {sovara-0.2.0 → sovara-0.2.3}/src/sovara/common/user.py +37 -2
  16. {sovara-0.2.0 → sovara-0.2.3}/src/sovara/common/utils.py +3 -3
  17. {sovara-0.2.0 → sovara-0.2.3}/src/sovara/runner/agent_runner.py +81 -29
  18. sovara-0.2.3/src/sovara/runner/context_manager.py +161 -0
  19. {sovara-0.2.0 → sovara-0.2.3}/src/sovara/runner/monkey_patching/api_parser.py +77 -18
  20. sovara-0.2.3/src/sovara/runner/monkey_patching/api_parsers/aiohttp_api_parser.py +322 -0
  21. {sovara-0.2.0 → sovara-0.2.3}/src/sovara/runner/monkey_patching/api_parsers/claude_sdk_api_parser.py +12 -0
  22. {sovara-0.2.0 → sovara-0.2.3}/src/sovara/runner/monkey_patching/api_parsers/httpx_api_parser.py +23 -7
  23. sovara-0.2.3/src/sovara/runner/monkey_patching/api_parsers/sse_utils.py +119 -0
  24. sovara-0.2.3/src/sovara/runner/monkey_patching/api_parsers/urllib3_api_parser.py +143 -0
  25. {sovara-0.2.0 → sovara-0.2.3}/src/sovara/runner/monkey_patching/apply_monkey_patches.py +2 -1
  26. sovara-0.2.3/src/sovara/runner/monkey_patching/async_streaming.py +325 -0
  27. sovara-0.2.3/src/sovara/runner/monkey_patching/edit_io_filters.py +82 -0
  28. sovara-0.2.3/src/sovara/runner/monkey_patching/endpoint_whitelist.py +29 -0
  29. sovara-0.2.3/src/sovara/runner/monkey_patching/node_naming.py +321 -0
  30. sovara-0.2.3/src/sovara/runner/monkey_patching/patches/aiohttp_patch.py +190 -0
  31. {sovara-0.2.0 → sovara-0.2.3}/src/sovara/runner/monkey_patching/patches/claude_sdk_patch.py +69 -60
  32. sovara-0.2.3/src/sovara/runner/monkey_patching/patches/httpx_patch.py +166 -0
  33. {sovara-0.2.0 → sovara-0.2.3}/src/sovara/runner/monkey_patching/patches/mcp_patches.py +6 -6
  34. sovara-0.2.3/src/sovara/runner/monkey_patching/patches/requests_patch.py +80 -0
  35. sovara-0.2.3/src/sovara/runner/monkey_patching/patches/urllib3_patch.py +309 -0
  36. {sovara-0.2.0 → sovara-0.2.3}/src/sovara/runner/monkey_patching/patching_utils.py +112 -89
  37. sovara-0.2.3/src/sovara/runner/priors.py +669 -0
  38. sovara-0.2.3/src/sovara/runner/priors_pipeline.py +196 -0
  39. sovara-0.2.3/src/sovara/runner/run_log_capture.py +205 -0
  40. {sovara-0.2.0 → sovara-0.2.3}/src/sovara/runner/string_matching.py +45 -38
  41. sovara-0.2.3/src/sovara/server/app.py +189 -0
  42. sovara-0.2.3/src/sovara/server/database/__init__.py +11 -0
  43. sovara-0.2.3/src/sovara/server/database/_shared.py +26 -0
  44. sovara-0.2.3/src/sovara/server/database/llm_calls.py +342 -0
  45. sovara-0.2.3/src/sovara/server/database/manager.py +38 -0
  46. sovara-0.2.3/src/sovara/server/database/priors.py +285 -0
  47. sovara-0.2.3/src/sovara/server/database/projects.py +107 -0
  48. sovara-0.2.3/src/sovara/server/database/runs.py +520 -0
  49. sovara-0.2.3/src/sovara/server/database/sqlite/__init__.py +18 -0
  50. sovara-0.2.3/src/sovara/server/database/sqlite/connection.py +74 -0
  51. sovara-0.2.3/src/sovara/server/database/sqlite/llm_calls.py +186 -0
  52. sovara-0.2.3/src/sovara/server/database/sqlite/priors.py +363 -0
  53. sovara-0.2.3/src/sovara/server/database/sqlite/projects.py +249 -0
  54. sovara-0.2.3/src/sovara/server/database/sqlite/runs.py +572 -0
  55. sovara-0.2.3/src/sovara/server/database/sqlite/schema.py +465 -0
  56. sovara-0.2.3/src/sovara/server/database/sqlite/users.py +97 -0
  57. sovara-0.2.3/src/sovara/server/database/users.py +17 -0
  58. sovara-0.2.3/src/sovara/server/graph_analysis/inference_server.py +502 -0
  59. sovara-0.2.3/src/sovara/server/graph_analysis/trace_chat/cancel.py +14 -0
  60. sovara-0.2.3/src/sovara/server/graph_analysis/trace_chat/main.py +514 -0
  61. sovara-0.2.3/src/sovara/server/graph_analysis/trace_chat/tools/__init__.py +297 -0
  62. sovara-0.2.3/src/sovara/server/graph_analysis/trace_chat/tools/ask_step.py +35 -0
  63. sovara-0.2.3/src/sovara/server/graph_analysis/trace_chat/tools/edit_content.py +291 -0
  64. sovara-0.2.3/src/sovara/server/graph_analysis/trace_chat/tools/get_step_overview.py +404 -0
  65. sovara-0.2.3/src/sovara/server/graph_analysis/trace_chat/tools/get_step_snapshot.py +203 -0
  66. sovara-0.2.3/src/sovara/server/graph_analysis/trace_chat/tools/get_trace_overview.py +48 -0
  67. sovara-0.2.3/src/sovara/server/graph_analysis/trace_chat/tools/search.py +49 -0
  68. sovara-0.2.3/src/sovara/server/graph_analysis/trace_chat/tools/summarize_trace.py +220 -0
  69. sovara-0.2.3/src/sovara/server/graph_analysis/trace_chat/tools/verify.py +254 -0
  70. sovara-0.2.3/src/sovara/server/graph_analysis/trace_chat/utils/content_utils.py +68 -0
  71. sovara-0.2.3/src/sovara/server/graph_analysis/trace_chat/utils/context.py +77 -0
  72. sovara-0.2.3/src/sovara/server/graph_analysis/trace_chat/utils/edit_persist.py +160 -0
  73. sovara-0.2.3/src/sovara/server/graph_analysis/trace_chat/utils/step_content_view.py +204 -0
  74. sovara-0.2.3/src/sovara/server/graph_analysis/trace_chat/utils/step_ids.py +29 -0
  75. sovara-0.2.3/src/sovara/server/graph_analysis/trace_chat/utils/trace.py +702 -0
  76. sovara-0.2.3/src/sovara/server/graph_models.py +189 -0
  77. {sovara-0.2.0 → sovara-0.2.3}/src/sovara/server/handlers/__init__.py +4 -2
  78. sovara-0.2.3/src/sovara/server/handlers/cli_handlers.py +439 -0
  79. sovara-0.2.3/src/sovara/server/handlers/runner_handlers.py +124 -0
  80. sovara-0.2.3/src/sovara/server/handlers/ui_handlers.py +127 -0
  81. sovara-0.2.3/src/sovara/server/llm_backend.py +828 -0
  82. sovara-0.2.3/src/sovara/server/llm_provider_catalog.py +163 -0
  83. sovara-0.2.3/src/sovara/server/llm_settings.py +263 -0
  84. sovara-0.2.3/src/sovara/server/package_version.py +81 -0
  85. sovara-0.2.3/src/sovara/server/prior_display.py +177 -0
  86. sovara-0.2.3/src/sovara/server/priors_backend/__init__.py +1 -0
  87. sovara-0.2.3/src/sovara/server/priors_backend/constants.py +11 -0
  88. sovara-0.2.3/src/sovara/server/priors_backend/events.py +42 -0
  89. sovara-0.2.3/src/sovara/server/priors_backend/llm/__init__.py +1 -0
  90. sovara-0.2.3/src/sovara/server/priors_backend/llm/lesson_restructurer.py +182 -0
  91. sovara-0.2.3/src/sovara/server/priors_backend/llm/lesson_retriever.py +390 -0
  92. sovara-0.2.3/src/sovara/server/priors_backend/llm/lesson_summarizer.py +82 -0
  93. sovara-0.2.3/src/sovara/server/priors_backend/llm/lesson_validator.py +190 -0
  94. sovara-0.2.3/src/sovara/server/priors_backend/llm_client.py +42 -0
  95. sovara-0.2.3/src/sovara/server/priors_backend/logger.py +10 -0
  96. sovara-0.2.3/src/sovara/server/priors_backend/routes.py +1101 -0
  97. sovara-0.2.3/src/sovara/server/priors_backend/storage.py +476 -0
  98. sovara-0.2.3/src/sovara/server/priors_scope.py +50 -0
  99. sovara-0.2.3/src/sovara/server/routes/__init__.py +0 -0
  100. {sovara-0.2.0 → sovara-0.2.3}/src/sovara/server/routes/events.py +22 -22
  101. sovara-0.2.3/src/sovara/server/routes/internal.py +126 -0
  102. {sovara-0.2.0 → sovara-0.2.3}/src/sovara/server/routes/runner.py +96 -68
  103. sovara-0.2.3/src/sovara/server/routes/ui.py +286 -0
  104. sovara-0.2.3/src/sovara/server/routes/ui_common.py +10 -0
  105. sovara-0.2.3/src/sovara/server/routes/ui_projects.py +388 -0
  106. sovara-0.2.3/src/sovara/server/routes/ui_runs.py +639 -0
  107. sovara-0.2.3/src/sovara/server/routes/ui_trace_chat.py +85 -0
  108. sovara-0.2.3/src/sovara/server/services/__init__.py +1 -0
  109. sovara-0.2.3/src/sovara/server/services/trace_chat_service.py +158 -0
  110. sovara-0.2.3/src/sovara/server/state.py +561 -0
  111. sovara-0.2.3/src/sovara/server/web_app_assets.py +68 -0
  112. {sovara-0.2.0 → sovara-0.2.3}/src/sovara.egg-info/PKG-INFO +4 -1
  113. sovara-0.2.3/src/sovara.egg-info/SOURCES.txt +134 -0
  114. {sovara-0.2.0 → sovara-0.2.3}/src/sovara.egg-info/entry_points.txt +1 -1
  115. {sovara-0.2.0 → sovara-0.2.3}/src/sovara.egg-info/requires.txt +4 -0
  116. sovara-0.2.3/tests/test_graph_payloads.py +48 -0
  117. sovara-0.2.0/src/sovara/assets/SKILL.md +0 -738
  118. sovara-0.2.0/src/sovara/cli/so_server.py +0 -179
  119. sovara-0.2.0/src/sovara/cli/so_tool.py +0 -1459
  120. sovara-0.2.0/src/sovara/common/constants.py +0 -431
  121. sovara-0.2.0/src/sovara/common/logger.py +0 -55
  122. sovara-0.2.0/src/sovara/runner/context_manager.py +0 -102
  123. sovara-0.2.0/src/sovara/runner/lessons.py +0 -115
  124. sovara-0.2.0/src/sovara/runner/monkey_patching/api_parsers/genai_api_parser.py +0 -70
  125. sovara-0.2.0/src/sovara/runner/monkey_patching/patches/genai_patch.py +0 -73
  126. sovara-0.2.0/src/sovara/runner/monkey_patching/patches/httpx_patch.py +0 -128
  127. sovara-0.2.0/src/sovara/runner/monkey_patching/patches/requests_patch.py +0 -72
  128. sovara-0.2.0/src/sovara/server/app.py +0 -73
  129. sovara-0.2.0/src/sovara/server/database_backends/sqlite.py +0 -969
  130. sovara-0.2.0/src/sovara/server/database_manager.py +0 -583
  131. sovara-0.2.0/src/sovara/server/handlers/runner_handlers.py +0 -109
  132. sovara-0.2.0/src/sovara/server/handlers/ui_handlers.py +0 -92
  133. sovara-0.2.0/src/sovara/server/routes/ui.py +0 -610
  134. sovara-0.2.0/src/sovara/server/state.py +0 -400
  135. sovara-0.2.0/src/sovara.egg-info/SOURCES.txt +0 -61
  136. {sovara-0.2.0 → sovara-0.2.3}/LICENSE +0 -0
  137. {sovara-0.2.0 → sovara-0.2.3}/docs/release/PYPI_DESC.md +0 -0
  138. {sovara-0.2.0 → sovara-0.2.3}/setup.cfg +0 -0
  139. {sovara-0.2.0 → sovara-0.2.3}/src/sovara/__init__.py +0 -0
  140. {sovara-0.2.0 → sovara-0.2.3}/src/sovara/assets/__init__.py +0 -0
  141. {sovara-0.2.0 → sovara-0.2.3}/src/sovara/cli/__init__.py +0 -0
  142. {sovara-0.2.0 → sovara-0.2.3}/src/sovara/common/__init__.py +0 -0
  143. {sovara-0.2.0 → sovara-0.2.3}/src/sovara/runner/__init__.py +0 -0
  144. {sovara-0.2.0 → sovara-0.2.3}/src/sovara/runner/monkey_patching/__init__.py +0 -0
  145. {sovara-0.2.0 → sovara-0.2.3}/src/sovara/runner/monkey_patching/api_parsers/__init__.py +0 -0
  146. {sovara-0.2.0 → sovara-0.2.3}/src/sovara/runner/monkey_patching/api_parsers/mcp_api_parser.py +0 -0
  147. {sovara-0.2.0 → sovara-0.2.3}/src/sovara/runner/monkey_patching/api_parsers/requests_api_parser.py +0 -0
  148. {sovara-0.2.0 → sovara-0.2.3}/src/sovara/runner/monkey_patching/patches/__init__.py +0 -0
  149. {sovara-0.2.0 → sovara-0.2.3}/src/sovara/runner/monkey_patching/patches/randomness_patch.py +0 -0
  150. {sovara-0.2.0 → sovara-0.2.3}/src/sovara/server/__init__.py +0 -0
  151. {sovara-0.2.0/src/sovara/server/database_backends → sovara-0.2.3/src/sovara/server/graph_analysis/trace_chat}/__init__.py +0 -0
  152. {sovara-0.2.0/src/sovara/server/routes → sovara-0.2.3/src/sovara/server/graph_analysis/trace_chat/utils}/__init__.py +0 -0
  153. {sovara-0.2.0 → sovara-0.2.3}/src/sovara/server/handlers/handler_utils.py +0 -0
  154. {sovara-0.2.0 → sovara-0.2.3}/src/sovara.egg-info/dependency_links.txt +0 -0
  155. {sovara-0.2.0 → sovara-0.2.3}/src/sovara.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sovara
3
- Version: 0.2.0
3
+ Version: 0.2.3
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
@@ -14,6 +14,7 @@ Requires-Dist: python-dotenv
14
14
  Requires-Dist: fastapi
15
15
  Requires-Dist: uvicorn[standard]
16
16
  Requires-Dist: httpx
17
+ Requires-Dist: litellm
17
18
  Requires-Dist: flatten_dict
18
19
  Requires-Dist: flatten_json
19
20
  Provides-Extra: dev
@@ -32,6 +33,8 @@ Requires-Dist: langchain; extra == "dev"
32
33
  Requires-Dist: langchain-anthropic; extra == "dev"
33
34
  Requires-Dist: langchain-openai; extra == "dev"
34
35
  Requires-Dist: websocket-client; extra == "dev"
36
+ Provides-Extra: desktop
37
+ Requires-Dist: pyinstaller>=6.11; extra == "desktop"
35
38
  Provides-Extra: examples
36
39
  Requires-Dist: openai; extra == "examples"
37
40
  Requires-Dist: anthropic; extra == "examples"
@@ -76,25 +76,67 @@ This should show you the agent's trajectory graph like in the video above. You c
76
76
  ## Integration with Coding Agents
77
77
  Coding Agents already accelerate generic coding quite successfully. By augmenting them with `sovara`, you can supercharge your agent development while making sure you adhere to state-of-the-art coding practices for enterprise-grade agents.
78
78
 
79
+ ### Why use these integrations?
80
+
81
+ - **Keep context clean**: Agent runs produce verbose logs that quickly pollute a coding agent's context window. With `so-cli`, it queries only the specific nodes it needs.
82
+ - **Structured access**: Your agent gets structured JSON data (inputs, outputs, graph topology) rather than parsing raw logs.
83
+ - **Edit and rerun**: Your agent can programmatically edit an LLM's input or output and trigger a rerun to test hypotheses.
84
+
85
+ <h3><img src="docs/media/codex.png" alt="Codex" height="24" align="absmiddle">&nbsp;&nbsp;Codex</h3>
86
+
87
+ Install globally:
88
+
89
+ ```bash
90
+ so-cli install-skill --target codex
91
+ ```
92
+
93
+ This copies the shared Sovara skill to `$HOME/.agents/skills/sovara/`, so you can use it from any repository. The installer only copies skill files and does not modify Codex settings.
94
+
95
+ To install it for a specific project instead:
96
+
97
+ ```bash
98
+ so-cli install-skill --target codex --level project
99
+ ```
100
+
101
+ That copies the skill to `.agents/skills/sovara/` under the selected project. Codex also scans `.agents/skills` from your current working directory up to the repository root, so project-level skills can be scoped to a repo or subdirectory.
102
+
103
+ Use Sovara in Codex by asking for `$sovara` explicitly, or let Codex invoke it automatically when the task matches the skill description.
104
+
105
+ Example prompts:
106
+
107
+ ```text
108
+ $sovara inspect the latest run and find the first failing node
109
+ $sovara compare these two runs and explain why the outputs diverged
110
+ $sovara propose a prior based on the failure pattern in this run
111
+ ```
112
+
113
+ Codex detects skill changes automatically. If an update does not appear, restart Codex.
114
+
79
115
  <h3><img src="docs/media/cc.png" alt="Claude Code" height="24" align="absmiddle">&nbsp;&nbsp;Claude Code</h3>
80
116
 
81
- **Setup:**
117
+ Install globally:
118
+
119
+ ```bash
120
+ so-cli install-skill --target claude
121
+ ```
122
+
123
+ This copies the shared Sovara skill to `~/.claude/skills/sovara/`, so it is available across all your projects. The installer only copies skill files and does not modify Claude settings.
124
+
125
+ To install it for one project instead:
82
126
 
83
127
  ```bash
84
- so-tool install-skill
128
+ so-cli install-skill --target claude --level project
85
129
  ```
86
130
 
87
- This interactive command will:
88
- 1. Copy the Sovara skill file to your project's `.claude/skills/sovara/` directory
89
- 2. Add Bash permissions so Claude Code can run `so-tool` commands without prompts
131
+ That copies the skill to `.claude/skills/sovara/` under the selected project. Re-open Claude Code after installation if the skill does not appear immediately.
90
132
 
91
- After setup, restart Claude Code and ask "What skills are available?". The sovara skill should now show up, and you can start developing/improving your agent as you would normally do.
133
+ Use Sovara in Claude Code by letting Claude invoke the skill automatically when relevant, or select it directly from the skill menu if needed.
92
134
 
93
- **Why use this integration?**
135
+ If you want both integrations installed globally in one step, run:
94
136
 
95
- - **Keep context clean**: Agent runs produce verbose logs that quickly pollute Claude's context window. With `so-tool`, Claude queries only the specific nodes it needs.
96
- - **Structured access**: Claude gets structured JSON data (inputs, outputs, graph topology) rather than parsing raw logs.
97
- - **Edit and rerun**: Claude can programmatically edit an LLM's input or output and trigger a rerun to test hypotheses.
137
+ ```bash
138
+ so-cli install-skill
139
+ ```
98
140
 
99
141
  ## Documentation
100
142
 
@@ -5,7 +5,7 @@ requires = ["setuptools"]
5
5
  build-backend = "setuptools.build_meta"
6
6
 
7
7
  [tool.setuptools.package-data]
8
- "sovara.assets" = ["SKILL.md"]
8
+ "sovara.assets" = ["SKILL.md", "web_app/**/*"]
9
9
 
10
10
  [tool.setuptools]
11
11
  package-dir = {"" = "src"}
@@ -19,14 +19,14 @@ include = ["sovara*"]
19
19
  so-record = "sovara.cli.so_record:main"
20
20
  so-config = "sovara.cli.so_config:main"
21
21
  so-server = "sovara.cli.so_server:main"
22
- so-tool = "sovara.cli.so_tool:main"
22
+ so-cli = "sovara.cli.so_tool:main"
23
23
 
24
24
  [tool.black]
25
25
  line-length = 100
26
26
 
27
27
  [project]
28
28
  name = "sovara"
29
- version = "0.2.0"
29
+ version = "0.2.3"
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"
@@ -41,6 +41,7 @@ dependencies = [
41
41
  "fastapi",
42
42
  "uvicorn[standard]",
43
43
  "httpx",
44
+ "litellm",
44
45
  "flatten_dict",
45
46
  "flatten_json"
46
47
  ]
@@ -64,6 +65,10 @@ dev = [
64
65
  "websocket-client"
65
66
  ]
66
67
 
68
+ desktop = [
69
+ "pyinstaller>=6.11",
70
+ ]
71
+
67
72
  examples = [
68
73
  "openai",
69
74
  "anthropic",
@@ -76,3 +81,8 @@ docs = [
76
81
  "mkdocs-minify-plugin",
77
82
  "mkdocstrings[python]>=0.24",
78
83
  ]
84
+
85
+ [tool.pytest.ini_options]
86
+ filterwarnings = [
87
+ "ignore:'_UnionGenericAlias' is deprecated and slated for removal in Python 3\\.17:DeprecationWarning:google\\.genai\\.types",
88
+ ]