sovara 0.2.3__tar.gz → 0.2.4__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.
- {sovara-0.2.3 → sovara-0.2.4}/PKG-INFO +4 -1
- {sovara-0.2.3 → sovara-0.2.4}/pyproject.toml +4 -1
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/assets/SKILL.md +52 -8
- sovara-0.2.4/src/sovara/assets/web_app/assets/AttachmentPreview-CFrNMdfC.css +1 -0
- sovara-0.2.4/src/sovara/assets/web_app/assets/AttachmentPreview-h01XSt_Q.js +1 -0
- sovara-0.2.4/src/sovara/assets/web_app/assets/DocumentPreviewModal-B9FumoYT.js +12 -0
- sovara-0.2.4/src/sovara/assets/web_app/assets/LayoutBreadcrumb-D8Jj9PNg.js +1 -0
- sovara-0.2.4/src/sovara/assets/web_app/assets/LayoutBreadcrumb-DopPRSia.css +1 -0
- sovara-0.2.4/src/sovara/assets/web_app/assets/OrgRoute-BcO5LcH1.js +1 -0
- sovara-0.2.4/src/sovara/assets/web_app/assets/OrgRoute-DIln18S1.css +1 -0
- sovara-0.2.4/src/sovara/assets/web_app/assets/PriorsRoute-BSsFm0pQ.css +1 -0
- sovara-0.2.4/src/sovara/assets/web_app/assets/PriorsRoute-CaMBZzP_.js +5 -0
- sovara-0.2.4/src/sovara/assets/web_app/assets/ProjectRoute-BCA5W9t8.js +1 -0
- sovara-0.2.4/src/sovara/assets/web_app/assets/ProjectRoute-DtQqJb1n.css +1 -0
- sovara-0.2.4/src/sovara/assets/web_app/assets/RunRoute-BWs7EUiD.css +1 -0
- sovara-0.2.4/src/sovara/assets/web_app/assets/RunRoute-rUSpBhsI.js +21 -0
- sovara-0.2.4/src/sovara/assets/web_app/assets/SettingsRoute-BtETGx6c.js +1 -0
- sovara-0.2.4/src/sovara/assets/web_app/assets/SettingsRoute-C4VU70zq.css +1 -0
- sovara-0.2.4/src/sovara/assets/web_app/assets/api-1mbBSn7v.css +1 -0
- sovara-0.2.4/src/sovara/assets/web_app/assets/api-tVJBLHUH.js +1 -0
- sovara-0.2.4/src/sovara/assets/web_app/assets/arrow_lr-ByI2ndPB.png +0 -0
- sovara-0.2.4/src/sovara/assets/web_app/assets/arrow_spiral_tr_bl-XHIpf338.png +0 -0
- sovara-0.2.4/src/sovara/assets/web_app/assets/codicon-BYm2YbZ6.ttf +0 -0
- sovara-0.2.4/src/sovara/assets/web_app/assets/eye-DljehhmM.js +1 -0
- sovara-0.2.4/src/sovara/assets/web_app/assets/index-BygN1cJK.js +12 -0
- sovara-0.2.4/src/sovara/assets/web_app/assets/index-veNT10PX.css +1 -0
- sovara-0.2.4/src/sovara/assets/web_app/assets/pdf.worker.min-qwK7q_zL.mjs +28 -0
- sovara-0.2.4/src/sovara/assets/web_app/assets/plus-CkqVCne8.js +1 -0
- sovara-0.2.4/src/sovara/assets/web_app/assets/prismTheme-Bx8cYzkm.js +37 -0
- sovara-0.2.4/src/sovara/assets/web_app/assets/sovara_wordmark-CjkpVR0a.png +0 -0
- sovara-0.2.4/src/sovara/assets/web_app/assets/tierState-Bq39H0kz.js +1 -0
- sovara-0.2.4/src/sovara/assets/web_app/assets/trash-2-DYeReTGL.js +1 -0
- sovara-0.2.4/src/sovara/assets/web_app/favicon.png +0 -0
- sovara-0.2.4/src/sovara/assets/web_app/index.html +17 -0
- sovara-0.2.4/src/sovara/assets/web_app/marketplace_icon.png +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/cli/so_config.py +14 -8
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/cli/so_record.py +17 -38
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/cli/so_server.py +61 -7
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/cli/so_tool.py +610 -105
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/common/config.py +14 -6
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/common/constants.py +11 -72
- sovara-0.2.4/src/sovara/common/lifecycle.py +58 -0
- sovara-0.2.4/src/sovara/common/log_redaction.py +37 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/common/project.py +98 -13
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/common/user.py +7 -7
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/common/utils.py +75 -32
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/runner/agent_runner.py +423 -40
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/runner/context_manager.py +5 -13
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/runner/monkey_patching/api_parser.py +105 -19
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/runner/monkey_patching/api_parsers/aiohttp_api_parser.py +3 -4
- sovara-0.2.4/src/sovara/runner/monkey_patching/api_parsers/claude_sdk_api_parser.py +83 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/runner/monkey_patching/api_parsers/httpx_api_parser.py +4 -4
- sovara-0.2.4/src/sovara/runner/monkey_patching/api_parsers/langchain_tool_api_parser.py +33 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/runner/monkey_patching/api_parsers/mcp_api_parser.py +3 -6
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/runner/monkey_patching/api_parsers/requests_api_parser.py +4 -4
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/runner/monkey_patching/api_parsers/urllib3_api_parser.py +3 -4
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/runner/monkey_patching/apply_monkey_patches.py +1 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/runner/monkey_patching/patches/aiohttp_patch.py +49 -50
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/runner/monkey_patching/patches/claude_sdk_patch.py +37 -22
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/runner/monkey_patching/patches/httpx_patch.py +62 -45
- sovara-0.2.4/src/sovara/runner/monkey_patching/patches/langchain_patch.py +275 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/runner/monkey_patching/patches/mcp_patches.py +18 -13
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/runner/monkey_patching/patches/randomness_patch.py +9 -9
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/runner/monkey_patching/patches/requests_patch.py +34 -23
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/runner/monkey_patching/patches/urllib3_patch.py +35 -22
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/runner/monkey_patching/patching_utils.py +15 -4
- sovara-0.2.4/src/sovara/runner/node_execution.py +291 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/runner/priors.py +6 -8
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/runner/priors_pipeline.py +13 -0
- sovara-0.2.4/src/sovara/runner/runtime_client.py +306 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/runner/string_matching.py +9 -5
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/app.py +108 -40
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/database/_shared.py +3 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/database/llm_calls.py +225 -73
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/database/manager.py +0 -4
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/database/runs.py +108 -111
- sovara-0.2.4/src/sovara/server/database/sqlite/llm_calls.py +297 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/database/sqlite/projects.py +46 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/database/sqlite/runs.py +181 -18
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/database/sqlite/schema.py +349 -15
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/database/sqlite/users.py +36 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/graph_analysis/inference_server.py +219 -10
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/graph_analysis/trace_chat/tools/__init__.py +43 -9
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/graph_analysis/trace_chat/tools/verify.py +13 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/graph_analysis/trace_chat/utils/trace.py +12 -1
- sovara-0.2.4/src/sovara/server/graph_analysis/trace_chat/utils/verdict_persist.py +47 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/graph_models.py +30 -13
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/handlers/cli_handlers.py +11 -7
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/handlers/runner_handlers.py +1 -6
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/handlers/ui_handlers.py +87 -5
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/llm_backend.py +19 -6
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/llm_provider_catalog.py +101 -9
- sovara-0.2.4/src/sovara/server/llm_settings.py +507 -0
- sovara-0.2.4/src/sovara/server/llm_settings_verification.py +487 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/priors_backend/routes.py +5 -1
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/priors_backend/storage.py +4 -2
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/routes/events.py +9 -2
- sovara-0.2.4/src/sovara/server/routes/internal.py +308 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/routes/runner.py +18 -21
- sovara-0.2.4/src/sovara/server/routes/ui.py +512 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/routes/ui_projects.py +82 -22
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/routes/ui_runs.py +34 -87
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/services/trace_chat_service.py +84 -5
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/state.py +37 -16
- sovara-0.2.4/src/sovara/server/third_party_model_catalog.py +167 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara.egg-info/PKG-INFO +4 -1
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara.egg-info/SOURCES.txt +41 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara.egg-info/requires.txt +3 -0
- {sovara-0.2.3 → sovara-0.2.4}/tests/test_graph_payloads.py +0 -1
- sovara-0.2.3/src/sovara/runner/monkey_patching/api_parsers/claude_sdk_api_parser.py +0 -107
- sovara-0.2.3/src/sovara/server/database/sqlite/llm_calls.py +0 -186
- sovara-0.2.3/src/sovara/server/llm_settings.py +0 -263
- sovara-0.2.3/src/sovara/server/routes/internal.py +0 -126
- sovara-0.2.3/src/sovara/server/routes/ui.py +0 -286
- {sovara-0.2.3 → sovara-0.2.4}/LICENSE +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/README.md +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/docs/release/PYPI_DESC.md +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/setup.cfg +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/__init__.py +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/assets/__init__.py +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/cli/__init__.py +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/common/__init__.py +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/common/custom_metrics.py +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/common/logger.py +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/common/runtime.py +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/runner/__init__.py +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/runner/monkey_patching/__init__.py +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/runner/monkey_patching/api_parsers/__init__.py +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/runner/monkey_patching/api_parsers/sse_utils.py +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/runner/monkey_patching/async_streaming.py +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/runner/monkey_patching/edit_io_filters.py +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/runner/monkey_patching/endpoint_whitelist.py +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/runner/monkey_patching/node_naming.py +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/runner/monkey_patching/patches/__init__.py +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/runner/run_log_capture.py +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/__init__.py +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/database/__init__.py +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/database/priors.py +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/database/projects.py +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/database/sqlite/__init__.py +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/database/sqlite/connection.py +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/database/sqlite/priors.py +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/database/users.py +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/graph_analysis/trace_chat/__init__.py +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/graph_analysis/trace_chat/cancel.py +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/graph_analysis/trace_chat/main.py +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/graph_analysis/trace_chat/tools/ask_step.py +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/graph_analysis/trace_chat/tools/edit_content.py +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/graph_analysis/trace_chat/tools/get_step_overview.py +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/graph_analysis/trace_chat/tools/get_step_snapshot.py +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/graph_analysis/trace_chat/tools/get_trace_overview.py +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/graph_analysis/trace_chat/tools/search.py +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/graph_analysis/trace_chat/tools/summarize_trace.py +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/graph_analysis/trace_chat/utils/__init__.py +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/graph_analysis/trace_chat/utils/content_utils.py +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/graph_analysis/trace_chat/utils/context.py +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/graph_analysis/trace_chat/utils/edit_persist.py +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/graph_analysis/trace_chat/utils/step_content_view.py +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/graph_analysis/trace_chat/utils/step_ids.py +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/handlers/__init__.py +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/handlers/handler_utils.py +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/package_version.py +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/prior_display.py +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/priors_backend/__init__.py +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/priors_backend/constants.py +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/priors_backend/events.py +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/priors_backend/llm/__init__.py +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/priors_backend/llm/lesson_restructurer.py +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/priors_backend/llm/lesson_retriever.py +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/priors_backend/llm/lesson_summarizer.py +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/priors_backend/llm/lesson_validator.py +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/priors_backend/llm_client.py +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/priors_backend/logger.py +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/priors_scope.py +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/routes/__init__.py +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/routes/ui_common.py +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/routes/ui_trace_chat.py +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/services/__init__.py +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara/server/web_app_assets.py +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara.egg-info/dependency_links.txt +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara.egg-info/entry_points.txt +0 -0
- {sovara-0.2.3 → sovara-0.2.4}/src/sovara.egg-info/top_level.txt +0 -0
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sovara
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.4
|
|
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
|
|
7
7
|
License-File: LICENSE
|
|
8
8
|
Requires-Dist: pyyaml
|
|
9
9
|
Requires-Dist: dill
|
|
10
|
+
Requires-Dist: boto3
|
|
10
11
|
Requires-Dist: debugpy
|
|
11
12
|
Requires-Dist: psutil
|
|
12
13
|
Requires-Dist: psycopg2-binary
|
|
@@ -15,6 +16,8 @@ Requires-Dist: fastapi
|
|
|
15
16
|
Requires-Dist: uvicorn[standard]
|
|
16
17
|
Requires-Dist: httpx
|
|
17
18
|
Requires-Dist: litellm
|
|
19
|
+
Requires-Dist: google-auth
|
|
20
|
+
Requires-Dist: google-cloud-aiplatform
|
|
18
21
|
Requires-Dist: flatten_dict
|
|
19
22
|
Requires-Dist: flatten_json
|
|
20
23
|
Provides-Extra: dev
|
|
@@ -26,7 +26,7 @@ line-length = 100
|
|
|
26
26
|
|
|
27
27
|
[project]
|
|
28
28
|
name = "sovara"
|
|
29
|
-
version = "0.2.
|
|
29
|
+
version = "0.2.4"
|
|
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"
|
|
@@ -34,6 +34,7 @@ requires-python = ">=3.10"
|
|
|
34
34
|
dependencies = [
|
|
35
35
|
"pyyaml",
|
|
36
36
|
"dill",
|
|
37
|
+
"boto3",
|
|
37
38
|
"debugpy",
|
|
38
39
|
"psutil",
|
|
39
40
|
"psycopg2-binary",
|
|
@@ -42,6 +43,8 @@ dependencies = [
|
|
|
42
43
|
"uvicorn[standard]",
|
|
43
44
|
"httpx",
|
|
44
45
|
"litellm",
|
|
46
|
+
"google-auth",
|
|
47
|
+
"google-cloud-aiplatform",
|
|
45
48
|
"flatten_dict",
|
|
46
49
|
"flatten_json"
|
|
47
50
|
]
|
|
@@ -16,6 +16,9 @@ description: sovara helps you develop and maintain adaptable agentic systems. It
|
|
|
16
16
|
## Setup
|
|
17
17
|
|
|
18
18
|
1. **Check for caching conflicts**: Scan the user-code for caching mechanisms (such as ad-hoc implementation of LLM-input caching or benchmark caching) that can interfere with the re-run capability. If you encounter such caching, flag this to the user and propose to change it by, for example, being able to disable caching with a `--no-cache` flag. **NOTE:** Caching that happens at the API provider level, for example using `cache_control` in the Anthropic API is OK!
|
|
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
|
+
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
|
+
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`.
|
|
19
22
|
|
|
20
23
|
## Integrated Observability
|
|
21
24
|
|
|
@@ -27,7 +30,11 @@ Run any agent and record the dataflow graph, as well as input/output to each nod
|
|
|
27
30
|
The tool is generally structured like this.
|
|
28
31
|
|
|
29
32
|
```
|
|
30
|
-
usage: so-cli record [-h] [-m] [--run-name RUN_NAME] [--
|
|
33
|
+
usage: so-cli record [-h] [-m] [-u] [--run-name RUN_NAME] [--user-name USER_NAME]
|
|
34
|
+
[--user-email USER_EMAIL] [--project-root PROJECT_ROOT]
|
|
35
|
+
[--project-name PROJECT_NAME]
|
|
36
|
+
[--project-description PROJECT_DESCRIPTION]
|
|
37
|
+
[--timeout TIMEOUT] script_path ...
|
|
31
38
|
|
|
32
39
|
positional arguments:
|
|
33
40
|
script_path Script to execute (or module name with -m)
|
|
@@ -36,7 +43,18 @@ positional arguments:
|
|
|
36
43
|
options:
|
|
37
44
|
-h, --help show this help message and exit
|
|
38
45
|
-m, --module Run script_path as a Python module (like python -m)
|
|
46
|
+
-u, --unbuffered Run with unbuffered stdout/stderr, like python -u
|
|
39
47
|
--run-name RUN_NAME Human-readable name for this run
|
|
48
|
+
--user-name USER_NAME
|
|
49
|
+
Override or create the local Sovara user full name
|
|
50
|
+
--user-email USER_EMAIL
|
|
51
|
+
Override or create the local Sovara user email
|
|
52
|
+
--project-root PROJECT_ROOT
|
|
53
|
+
Project root to resolve or create for this run
|
|
54
|
+
--project-name PROJECT_NAME
|
|
55
|
+
Override or create the Sovara project name
|
|
56
|
+
--project-description PROJECT_DESCRIPTION
|
|
57
|
+
Override or create the Sovara project description
|
|
40
58
|
--timeout TIMEOUT Timeout in seconds (terminates script if exceeded)
|
|
41
59
|
```
|
|
42
60
|
|
|
@@ -46,6 +64,16 @@ Example:
|
|
|
46
64
|
uv run so-cli record --run-name "OAI-debate-run-1" --timeout 60 example_workflows/debug_examples/openai/debate.py
|
|
47
65
|
```
|
|
48
66
|
|
|
67
|
+
First-run example with explicit setup:
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
uv run so-cli init \
|
|
71
|
+
--user-name "Jane Doe" \
|
|
72
|
+
--user-email "jane@example.com" \
|
|
73
|
+
--project-root example_workflows/debug_examples/openai \
|
|
74
|
+
--project-name openai-debug
|
|
75
|
+
```
|
|
76
|
+
|
|
49
77
|
This will return
|
|
50
78
|
```json
|
|
51
79
|
{
|
|
@@ -611,23 +639,25 @@ Representative outputs:
|
|
|
611
639
|
|
|
612
640
|
**Problem:** You are running inside a sandboxed environment and Sovara commands fail because they try to write under `~/.sovara`, `~/.cache`, or Python cache locations.
|
|
613
641
|
|
|
614
|
-
**Solution:** Redirect
|
|
642
|
+
**Solution:** Redirect writable cache and Python temp state into `/tmp` before invoking the CLI:
|
|
615
643
|
|
|
616
644
|
```bash
|
|
617
|
-
export SOVARA_HOME=/tmp/sovara-home
|
|
618
645
|
export SOVARA_CACHE=/tmp/sovara-cache
|
|
619
|
-
export SOVARA_GIT_DIR=/tmp/sovara-git
|
|
620
646
|
export UV_CACHE_DIR=/tmp/uv-cache
|
|
621
647
|
export PYTHONPYCACHEPREFIX=/tmp/pycache
|
|
622
648
|
```
|
|
623
649
|
|
|
624
|
-
|
|
650
|
+
Sovara still keeps durable state under `~/.sovara`, so cache-only redirection only helps with non-persistent writes.
|
|
625
651
|
|
|
626
|
-
- `
|
|
652
|
+
**Important limitation:** this only fixes cache/temp writes. If `so-cli record` needs to start the local Sovara server, that startup still writes durable state under `~/.sovara` (logs, config, DB, lock files). In Codex or another sandboxed agent, the smooth workflow is to start the server outside the sandbox first:
|
|
653
|
+
|
|
654
|
+
```bash
|
|
655
|
+
so-server start
|
|
656
|
+
```
|
|
627
657
|
|
|
628
|
-
|
|
658
|
+
Then run `so-cli record`, `so-cli runs`, `so-cli probe`, `so-cli logs`, and `so-cli edit-and-rerun` from inside Codex against the already-running server.
|
|
629
659
|
|
|
630
|
-
|
|
660
|
+
If the sandbox also forbids binding a localhost port, server-backed commands may still fail until Sovara supports a no-daemon / in-process CLI transport.
|
|
631
661
|
|
|
632
662
|
### Priors server not reachable
|
|
633
663
|
|
|
@@ -646,6 +676,20 @@ because it moves the default config, DB, and logs out of `~/.sovara`. The other
|
|
|
646
676
|
|
|
647
677
|
After making this change, restart your agent shell/session for the new environment to take effect.
|
|
648
678
|
|
|
679
|
+
### Missing user or project setup
|
|
680
|
+
|
|
681
|
+
**Problem:** `so-cli record` reports that Sovara user or project setup is missing and the session cannot prompt.
|
|
682
|
+
|
|
683
|
+
**Solution:** Run `so-cli status --path <target>` to inspect the missing pieces, then initialize them explicitly:
|
|
684
|
+
|
|
685
|
+
```bash
|
|
686
|
+
uv run so-cli init \
|
|
687
|
+
--user-name "<full name>" \
|
|
688
|
+
--user-email "<email>" \
|
|
689
|
+
--project-root <target-dir> \
|
|
690
|
+
--project-name "<project name>"
|
|
691
|
+
```
|
|
692
|
+
|
|
649
693
|
---
|
|
650
694
|
|
|
651
695
|
- You executed a code using `uv run so-cli --help`
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
:root{--react-pdf-annotation-layer: 1;--annotation-unfocused-field-background: url("data:image/svg+xml;charset=UTF-8,<svg width='1px' height='1px' xmlns='http://www.w3.org/2000/svg'><rect width='100%' height='100%' style='fill:rgba(0, 54, 255, 0.13);'/></svg>");--input-focus-border-color: Highlight;--input-focus-outline: 1px solid Canvas;--input-unfocused-border-color: transparent;--input-disabled-border-color: transparent;--input-hover-border-color: black;--link-outline: none}@media screen and (forced-colors:active){:root{--input-focus-border-color: CanvasText;--input-unfocused-border-color: ActiveText;--input-disabled-border-color: GrayText;--input-hover-border-color: Highlight;--link-outline: 1.5px solid LinkText}.annotationLayer .textWidgetAnnotation :is(input,textarea):required,.annotationLayer .choiceWidgetAnnotation select:required,.annotationLayer .buttonWidgetAnnotation:is(.checkBox,.radioButton) input:required{outline:1.5px solid selectedItem}.annotationLayer .linkAnnotation:hover{-webkit-backdrop-filter:invert(100%);backdrop-filter:invert(100%)}}.annotationLayer{position:absolute;top:0;left:0;pointer-events:none;transform-origin:0 0;z-index:3}.annotationLayer[data-main-rotation="90"] .norotate{transform:rotate(270deg) translate(-100%)}.annotationLayer[data-main-rotation="180"] .norotate{transform:rotate(180deg) translate(-100%,-100%)}.annotationLayer[data-main-rotation="270"] .norotate{transform:rotate(90deg) translateY(-100%)}.annotationLayer canvas{position:absolute;width:100%;height:100%}.annotationLayer section{position:absolute;text-align:initial;pointer-events:auto;box-sizing:border-box;margin:0;transform-origin:0 0}.annotationLayer .linkAnnotation{outline:var(--link-outline)}.textLayer.selecting~.annotationLayer section{pointer-events:none}.annotationLayer :is(.linkAnnotation,.buttonWidgetAnnotation.pushButton)>a{position:absolute;font-size:1em;top:0;left:0;width:100%;height:100%}.annotationLayer :is(.linkAnnotation,.buttonWidgetAnnotation.pushButton)>a:hover{opacity:.2;background:#ff0;box-shadow:0 2px 10px #ff0}.annotationLayer .textAnnotation img{position:absolute;cursor:pointer;width:100%;height:100%;top:0;left:0}.annotationLayer .textWidgetAnnotation :is(input,textarea),.annotationLayer .choiceWidgetAnnotation select,.annotationLayer .buttonWidgetAnnotation:is(.checkBox,.radioButton) input{background-image:var(--annotation-unfocused-field-background);border:2px solid var(--input-unfocused-border-color);box-sizing:border-box;font:calc(9px * var(--total-scale-factor)) sans-serif;height:100%;margin:0;vertical-align:top;width:100%}.annotationLayer .textWidgetAnnotation :is(input,textarea):required,.annotationLayer .choiceWidgetAnnotation select:required,.annotationLayer .buttonWidgetAnnotation:is(.checkBox,.radioButton) input:required{outline:1.5px solid red}.annotationLayer .choiceWidgetAnnotation select option{padding:0}.annotationLayer .buttonWidgetAnnotation.radioButton input{border-radius:50%}.annotationLayer .textWidgetAnnotation textarea{resize:none}.annotationLayer .textWidgetAnnotation :is(input,textarea)[disabled],.annotationLayer .choiceWidgetAnnotation select[disabled],.annotationLayer .buttonWidgetAnnotation:is(.checkBox,.radioButton) input[disabled]{background:none;border:2px solid var(--input-disabled-border-color);cursor:not-allowed}.annotationLayer .textWidgetAnnotation :is(input,textarea):hover,.annotationLayer .choiceWidgetAnnotation select:hover,.annotationLayer .buttonWidgetAnnotation:is(.checkBox,.radioButton) input:hover{border:2px solid var(--input-hover-border-color)}.annotationLayer .textWidgetAnnotation :is(input,textarea):hover,.annotationLayer .choiceWidgetAnnotation select:hover,.annotationLayer .buttonWidgetAnnotation.checkBox input:hover{border-radius:2px}.annotationLayer .textWidgetAnnotation :is(input,textarea):focus,.annotationLayer .choiceWidgetAnnotation select:focus{background:none;border:2px solid var(--input-focus-border-color);border-radius:2px;outline:var(--input-focus-outline)}.annotationLayer .buttonWidgetAnnotation:is(.checkBox,.radioButton) :focus{background-image:none;background-color:transparent}.annotationLayer .buttonWidgetAnnotation.checkBox :focus{border:2px solid var(--input-focus-border-color);border-radius:2px;outline:var(--input-focus-outline)}.annotationLayer .buttonWidgetAnnotation.radioButton :focus{border:2px solid var(--input-focus-border-color);outline:var(--input-focus-outline)}.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:before,.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:after,.annotationLayer .buttonWidgetAnnotation.radioButton input:checked:before{background-color:CanvasText;content:"";display:block;position:absolute}.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:before,.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:after{height:80%;left:45%;width:1px}.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:before{transform:rotate(45deg)}.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:after{transform:rotate(-45deg)}.annotationLayer .buttonWidgetAnnotation.radioButton input:checked:before{border-radius:50%;height:50%;left:30%;top:20%;width:50%}.annotationLayer .textWidgetAnnotation input.comb{font-family:monospace;padding-left:2px;padding-right:0}.annotationLayer .textWidgetAnnotation input.comb:focus{width:103%}.annotationLayer .buttonWidgetAnnotation:is(.checkBox,.radioButton) input{appearance:none}.annotationLayer .popupTriggerArea{height:100%;width:100%}.annotationLayer .fileAttachmentAnnotation .popupTriggerArea{position:absolute}.annotationLayer .popupWrapper{position:absolute;font-size:calc(9px * var(--total-scale-factor));width:100%;min-width:calc(180px * var(--total-scale-factor));pointer-events:none}.annotationLayer .popup{position:absolute;max-width:calc(180px * var(--total-scale-factor));background-color:#ff9;box-shadow:0 calc(2px * var(--total-scale-factor)) calc(5px * var(--total-scale-factor)) #888;border-radius:calc(2px * var(--total-scale-factor));padding:calc(6px * var(--total-scale-factor));margin-left:calc(5px * var(--total-scale-factor));cursor:pointer;font:message-box;white-space:normal;word-wrap:break-word;pointer-events:auto}.annotationLayer .popup>*{font-size:calc(9px * var(--total-scale-factor))}.annotationLayer .popup h1{display:inline-block}.annotationLayer .popupDate{display:inline-block;margin-left:calc(5px * var(--total-scale-factor))}.annotationLayer .popupContent{border-top:1px solid rgba(51,51,51,1);margin-top:calc(2px * var(--total-scale-factor));padding-top:calc(2px * var(--total-scale-factor))}.annotationLayer .richText>*{white-space:pre-wrap;font-size:calc(9px * var(--total-scale-factor))}.annotationLayer .highlightAnnotation,.annotationLayer .underlineAnnotation,.annotationLayer .squigglyAnnotation,.annotationLayer .strikeoutAnnotation,.annotationLayer .freeTextAnnotation,.annotationLayer .lineAnnotation svg line,.annotationLayer .squareAnnotation svg rect,.annotationLayer .circleAnnotation svg ellipse,.annotationLayer .polylineAnnotation svg polyline,.annotationLayer .polygonAnnotation svg polygon,.annotationLayer .caretAnnotation,.annotationLayer .inkAnnotation svg polyline,.annotationLayer .stampAnnotation,.annotationLayer .fileAttachmentAnnotation{cursor:pointer}.annotationLayer section svg{position:absolute;width:100%;height:100%;top:0;left:0}.annotationLayer .annotationTextContent{position:absolute;width:100%;height:100%;opacity:0;color:transparent;-webkit-user-select:none;user-select:none;pointer-events:none}.annotationLayer .annotationTextContent span{width:100%;display:inline-block}:root{--react-pdf-text-layer: 1;--highlight-bg-color: rgba(180, 0, 170, 1);--highlight-selected-bg-color: rgba(0, 100, 0, 1)}@media screen and (forced-colors:active){:root{--highlight-bg-color: Highlight;--highlight-selected-bg-color: ButtonText}}[data-main-rotation="90"]{transform:rotate(90deg) translateY(-100%)}[data-main-rotation="180"]{transform:rotate(180deg) translate(-100%,-100%)}[data-main-rotation="270"]{transform:rotate(270deg) translate(-100%)}.textLayer{position:absolute;text-align:initial;inset:0;overflow:hidden;line-height:1;text-size-adjust:none;forced-color-adjust:none;transform-origin:0 0;z-index:2}.textLayer :is(span,br){color:transparent;position:absolute;white-space:pre;cursor:text;margin:0;transform-origin:0 0}.textLayer span.markedContent{top:0;height:0}.textLayer .highlight{margin:-1px;padding:1px;background-color:var(--highlight-bg-color);border-radius:4px}.textLayer .highlight.appended{position:initial}.textLayer .highlight.begin{border-radius:4px 0 0 4px}.textLayer .highlight.end{border-radius:0 4px 4px 0}.textLayer .highlight.middle{border-radius:0}.textLayer .highlight.selected{background-color:var(--highlight-selected-bg-color)}.textLayer br::selection{background:transparent}.textLayer .endOfContent{display:block;position:absolute;inset:100% 0 0;z-index:-1;cursor:default;-webkit-user-select:none;user-select:none}.textLayer.selecting .endOfContent{top:0}.hiddenCanvasElement{position:absolute;top:0;left:0;width:0;height:0;display:none}[data-rmiz-ghost]{position:absolute;pointer-events:none}[data-rmiz-btn-zoom],[data-rmiz-btn-unzoom]{background-color:#000000b3;border-radius:50%;border:none;box-shadow:0 0 1px #ffffff80;color:#fff;height:40px;margin:0;outline-offset:2px;padding:9px;touch-action:manipulation;width:40px;-webkit-appearance:none;-moz-appearance:none;appearance:none}[data-rmiz-btn-zoom]:not(:focus):not(:active){position:absolute;clip:rect(0 0 0 0);clip-path:inset(50%);height:1px;overflow:hidden;pointer-events:none;white-space:nowrap;width:1px}[data-rmiz-btn-zoom]{position:absolute;inset:10px 10px auto auto;cursor:zoom-in}[data-rmiz-btn-unzoom]{position:absolute;inset:20px 20px auto auto;cursor:zoom-out;z-index:1}[data-rmiz-content=found] img,[data-rmiz-content=found] svg,[data-rmiz-content=found] [role=img],[data-rmiz-content=found] [data-zoom]{cursor:zoom-in}[data-rmiz-modal]::backdrop{display:none}[data-rmiz-modal][open]{position:fixed;width:100vw;width:100dvw;height:100vh;height:100dvh;max-width:none;max-height:none;margin:0;padding:0;border:0;background:transparent;overflow:hidden;pointer-events:all}[data-rmiz-modal-overlay]{position:absolute;inset:0;transition:background-color .3s}[data-rmiz-modal-overlay=hidden]{background-color:#fff0}[data-rmiz-modal-overlay=visible]{background-color:#fff}[data-rmiz-modal-content]{position:relative;width:100%;height:100%}[data-rmiz-modal-img]{position:absolute;cursor:zoom-out;image-rendering:high-quality;transform-origin:top left;transition:transform .3s}@media(prefers-reduced-motion:reduce){[data-rmiz-modal-overlay],[data-rmiz-modal-img]{transition-duration:.01ms!important}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as n,j as e}from"./index-BygN1cJK.js";import{D as r,a as l,P as o,G as c}from"./DocumentPreviewModal-B9FumoYT.js";import{M as p,i as d,a as h,h as u,s as x,d as j}from"./RunRoute-rUSpBhsI.js";import"./LayoutBreadcrumb-D8Jj9PNg.js";import"./api-tVJBLHUH.js";import"./plus-CkqVCne8.js";import"./prismTheme-Bx8cYzkm.js";import"./tierState-Bq39H0kz.js";c.workerSrc=new URL("/assets/pdf.worker.min-qwK7q_zL.mjs",import.meta.url).toString();function b({attachment:a,onClick:i}){const s=`data:${a.mimeType};base64,${a.data}`,t=p[a.mimeType]??a.mimeType.split("/")[1]?.toUpperCase()??"FILE";return e.jsxs("button",{className:"attachment-thumb",onClick:i,title:a.name,children:[e.jsx("div",{className:"attachment-thumb-preview",children:d(a.mimeType)?e.jsx("img",{src:s,alt:a.name,className:"attachment-thumb-img"}):h(a.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:a.name})]})]})}function k({attachments:a}){const[i,s]=n.useState(null);if(a.length===0)return null;function t(m){u(m.mimeType)?s(m):x(j(m.data,{mime_type:m.mimeType,filename:m.name})||{data:m.data,mimeType:m.mimeType,type:"unknown",name:m.name})}return e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"attachment-strip",children:a.map(m=>e.jsx(b,{attachment:m,onClick:()=>t(m)},m.id))}),i&&e.jsx(r,{attachment:i,onClose:()=>s(null)})]})}export{k as AttachmentStrip};
|