sovara 0.3.1__tar.gz → 0.3.2__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.3.1 → sovara-0.3.2}/PKG-INFO +1 -1
- {sovara-0.3.1 → sovara-0.3.2}/README.md +9 -0
- {sovara-0.3.1 → sovara-0.3.2}/pyproject.toml +2 -1
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/SKILL.md +1 -1
- sovara-0.3.2/src/sovara/cli/so_claude.py +77 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/common/node_naming.py +63 -0
- sovara-0.3.2/src/sovara/runner/claude_code_runner.py +473 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/runner/monkey_patching/api_parser.py +2 -2
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/base_agent/prompts.py +7 -1
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/claude_proxy_utils.py +56 -12
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/graph_analysis/trace_chat/prompts.py +4 -3
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/priors_backend/llm/lesson_validator.py +3 -4
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/priors_backend/llm/prior_content_polisher.py +2 -4
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/priors_backend/llm/prior_quality.py +8 -4
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/priors_pipeline.py +13 -2
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/recording.py +4 -1
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/routes/claude_proxy.py +258 -1
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara.egg-info/PKG-INFO +1 -1
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara.egg-info/SOURCES.txt +2 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara.egg-info/entry_points.txt +1 -0
- {sovara-0.3.1 → sovara-0.3.2}/LICENSE +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/docs/release/PYPI_DESC.md +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/setup.cfg +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/__init__.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/__init__.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/default_runs.sqlite +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/AnnotationRoute-CE3twxG9.js +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/AnnotationRoute-voBIuZUX.css +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/AttachmentPreview-CFrNMdfC.css +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/AttachmentPreview-plYzPaRE.js +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/DocumentPreviewModal-BFdSPROi.js +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/LayoutBreadcrumb-DQfjpJp6.js +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/LayoutBreadcrumb-Di8BFf6J.css +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/OrgRoute-C6PvXMBj.js +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/OrgRoute-Syy1k3se.css +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/PriorsRoute-BFKg8GE_.css +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/PriorsRoute-CvQs_UGM.js +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/ProjectRoute-C3Jzk4jL.css +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/ProjectRoute-CrWY3I2q.js +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/ProjectRunsRoute-BWJaCbdU.js +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/RunRoute-Bf1i1Jzu.js +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/RunTabsHeader-BFdSaCHq.js +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/RunTabsHeader-CCiRiliL.css +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/SettingsRoute-CaCQ4pWX.js +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/api-BHNyGAe0.js +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/arrow_lr-ByI2ndPB.png +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/arrow_spiral_tr_bl-XHIpf338.png +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/codicon-BYm2YbZ6.ttf +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/eye-BRRCRKsr.js +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/index-CaNmZMjl.css +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/index-FFvomyuN.js +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/pdf.worker.min-qwK7q_zL.mjs +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/plus-StJOlCLf.js +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/prismTheme-DRzlLkhr.js +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/projectRuns-B4uZ9L5w.js +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/projectRuns-D7mGuqzb.css +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/settings-Br0my5v3.js +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/settings-CZdC8p_Y.css +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/sovara_favicon_colour-BrB8E1K-.png +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/sovara_full_logo_dark_green-DUVlz28Y.svg +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/sovara_full_logo_light_green-CZc0oGc4.svg +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/tierState-DObTMUxC.js +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/tiny-invariant-BCXflckp.js +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/trash-2-BiGQZCMf.js +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/useRunViewLayout-D1NwHTvJ.css +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/useRunViewLayout-Db3uX16H.js +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/assets/value-BlJoDf9S.js +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/favicon-colour.png +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/favicon.png +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/index.html +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/assets/web_app/marketplace_icon.png +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/cli/__init__.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/cli/so_config.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/cli/so_record.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/cli/so_server.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/cli/so_tool.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/common/__init__.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/common/annotations.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/common/config.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/common/constants.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/common/custom_metrics.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/common/edit_io_exclude_patterns.json +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/common/endpoint_patterns.json +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/common/lifecycle.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/common/log_redaction.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/common/logger.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/common/priors_block.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/common/priors_block_guidance.json +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/common/project.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/common/run_logs.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/common/runtime.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/common/user.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/common/utils.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/runner/__init__.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/runner/agent_runner.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/runner/context_manager.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/runner/monkey_patching/__init__.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/runner/monkey_patching/api_parsers/__init__.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/runner/monkey_patching/api_parsers/aiohttp_api_parser.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/runner/monkey_patching/api_parsers/claude_code_messages_api_parser.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/runner/monkey_patching/api_parsers/httpx_api_parser.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/runner/monkey_patching/api_parsers/mcp_api_parser.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/runner/monkey_patching/api_parsers/requests_api_parser.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/runner/monkey_patching/api_parsers/sse_utils.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/runner/monkey_patching/api_parsers/urllib3_api_parser.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/runner/monkey_patching/apply_monkey_patches.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/runner/monkey_patching/async_streaming.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/runner/monkey_patching/endpoint_whitelist.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/runner/monkey_patching/patches/__init__.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/runner/monkey_patching/patches/adk_patch.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/runner/monkey_patching/patches/aiohttp_patch.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/runner/monkey_patching/patches/claude_sdk_patch.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/runner/monkey_patching/patches/httpx_patch.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/runner/monkey_patching/patches/langchain_patch.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/runner/monkey_patching/patches/mcp_patches.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/runner/monkey_patching/patches/openai_agents_patch.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/runner/monkey_patching/patches/requests_patch.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/runner/monkey_patching/patches/urllib3_patch.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/runner/monkey_patching/patching_utils.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/runner/monkey_patching/to_show_filters.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/runner/monkey_patching/tool_trace_utils.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/runner/priors.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/runner/public.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/runner/request_mutation.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/runner/run_log_capture.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/runner/runtime_client.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/__init__.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/annotation_backend/__init__.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/annotation_backend/annotation.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/annotation_backend/annotation_agent/__init__.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/annotation_backend/annotation_agent/agent.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/annotation_backend/annotation_agent/models.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/annotation_backend/annotation_agent/prompts.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/annotation_backend/annotation_agent/tools.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/annotation_backend/annotation_agent/trace_store.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/annotation_backend/annotation_focus.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/annotation_backend/chunk_index.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/annotation_backend/classifier.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/annotation_backend/close_traces.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/annotation_backend/distance_index.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/annotation_backend/screening_summary.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/annotation_backend/utils.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/app.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/base_agent/__init__.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/base_agent/agent.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/base_agent/cancel.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/base_agent/compaction.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/base_agent/content_blocks.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/base_agent/content_utils.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/base_agent/llm_settings.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/base_agent/step_content_view.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/base_agent/step_ids.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/base_agent/tools/__init__.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/base_agent/tools/annotation.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/base_agent/tools/applied_priors.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/base_agent/tools/ask_step.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/base_agent/tools/content_unit.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/base_agent/tools/graph.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/base_agent/tools/ids.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/base_agent/tools/priors.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/base_agent/tools/registry.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/base_agent/tools/run_logs.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/base_agent/tools/step_overview.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/base_agent/tools/step_snapshot.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/base_agent/tools/trace.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/base_agent/tools/trace_search.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/base_agent/tools/trace_summary.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/base_agent/trace.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/database/__init__.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/database/_shared.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/database/annotations.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/database/backend_protocol.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/database/blob_storage.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/database/llm_calls.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/database/manager.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/database/mongodb/__init__.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/database/mongodb/backend.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/database/mongodb/connection.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/database/mongodb/prior_embeddings.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/database/postgresql/__init__.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/database/postgresql/backend.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/database/postgresql/connection.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/database/postgresql/schema.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/database/prior_models.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/database/prior_record.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/database/priors.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/database/projects.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/database/runs.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/database/sqlite/__init__.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/database/sqlite/annotations.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/database/sqlite/backend.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/database/sqlite/bootstrap.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/database/sqlite/connection.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/database/sqlite/demo_quota.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/database/sqlite/llm_calls.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/database/sqlite/prior_embeddings.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/database/sqlite/prior_records.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/database/sqlite/priors.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/database/sqlite/projects.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/database/sqlite/runs.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/database/sqlite/schema.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/database/sqlite/users.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/database/users.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/graph_analysis/inference_server.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/graph_analysis/trace_chat/__init__.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/graph_analysis/trace_chat/main.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/graph_models.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/handlers/__init__.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/handlers/cli_handlers.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/handlers/handler_utils.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/handlers/runner_handlers.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/handlers/ui_handlers.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/llm_backend.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/llm_provider_catalog.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/llm_settings.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/llm_settings_verification.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/package_version.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/prior_display.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/priors_backend/__init__.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/priors_backend/constants.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/priors_backend/embeddings.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/priors_backend/llm/__init__.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/priors_backend/llm/folder_rebalancer.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/priors_backend/llm/lesson_restructurer.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/priors_backend/llm/lesson_retriever.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/priors_backend/llm/lesson_summarizer.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/priors_backend/llm/prior_metadata_suggester.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/priors_backend/llm_client.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/priors_backend/logger.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/priors_backend/path_utils.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/priors_backend/retrieval_service.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/priors_backend/routes.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/priors_backend/storage.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/priors_backend/tools/adjudication.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/priors_backend/tools/bm25_search.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/priors_backend/tools/dense_search.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/priors_backend/tools/folder_groups.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/priors_backend/tools/keyword_search.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/priors_backend/tools/parallel_search.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/priors_backend/tools/preprocess_context.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/priors_backend/tools/rerank.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/priors_backend/tools/utils.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/priors_scope.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/routes/__init__.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/routes/events.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/routes/internal.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/routes/runner.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/routes/ui.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/routes/ui_common.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/routes/ui_projects.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/routes/ui_runs.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/routes/ui_trace_chat.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/runtime_preparation.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/services/__init__.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/services/annotation_evaluation_service.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/services/annotation_focus_service.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/services/annotation_service.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/services/demo_run_limit.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/services/embedding_sources.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/services/llm_call_embeddings.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/services/session_io_summary.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/services/trace_chat_service.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/state.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/third_party_model_catalog.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara/server/web_app_assets.py +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara.egg-info/dependency_links.txt +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara.egg-info/requires.txt +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/src/sovara.egg-info/top_level.txt +0 -0
- {sovara-0.3.1 → sovara-0.3.2}/tests/test_graph_payloads.py +0 -0
|
@@ -129,6 +129,15 @@ That copies the skill to `.claude/skills/sovara/` under the selected project. Re
|
|
|
129
129
|
|
|
130
130
|
Use Sovara in Claude Code by letting Claude invoke the skill automatically when relevant, or select it directly from the skill menu if needed.
|
|
131
131
|
|
|
132
|
+
To record Claude Code itself as a Sovara run, launch it through `so-claude`:
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
so-claude
|
|
136
|
+
so-claude -p "summarize this repo"
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
`so-claude` starts a normal Claude Code session, routes its Anthropic API calls through Sovara, and records Claude Code model/tool activity in the run graph. It currently supports standard Anthropic API routing through `ANTHROPIC_BASE_URL`; Bedrock and Vertex Claude Code modes are not supported yet.
|
|
140
|
+
|
|
132
141
|
If you want both integrations installed globally in one step, run:
|
|
133
142
|
|
|
134
143
|
```bash
|
|
@@ -18,6 +18,7 @@ include = ["sovara*"]
|
|
|
18
18
|
[project.scripts]
|
|
19
19
|
# Console commands for the Sovara package
|
|
20
20
|
so-record = "sovara.cli.so_record:main"
|
|
21
|
+
so-claude = "sovara.cli.so_claude:main"
|
|
21
22
|
so-config = "sovara.cli.so_config:main"
|
|
22
23
|
so-server = "sovara.cli.so_server:main"
|
|
23
24
|
so-cli = "sovara.cli.so_tool:main"
|
|
@@ -27,7 +28,7 @@ line-length = 100
|
|
|
27
28
|
|
|
28
29
|
[project]
|
|
29
30
|
name = "sovara"
|
|
30
|
-
version = "0.3.
|
|
31
|
+
version = "0.3.2"
|
|
31
32
|
description = "A development tool for agent observability, benchmarking, and optimization via domain knowledge"
|
|
32
33
|
readme = "docs/release/PYPI_DESC.md"
|
|
33
34
|
requires-python = ">=3.10"
|
|
@@ -476,7 +476,7 @@ The ideal prior has three properties:
|
|
|
476
476
|
2. generalizes well to other scenarios where the same problem could occur in a slightly different way
|
|
477
477
|
3. and it does not conflict with other existing priors.
|
|
478
478
|
|
|
479
|
-
Good priors are actionable, concise, self-contained,
|
|
479
|
+
Good priors are actionable, concise, self-contained, precise, well-scoped, faithful to the lesson, retrieval-friendly, and non-conflicting. Use the broadest reusable formulation that still addresses the issue, while including the conditions or exceptions needed to avoid causing mistakes in cases where the rule should not apply. If a prior captures the right lesson but is verbose, vague, overly run-specific, or hard to scan, polish it before saving or updating it. In the UI, use the **Polish** action in the content editor. From the CLI, use `so-cli priors polish <prior_id>` to get a non-mutating polished content proposal.
|
|
480
480
|
|
|
481
481
|
Once you have constructed a prior, validate it by recording a fresh run with that prior available and comparing the new trace against the original observations.
|
|
482
482
|
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.
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
from argparse import ArgumentParser
|
|
2
|
+
import sys
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
def launch_command_parser():
|
|
6
|
+
parser = ArgumentParser(
|
|
7
|
+
usage="so-claude [options] [--] [claude args...]",
|
|
8
|
+
description="Launch Claude Code with Sovara observability.",
|
|
9
|
+
allow_abbrev=False,
|
|
10
|
+
)
|
|
11
|
+
parser.add_argument(
|
|
12
|
+
"--run-name",
|
|
13
|
+
default=None,
|
|
14
|
+
help="Name that will be used in the run list. If not set, Run X will be used.",
|
|
15
|
+
)
|
|
16
|
+
parser.add_argument("--user-name", help="Override or create the local Sovara user full name.")
|
|
17
|
+
parser.add_argument("--user-email", help="Override or create the local Sovara user email.")
|
|
18
|
+
parser.add_argument(
|
|
19
|
+
"--project-root",
|
|
20
|
+
help="Project root to resolve or create for this run. Defaults to the current directory.",
|
|
21
|
+
)
|
|
22
|
+
parser.add_argument("--project-name", help="Override or create the Sovara project name.")
|
|
23
|
+
parser.add_argument(
|
|
24
|
+
"--project-description",
|
|
25
|
+
help="Override or create the Sovara project description.",
|
|
26
|
+
)
|
|
27
|
+
parser.add_argument(
|
|
28
|
+
"--claude-bin",
|
|
29
|
+
default="claude",
|
|
30
|
+
help="Claude Code executable to launch. Defaults to 'claude'.",
|
|
31
|
+
)
|
|
32
|
+
parser.add_argument(
|
|
33
|
+
"--timeout",
|
|
34
|
+
type=float,
|
|
35
|
+
default=None,
|
|
36
|
+
help="Timeout in seconds. Terminates Claude Code if exceeded.",
|
|
37
|
+
)
|
|
38
|
+
return parser
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def _normalize_claude_args(args: list[str]) -> list[str]:
|
|
42
|
+
if args and args[0] == "--":
|
|
43
|
+
return args[1:]
|
|
44
|
+
return args
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def parse_command_args(argv: list[str] | None = None):
|
|
48
|
+
parser = launch_command_parser()
|
|
49
|
+
args, claude_args = parser.parse_known_args(argv)
|
|
50
|
+
args.claude_args = _normalize_claude_args(claude_args)
|
|
51
|
+
return args
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def launch_command(args):
|
|
55
|
+
from sovara.runner.claude_code_runner import ClaudeCodeRunner
|
|
56
|
+
|
|
57
|
+
runner = ClaudeCodeRunner(
|
|
58
|
+
claude_args=_normalize_claude_args(args.claude_args),
|
|
59
|
+
claude_bin=args.claude_bin,
|
|
60
|
+
timeout=args.timeout,
|
|
61
|
+
run_name=args.run_name,
|
|
62
|
+
user_name=getattr(args, "user_name", None),
|
|
63
|
+
user_email=getattr(args, "user_email", None),
|
|
64
|
+
project_root=getattr(args, "project_root", None),
|
|
65
|
+
project_name=getattr(args, "project_name", None),
|
|
66
|
+
project_description=getattr(args, "project_description", None),
|
|
67
|
+
)
|
|
68
|
+
runner.run()
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def main():
|
|
72
|
+
args = parse_command_args(sys.argv[1:])
|
|
73
|
+
launch_command(args)
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
if __name__ == "__main__":
|
|
77
|
+
main()
|
|
@@ -25,6 +25,7 @@ MODEL_TOKEN_OVERRIDES = {
|
|
|
25
25
|
"aya": "Aya",
|
|
26
26
|
"awq": "AWQ",
|
|
27
27
|
"bf16": "BF16",
|
|
28
|
+
"chatgpt": "ChatGPT",
|
|
28
29
|
"chatglm": "ChatGLM",
|
|
29
30
|
"claude": "Claude",
|
|
30
31
|
"codestral": "Codestral",
|
|
@@ -138,6 +139,23 @@ def _format_openai_o_series(match: re.Match[str]) -> str:
|
|
|
138
139
|
return f"o{major}{_format_optional_variant(variant)}"
|
|
139
140
|
|
|
140
141
|
|
|
142
|
+
def _format_openai_chat_latest(match: re.Match[str]) -> str:
|
|
143
|
+
(version,) = match.groups()
|
|
144
|
+
return f"GPT-{version} Chat"
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
def _format_openai_specialized_family(match: re.Match[str]) -> str:
|
|
148
|
+
family, tail = match.groups()
|
|
149
|
+
cleaned_tail = re.sub(r"-\d{4}-\d{2}-\d{2}$", "", tail or "")
|
|
150
|
+
return f"GPT {_format_model_token(family)}{_format_tail(cleaned_tail or None)}"
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
def _format_openai_deep_research(match: re.Match[str]) -> str:
|
|
154
|
+
major, mini = match.groups()
|
|
155
|
+
mini_suffix = " Mini" if mini else ""
|
|
156
|
+
return f"o{major}{mini_suffix} Deep Research"
|
|
157
|
+
|
|
158
|
+
|
|
141
159
|
def _format_claude_modern(match: re.Match[str]) -> str:
|
|
142
160
|
family, major, minor = match.groups()
|
|
143
161
|
version = _format_optional_minor(major, minor)
|
|
@@ -181,6 +199,43 @@ def _format_slug_family(match: re.Match[str]) -> str:
|
|
|
181
199
|
return f"{family}{_format_tail(tail)}"
|
|
182
200
|
|
|
183
201
|
|
|
202
|
+
def _normalize_vendor_model_name(name: str) -> str | None:
|
|
203
|
+
normalized_name = re.sub(r"^(?:apac|eu|global|us|us-gov)\.", "", name, count=1)
|
|
204
|
+
|
|
205
|
+
if normalized_name.startswith("anthropic."):
|
|
206
|
+
inner_name = normalized_name.removeprefix("anthropic.")
|
|
207
|
+
return re.sub(r"-v\d+(?::\d+)?$", "", inner_name)
|
|
208
|
+
|
|
209
|
+
if normalized_name.startswith("openai."):
|
|
210
|
+
inner_name = normalized_name.removeprefix("openai.")
|
|
211
|
+
return re.sub(r"-\d+:\d+$", "", inner_name)
|
|
212
|
+
|
|
213
|
+
if normalized_name.startswith("deepseek."):
|
|
214
|
+
inner_name = normalized_name.removeprefix("deepseek.")
|
|
215
|
+
inner_name = re.sub(r"-v\d+(?::\d+)?$", "", inner_name)
|
|
216
|
+
return f"deepseek-{inner_name}"
|
|
217
|
+
|
|
218
|
+
if normalized_name.startswith("qwen."):
|
|
219
|
+
inner_name = normalized_name.removeprefix("qwen.")
|
|
220
|
+
if inner_name == "qwen3-coder-480b-a35b-v1:0":
|
|
221
|
+
return "qwen3-coder-480b-a35b-instruct"
|
|
222
|
+
return re.sub(r"-v\d+(?::\d+)?$", "", inner_name)
|
|
223
|
+
|
|
224
|
+
if normalized_name.startswith("minimax."):
|
|
225
|
+
return normalized_name.removeprefix("minimax.")
|
|
226
|
+
|
|
227
|
+
if normalized_name.startswith("moonshotai."):
|
|
228
|
+
return normalized_name.removeprefix("moonshotai.")
|
|
229
|
+
|
|
230
|
+
if normalized_name.startswith("moonshot."):
|
|
231
|
+
return normalized_name.removeprefix("moonshot.")
|
|
232
|
+
|
|
233
|
+
if normalized_name != name:
|
|
234
|
+
return normalized_name
|
|
235
|
+
|
|
236
|
+
return None
|
|
237
|
+
|
|
238
|
+
|
|
184
239
|
MODEL_NAME_PATTERNS: list[tuple[str, str]] = [
|
|
185
240
|
(r"^mistral-small-2603$", "Mistral Small 4"),
|
|
186
241
|
(r"^mistral-moderation-2603$", "Mistral Moderation 2"),
|
|
@@ -211,6 +266,7 @@ MODEL_NAME_PATTERNS: list[tuple[str, str]] = [
|
|
|
211
266
|
(r"^codestral-2508$", "Codestral"),
|
|
212
267
|
(r"^mistral-ocr-2512$", "OCR 3"),
|
|
213
268
|
(r"^mistral-ocr-2505$", "OCR 2"),
|
|
269
|
+
(r"^chatgpt-image-latest$", "ChatGPT Image"),
|
|
214
270
|
(r"^(?:openai/)?gpt-5\.2-chat-latest$", "GPT-5.2 Chat"),
|
|
215
271
|
(r"^grok-4\.20-multi-agent-beta-\d{4}$", "Grok 4.20 Multi-Agent Beta"),
|
|
216
272
|
(r"^grok-4\.20(?:-beta(?:-latest(?:-non-reasoning)?)?)?$", "Grok 4.20 Beta"),
|
|
@@ -240,8 +296,11 @@ ModelNameFormatter = Callable[[re.Match[str]], str]
|
|
|
240
296
|
|
|
241
297
|
MODEL_NAME_FORMATTERS: list[tuple[str, ModelNameFormatter]] = [
|
|
242
298
|
(r"^(?:chatgpt-)?gpt-4o(?:-(mini))?(?:-([a-z0-9]+(?:-[a-z0-9]+)*))?$", _format_openai_gpt_4o),
|
|
299
|
+
(r"^(?:openai/)?gpt-(\d+(?:\.\d+)?)-chat-latest$", _format_openai_chat_latest),
|
|
300
|
+
(r"^(?:openai/)?gpt-(realtime|audio|image)(?:-([a-z0-9.]+(?:-[a-z0-9.]+)*))?$", _format_openai_specialized_family),
|
|
243
301
|
(r"^(?:openai/)?gpt-(\d+(?:\.\d+)?)(?:-([a-z0-9]+(?:-[a-z0-9]+)*))?$", _format_openai_gpt),
|
|
244
302
|
(r"^(?:openai/)?gpt-oss-(\d+[a-z])$", _format_openai_gpt_oss),
|
|
303
|
+
(r"^(?:openai/)?o(\d+)(?:-(mini))?-deep-research$", _format_openai_deep_research),
|
|
245
304
|
(r"^(?:openai/)?o(\d+)(?:-(mini|pro|preview))?$", _format_openai_o_series),
|
|
246
305
|
(
|
|
247
306
|
r"^claude-(opus|sonnet|haiku)-(\d+)(?:-(\d{1,2}))?(?:-(?:\d{8}|latest))?$",
|
|
@@ -299,6 +358,10 @@ def sanitize_node_name_for_display(name: str) -> str:
|
|
|
299
358
|
if not name:
|
|
300
359
|
return NO_LABEL
|
|
301
360
|
|
|
361
|
+
normalized_name = _normalize_vendor_model_name(name)
|
|
362
|
+
if normalized_name:
|
|
363
|
+
return sanitize_node_name_for_display(normalized_name)
|
|
364
|
+
|
|
302
365
|
for pattern, clean_name in COMPILED_MODEL_NAME_PATTERNS:
|
|
303
366
|
if pattern.match(name):
|
|
304
367
|
return clean_name
|