superqode 2.2.4__tar.gz → 2.2.5__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.
- {superqode-2.2.4 → superqode-2.2.5}/CHANGELOG.md +50 -17
- {superqode-2.2.4 → superqode-2.2.5}/PKG-INFO +9 -4
- {superqode-2.2.4 → superqode-2.2.5}/README.md +8 -3
- {superqode-2.2.4 → superqode-2.2.5}/pyproject.toml +1 -1
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/__init__.py +1 -1
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/uhp.py +3 -3
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/backends/runtime.py +10 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/uhp_client.py +59 -15
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/uhp_server.py +134 -30
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode.egg-info/PKG-INFO +9 -4
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_uhp_client.py +74 -2
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_uhp_connect.py +1 -1
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_uhp_server.py +303 -3
- {superqode-2.2.4 → superqode-2.2.5}/LICENSE +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/MANIFEST.in +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/NOTICE +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/examples/README.md +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/examples/a2a/README.md +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/examples/a2a/smoke_client.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/examples/bench/dspy-comprehension.manifest.yaml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/examples/bench/dspy-comprehension.yaml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/examples/bench/spec-core.yaml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/examples/bench/spec-deepagents.yaml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/examples/bench/spec-prime-agent.yaml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/examples/byok-acp-team.yaml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/examples/codex_sdk_quickstart.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/examples/evals/omni-release.yaml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/examples/evals/omni-tiny.yaml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/examples/extensions/README.md +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/examples/extensions/manifest-guard/context.md +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/examples/extensions/manifest-guard/hooks.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/examples/extensions/manifest-guard/tools.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/examples/extensions/packages/README.md +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/examples/extensions/packages/broken-extension/src/superqode_example_broken/__init__.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/examples/extensions/packages/policy-extension/src/superqode_example_policy/__init__.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/examples/extensions/packages/skill-extension/src/superqode_example_skill/SKILL.md +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/examples/extensions/packages/skill-extension/src/superqode_example_skill/__init__.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/examples/extensions/packages/tool-extension/src/superqode_example_tool/__init__.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/examples/extensions/packages/tool-extension-v2/src/superqode_example_tool/__init__.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/examples/extensions/python-package/src/superqode_example_extension/__init__.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/examples/harness-packages/README.md +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/examples/harness-packages/hello-harness/src/superqode_hello_harness/__init__.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/examples/harnesses/coding.yaml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/examples/harnesses/deepagents.yaml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/examples/harnesses/deepseek-harness.yaml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/examples/harnesses/ds4.yaml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/examples/harnesses/gemma4.yaml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/examples/harnesses/google-adk.yaml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/examples/harnesses/local-recursive-dynamic.yaml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/examples/harnesses/mcp-docs.yaml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/examples/harnesses/no-tool.yaml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/examples/harnesses/omni-tiny-local.yaml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/examples/harnesses/omnigent-multi-agent.yaml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/examples/harnesses/openai-agents.yaml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/examples/harnesses/prime-agent.yaml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/examples/harnesses/pydanticai.yaml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/examples/harnesses/rlm-code-lid.yaml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/examples/local-models-team.yaml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/examples/mcp/local_docs_server.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/examples/omnigent-multi-agent.agent.yaml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/examples/qm-deployment-layer/README.md +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/examples/qm-deployment-layer/sandbox/skills/superqode-harness/SKILL.md +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/examples/rlm-demo/INCIDENT.md +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/examples/rlm-demo/README.md +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/examples/rlm-demo/RUNBOOK.md +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/examples/rlm-demo/deploy_audit/__init__.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/examples/rlm-demo/deploy_audit/parser.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/examples/rlm-demo/deploy_audit/report.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/examples/rlm-demo/rlm-docker.yaml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/examples/rlm-demo/rlm-monty.yaml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/examples/rlm-demo/tests/test_report.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/examples/simple-team.yaml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/scripts/check_release_metadata.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/setup.cfg +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/a2a/__init__.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/a2a/client.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/a2a/conformance.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/a2a/connection.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/a2a/context.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/a2a/inspect.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/a2a/keys.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/a2a/limits.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/a2a/oauth.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/a2a/presets.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/a2a/registry.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/a2a/reply.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/a2a/security.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/a2a/server.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/a2a/shortlist.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/a2a/skills.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/a2a/tools.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/a2a/trust.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/a2a/types.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/a2a/understand.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/a2a/workflows.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/acp/__init__.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/acp/client.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/acp/doctor.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/acp/permission_screen.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/acp/permission_store.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/acp/render.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/acp/server.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/acp/session_store.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/acp/slash.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/acp/tool_call_context.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/acp/types.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/acp_discovery.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agent/__init__.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agent/auto_memory.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agent/command_safety.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agent/compaction.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agent/context_manager.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agent/edit_strategies.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agent/exec_policy.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agent/hooks.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agent/loop.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agent/loop_guard.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agent/loop_policy.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agent/network_policy.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agent/output_handler.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agent/parallel_compare.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agent/peer_agents.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agent/plan_mode.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agent/reminders.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agent/rubric.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agent/session_manager.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agent/structured_output.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agent/summarization.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agent/system_prompts.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agent/terminal_output_limits.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agent/text_tool_calls.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agent/tool_args.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agent/tool_tracking.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agent/utility_model.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agent_output.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agent_stream.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/__init__.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/acp_registry.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/client.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/agentpool.phil65.github.io.toml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/ampcode.com.toml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/augmentcode.com.toml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/autodev.github.io.toml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/blackbox.ai.toml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/bub.dev.toml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/cagent.dev.toml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/claude.com.toml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/cline.bot.toml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/codeassistant.dev.toml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/codebuddy.tencent.com.toml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/codex.openai.com.toml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/copilot.github.com.toml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/cortex.snowflake.com.toml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/crow-ai.dev.toml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/cursor.com.toml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/deepagents-code.langchain.com.toml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/deepagents.langchain.com.toml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/devin.ai.toml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/dirac.run.toml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/factory.ai.toml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/fastagent.ai.toml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/fount.dev.toml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/fx.sh.toml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/geminicli.com.toml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/glm.z.ai.toml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/goose.block.xyz.toml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/harnlang.com.toml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/hermes-agent.nousresearch.com.toml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/junie.jetbrains.com.toml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/kilo.ai.toml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/kimi.moonshot.cn.toml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/kiro.dev.toml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/llmlingagent.dev.toml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/minioncode.dev.toml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/mistral-vibe.mistral.ai.toml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/openclaw.ai.toml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/opencode.ai.toml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/openhands.dev.toml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/pi.dev.toml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/poolside.ai.toml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/primeintellect.ai.toml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/qoder.com.toml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/qwenlm.github.io.toml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/sigit.dev.toml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/stakpak.dev.toml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/stdiobus.dev.toml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/vtcode.dev.toml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/x.ai.toml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/discovery.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/free_models.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/install_commands.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/messaging.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/official_acp.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/persona.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/registry.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/schema.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/unified.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/__init__.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/async_utils.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/capabilities.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/constants.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/css.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/harness_picker.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/inputs.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/__init__.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/actions_misc.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/agent_run.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/build_harness.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/clickable_commands.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/codex.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/commands_impl.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/completion.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/connect.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/dialogs.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/events.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/explore.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/factory.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/feedback.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/formatting.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/harness_hub.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/helper_clipboard.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/helper_completion_helpers.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/helper_diff_review.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/helper_exit_lifecycle.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/helper_file_view.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/helper_interaction_mode.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/helper_mcp_attach.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/helper_message_queue.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/helper_permissions.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/helper_recipes_skills.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/helper_share.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/helper_startup.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/helper_todos_plan.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/helper_vim.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/helper_wizard.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/helpers.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/huggingface.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/local_models.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/mcp.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/model_catalog.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/pickers.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/pipy_commands.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/rlm_commands.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/sidebar.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/slash_commands.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/switchboard.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/tour.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/models.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/navigation.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/outcomes.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/progress.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/prompt_stack.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/recipes.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/session_state.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/suggester.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/theme_bridge.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/welcome.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/widgets.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app_enhanced.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app_main.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/approval.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/atomic.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/auth/__init__.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/benchmarks.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/channels/__init__.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/channels/config.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/channels/discord.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/channels/service.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/channels/slack.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/channels/telegram.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/claude.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/codex.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/__init__.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/a2a.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/a2a_connect.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/a2a_keys.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/acp.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/agents.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/auth.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/benchmark.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/config.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/connect.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/daemon.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/factory.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/gauge.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/harness/__init__.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/harness/_group.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/harness/_helpers.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/harness/bench.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/harness/candidates.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/harness/evaluation.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/harness/evidence.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/harness/inbox.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/harness/lifecycle.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/harness/logbook.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/harness/observability.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/harness/optimization.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/harness/promotion.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/harness/protocol.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/harness/registry.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/harness/replay.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/harness/run_history.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/harness/worker.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/hub.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/local.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/memory.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/models.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/plugins.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/policy.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/profiles.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/providers.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/runtime.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/sandbox.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/serve.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/sessions.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/share.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/skillopt.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/skills.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/tools.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/trust.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/update.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/work.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/config/__init__.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/config/loader.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/config/schema.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/core/__init__.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/danger.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/data/eval_fixtures/ci-dynamic-root-cause.log +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/data/eval_fixtures/ci-root-cause.log +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/data/eval_packs/local_dynamic_workflow_smoke.yaml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/data/eval_packs/local_recursive_smoke.yaml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/data/superqode-template.yaml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/design_system.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/dialogs/__init__.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/dialogs/base.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/dialogs/model.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/dialogs/provider.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/dialogs/runtime.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/diff_view.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/enterprise.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/evaluation/__init__.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/evaluation/adapters.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/evaluation/behaviors.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/evaluation/engine.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/evaluation/scenarios.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/execution/__init__.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/execution/linter.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/execution/modes.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/execution/resolver.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/execution/runner.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/extensions.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/file_explorer.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/file_viewer.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/flash.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/gauge/__init__.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/gauge/levels.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/gauge/record.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/gauge/sources.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/governance.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/__init__.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/accelerator.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/agent_importer.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/approval_memory.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/backends/__init__.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/backends/base.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/backends/deepagents.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/backends/dsh.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/backends/managed.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/backends/pipy.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/backends/prime_agent.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/backends/pydanticai.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/backends/registry.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/backends/rlm.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/backends/rlm_code.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/backends/tau.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/backends/uhp.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/bench.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/catalog.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/compiler.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/conformance.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/context_handles.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/diagnostics.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/discovery.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/drift.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/eval.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/events.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/explain.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/hooks.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/hub.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/kernel.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/loader.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/mcp_bridge.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/model_policy.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/model_routes.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/observability.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/omni.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/omnigent_importer.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/optimize.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/output.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/permissions.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/pipy_adapter.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/pipy_extensions.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/promotion.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/protocol.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/protocol_adapters.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/protocol_controller.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/registry.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/rlm_adapter.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/rlm_code_adapter.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/sandbox.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/self_improve.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/spec.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/store.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/tau_adapter.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/tau_management.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/templates.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/testing.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/uhp_adapter.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/wizard.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/workflow.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/workflow_presets.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/headless.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/history.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/local/__init__.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/local/airplane.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/local/bench.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/local/build.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/local/code_index.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/local/data/model-packs/devstral.yaml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/local/data/model-packs/ds4.yaml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/local/data/model-packs/gemma4.yaml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/local/data/model-packs/glm.yaml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/local/data/model-packs/gpt-oss.yaml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/local/data/model-packs/kimi.yaml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/local/data/model-packs/laguna.yaml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/local/data/model-packs/minimax.yaml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/local/data/model-packs/qwen-coder.yaml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/local/data/model-packs/qwen3.yaml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/local/data/stack_matrix.yaml +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/local/doctor.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/local/engines.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/local/guardrails.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/local/hardware.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/local/inventory.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/local/labs.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/local/laguna.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/local/matrix.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/local/migrate.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/local/optimize.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/local/packs.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/local/repo.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/local/servers.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/local/setup.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/local/smoke.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/logging/__init__.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/logging/adapters.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/logging/formatter.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/logging/integration.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/logging/sinks.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/logging/unified_log.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/lsp/__init__.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/lsp/client.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/main.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/mcp/__init__.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/mcp/auth_storage.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/mcp/client.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/mcp/config.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/mcp/elicitation.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/mcp/harness_server.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/mcp/hf_auth.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/mcp/integration.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/mcp/oauth.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/mcp/oauth_callback.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/mcp/sampling.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/mcp/search.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/mcp/types.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/memory/__init__.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/memory/config.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/memory/providers.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/memory/types.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/notifications.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/permissions/__init__.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/permissions/rules.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/__init__.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/ai/__init__.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/ai/fake.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/ai/gateway.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/ai/models.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/ai/transform.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/coding_session.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/compaction.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/config.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/event_stream.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/events.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/harness.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/harness_events.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/loop.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/messages.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/permissions.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/prompt_templates.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/provider_events.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/resources.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/session/__init__.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/session/codec.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/session/entries.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/session/jsonl.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/session/memory.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/session/repository.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/session/session.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/session/storage.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/signals.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/skills.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/stream.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/system_prompt.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/tools/__init__.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/tools/base.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/tools/edit_diff.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/tools/files.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/tools/paths.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/tools/registry.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/tools/search.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/tools/shell.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/tools/truncate.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/types.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/validation.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/plan.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/platform_locks.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/plugins.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/project_trust.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/__init__.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/_builtin_profiles.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/acp_free_models.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/acp_models.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/acp_registry.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/apple_fm.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/catalog.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/connection_profiles.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/copilot_auth.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/credentials.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/dynamic.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/env_introspect.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/free_inference.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/gateway/__init__.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/gateway/base.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/gateway/litellm_gateway.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/gateway/openresponses_gateway.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/gateway/synthetic.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/grok_cli_auth.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/harness_catalog.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/health.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/huggingface/__init__.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/huggingface/convert.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/huggingface/downloader.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/huggingface/endpoints.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/huggingface/fetch.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/huggingface/hub.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/huggingface/inference.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/huggingface/transformers_runner.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/live_models.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/local/__init__.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/local/_mlx_worker.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/local/base.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/local/capabilities.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/local/context_probe.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/local/discovery.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/local/ds4.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/local/lmstudio.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/local/mlx.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/local/mlx_engine.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/local/mlx_tools.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/local/ollama.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/local/sglang.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/local/smoke.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/local/tgi.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/local/tool_support.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/local/vllm.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/manager.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/model_specs.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/models.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/models_dev.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/opencode_models.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/openresponses/__init__.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/openresponses/converters/__init__.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/openresponses/converters/messages.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/openresponses/converters/tools.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/openresponses/schema/__init__.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/openresponses/schema/models.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/openresponses/streaming/__init__.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/openresponses/streaming/parser.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/openresponses/tools/__init__.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/openresponses/tools/apply_patch.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/openresponses/tools/code_interpreter.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/openresponses/tools/file_search.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/openresponses/tools/mcp_adapter.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/prime_agent.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/profiles.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/recommendations.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/registry.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/subscription_env.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/subscription_login.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/uhp.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/usage.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pure_mode.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/py.typed +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/rendering/__init__.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/rendering/html_export.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/rendering/markdown.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/rendering/transcript_export.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/rlm/__init__.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/rlm/coding_session.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/rlm/config.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/rlm/context.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/rlm/identity.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/rlm/kernel.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/rlm/kernel_backend.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/rlm/kernel_docker.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/rlm/kernel_monty.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/rlm/kernel_server.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/rlm/policy.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/rlm/root_runtime.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/rlm/root_worker.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/rlm/sandbox.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/rlm/subcalls.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/rlm/supervisor.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/rlm/worker.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/rlm/worker_process.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/runtime/__init__.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/runtime/adk.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/runtime/antigravity_cli.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/runtime/antigravity_managed.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/runtime/antigravity_sdk.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/runtime/antigravity_status.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/runtime/base.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/runtime/builtin.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/runtime/claude_agent_sdk.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/runtime/codex_sdk.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/runtime/copilot_sdk.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/runtime/devin_cli.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/runtime/devin_status.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/runtime/errors.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/runtime/openai_agents.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/runtime/openai_sandbox.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/runtime/openai_session.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/runtime/pydanticai.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/runtime/registry.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/runtime/tool_bridge.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/runtime/tool_bridge_openai.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/runtime/tool_bridge_pydanticai.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/runtime/vendor_cli.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/safety/__init__.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/safety/sandbox.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/safety/warnings.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/sandbox/__init__.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/sandbox/backends.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/sandbox/execution.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/sandbox/local_sandbox.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/search_registry.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/server/__init__.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/server/api.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/server/web.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/session/__init__.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/session/factory.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/session/persistence.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/session/share_artifacts.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/session/sharing.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/session/switchboard.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/session.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/sidebar.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/skillopt.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/skills.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/stream_view.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/styles/__init__.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tool_call.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/__init__.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/agent_tools.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/apply_patch.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/base.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/batch_tool.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/compact_tool.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/context_handle.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/context_tools.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/core_tools.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/diagnostics.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/diff_utils.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/display.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/dynamic_workflow.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/edit_tools.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/enhanced_base.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/env_policy.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/file_tools.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/file_tracking.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/governed.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/harness_agent_session.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/image_tools.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/lsp_tools.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/mcp_tools.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/monty_tool.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/network_tools.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/output_spill.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/peer_agent_tools.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/permissions.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/post_edit.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/question_tool.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/request_permissions_tool.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/search_tools.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/semantic_search.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/shell_session.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/shell_tools.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/skill_tools.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/spawn_harness.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/todo_tools.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/tool_search.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/validation.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/web_tools.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tui_integration.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tui_widgets/__init__.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tui_widgets/widgets/__init__.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tui_widgets/widgets/progress.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tui_widgets/widgets/tool_display.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/undo_manager.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/utils/__init__.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/utils/error_handling.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/utils/fuzzy.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/__init__.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/a2a_connect.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/agent_store.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/agent_switcher.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/animation_manager.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/code_context.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/command_palette.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/connection_status.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/conversation_history.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/diff_indicator.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/enhanced_status_bar.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/enhanced_toast.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/file_browser.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/file_reference.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/harness_hub.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/leader_key.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/mode_switcher.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/model_picker.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/outcome_screen.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/permission_preview.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/prompt.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/provider_connect.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/pty_shell.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/resizable_sidebar.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/response_changes.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/response_display.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/rewind_overlay.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/rich_tool_display.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/sidebar_panels.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/slash_commands.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/slash_complete.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/split_view.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/status_bar.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/superqode_display.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/theme_picker.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/thinking.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/thinking_display.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/throbber.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/toast.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/uhp_connect.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/unified_output.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/workorders/__init__.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/workorders/cockpit.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/workorders/integration.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/workorders/models.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/workorders/runner.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/workorders/store.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/workorders/usage.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/workorders/worker.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/workspace/__init__.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/workspace/artifacts.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/workspace/change_summary.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/workspace/coordinator.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/workspace/diff_tracker.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/workspace/git_guard.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/workspace/git_snapshot.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/workspace/manager.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/workspace/snapshot.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/workspace/watcher.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode/workspace/worktree.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode.egg-info/SOURCES.txt +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode.egg-info/dependency_links.txt +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode.egg-info/entry_points.txt +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode.egg-info/requires.txt +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/src/superqode.egg-info/top_level.txt +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_030_candidate.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_a2a_bridge.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_a2a_conformance.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_a2a_connect.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_a2a_context.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_a2a_keys.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_a2a_limits.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_a2a_oauth.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_a2a_security.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_a2a_shortlist.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_a2a_trust.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_a2a_understand.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_acp_agent_dispatch.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_acp_client.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_acp_free_models.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_acp_parent_tool_linking.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_acp_permission_store.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_acp_registry.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_acp_render.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_acp_server.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_acp_session_store.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_acp_slash.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_adaptive_compaction.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_agent_importer.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_agent_install_commands.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_agent_loop_harness.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_agent_memory.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_agents_md_compat.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_agy_tui_commands.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_app_main_contract.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_apply_patch.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_auth.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_bash_spill.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_benchmarks.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_catalog_freshness.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_change_summary.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_channels.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_cli_commands.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_cli_connect.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_cli_contract.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_cli_reference_coverage.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_clickable_commands.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_command_safety.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_commands_runtime.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_compaction.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_config_loader.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_config_runtime.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_connect_harness_screen.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_connect_setup.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_connection_profiles.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_context_handles.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_context_probe.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_context_remaining.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_copilot_login_ux.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_copilot_tui_commands.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_create_skill_tool.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_deepagents_model_spec.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_deferred_tools.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_design_system_contrast.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_developer_workflow_docs.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_ds4_local_client.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_dsh_harness.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_dynamic_workflow_tool.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_edit_line_number_strip.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_env_introspect.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_execution_resolver.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_extensions.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_final_parity_wave.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_free_models.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_governance.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_grok_cli_auth.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_harness_agent_session.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_harness_backends.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_harness_bench.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_harness_bench_paths.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_harness_catalog.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_harness_connect_catalog.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_harness_drift.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_harness_eval_splits.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_harness_examples.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_harness_explain.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_harness_hooks.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_harness_hub_catalog.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_harness_hub_screen.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_harness_kernel.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_harness_mcp_server.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_harness_model_policy.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_harness_observability.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_harness_omni.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_harness_output.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_harness_permissions.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_harness_promotion.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_harness_protocol.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_harness_sandbox.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_harness_seesaw_dimensions.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_harness_self_improve.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_harness_spec.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_harness_store.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_harness_usage.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_harness_wizard.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_harness_workflow.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_headless.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_hf_fetch.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_hooks.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_install_script.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_integration_docs.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_kimi_k3_provider.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_kimi_k3_routes.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_linter_runner.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_litellm_gateway.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_live_acp_registry.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_live_models.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_local_airplane.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_local_build.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_local_code_index.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_local_labs.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_local_migrate.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_local_model_optimizations.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_local_packs.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_local_sandbox.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_local_search.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_local_servers.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_local_setup.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_local_smoke.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_local_stack.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_local_tool_capabilities.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_local_tool_support.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_login_api.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_loop_guard.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_managed_harness_backend.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_markdown_render.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_mcp.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_mcp_example_server.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_mcp_integration.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_mcp_live.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_mcp_oauth_generalized.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_mcp_tools_runtime.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_mcp_two_way.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_memory_recall.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_mlx_tools.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_model_profiles.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_model_specs.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_models_dev.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_monty_tool.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_navigation_history.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_network_policy.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_ollama_client.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_omnigent_agent_session_smoke.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_omnigent_importer.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_openai_session.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_output_spill.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_parallel_compare.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_peer_agents.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_plugin_hook_wiring.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_plugins.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_policies_and_turndiff.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_post_edit_verify.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_prime_agent_client.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_prime_agent_harness.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_prime_agent_provider.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_prime_command_surface.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_prime_tui_rpc.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_progressive_discovery.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_progressive_reveals.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_project_trust.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_prompt_stack.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_provider_catalog.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_provider_dynamic.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_provider_models.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_provider_recommendations.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_pure_mode_sessions.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_qm_deployment_layer.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_rate_limit_retry.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_read_tool_limits.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_reasoning_and_budget.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_recursive_eval_packs.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_release_metadata.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_rlm_code_integration.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_runtime_adk.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_runtime_antigravity_cli.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_runtime_antigravity_managed.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_runtime_antigravity_sdk.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_runtime_builtin.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_runtime_claude_agent_sdk.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_runtime_codex_sdk.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_runtime_copilot_sdk.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_runtime_devin_cli.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_runtime_dialog.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_runtime_openai_agents.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_runtime_openai_events.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_runtime_openai_hitl.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_runtime_openai_sandbox.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_runtime_protocol.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_runtime_pydanticai.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_sandbox_backends.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_sandbox_execution.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_search_roots.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_semantic_search.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_session_switchboard.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_shell_session.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_simple_login.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_simple_query_fastpath.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_skillopt.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_slash_runtime.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_spawn_harness_tool.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_status_bar_layout.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_steering_continue_reminders.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_streaming_tool_calls.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_subscription_billing_policy.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_subscription_login.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_subscription_login_consent.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_synthetic_gateways.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_tau_harness_adapter.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_terminal_output_limits.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_theme_contrast.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_theme_picker.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_theme_repaint.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_todo_tools.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_tool_args_repair.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_tool_batch_safety.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_tool_bridge.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_tool_bridge_openai.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_tool_call_repair.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_tool_output_pruning.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_tool_tracking.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_tools.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_tui_change_summary.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_tui_chat_mode.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_tui_diagnostics.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_tui_exit.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_tui_feedback.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_tui_launch_performance.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_tui_llamacpp_connect.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_tui_markdown_cleanup.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_tui_mlx_connect.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_tui_mounted.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_tui_onboarding.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_tui_smoke.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_tui_tool_display.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_uhp_backend.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_update_command.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_vendor_cli_runtime.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_version.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_view_image.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_web_server_auth.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_workorders.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_workspace.py +0 -0
- {superqode-2.2.4 → superqode-2.2.5}/tests/test_zai_provider.py +0 -0
|
@@ -7,6 +7,45 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [2.2.5] - 2026-09-13
|
|
11
|
+
|
|
12
|
+
SuperQode's UHP server adopts protocol `2026-09-12` and passes the UHP
|
|
13
|
+
conformance suite at class core, 40 of 40 checks with no skips. Every
|
|
14
|
+
capability it advertises it now implements, cancellation included.
|
|
15
|
+
|
|
16
|
+
### 🧩 Unified Harness Protocol
|
|
17
|
+
|
|
18
|
+
- **UHP `2026-09-12`.** The client targets it and the server serves it
|
|
19
|
+
alongside `2026-08-11`, from one code path, because the newer version is
|
|
20
|
+
additive. The server echoes the version the caller asked for; a caller who
|
|
21
|
+
names none gets the default, which is now `2026-09-12`.
|
|
22
|
+
- The client drops to `2026-08-11` by itself when a server answers
|
|
23
|
+
`unsupported_protocol_version`, so an older server still works.
|
|
24
|
+
- Discovery reports `plugins: false`. The chapter is new in `2026-09-12` and
|
|
25
|
+
belongs to class Full, and a capability a server does not implement is
|
|
26
|
+
reported false instead of omitted.
|
|
27
|
+
- **Six specification requirements the Core suite does not reach.** A response
|
|
28
|
+
now names the harness that served it when the request named none; a
|
|
29
|
+
`previous_response_id` the server no longer retains is `404 session_expired`
|
|
30
|
+
instead of a quiet new session; a model the harness cannot serve is
|
|
31
|
+
`422 model_unavailable` instead of being echoed back as the model that ran;
|
|
32
|
+
session ids carry the specified `hsess` prefix; a repeated `Idempotency-Key`
|
|
33
|
+
waits for the first run instead of returning its in-flight record; and
|
|
34
|
+
`timeout_seconds`, `max_step`, `max_output_tokens` and `background` are
|
|
35
|
+
honoured instead of being accepted and dropped. Work stopped at a budget
|
|
36
|
+
reports `incomplete`, never `completed`.
|
|
37
|
+
- **Cancellation stops the work.** `POST /v1/responses/{id}/cancel` and the
|
|
38
|
+
session equivalent now abort the running turn and wait for it to be over
|
|
39
|
+
before answering, so the response they return is already terminal. Both
|
|
40
|
+
previously marked the record and left the agent running, which on a BYOK
|
|
41
|
+
host meant a cancelled task kept spending the caller's key. A caller
|
|
42
|
+
blocked on the task it cancelled gets the cancelled response instead of a
|
|
43
|
+
dropped request.
|
|
44
|
+
- **Conformant at class core.** `serve uhp` passes the UHP conformance suite
|
|
45
|
+
40 of 40, no failures and no skips, measured against suite `2026.9.12`. The
|
|
46
|
+
report is in `docs/assets/`. The class named in the discovery
|
|
47
|
+
document is now one the suite backs.
|
|
48
|
+
|
|
10
49
|
## [2.2.4] - 2026-09-13
|
|
11
50
|
|
|
12
51
|
Hosting a UHP harness gets its own install extra, so `serve uhp` no longer
|
|
@@ -29,26 +68,20 @@ conformance suite against a local bind.
|
|
|
29
68
|
|
|
30
69
|
## [2.2.3] - 2026-09-13
|
|
31
70
|
|
|
32
|
-
|
|
33
|
-
Anyone who
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
protocol behaviour changed: the Core conformance result is the same 38/40.
|
|
71
|
+
Credential handling fixes for the UHP client and the BYOK server bind shipped
|
|
72
|
+
in 2.2.2. Anyone who used `connect uhp` on 2.2.2 should upgrade. No API
|
|
73
|
+
changed and no protocol behaviour changed: the Core conformance result is the
|
|
74
|
+
same 38/40.
|
|
37
75
|
|
|
38
76
|
### 🔐 UHP security
|
|
39
77
|
|
|
40
|
-
- The client sends `X-Provider-Api-Key` on
|
|
41
|
-
attached
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
-
|
|
46
|
-
|
|
47
|
-
for as long as it is in the process environment, which LiteLLM reads
|
|
48
|
-
credentials from. Concurrent turns previously overwrote each other's key.
|
|
49
|
-
- `Dockerfile.uhp` no longer passes `--api-key` on the command line. The bearer
|
|
50
|
-
came from the environment either way, and the argument published it in
|
|
51
|
-
`/proc/1/cmdline`, which the bound harness's shell tool can read.
|
|
78
|
+
- The client sends `X-Provider-Api-Key` on task submission only. Earlier
|
|
79
|
+
releases attached it more broadly than needed. It is also withheld from a
|
|
80
|
+
remote plaintext `http://` origin, with a warning.
|
|
81
|
+
- A caller's model key no longer races with another caller's on a bind serving
|
|
82
|
+
more than one at a time.
|
|
83
|
+
- `Dockerfile.uhp` takes the bearer from the environment instead of the
|
|
84
|
+
command line.
|
|
52
85
|
- On a remote bind each session gets its own directory under the working
|
|
53
86
|
directory, so callers cannot read each other's files or session transcripts.
|
|
54
87
|
A local bind still runs in the directory it was given.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: superqode
|
|
3
|
-
Version: 2.2.
|
|
3
|
+
Version: 2.2.5
|
|
4
4
|
Summary: The harness layer for coding agents
|
|
5
5
|
Author-email: Shashi Jagtap <info@super-agentic.ai>
|
|
6
6
|
Maintainer-email: Shashi Jagtap <info@super-agentic.ai>
|
|
@@ -476,15 +476,20 @@ Read the [A2A guide](docs/providers/a2a.md).
|
|
|
476
476
|
The same install that drives a remote UHP server can also expose a local
|
|
477
477
|
HarnessSpec so other UHP clients call SuperQode:
|
|
478
478
|
|
|
479
|
+
Serving needs the `uhp` extra (FastAPI and uvicorn). The client side needs
|
|
480
|
+
nothing extra.
|
|
481
|
+
|
|
479
482
|
```bash
|
|
483
|
+
uv tool install 'superqode[uhp]'
|
|
480
484
|
superqode serve uhp --spec harness.yaml --port 8787
|
|
481
485
|
superqode connect uhp --base-url http://127.0.0.1:8787
|
|
482
486
|
superqode harness run uhp --prompt "summarise this repository"
|
|
483
487
|
```
|
|
484
488
|
|
|
485
|
-
`serve uhp` binds one HarnessSpec and
|
|
486
|
-
|
|
487
|
-
|
|
489
|
+
`serve uhp` binds one HarnessSpec and is complementary to HarnessRouter, which
|
|
490
|
+
wraps third-party CLIs as a catalog. It passes the UHP conformance suite at
|
|
491
|
+
class core, 40 of 40 checks with no skips, and serves protocol `2026-09-12`
|
|
492
|
+
alongside `2026-08-11`.
|
|
488
493
|
|
|
489
494
|
The public hostname for that bind is [`uhp.superqode.dev`](https://uhp.superqode.dev/v1/uhp).
|
|
490
495
|
Anonymous callers get discovery and the static harness catalog (no model call).
|
|
@@ -322,15 +322,20 @@ Read the [A2A guide](docs/providers/a2a.md).
|
|
|
322
322
|
The same install that drives a remote UHP server can also expose a local
|
|
323
323
|
HarnessSpec so other UHP clients call SuperQode:
|
|
324
324
|
|
|
325
|
+
Serving needs the `uhp` extra (FastAPI and uvicorn). The client side needs
|
|
326
|
+
nothing extra.
|
|
327
|
+
|
|
325
328
|
```bash
|
|
329
|
+
uv tool install 'superqode[uhp]'
|
|
326
330
|
superqode serve uhp --spec harness.yaml --port 8787
|
|
327
331
|
superqode connect uhp --base-url http://127.0.0.1:8787
|
|
328
332
|
superqode harness run uhp --prompt "summarise this repository"
|
|
329
333
|
```
|
|
330
334
|
|
|
331
|
-
`serve uhp` binds one HarnessSpec and
|
|
332
|
-
|
|
333
|
-
|
|
335
|
+
`serve uhp` binds one HarnessSpec and is complementary to HarnessRouter, which
|
|
336
|
+
wraps third-party CLIs as a catalog. It passes the UHP conformance suite at
|
|
337
|
+
class core, 40 of 40 checks with no skips, and serves protocol `2026-09-12`
|
|
338
|
+
alongside `2026-08-11`.
|
|
334
339
|
|
|
335
340
|
The public hostname for that bind is [`uhp.superqode.dev`](https://uhp.superqode.dev/v1/uhp).
|
|
336
341
|
Anonymous callers get discovery and the static harness catalog (no model call).
|
|
@@ -167,11 +167,11 @@ def _render(
|
|
|
167
167
|
if settings.max_output_tokens:
|
|
168
168
|
click.echo(f"Token cap: {settings.max_output_tokens} per task")
|
|
169
169
|
if result["discovered"] and not result["speaks_target_version"]:
|
|
170
|
-
from superqode.harness.uhp_client import
|
|
170
|
+
from superqode.harness.uhp_client import UHP_SUPPORTED_VERSIONS
|
|
171
171
|
|
|
172
|
+
spoken = " or ".join(UHP_SUPPORTED_VERSIONS)
|
|
172
173
|
click.echo(
|
|
173
|
-
f"\n! This server
|
|
174
|
-
"which is the version SuperQode speaks."
|
|
174
|
+
f"\n! This server lists no version SuperQode speaks ({spoken}). Tasks will be refused."
|
|
175
175
|
)
|
|
176
176
|
|
|
177
177
|
if not harnesses:
|
|
@@ -335,6 +335,7 @@ def _create_runtime_for_request(
|
|
|
335
335
|
plan_mode=profile.name == "plan",
|
|
336
336
|
tools_enabled=request.spec.flavor != HarnessFlavor.NO_TOOL,
|
|
337
337
|
max_iterations=_max_iterations_for_request(request, model_policy),
|
|
338
|
+
max_tokens=_optional_positive_int(request.metadata.get("agent_max_tokens")),
|
|
338
339
|
temperature=model_policy.temperature,
|
|
339
340
|
reasoning_effort=model_policy.reasoning,
|
|
340
341
|
enable_session_storage=True,
|
|
@@ -510,3 +511,12 @@ def _max_iterations_for_request(
|
|
|
510
511
|
if request.metadata.get("agent_max_iterations") is not None:
|
|
511
512
|
return int(request.metadata["agent_max_iterations"])
|
|
512
513
|
return model_policy.max_iterations
|
|
514
|
+
|
|
515
|
+
|
|
516
|
+
def _optional_positive_int(value: Any) -> int | None:
|
|
517
|
+
"""A per-run token ceiling, or None when there is no usable one."""
|
|
518
|
+
try:
|
|
519
|
+
parsed = int(value)
|
|
520
|
+
except (TypeError, ValueError):
|
|
521
|
+
return None
|
|
522
|
+
return parsed if parsed > 0 else None
|
|
@@ -27,7 +27,11 @@ import httpx
|
|
|
27
27
|
|
|
28
28
|
logger = logging.getLogger(__name__)
|
|
29
29
|
|
|
30
|
-
UHP_PROTOCOL_VERSION = "2026-
|
|
30
|
+
UHP_PROTOCOL_VERSION = "2026-09-12"
|
|
31
|
+
|
|
32
|
+
#: Versions this client can read, newest first. 2026-09-12 is additive to
|
|
33
|
+
#: 2026-08-11, so one client parses both; only the header differs.
|
|
34
|
+
UHP_SUPPORTED_VERSIONS: tuple[str, ...] = ("2026-09-12", "2026-08-11")
|
|
31
35
|
|
|
32
36
|
#: Sent on every request so a server does not silently answer at another
|
|
33
37
|
#: version than the one this client was written against.
|
|
@@ -197,10 +201,18 @@ class UHPDiscovery:
|
|
|
197
201
|
|
|
198
202
|
@property
|
|
199
203
|
def speaks_target_version(self) -> bool:
|
|
200
|
-
"""Whether
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
+
"""Whether this client and the server have a version in common."""
|
|
205
|
+
offered = set(self.versions) | ({self.default_version} if self.default_version else set())
|
|
206
|
+
return bool(offered & set(UHP_SUPPORTED_VERSIONS))
|
|
207
|
+
|
|
208
|
+
@property
|
|
209
|
+
def best_common_version(self) -> str:
|
|
210
|
+
"""The newest version both sides speak, or empty when there is none."""
|
|
211
|
+
offered = set(self.versions) | ({self.default_version} if self.default_version else set())
|
|
212
|
+
for version in UHP_SUPPORTED_VERSIONS:
|
|
213
|
+
if version in offered:
|
|
214
|
+
return version
|
|
215
|
+
return ""
|
|
204
216
|
|
|
205
217
|
def supports(self, capability: str) -> bool:
|
|
206
218
|
"""Whether the server declared one named capability."""
|
|
@@ -599,17 +611,49 @@ class UHPClient:
|
|
|
599
611
|
headers: Mapping[str, str] | None = None,
|
|
600
612
|
) -> Any:
|
|
601
613
|
client = self._ensure_client()
|
|
614
|
+
for attempt in (0, 1):
|
|
615
|
+
try:
|
|
616
|
+
response = await client.request(
|
|
617
|
+
method,
|
|
618
|
+
self._url(path),
|
|
619
|
+
json=dict(json_body) if json_body is not None else None,
|
|
620
|
+
params=dict(params) if params else None,
|
|
621
|
+
headers={**self._headers, **dict(headers or {})},
|
|
622
|
+
)
|
|
623
|
+
except httpx.HTTPError as exc:
|
|
624
|
+
raise UHPServerError(f"UHP request to {path} failed: {exc}") from exc
|
|
625
|
+
if attempt == 0 and self._downgrade_version(response):
|
|
626
|
+
continue
|
|
627
|
+
return self._decode(response)
|
|
628
|
+
return None
|
|
629
|
+
|
|
630
|
+
def _downgrade_version(self, response: httpx.Response) -> bool:
|
|
631
|
+
"""Drop to an older version the server does list, once.
|
|
632
|
+
|
|
633
|
+
A server that does not serve the newest version answers
|
|
634
|
+
`unsupported_protocol_version` with the ones it does, so a client
|
|
635
|
+
written against the newer additive version can still talk to it.
|
|
636
|
+
"""
|
|
637
|
+
if response.status_code != 400:
|
|
638
|
+
return False
|
|
602
639
|
try:
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
640
|
+
payload = response.json()
|
|
641
|
+
except ValueError:
|
|
642
|
+
return False
|
|
643
|
+
error = payload.get("error") if isinstance(payload, Mapping) else None
|
|
644
|
+
if not isinstance(error, Mapping) or error.get("code") != "unsupported_protocol_version":
|
|
645
|
+
return False
|
|
646
|
+
detail = error.get("detail")
|
|
647
|
+
offered = detail.get("supported") if isinstance(detail, Mapping) else None
|
|
648
|
+
if not isinstance(offered, Sequence):
|
|
649
|
+
return False
|
|
650
|
+
current = self._headers.get(VERSION_HEADER)
|
|
651
|
+
for version in UHP_SUPPORTED_VERSIONS:
|
|
652
|
+
if version in offered and version != current:
|
|
653
|
+
logger.info("UHP server does not serve %s; retrying at %s", current, version)
|
|
654
|
+
self._headers[VERSION_HEADER] = version
|
|
655
|
+
return True
|
|
656
|
+
return False
|
|
613
657
|
|
|
614
658
|
@staticmethod
|
|
615
659
|
def _decode(response: httpx.Response) -> Any:
|
|
@@ -33,12 +33,17 @@ except Exception: # pragma: no cover - optional at import time
|
|
|
33
33
|
from superqode.harness.uhp_client import (
|
|
34
34
|
PROVIDER_KEY_HEADER,
|
|
35
35
|
UHP_PROTOCOL_VERSION,
|
|
36
|
+
UHP_SUPPORTED_VERSIONS,
|
|
36
37
|
VERSION_HEADER,
|
|
37
38
|
)
|
|
38
39
|
|
|
39
|
-
#:
|
|
40
|
+
#: Default protocol version: what a caller gets when it names none.
|
|
40
41
|
SUPPORTED_VERSION = UHP_PROTOCOL_VERSION
|
|
41
42
|
|
|
43
|
+
#: Every version served, newest first. 2026-09-12 is additive to 2026-08-11,
|
|
44
|
+
#: so both answer from one code path and only the echoed header differs.
|
|
45
|
+
SUPPORTED_VERSIONS: tuple[str, ...] = UHP_SUPPORTED_VERSIONS
|
|
46
|
+
|
|
42
47
|
#: Discovery document object type.
|
|
43
48
|
DISCOVERY_OBJECT = "uhp.discovery"
|
|
44
49
|
|
|
@@ -333,13 +338,15 @@ def _response_payload(
|
|
|
333
338
|
created_at: int,
|
|
334
339
|
previous_response_id: str | None,
|
|
335
340
|
session_id: str,
|
|
341
|
+
harness_id: str,
|
|
336
342
|
store: bool = True,
|
|
337
343
|
usage: Mapping[str, int] | None = None,
|
|
338
344
|
error: Mapping[str, Any] | None = None,
|
|
339
345
|
ignored_fields: Sequence[str] = (),
|
|
340
346
|
extra_metadata: Mapping[str, Any] | None = None,
|
|
341
347
|
) -> dict[str, Any]:
|
|
342
|
-
|
|
348
|
+
# tasks §1.2: a request that names no harness MUST be told which one ran.
|
|
349
|
+
metadata: dict[str, Any] = {"session_id": session_id, "harness_id": harness_id}
|
|
343
350
|
if ignored_fields:
|
|
344
351
|
metadata["ignored_fields"] = list(ignored_fields)
|
|
345
352
|
if extra_metadata:
|
|
@@ -406,7 +413,7 @@ class UHPServer:
|
|
|
406
413
|
return {
|
|
407
414
|
"object": DISCOVERY_OBJECT,
|
|
408
415
|
"protocol": "uhp",
|
|
409
|
-
"versions":
|
|
416
|
+
"versions": list(SUPPORTED_VERSIONS),
|
|
410
417
|
"default_version": SUPPORTED_VERSION,
|
|
411
418
|
"conformance_class": self.config.conformance_class,
|
|
412
419
|
"capabilities": {
|
|
@@ -419,6 +426,11 @@ class UHPServer:
|
|
|
419
426
|
"harness_management": False,
|
|
420
427
|
"session_sharing": False,
|
|
421
428
|
"idempotency": True,
|
|
429
|
+
# 2026-09-12 adds plugins. Reported false, not omitted: a
|
|
430
|
+
# client must be able to tell "not supported" from "older
|
|
431
|
+
# than this field". `plugin_schemas` belongs to a server that
|
|
432
|
+
# answers true, so it stays off the document.
|
|
433
|
+
"plugins": False,
|
|
422
434
|
},
|
|
423
435
|
"implementation": {
|
|
424
436
|
"name": self.config.implementation_name,
|
|
@@ -441,7 +453,8 @@ class UHPServer:
|
|
|
441
453
|
except ModuleNotFoundError as exc: # pragma: no cover - install-shape error
|
|
442
454
|
raise MissingUHPServerDependency(
|
|
443
455
|
"Serving UHP needs FastAPI and uvicorn, which are not installed.\n"
|
|
444
|
-
"
|
|
456
|
+
" uv tool install 'superqode[uhp]' (if you installed the CLI as a tool)\n"
|
|
457
|
+
" uv pip install 'superqode[uhp]' (inside a virtual environment)\n"
|
|
445
458
|
"The UHP client works without them."
|
|
446
459
|
) from exc
|
|
447
460
|
|
|
@@ -469,10 +482,11 @@ class UHPServer:
|
|
|
469
482
|
return JSONResponse(
|
|
470
483
|
status_code=401,
|
|
471
484
|
content=auth_error,
|
|
472
|
-
headers={VERSION_HEADER:
|
|
485
|
+
headers={VERSION_HEADER: negotiated},
|
|
473
486
|
)
|
|
474
487
|
response = await call_next(request)
|
|
475
|
-
|
|
488
|
+
# The version actually served, which is the one the caller asked for.
|
|
489
|
+
response.headers[VERSION_HEADER] = negotiated
|
|
476
490
|
return response
|
|
477
491
|
|
|
478
492
|
@app.get("/v1/uhp")
|
|
@@ -590,7 +604,12 @@ class UHPServer:
|
|
|
590
604
|
media_type="text/event-stream",
|
|
591
605
|
headers={VERSION_HEADER: SUPPORTED_VERSION},
|
|
592
606
|
)
|
|
593
|
-
|
|
607
|
+
# tasks §6: a repeated key waits for the first run and
|
|
608
|
+
# returns its result. Handing back an in-flight record
|
|
609
|
+
# would make a retry look like a finished, empty task.
|
|
610
|
+
if not body.get("background"):
|
|
611
|
+
await server._await_response(existing_id)
|
|
612
|
+
return server._responses.get(existing_id, existing)
|
|
594
613
|
|
|
595
614
|
harness_error = server._validate_harness_selection(body)
|
|
596
615
|
if harness_error is not None:
|
|
@@ -628,8 +647,11 @@ class UHPServer:
|
|
|
628
647
|
media_type="text/event-stream",
|
|
629
648
|
headers={VERSION_HEADER: SUPPORTED_VERSION},
|
|
630
649
|
)
|
|
650
|
+
if body.get("background"):
|
|
651
|
+
# Accepted and running; the caller follows it by id.
|
|
652
|
+
return record
|
|
631
653
|
await server._await_response(record["id"])
|
|
632
|
-
return server._responses
|
|
654
|
+
return server._responses.get(record["id"], record)
|
|
633
655
|
|
|
634
656
|
@app.get("/v1/responses/{response_id}")
|
|
635
657
|
async def get_response(response_id: str) -> Any:
|
|
@@ -676,12 +698,17 @@ class UHPServer:
|
|
|
676
698
|
param="response_id",
|
|
677
699
|
),
|
|
678
700
|
)
|
|
679
|
-
|
|
680
|
-
if
|
|
681
|
-
|
|
701
|
+
# Terminal already: cancel changes nothing and says so.
|
|
702
|
+
if record.get("status") != "in_progress":
|
|
703
|
+
return record
|
|
704
|
+
await server._stop(response_id)
|
|
705
|
+
record = server._responses.get(response_id, record)
|
|
706
|
+
# _execute owns the terminal status. It only stays in_progress if
|
|
707
|
+
# the run was never started, so name it cancelled here.
|
|
682
708
|
if record.get("status") == "in_progress":
|
|
683
709
|
record["status"] = "cancelled"
|
|
684
710
|
record["error"] = None
|
|
711
|
+
if record.get("status") == "cancelled":
|
|
685
712
|
record["incomplete_details"] = {"reason": "cancelled"}
|
|
686
713
|
return record
|
|
687
714
|
|
|
@@ -715,13 +742,16 @@ class UHPServer:
|
|
|
715
742
|
param="session_id",
|
|
716
743
|
),
|
|
717
744
|
)
|
|
718
|
-
for response_id in session.get("response_ids", []):
|
|
719
|
-
event = server._cancel_events.get(response_id)
|
|
720
|
-
if event is not None:
|
|
721
|
-
event.set()
|
|
745
|
+
for response_id in list(session.get("response_ids", [])):
|
|
722
746
|
record = server._responses.get(response_id)
|
|
723
|
-
if record is
|
|
747
|
+
if record is None or record.get("status") != "in_progress":
|
|
748
|
+
continue
|
|
749
|
+
await server._stop(response_id)
|
|
750
|
+
record = server._responses.get(response_id, record)
|
|
751
|
+
if record.get("status") == "in_progress":
|
|
724
752
|
record["status"] = "cancelled"
|
|
753
|
+
if record.get("status") == "cancelled":
|
|
754
|
+
record["incomplete_details"] = {"reason": "cancelled"}
|
|
725
755
|
return {"id": session_id, "status": "cancelled"}
|
|
726
756
|
|
|
727
757
|
@app.get("/health")
|
|
@@ -745,18 +775,19 @@ class UHPServer:
|
|
|
745
775
|
return "/" not in rest or rest.endswith("/models")
|
|
746
776
|
return False
|
|
747
777
|
|
|
748
|
-
def _negotiate_version(self, requested: str | None) -> dict[str, Any]
|
|
778
|
+
def _negotiate_version(self, requested: str | None) -> str | dict[str, Any]:
|
|
779
|
+
"""The version to answer at, or the error envelope refusing to."""
|
|
749
780
|
if not requested or not requested.strip():
|
|
750
|
-
return
|
|
781
|
+
return SUPPORTED_VERSION
|
|
751
782
|
version = requested.strip()
|
|
752
|
-
if version
|
|
753
|
-
return
|
|
783
|
+
if version in SUPPORTED_VERSIONS:
|
|
784
|
+
return version
|
|
754
785
|
return _error_envelope(
|
|
755
786
|
error_type="invalid_request_error",
|
|
756
787
|
code="unsupported_protocol_version",
|
|
757
788
|
message=f"Unsupported UHP-Version '{version}'.",
|
|
758
789
|
param="UHP-Version",
|
|
759
|
-
detail={"supported":
|
|
790
|
+
detail={"supported": list(SUPPORTED_VERSIONS)},
|
|
760
791
|
)
|
|
761
792
|
|
|
762
793
|
def _check_auth(self, authorization: str | None) -> dict[str, Any] | None:
|
|
@@ -831,9 +862,21 @@ class UHPServer:
|
|
|
831
862
|
if previous_response_id:
|
|
832
863
|
prior = self._responses.get(previous_response_id)
|
|
833
864
|
if prior is None:
|
|
834
|
-
#
|
|
835
|
-
#
|
|
836
|
-
|
|
865
|
+
# lifecycle §4: an expired session is a 404 a client can act
|
|
866
|
+
# on. Starting a fresh one quietly loses the conversation it
|
|
867
|
+
# asked to continue, and says nothing.
|
|
868
|
+
return (
|
|
869
|
+
404,
|
|
870
|
+
_error_envelope(
|
|
871
|
+
error_type="invalid_request_error",
|
|
872
|
+
code="session_expired",
|
|
873
|
+
message=(
|
|
874
|
+
f"No response '{previous_response_id}' is retained, so the session "
|
|
875
|
+
"it belongs to cannot be continued."
|
|
876
|
+
),
|
|
877
|
+
param="previous_response_id",
|
|
878
|
+
),
|
|
879
|
+
)
|
|
837
880
|
else:
|
|
838
881
|
meta = prior.get("metadata") if isinstance(prior.get("metadata"), Mapping) else {}
|
|
839
882
|
session_id = str(meta.get("session_id") or "") or None
|
|
@@ -855,7 +898,8 @@ class UHPServer:
|
|
|
855
898
|
)
|
|
856
899
|
|
|
857
900
|
if not session_id:
|
|
858
|
-
|
|
901
|
+
# architecture §3 fixes the session prefix as `hsess`.
|
|
902
|
+
session_id = f"hsess{uuid.uuid4().hex[:16]}"
|
|
859
903
|
|
|
860
904
|
response_id = f"resp_{uuid.uuid4().hex}"
|
|
861
905
|
created_at = int(time.time())
|
|
@@ -865,10 +909,22 @@ class UHPServer:
|
|
|
865
909
|
if body.get("include") is not None:
|
|
866
910
|
ignored.append("include")
|
|
867
911
|
|
|
912
|
+
served = self.config.default_model or self.config.model or "server-default"
|
|
868
913
|
requested_model = body.get("model")
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
914
|
+
if requested_model and str(requested_model) != served:
|
|
915
|
+
# tasks §1.3: refuse, or substitute and say so. Never report a
|
|
916
|
+
# model that did not run. This bind serves exactly what it lists.
|
|
917
|
+
return (
|
|
918
|
+
422,
|
|
919
|
+
_error_envelope(
|
|
920
|
+
error_type="invalid_request_error",
|
|
921
|
+
code="model_unavailable",
|
|
922
|
+
message=f"This harness cannot serve model '{requested_model}'.",
|
|
923
|
+
param="model",
|
|
924
|
+
detail={"available": [served], "requested": str(requested_model)},
|
|
925
|
+
),
|
|
926
|
+
)
|
|
927
|
+
model = str(requested_model or served)
|
|
872
928
|
|
|
873
929
|
record = _response_payload(
|
|
874
930
|
response_id=response_id,
|
|
@@ -878,6 +934,7 @@ class UHPServer:
|
|
|
878
934
|
created_at=created_at,
|
|
879
935
|
previous_response_id=previous_response_id,
|
|
880
936
|
session_id=session_id,
|
|
937
|
+
harness_id=self.config.harness_id,
|
|
881
938
|
store=bool(body.get("store", True)),
|
|
882
939
|
ignored_fields=ignored,
|
|
883
940
|
)
|
|
@@ -930,9 +987,36 @@ class UHPServer:
|
|
|
930
987
|
return []
|
|
931
988
|
|
|
932
989
|
async def _await_response(self, response_id: str) -> None:
|
|
990
|
+
"""Wait for one run to settle, cancellation included."""
|
|
933
991
|
task = self._tasks.get(response_id)
|
|
934
|
-
if task is
|
|
992
|
+
if task is None:
|
|
993
|
+
return
|
|
994
|
+
try:
|
|
935
995
|
await task
|
|
996
|
+
except asyncio.CancelledError:
|
|
997
|
+
# The run was cancelled, not this caller: the record is terminal
|
|
998
|
+
# and the caller still wants it. Anything else is our own
|
|
999
|
+
# cancellation and has to keep travelling.
|
|
1000
|
+
if not task.cancelled():
|
|
1001
|
+
raise
|
|
1002
|
+
|
|
1003
|
+
async def _stop(self, response_id: str) -> None:
|
|
1004
|
+
"""Stop one running task and wait for it to actually be over."""
|
|
1005
|
+
event = self._cancel_events.get(response_id)
|
|
1006
|
+
if event is not None:
|
|
1007
|
+
event.set()
|
|
1008
|
+
task = self._tasks.get(response_id)
|
|
1009
|
+
if task is None or task.done():
|
|
1010
|
+
return
|
|
1011
|
+
task.cancel()
|
|
1012
|
+
try:
|
|
1013
|
+
await task
|
|
1014
|
+
except asyncio.CancelledError:
|
|
1015
|
+
if not task.cancelled():
|
|
1016
|
+
raise
|
|
1017
|
+
except Exception:
|
|
1018
|
+
# The run raised on its way out. The record already says so.
|
|
1019
|
+
pass
|
|
936
1020
|
|
|
937
1021
|
async def _execute(self, response_id: str, request: UHPRunRequest) -> None:
|
|
938
1022
|
record = self._responses[response_id]
|
|
@@ -940,7 +1024,22 @@ class UHPServer:
|
|
|
940
1024
|
if request.cancel_event and request.cancel_event.is_set():
|
|
941
1025
|
record["status"] = "cancelled"
|
|
942
1026
|
return
|
|
943
|
-
|
|
1027
|
+
if request.timeout_seconds:
|
|
1028
|
+
# tasks §1.1: stop at the budget and report incomplete. Work
|
|
1029
|
+
# truncated by a budget is never `completed`.
|
|
1030
|
+
try:
|
|
1031
|
+
result = await asyncio.wait_for(
|
|
1032
|
+
self._runner(request), timeout=float(request.timeout_seconds)
|
|
1033
|
+
)
|
|
1034
|
+
except TimeoutError:
|
|
1035
|
+
if request.cancel_event is not None:
|
|
1036
|
+
request.cancel_event.set()
|
|
1037
|
+
record["status"] = "incomplete"
|
|
1038
|
+
record["incomplete_details"] = {"reason": "timeout"}
|
|
1039
|
+
record["error"] = None
|
|
1040
|
+
return
|
|
1041
|
+
else:
|
|
1042
|
+
result = await self._runner(request)
|
|
944
1043
|
if request.cancel_event and request.cancel_event.is_set():
|
|
945
1044
|
record["status"] = "cancelled"
|
|
946
1045
|
record["error"] = None
|
|
@@ -1118,6 +1217,11 @@ class UHPServer:
|
|
|
1118
1217
|
run_metadata = {
|
|
1119
1218
|
key: value for key, value in dict(request.metadata).items() if key != "provider_api_key"
|
|
1120
1219
|
}
|
|
1220
|
+
# The request's budgets, in the keys the harness runtime reads.
|
|
1221
|
+
if request.max_step:
|
|
1222
|
+
run_metadata["agent_max_iterations"] = int(request.max_step)
|
|
1223
|
+
if request.max_output_tokens:
|
|
1224
|
+
run_metadata["agent_max_tokens"] = int(request.max_output_tokens)
|
|
1121
1225
|
token = str(request.metadata.get("provider_api_key") or "")
|
|
1122
1226
|
try:
|
|
1123
1227
|
async with _caller_provider_key(token, _provider_key_envs(provider)):
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: superqode
|
|
3
|
-
Version: 2.2.
|
|
3
|
+
Version: 2.2.5
|
|
4
4
|
Summary: The harness layer for coding agents
|
|
5
5
|
Author-email: Shashi Jagtap <info@super-agentic.ai>
|
|
6
6
|
Maintainer-email: Shashi Jagtap <info@super-agentic.ai>
|
|
@@ -476,15 +476,20 @@ Read the [A2A guide](docs/providers/a2a.md).
|
|
|
476
476
|
The same install that drives a remote UHP server can also expose a local
|
|
477
477
|
HarnessSpec so other UHP clients call SuperQode:
|
|
478
478
|
|
|
479
|
+
Serving needs the `uhp` extra (FastAPI and uvicorn). The client side needs
|
|
480
|
+
nothing extra.
|
|
481
|
+
|
|
479
482
|
```bash
|
|
483
|
+
uv tool install 'superqode[uhp]'
|
|
480
484
|
superqode serve uhp --spec harness.yaml --port 8787
|
|
481
485
|
superqode connect uhp --base-url http://127.0.0.1:8787
|
|
482
486
|
superqode harness run uhp --prompt "summarise this repository"
|
|
483
487
|
```
|
|
484
488
|
|
|
485
|
-
`serve uhp` binds one HarnessSpec and
|
|
486
|
-
|
|
487
|
-
|
|
489
|
+
`serve uhp` binds one HarnessSpec and is complementary to HarnessRouter, which
|
|
490
|
+
wraps third-party CLIs as a catalog. It passes the UHP conformance suite at
|
|
491
|
+
class core, 40 of 40 checks with no skips, and serves protocol `2026-09-12`
|
|
492
|
+
alongside `2026-08-11`.
|
|
488
493
|
|
|
489
494
|
The public hostname for that bind is [`uhp.superqode.dev`](https://uhp.superqode.dev/v1/uhp).
|
|
490
495
|
Anonymous callers get discovery and the static harness catalog (no model call).
|