superqode 2.2.5__tar.gz → 2.3.0__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.5 → superqode-2.3.0}/CHANGELOG.md +24 -0
- {superqode-2.2.5 → superqode-2.3.0}/PKG-INFO +1 -1
- {superqode-2.2.5 → superqode-2.3.0}/pyproject.toml +1 -1
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/__init__.py +1 -1
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/uhp_client.py +10 -2
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/uhp_server.py +154 -7
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode.egg-info/PKG-INFO +1 -1
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_uhp_client.py +33 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_uhp_server.py +114 -0
- {superqode-2.2.5 → superqode-2.3.0}/LICENSE +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/MANIFEST.in +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/NOTICE +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/README.md +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/examples/README.md +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/examples/a2a/README.md +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/examples/a2a/smoke_client.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/examples/bench/dspy-comprehension.manifest.yaml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/examples/bench/dspy-comprehension.yaml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/examples/bench/spec-core.yaml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/examples/bench/spec-deepagents.yaml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/examples/bench/spec-prime-agent.yaml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/examples/byok-acp-team.yaml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/examples/codex_sdk_quickstart.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/examples/evals/omni-release.yaml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/examples/evals/omni-tiny.yaml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/examples/extensions/README.md +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/examples/extensions/manifest-guard/context.md +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/examples/extensions/manifest-guard/hooks.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/examples/extensions/manifest-guard/tools.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/examples/extensions/packages/README.md +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/examples/extensions/packages/broken-extension/src/superqode_example_broken/__init__.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/examples/extensions/packages/policy-extension/src/superqode_example_policy/__init__.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/examples/extensions/packages/skill-extension/src/superqode_example_skill/SKILL.md +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/examples/extensions/packages/skill-extension/src/superqode_example_skill/__init__.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/examples/extensions/packages/tool-extension/src/superqode_example_tool/__init__.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/examples/extensions/packages/tool-extension-v2/src/superqode_example_tool/__init__.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/examples/extensions/python-package/src/superqode_example_extension/__init__.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/examples/harness-packages/README.md +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/examples/harness-packages/hello-harness/src/superqode_hello_harness/__init__.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/examples/harnesses/coding.yaml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/examples/harnesses/deepagents.yaml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/examples/harnesses/deepseek-harness.yaml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/examples/harnesses/ds4.yaml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/examples/harnesses/gemma4.yaml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/examples/harnesses/google-adk.yaml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/examples/harnesses/local-recursive-dynamic.yaml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/examples/harnesses/mcp-docs.yaml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/examples/harnesses/no-tool.yaml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/examples/harnesses/omni-tiny-local.yaml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/examples/harnesses/omnigent-multi-agent.yaml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/examples/harnesses/openai-agents.yaml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/examples/harnesses/prime-agent.yaml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/examples/harnesses/pydanticai.yaml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/examples/harnesses/rlm-code-lid.yaml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/examples/local-models-team.yaml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/examples/mcp/local_docs_server.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/examples/omnigent-multi-agent.agent.yaml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/examples/qm-deployment-layer/README.md +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/examples/qm-deployment-layer/sandbox/skills/superqode-harness/SKILL.md +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/examples/rlm-demo/INCIDENT.md +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/examples/rlm-demo/README.md +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/examples/rlm-demo/RUNBOOK.md +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/examples/rlm-demo/deploy_audit/__init__.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/examples/rlm-demo/deploy_audit/parser.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/examples/rlm-demo/deploy_audit/report.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/examples/rlm-demo/rlm-docker.yaml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/examples/rlm-demo/rlm-monty.yaml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/examples/rlm-demo/tests/test_report.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/examples/simple-team.yaml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/scripts/check_release_metadata.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/setup.cfg +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/a2a/__init__.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/a2a/client.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/a2a/conformance.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/a2a/connection.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/a2a/context.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/a2a/inspect.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/a2a/keys.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/a2a/limits.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/a2a/oauth.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/a2a/presets.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/a2a/registry.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/a2a/reply.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/a2a/security.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/a2a/server.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/a2a/shortlist.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/a2a/skills.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/a2a/tools.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/a2a/trust.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/a2a/types.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/a2a/understand.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/a2a/workflows.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/acp/__init__.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/acp/client.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/acp/doctor.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/acp/permission_screen.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/acp/permission_store.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/acp/render.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/acp/server.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/acp/session_store.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/acp/slash.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/acp/tool_call_context.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/acp/types.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/acp_discovery.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agent/__init__.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agent/auto_memory.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agent/command_safety.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agent/compaction.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agent/context_manager.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agent/edit_strategies.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agent/exec_policy.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agent/hooks.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agent/loop.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agent/loop_guard.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agent/loop_policy.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agent/network_policy.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agent/output_handler.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agent/parallel_compare.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agent/peer_agents.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agent/plan_mode.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agent/reminders.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agent/rubric.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agent/session_manager.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agent/structured_output.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agent/summarization.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agent/system_prompts.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agent/terminal_output_limits.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agent/text_tool_calls.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agent/tool_args.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agent/tool_tracking.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agent/utility_model.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agent_output.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agent_stream.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agents/__init__.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agents/acp_registry.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agents/client.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agents/data/agentpool.phil65.github.io.toml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agents/data/ampcode.com.toml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agents/data/augmentcode.com.toml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agents/data/autodev.github.io.toml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agents/data/blackbox.ai.toml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agents/data/bub.dev.toml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agents/data/cagent.dev.toml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agents/data/claude.com.toml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agents/data/cline.bot.toml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agents/data/codeassistant.dev.toml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agents/data/codebuddy.tencent.com.toml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agents/data/codex.openai.com.toml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agents/data/copilot.github.com.toml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agents/data/cortex.snowflake.com.toml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agents/data/crow-ai.dev.toml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agents/data/cursor.com.toml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agents/data/deepagents-code.langchain.com.toml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agents/data/deepagents.langchain.com.toml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agents/data/devin.ai.toml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agents/data/dirac.run.toml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agents/data/factory.ai.toml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agents/data/fastagent.ai.toml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agents/data/fount.dev.toml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agents/data/fx.sh.toml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agents/data/geminicli.com.toml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agents/data/glm.z.ai.toml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agents/data/goose.block.xyz.toml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agents/data/harnlang.com.toml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agents/data/hermes-agent.nousresearch.com.toml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agents/data/junie.jetbrains.com.toml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agents/data/kilo.ai.toml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agents/data/kimi.moonshot.cn.toml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agents/data/kiro.dev.toml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agents/data/llmlingagent.dev.toml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agents/data/minioncode.dev.toml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agents/data/mistral-vibe.mistral.ai.toml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agents/data/openclaw.ai.toml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agents/data/opencode.ai.toml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agents/data/openhands.dev.toml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agents/data/pi.dev.toml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agents/data/poolside.ai.toml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agents/data/primeintellect.ai.toml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agents/data/qoder.com.toml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agents/data/qwenlm.github.io.toml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agents/data/sigit.dev.toml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agents/data/stakpak.dev.toml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agents/data/stdiobus.dev.toml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agents/data/vtcode.dev.toml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agents/data/x.ai.toml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agents/discovery.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agents/free_models.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agents/install_commands.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agents/messaging.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agents/official_acp.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agents/persona.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agents/registry.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agents/schema.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/agents/unified.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app/__init__.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app/async_utils.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app/capabilities.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app/constants.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app/css.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app/harness_picker.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app/inputs.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app/mixins/__init__.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app/mixins/actions_misc.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app/mixins/agent_run.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app/mixins/build_harness.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app/mixins/clickable_commands.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app/mixins/codex.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app/mixins/commands_impl.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app/mixins/completion.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app/mixins/connect.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app/mixins/dialogs.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app/mixins/events.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app/mixins/explore.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app/mixins/factory.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app/mixins/feedback.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app/mixins/formatting.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app/mixins/harness_hub.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app/mixins/helper_clipboard.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app/mixins/helper_completion_helpers.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app/mixins/helper_diff_review.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app/mixins/helper_exit_lifecycle.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app/mixins/helper_file_view.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app/mixins/helper_interaction_mode.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app/mixins/helper_mcp_attach.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app/mixins/helper_message_queue.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app/mixins/helper_permissions.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app/mixins/helper_recipes_skills.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app/mixins/helper_share.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app/mixins/helper_startup.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app/mixins/helper_todos_plan.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app/mixins/helper_vim.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app/mixins/helper_wizard.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app/mixins/helpers.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app/mixins/huggingface.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app/mixins/local_models.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app/mixins/mcp.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app/mixins/model_catalog.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app/mixins/pickers.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app/mixins/pipy_commands.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app/mixins/rlm_commands.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app/mixins/sidebar.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app/mixins/slash_commands.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app/mixins/switchboard.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app/mixins/tour.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app/models.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app/navigation.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app/outcomes.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app/progress.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app/prompt_stack.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app/recipes.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app/session_state.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app/suggester.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app/theme_bridge.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app/welcome.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app/widgets.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app_enhanced.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/app_main.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/approval.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/atomic.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/auth/__init__.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/benchmarks.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/channels/__init__.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/channels/config.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/channels/discord.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/channels/service.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/channels/slack.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/channels/telegram.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/claude.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/codex.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/commands/__init__.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/commands/a2a.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/commands/a2a_connect.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/commands/a2a_keys.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/commands/acp.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/commands/agents.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/commands/auth.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/commands/benchmark.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/commands/config.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/commands/connect.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/commands/daemon.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/commands/factory.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/commands/gauge.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/commands/harness/__init__.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/commands/harness/_group.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/commands/harness/_helpers.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/commands/harness/bench.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/commands/harness/candidates.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/commands/harness/evaluation.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/commands/harness/evidence.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/commands/harness/inbox.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/commands/harness/lifecycle.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/commands/harness/logbook.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/commands/harness/observability.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/commands/harness/optimization.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/commands/harness/promotion.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/commands/harness/protocol.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/commands/harness/registry.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/commands/harness/replay.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/commands/harness/run_history.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/commands/harness/worker.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/commands/hub.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/commands/local.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/commands/memory.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/commands/models.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/commands/plugins.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/commands/policy.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/commands/profiles.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/commands/providers.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/commands/runtime.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/commands/sandbox.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/commands/serve.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/commands/sessions.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/commands/share.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/commands/skillopt.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/commands/skills.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/commands/tools.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/commands/trust.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/commands/uhp.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/commands/update.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/commands/work.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/config/__init__.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/config/loader.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/config/schema.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/core/__init__.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/danger.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/data/eval_fixtures/ci-dynamic-root-cause.log +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/data/eval_fixtures/ci-root-cause.log +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/data/eval_packs/local_dynamic_workflow_smoke.yaml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/data/eval_packs/local_recursive_smoke.yaml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/data/superqode-template.yaml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/design_system.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/dialogs/__init__.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/dialogs/base.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/dialogs/model.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/dialogs/provider.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/dialogs/runtime.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/diff_view.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/enterprise.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/evaluation/__init__.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/evaluation/adapters.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/evaluation/behaviors.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/evaluation/engine.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/evaluation/scenarios.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/execution/__init__.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/execution/linter.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/execution/modes.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/execution/resolver.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/execution/runner.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/extensions.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/file_explorer.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/file_viewer.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/flash.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/gauge/__init__.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/gauge/levels.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/gauge/record.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/gauge/sources.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/governance.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/__init__.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/accelerator.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/agent_importer.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/approval_memory.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/backends/__init__.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/backends/base.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/backends/deepagents.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/backends/dsh.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/backends/managed.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/backends/pipy.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/backends/prime_agent.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/backends/pydanticai.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/backends/registry.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/backends/rlm.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/backends/rlm_code.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/backends/runtime.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/backends/tau.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/backends/uhp.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/bench.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/catalog.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/compiler.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/conformance.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/context_handles.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/diagnostics.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/discovery.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/drift.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/eval.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/events.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/explain.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/hooks.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/hub.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/kernel.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/loader.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/mcp_bridge.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/model_policy.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/model_routes.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/observability.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/omni.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/omnigent_importer.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/optimize.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/output.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/permissions.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/pipy_adapter.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/pipy_extensions.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/promotion.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/protocol.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/protocol_adapters.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/protocol_controller.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/registry.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/rlm_adapter.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/rlm_code_adapter.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/sandbox.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/self_improve.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/spec.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/store.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/tau_adapter.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/tau_management.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/templates.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/testing.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/uhp_adapter.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/wizard.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/workflow.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/harness/workflow_presets.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/headless.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/history.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/local/__init__.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/local/airplane.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/local/bench.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/local/build.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/local/code_index.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/local/data/model-packs/devstral.yaml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/local/data/model-packs/ds4.yaml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/local/data/model-packs/gemma4.yaml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/local/data/model-packs/glm.yaml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/local/data/model-packs/gpt-oss.yaml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/local/data/model-packs/kimi.yaml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/local/data/model-packs/laguna.yaml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/local/data/model-packs/minimax.yaml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/local/data/model-packs/qwen-coder.yaml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/local/data/model-packs/qwen3.yaml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/local/data/stack_matrix.yaml +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/local/doctor.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/local/engines.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/local/guardrails.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/local/hardware.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/local/inventory.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/local/labs.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/local/laguna.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/local/matrix.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/local/migrate.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/local/optimize.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/local/packs.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/local/repo.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/local/servers.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/local/setup.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/local/smoke.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/logging/__init__.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/logging/adapters.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/logging/formatter.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/logging/integration.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/logging/sinks.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/logging/unified_log.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/lsp/__init__.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/lsp/client.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/main.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/mcp/__init__.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/mcp/auth_storage.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/mcp/client.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/mcp/config.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/mcp/elicitation.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/mcp/harness_server.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/mcp/hf_auth.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/mcp/integration.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/mcp/oauth.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/mcp/oauth_callback.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/mcp/sampling.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/mcp/search.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/mcp/types.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/memory/__init__.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/memory/config.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/memory/providers.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/memory/types.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/notifications.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/permissions/__init__.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/permissions/rules.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/pipy/__init__.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/pipy/ai/__init__.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/pipy/ai/fake.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/pipy/ai/gateway.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/pipy/ai/models.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/pipy/ai/transform.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/pipy/coding_session.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/pipy/compaction.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/pipy/config.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/pipy/event_stream.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/pipy/events.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/pipy/harness.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/pipy/harness_events.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/pipy/loop.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/pipy/messages.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/pipy/permissions.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/pipy/prompt_templates.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/pipy/provider_events.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/pipy/resources.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/pipy/session/__init__.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/pipy/session/codec.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/pipy/session/entries.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/pipy/session/jsonl.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/pipy/session/memory.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/pipy/session/repository.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/pipy/session/session.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/pipy/session/storage.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/pipy/signals.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/pipy/skills.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/pipy/stream.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/pipy/system_prompt.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/pipy/tools/__init__.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/pipy/tools/base.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/pipy/tools/edit_diff.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/pipy/tools/files.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/pipy/tools/paths.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/pipy/tools/registry.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/pipy/tools/search.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/pipy/tools/shell.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/pipy/tools/truncate.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/pipy/types.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/pipy/validation.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/plan.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/platform_locks.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/plugins.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/project_trust.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/__init__.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/_builtin_profiles.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/acp_free_models.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/acp_models.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/acp_registry.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/apple_fm.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/catalog.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/connection_profiles.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/copilot_auth.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/credentials.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/dynamic.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/env_introspect.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/free_inference.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/gateway/__init__.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/gateway/base.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/gateway/litellm_gateway.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/gateway/openresponses_gateway.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/gateway/synthetic.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/grok_cli_auth.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/harness_catalog.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/health.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/huggingface/__init__.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/huggingface/convert.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/huggingface/downloader.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/huggingface/endpoints.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/huggingface/fetch.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/huggingface/hub.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/huggingface/inference.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/huggingface/transformers_runner.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/live_models.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/local/__init__.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/local/_mlx_worker.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/local/base.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/local/capabilities.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/local/context_probe.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/local/discovery.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/local/ds4.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/local/lmstudio.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/local/mlx.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/local/mlx_engine.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/local/mlx_tools.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/local/ollama.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/local/sglang.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/local/smoke.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/local/tgi.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/local/tool_support.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/local/vllm.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/manager.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/model_specs.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/models.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/models_dev.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/opencode_models.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/openresponses/__init__.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/openresponses/converters/__init__.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/openresponses/converters/messages.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/openresponses/converters/tools.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/openresponses/schema/__init__.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/openresponses/schema/models.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/openresponses/streaming/__init__.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/openresponses/streaming/parser.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/openresponses/tools/__init__.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/openresponses/tools/apply_patch.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/openresponses/tools/code_interpreter.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/openresponses/tools/file_search.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/openresponses/tools/mcp_adapter.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/prime_agent.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/profiles.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/recommendations.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/registry.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/subscription_env.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/subscription_login.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/uhp.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/providers/usage.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/pure_mode.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/py.typed +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/rendering/__init__.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/rendering/html_export.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/rendering/markdown.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/rendering/transcript_export.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/rlm/__init__.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/rlm/coding_session.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/rlm/config.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/rlm/context.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/rlm/identity.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/rlm/kernel.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/rlm/kernel_backend.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/rlm/kernel_docker.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/rlm/kernel_monty.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/rlm/kernel_server.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/rlm/policy.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/rlm/root_runtime.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/rlm/root_worker.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/rlm/sandbox.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/rlm/subcalls.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/rlm/supervisor.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/rlm/worker.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/rlm/worker_process.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/runtime/__init__.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/runtime/adk.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/runtime/antigravity_cli.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/runtime/antigravity_managed.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/runtime/antigravity_sdk.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/runtime/antigravity_status.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/runtime/base.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/runtime/builtin.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/runtime/claude_agent_sdk.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/runtime/codex_sdk.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/runtime/copilot_sdk.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/runtime/devin_cli.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/runtime/devin_status.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/runtime/errors.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/runtime/openai_agents.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/runtime/openai_sandbox.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/runtime/openai_session.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/runtime/pydanticai.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/runtime/registry.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/runtime/tool_bridge.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/runtime/tool_bridge_openai.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/runtime/tool_bridge_pydanticai.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/runtime/vendor_cli.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/safety/__init__.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/safety/sandbox.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/safety/warnings.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/sandbox/__init__.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/sandbox/backends.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/sandbox/execution.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/sandbox/local_sandbox.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/search_registry.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/server/__init__.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/server/api.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/server/web.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/session/__init__.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/session/factory.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/session/persistence.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/session/share_artifacts.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/session/sharing.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/session/switchboard.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/session.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/sidebar.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/skillopt.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/skills.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/stream_view.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/styles/__init__.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/tool_call.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/tools/__init__.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/tools/agent_tools.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/tools/apply_patch.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/tools/base.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/tools/batch_tool.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/tools/compact_tool.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/tools/context_handle.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/tools/context_tools.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/tools/core_tools.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/tools/diagnostics.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/tools/diff_utils.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/tools/display.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/tools/dynamic_workflow.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/tools/edit_tools.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/tools/enhanced_base.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/tools/env_policy.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/tools/file_tools.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/tools/file_tracking.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/tools/governed.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/tools/harness_agent_session.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/tools/image_tools.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/tools/lsp_tools.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/tools/mcp_tools.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/tools/monty_tool.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/tools/network_tools.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/tools/output_spill.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/tools/peer_agent_tools.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/tools/permissions.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/tools/post_edit.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/tools/question_tool.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/tools/request_permissions_tool.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/tools/search_tools.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/tools/semantic_search.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/tools/shell_session.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/tools/shell_tools.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/tools/skill_tools.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/tools/spawn_harness.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/tools/todo_tools.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/tools/tool_search.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/tools/validation.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/tools/web_tools.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/tui_integration.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/tui_widgets/__init__.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/tui_widgets/widgets/__init__.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/tui_widgets/widgets/progress.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/tui_widgets/widgets/tool_display.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/undo_manager.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/utils/__init__.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/utils/error_handling.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/utils/fuzzy.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/widgets/__init__.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/widgets/a2a_connect.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/widgets/agent_store.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/widgets/agent_switcher.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/widgets/animation_manager.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/widgets/code_context.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/widgets/command_palette.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/widgets/connection_status.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/widgets/conversation_history.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/widgets/diff_indicator.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/widgets/enhanced_status_bar.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/widgets/enhanced_toast.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/widgets/file_browser.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/widgets/file_reference.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/widgets/harness_hub.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/widgets/leader_key.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/widgets/mode_switcher.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/widgets/model_picker.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/widgets/outcome_screen.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/widgets/permission_preview.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/widgets/prompt.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/widgets/provider_connect.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/widgets/pty_shell.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/widgets/resizable_sidebar.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/widgets/response_changes.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/widgets/response_display.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/widgets/rewind_overlay.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/widgets/rich_tool_display.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/widgets/sidebar_panels.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/widgets/slash_commands.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/widgets/slash_complete.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/widgets/split_view.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/widgets/status_bar.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/widgets/superqode_display.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/widgets/theme_picker.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/widgets/thinking.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/widgets/thinking_display.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/widgets/throbber.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/widgets/toast.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/widgets/uhp_connect.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/widgets/unified_output.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/workorders/__init__.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/workorders/cockpit.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/workorders/integration.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/workorders/models.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/workorders/runner.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/workorders/store.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/workorders/usage.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/workorders/worker.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/workspace/__init__.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/workspace/artifacts.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/workspace/change_summary.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/workspace/coordinator.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/workspace/diff_tracker.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/workspace/git_guard.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/workspace/git_snapshot.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/workspace/manager.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/workspace/snapshot.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/workspace/watcher.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode/workspace/worktree.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode.egg-info/SOURCES.txt +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode.egg-info/dependency_links.txt +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode.egg-info/entry_points.txt +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode.egg-info/requires.txt +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/src/superqode.egg-info/top_level.txt +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_030_candidate.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_a2a_bridge.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_a2a_conformance.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_a2a_connect.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_a2a_context.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_a2a_keys.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_a2a_limits.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_a2a_oauth.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_a2a_security.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_a2a_shortlist.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_a2a_trust.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_a2a_understand.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_acp_agent_dispatch.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_acp_client.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_acp_free_models.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_acp_parent_tool_linking.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_acp_permission_store.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_acp_registry.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_acp_render.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_acp_server.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_acp_session_store.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_acp_slash.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_adaptive_compaction.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_agent_importer.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_agent_install_commands.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_agent_loop_harness.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_agent_memory.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_agents_md_compat.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_agy_tui_commands.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_app_main_contract.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_apply_patch.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_auth.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_bash_spill.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_benchmarks.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_catalog_freshness.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_change_summary.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_channels.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_cli_commands.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_cli_connect.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_cli_contract.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_cli_reference_coverage.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_clickable_commands.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_command_safety.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_commands_runtime.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_compaction.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_config_loader.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_config_runtime.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_connect_harness_screen.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_connect_setup.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_connection_profiles.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_context_handles.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_context_probe.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_context_remaining.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_copilot_login_ux.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_copilot_tui_commands.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_create_skill_tool.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_deepagents_model_spec.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_deferred_tools.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_design_system_contrast.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_developer_workflow_docs.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_ds4_local_client.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_dsh_harness.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_dynamic_workflow_tool.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_edit_line_number_strip.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_env_introspect.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_execution_resolver.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_extensions.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_final_parity_wave.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_free_models.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_governance.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_grok_cli_auth.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_harness_agent_session.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_harness_backends.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_harness_bench.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_harness_bench_paths.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_harness_catalog.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_harness_connect_catalog.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_harness_drift.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_harness_eval_splits.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_harness_examples.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_harness_explain.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_harness_hooks.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_harness_hub_catalog.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_harness_hub_screen.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_harness_kernel.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_harness_mcp_server.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_harness_model_policy.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_harness_observability.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_harness_omni.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_harness_output.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_harness_permissions.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_harness_promotion.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_harness_protocol.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_harness_sandbox.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_harness_seesaw_dimensions.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_harness_self_improve.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_harness_spec.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_harness_store.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_harness_usage.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_harness_wizard.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_harness_workflow.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_headless.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_hf_fetch.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_hooks.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_install_script.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_integration_docs.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_kimi_k3_provider.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_kimi_k3_routes.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_linter_runner.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_litellm_gateway.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_live_acp_registry.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_live_models.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_local_airplane.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_local_build.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_local_code_index.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_local_labs.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_local_migrate.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_local_model_optimizations.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_local_packs.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_local_sandbox.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_local_search.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_local_servers.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_local_setup.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_local_smoke.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_local_stack.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_local_tool_capabilities.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_local_tool_support.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_login_api.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_loop_guard.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_managed_harness_backend.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_markdown_render.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_mcp.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_mcp_example_server.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_mcp_integration.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_mcp_live.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_mcp_oauth_generalized.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_mcp_tools_runtime.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_mcp_two_way.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_memory_recall.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_mlx_tools.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_model_profiles.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_model_specs.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_models_dev.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_monty_tool.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_navigation_history.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_network_policy.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_ollama_client.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_omnigent_agent_session_smoke.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_omnigent_importer.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_openai_session.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_output_spill.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_parallel_compare.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_peer_agents.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_plugin_hook_wiring.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_plugins.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_policies_and_turndiff.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_post_edit_verify.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_prime_agent_client.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_prime_agent_harness.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_prime_agent_provider.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_prime_command_surface.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_prime_tui_rpc.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_progressive_discovery.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_progressive_reveals.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_project_trust.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_prompt_stack.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_provider_catalog.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_provider_dynamic.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_provider_models.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_provider_recommendations.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_pure_mode_sessions.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_qm_deployment_layer.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_rate_limit_retry.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_read_tool_limits.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_reasoning_and_budget.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_recursive_eval_packs.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_release_metadata.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_rlm_code_integration.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_runtime_adk.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_runtime_antigravity_cli.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_runtime_antigravity_managed.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_runtime_antigravity_sdk.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_runtime_builtin.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_runtime_claude_agent_sdk.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_runtime_codex_sdk.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_runtime_copilot_sdk.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_runtime_devin_cli.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_runtime_dialog.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_runtime_openai_agents.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_runtime_openai_events.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_runtime_openai_hitl.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_runtime_openai_sandbox.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_runtime_protocol.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_runtime_pydanticai.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_sandbox_backends.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_sandbox_execution.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_search_roots.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_semantic_search.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_session_switchboard.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_shell_session.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_simple_login.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_simple_query_fastpath.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_skillopt.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_slash_runtime.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_spawn_harness_tool.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_status_bar_layout.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_steering_continue_reminders.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_streaming_tool_calls.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_subscription_billing_policy.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_subscription_login.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_subscription_login_consent.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_synthetic_gateways.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_tau_harness_adapter.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_terminal_output_limits.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_theme_contrast.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_theme_picker.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_theme_repaint.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_todo_tools.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_tool_args_repair.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_tool_batch_safety.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_tool_bridge.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_tool_bridge_openai.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_tool_call_repair.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_tool_output_pruning.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_tool_tracking.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_tools.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_tui_change_summary.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_tui_chat_mode.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_tui_diagnostics.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_tui_exit.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_tui_feedback.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_tui_launch_performance.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_tui_llamacpp_connect.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_tui_markdown_cleanup.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_tui_mlx_connect.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_tui_mounted.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_tui_onboarding.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_tui_smoke.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_tui_tool_display.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_uhp_backend.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_uhp_connect.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_update_command.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_vendor_cli_runtime.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_version.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_view_image.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_web_server_auth.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_workorders.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_workspace.py +0 -0
- {superqode-2.2.5 → superqode-2.3.0}/tests/test_zai_provider.py +0 -0
|
@@ -7,6 +7,30 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [2.3.0] - 2026-09-13
|
|
11
|
+
|
|
12
|
+
The UHP server release. `serve uhp` serves session listing, inspection and
|
|
13
|
+
turn history, so a client can find a session it did not record and rebuild its
|
|
14
|
+
transcript. Core conformance stays at 40 of 40 with no skips.
|
|
15
|
+
|
|
16
|
+
### 🧩 Unified Harness Protocol
|
|
17
|
+
|
|
18
|
+
- **Sessions are inspectable.** `GET /v1/sessions` lists them newest first,
|
|
19
|
+
with cursor pagination that states the end of the listing instead of leaving
|
|
20
|
+
a client to infer it from a short page. `GET /v1/sessions/{id}` returns one,
|
|
21
|
+
and `GET /v1/sessions/{id}/turns` returns its ordered task history, each
|
|
22
|
+
turn carrying its response id, status, prompt and answer.
|
|
23
|
+
- **Session listing is off on a shared bind.** The capability follows whether
|
|
24
|
+
the bind takes a caller-supplied provider key. One bearer shared by every
|
|
25
|
+
caller means a session list would hand each of them the others' prompts and
|
|
26
|
+
answers, so the public bind reports `session_listing: false` and answers
|
|
27
|
+
404, which is what a Core server does. A local bind reports it true.
|
|
28
|
+
- Resuming a UHP session against a Core server no longer fails with an opaque
|
|
29
|
+
transport error. Turn history is an Extended surface, so a Core server
|
|
30
|
+
answering 404 there is correct and means there is no history to read. The
|
|
31
|
+
client now says the route cannot resume that session instead of reporting a
|
|
32
|
+
server failure.
|
|
33
|
+
|
|
10
34
|
## [2.2.5] - 2026-09-13
|
|
11
35
|
|
|
12
36
|
SuperQode's UHP server adopts protocol `2026-09-12` and passes the UHP
|
|
@@ -991,8 +991,16 @@ class UHPClient:
|
|
|
991
991
|
return tuple(dict(item) for item in _items(payload, "turns") if isinstance(item, Mapping))
|
|
992
992
|
|
|
993
993
|
async def latest_response_id(self, session_id: str) -> str | None:
|
|
994
|
-
"""Return the most recent response id recorded for a session.
|
|
995
|
-
|
|
994
|
+
"""Return the most recent response id recorded for a session.
|
|
995
|
+
|
|
996
|
+
Turn history is Extended: a Core server answers 404, meaning none.
|
|
997
|
+
"""
|
|
998
|
+
try:
|
|
999
|
+
turns = await self.list_session_turns(session_id)
|
|
1000
|
+
except UHPError as exc:
|
|
1001
|
+
if exc.status_code == 404:
|
|
1002
|
+
return None
|
|
1003
|
+
raise
|
|
996
1004
|
for turn in reversed(turns):
|
|
997
1005
|
for key in ("response_id", "id"):
|
|
998
1006
|
value = turn.get(key)
|
|
@@ -5,9 +5,9 @@ a *native* UHP server (Path A), complementary to HarnessRouter: SuperQode's own
|
|
|
5
5
|
harness bind speaks the wire format directly, rather than wrapping Codex/Claude
|
|
6
6
|
as a multi-backend runner.
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
Serves UHP ``2026-09-12`` and ``2026-08-11``. Passes the conformance suite at
|
|
9
|
+
class ``core``. Session listing is served where the bind is not shared; file
|
|
10
|
+
artifacts are not implemented, so the class stays ``core``.
|
|
11
11
|
"""
|
|
12
12
|
|
|
13
13
|
from __future__ import annotations
|
|
@@ -186,7 +186,7 @@ class UHPServerConfig:
|
|
|
186
186
|
api_key: str | None = None
|
|
187
187
|
implementation_name: str = "superqode"
|
|
188
188
|
implementation_version: str = ""
|
|
189
|
-
#:
|
|
189
|
+
#: Backed by a suite run, which is the only claim the spec recognises.
|
|
190
190
|
conformance_class: str = "core"
|
|
191
191
|
#: GET catalog without a bearer (remote public host). POST still requires api_key.
|
|
192
192
|
public_catalog: bool = False
|
|
@@ -195,6 +195,9 @@ class UHPServerConfig:
|
|
|
195
195
|
#: Per-session directory under working_directory, so callers on a shared
|
|
196
196
|
#: bind cannot read each other's files. Off locally: work in the project.
|
|
197
197
|
isolate_session_workspaces: bool = False
|
|
198
|
+
#: Serve session listing. Off on a shared bind: one bearer for every
|
|
199
|
+
#: caller would make a list everyone's prompts.
|
|
200
|
+
expose_session_listing: bool = True
|
|
198
201
|
|
|
199
202
|
|
|
200
203
|
def _package_version() -> str:
|
|
@@ -422,7 +425,7 @@ class UHPServer:
|
|
|
422
425
|
"cancellation": True,
|
|
423
426
|
"files_input": False,
|
|
424
427
|
"files_output": False,
|
|
425
|
-
"session_listing":
|
|
428
|
+
"session_listing": self.config.expose_session_listing,
|
|
426
429
|
"harness_management": False,
|
|
427
430
|
"session_sharing": False,
|
|
428
431
|
"idempotency": True,
|
|
@@ -729,6 +732,87 @@ class UHPServer:
|
|
|
729
732
|
server._input_items.pop(response_id, None)
|
|
730
733
|
return {"id": response_id, "deleted": True}
|
|
731
734
|
|
|
735
|
+
def _listing_disabled() -> Any:
|
|
736
|
+
return JSONResponse(
|
|
737
|
+
status_code=404,
|
|
738
|
+
content=_error_envelope(
|
|
739
|
+
error_type="invalid_request_error",
|
|
740
|
+
code="session_not_found",
|
|
741
|
+
message="This bind does not serve session listing.",
|
|
742
|
+
),
|
|
743
|
+
)
|
|
744
|
+
|
|
745
|
+
@app.get("/v1/sessions")
|
|
746
|
+
async def list_sessions(limit: str = "20", cursor: str = "", harness: str = "") -> Any:
|
|
747
|
+
# A string, so a bad value answers in the UHP error envelope.
|
|
748
|
+
if not server.config.expose_session_listing:
|
|
749
|
+
return _listing_disabled()
|
|
750
|
+
try:
|
|
751
|
+
requested = int(limit)
|
|
752
|
+
except (TypeError, ValueError):
|
|
753
|
+
return JSONResponse(
|
|
754
|
+
status_code=400,
|
|
755
|
+
content=_error_envelope(
|
|
756
|
+
error_type="invalid_request_error",
|
|
757
|
+
code="invalid_input",
|
|
758
|
+
# Truncated: it is echoed back to the caller.
|
|
759
|
+
message=f"Query parameter 'limit' must be an integer, got '{limit[:32]}'.",
|
|
760
|
+
param="limit",
|
|
761
|
+
),
|
|
762
|
+
)
|
|
763
|
+
ordered = sorted(
|
|
764
|
+
server._sessions.values(),
|
|
765
|
+
key=lambda item: (-int(item.get("updated_at") or 0), str(item.get("id") or "")),
|
|
766
|
+
)
|
|
767
|
+
if harness:
|
|
768
|
+
ordered = [s for s in ordered if str(s.get("harness_id") or "") == harness]
|
|
769
|
+
start = 0
|
|
770
|
+
if cursor:
|
|
771
|
+
ids = [str(s.get("id") or "") for s in ordered]
|
|
772
|
+
start = ids.index(cursor) + 1 if cursor in ids else len(ordered)
|
|
773
|
+
size = max(1, min(requested, 100))
|
|
774
|
+
page = ordered[start : start + size]
|
|
775
|
+
# Explicit end marker: a short page does not mean the last one.
|
|
776
|
+
remaining = ordered[start + size :]
|
|
777
|
+
return {
|
|
778
|
+
"sessions": [server._session_document(item) for item in page],
|
|
779
|
+
"next_cursor": (str(page[-1].get("id")) if page and remaining else None),
|
|
780
|
+
}
|
|
781
|
+
|
|
782
|
+
@app.get("/v1/sessions/{session_id}")
|
|
783
|
+
async def get_session(session_id: str) -> Any:
|
|
784
|
+
if not server.config.expose_session_listing:
|
|
785
|
+
return _listing_disabled()
|
|
786
|
+
session = server._sessions.get(session_id)
|
|
787
|
+
if session is None:
|
|
788
|
+
return JSONResponse(
|
|
789
|
+
status_code=404,
|
|
790
|
+
content=_error_envelope(
|
|
791
|
+
error_type="invalid_request_error",
|
|
792
|
+
code="session_not_found",
|
|
793
|
+
message=f"No session with id '{session_id}'.",
|
|
794
|
+
param="session_id",
|
|
795
|
+
),
|
|
796
|
+
)
|
|
797
|
+
return server._session_document(session)
|
|
798
|
+
|
|
799
|
+
@app.get("/v1/sessions/{session_id}/turns")
|
|
800
|
+
async def get_session_turns(session_id: str) -> Any:
|
|
801
|
+
if not server.config.expose_session_listing:
|
|
802
|
+
return _listing_disabled()
|
|
803
|
+
session = server._sessions.get(session_id)
|
|
804
|
+
if session is None:
|
|
805
|
+
return JSONResponse(
|
|
806
|
+
status_code=404,
|
|
807
|
+
content=_error_envelope(
|
|
808
|
+
error_type="invalid_request_error",
|
|
809
|
+
code="session_not_found",
|
|
810
|
+
message=f"No session with id '{session_id}'.",
|
|
811
|
+
param="session_id",
|
|
812
|
+
),
|
|
813
|
+
)
|
|
814
|
+
return {"object": "list", "turns": server._session_turns(session)}
|
|
815
|
+
|
|
732
816
|
@app.post("/v1/sessions/{session_id}/cancel")
|
|
733
817
|
async def cancel_session(session_id: str) -> Any:
|
|
734
818
|
session = server._sessions.get(session_id)
|
|
@@ -816,6 +900,54 @@ class UHPServer:
|
|
|
816
900
|
)
|
|
817
901
|
return None
|
|
818
902
|
|
|
903
|
+
def _output_text(self, record: Mapping[str, Any]) -> str:
|
|
904
|
+
"""The assistant text of one response, in output order."""
|
|
905
|
+
parts: list[str] = []
|
|
906
|
+
for item in record.get("output") or ():
|
|
907
|
+
if not isinstance(item, Mapping):
|
|
908
|
+
continue
|
|
909
|
+
content = item.get("content")
|
|
910
|
+
if not isinstance(content, Sequence):
|
|
911
|
+
continue
|
|
912
|
+
for part in content:
|
|
913
|
+
if isinstance(part, Mapping) and part.get("type") == "output_text":
|
|
914
|
+
parts.append(str(part.get("text") or ""))
|
|
915
|
+
return "".join(parts)
|
|
916
|
+
|
|
917
|
+
def _session_document(self, session: Mapping[str, Any]) -> dict[str, Any]:
|
|
918
|
+
response_ids = list(session.get("response_ids") or ())
|
|
919
|
+
latest = self._responses.get(response_ids[-1]) if response_ids else None
|
|
920
|
+
created_at = int(session.get("created_at") or 0)
|
|
921
|
+
return {
|
|
922
|
+
"id": str(session.get("id") or ""),
|
|
923
|
+
"object": "session",
|
|
924
|
+
"harness_id": str(session.get("harness_id") or self.config.harness_id),
|
|
925
|
+
"title": str(session.get("title") or ""),
|
|
926
|
+
"status": str((latest or {}).get("status") or "in_progress"),
|
|
927
|
+
"created_at": created_at,
|
|
928
|
+
"updated_at": int(session.get("updated_at") or created_at),
|
|
929
|
+
}
|
|
930
|
+
|
|
931
|
+
def _session_turns(self, session: Mapping[str, Any]) -> list[dict[str, Any]]:
|
|
932
|
+
"""The ordered task history, so a client can rebuild a transcript."""
|
|
933
|
+
turns: list[dict[str, Any]] = []
|
|
934
|
+
for response_id in session.get("response_ids") or ():
|
|
935
|
+
record = self._responses.get(response_id)
|
|
936
|
+
if record is None:
|
|
937
|
+
continue
|
|
938
|
+
turn: dict[str, Any] = {
|
|
939
|
+
"id": response_id,
|
|
940
|
+
"status": str(record.get("status") or ""),
|
|
941
|
+
}
|
|
942
|
+
user = _extract_prompt(self._input_items.get(response_id))
|
|
943
|
+
if user:
|
|
944
|
+
turn["user"] = user
|
|
945
|
+
assistant = self._output_text(record)
|
|
946
|
+
if assistant:
|
|
947
|
+
turn["assistant"] = assistant
|
|
948
|
+
turns.append(turn)
|
|
949
|
+
return turns
|
|
950
|
+
|
|
819
951
|
def _workspace_for(self, session_id: str) -> Path:
|
|
820
952
|
"""The directory a turn runs in."""
|
|
821
953
|
root = Path(self.config.working_directory)
|
|
@@ -943,9 +1075,16 @@ class UHPServer:
|
|
|
943
1075
|
self._cancel_events[response_id] = asyncio.Event()
|
|
944
1076
|
session = self._sessions.setdefault(
|
|
945
1077
|
session_id,
|
|
946
|
-
{
|
|
1078
|
+
{
|
|
1079
|
+
"id": session_id,
|
|
1080
|
+
"harness_id": self.config.harness_id,
|
|
1081
|
+
"response_ids": [],
|
|
1082
|
+
"created_at": created_at,
|
|
1083
|
+
"title": prompt.strip().splitlines()[0][:80] if prompt.strip() else "",
|
|
1084
|
+
},
|
|
947
1085
|
)
|
|
948
1086
|
session["response_ids"].append(response_id)
|
|
1087
|
+
session["updated_at"] = created_at
|
|
949
1088
|
if idempotency_key:
|
|
950
1089
|
self._idempotency[idempotency_key] = response_id
|
|
951
1090
|
|
|
@@ -1263,10 +1402,13 @@ def create_uhp_server(
|
|
|
1263
1402
|
public_catalog: bool = False,
|
|
1264
1403
|
require_caller_provider_key: bool = False,
|
|
1265
1404
|
isolate_session_workspaces: bool | None = None,
|
|
1405
|
+
expose_session_listing: bool | None = None,
|
|
1266
1406
|
) -> UHPServer:
|
|
1267
1407
|
"""Build a UHP server bound to one SuperQode HarnessSpec.
|
|
1268
1408
|
|
|
1269
|
-
``isolate_session_workspaces`` defaults to whether the bind is BYOK
|
|
1409
|
+
``isolate_session_workspaces`` defaults to whether the bind is BYOK, and
|
|
1410
|
+
``expose_session_listing`` to the opposite: one bearer shared by every
|
|
1411
|
+
caller makes a session list everyone's prompts.
|
|
1270
1412
|
"""
|
|
1271
1413
|
from superqode.harness import get_harness_template, load_harness_spec
|
|
1272
1414
|
|
|
@@ -1305,5 +1447,10 @@ def create_uhp_server(
|
|
|
1305
1447
|
if isolate_session_workspaces is None
|
|
1306
1448
|
else isolate_session_workspaces
|
|
1307
1449
|
),
|
|
1450
|
+
expose_session_listing=(
|
|
1451
|
+
not require_caller_provider_key
|
|
1452
|
+
if expose_session_listing is None
|
|
1453
|
+
else expose_session_listing
|
|
1454
|
+
),
|
|
1308
1455
|
)
|
|
1309
1456
|
return UHPServer(config, runner=runner, spec=loaded)
|
|
@@ -1425,3 +1425,36 @@ def test_best_common_version_prefers_the_newest():
|
|
|
1425
1425
|
alien = UHPDiscovery.from_payload({"versions": ["2019-01-01"]})
|
|
1426
1426
|
assert alien.best_common_version == ""
|
|
1427
1427
|
assert alien.speaks_target_version is False
|
|
1428
|
+
|
|
1429
|
+
|
|
1430
|
+
@pytest.mark.asyncio
|
|
1431
|
+
async def test_latest_response_id_tolerates_a_core_server():
|
|
1432
|
+
"""Turn history is Extended. A Core server 404s it and is still correct."""
|
|
1433
|
+
|
|
1434
|
+
def handler(request):
|
|
1435
|
+
return httpx.Response(
|
|
1436
|
+
404,
|
|
1437
|
+
json={
|
|
1438
|
+
"error": {
|
|
1439
|
+
"type": "invalid_request_error",
|
|
1440
|
+
"code": "session_not_found",
|
|
1441
|
+
"message": "No such route.",
|
|
1442
|
+
}
|
|
1443
|
+
},
|
|
1444
|
+
)
|
|
1445
|
+
|
|
1446
|
+
async with _client(handler) as client:
|
|
1447
|
+
assert await client.latest_response_id("hsess1") is None
|
|
1448
|
+
|
|
1449
|
+
|
|
1450
|
+
@pytest.mark.asyncio
|
|
1451
|
+
async def test_latest_response_id_still_raises_on_a_real_failure():
|
|
1452
|
+
def handler(request):
|
|
1453
|
+
return httpx.Response(
|
|
1454
|
+
500,
|
|
1455
|
+
json={"error": {"type": "server_error", "code": "boom", "message": "broke"}},
|
|
1456
|
+
)
|
|
1457
|
+
|
|
1458
|
+
async with _client(handler) as client:
|
|
1459
|
+
with pytest.raises(UHPError):
|
|
1460
|
+
await client.latest_response_id("hsess1")
|
|
@@ -917,3 +917,117 @@ async def test_a_waiting_caller_gets_the_cancelled_record_not_an_error():
|
|
|
917
917
|
|
|
918
918
|
assert blocked.status_code == 200
|
|
919
919
|
assert blocked.json()["status"] == "cancelled"
|
|
920
|
+
|
|
921
|
+
|
|
922
|
+
# ── session listing, inspection and turns ──────────────────────────────────────
|
|
923
|
+
|
|
924
|
+
|
|
925
|
+
@pytest.mark.anyio
|
|
926
|
+
async def test_sessions_can_be_listed_inspected_and_replayed():
|
|
927
|
+
server = _server()
|
|
928
|
+
transport = httpx.ASGITransport(app=server.app)
|
|
929
|
+
async with httpx.AsyncClient(transport=transport, base_url="http://test") as client:
|
|
930
|
+
first = (
|
|
931
|
+
await client.post(
|
|
932
|
+
"/v1/responses",
|
|
933
|
+
headers={VERSION_HEADER: UHP_PROTOCOL_VERSION, "Idempotency-Key": "s-1"},
|
|
934
|
+
json={"input": "summarise the readme"},
|
|
935
|
+
)
|
|
936
|
+
).json()
|
|
937
|
+
session_id = first["metadata"]["session_id"]
|
|
938
|
+
await client.post(
|
|
939
|
+
"/v1/responses",
|
|
940
|
+
headers={VERSION_HEADER: UHP_PROTOCOL_VERSION, "Idempotency-Key": "s-2"},
|
|
941
|
+
json={"input": "now the changelog", "previous_response_id": first["id"]},
|
|
942
|
+
)
|
|
943
|
+
|
|
944
|
+
listing = await client.get("/v1/sessions?limit=5")
|
|
945
|
+
assert listing.status_code == 200
|
|
946
|
+
body = listing.json()
|
|
947
|
+
assert "next_cursor" in body, "no explicit end-of-pagination marker"
|
|
948
|
+
assert body["next_cursor"] is None
|
|
949
|
+
entry = next(s for s in body["sessions"] if s["id"] == session_id)
|
|
950
|
+
assert entry["object"] == "session"
|
|
951
|
+
assert entry["harness_id"] == "chrn_superqode"
|
|
952
|
+
assert entry["title"] == "summarise the readme"
|
|
953
|
+
assert entry["status"] == "completed"
|
|
954
|
+
assert entry["created_at"] and entry["updated_at"]
|
|
955
|
+
|
|
956
|
+
one = await client.get(f"/v1/sessions/{session_id}")
|
|
957
|
+
assert one.status_code == 200
|
|
958
|
+
assert one.json()["id"] == session_id
|
|
959
|
+
|
|
960
|
+
turns = await client.get(f"/v1/sessions/{session_id}/turns")
|
|
961
|
+
assert turns.status_code == 200
|
|
962
|
+
items = turns.json()["turns"]
|
|
963
|
+
assert len(items) == 2, "both turns of the session should be listed, in order"
|
|
964
|
+
for turn in items:
|
|
965
|
+
assert turn["id"].startswith("resp_")
|
|
966
|
+
assert turn["status"] == "completed"
|
|
967
|
+
assert items[0]["user"] == "summarise the readme"
|
|
968
|
+
assert items[0]["assistant"] == "echo:summarise the readme"
|
|
969
|
+
assert items[1]["user"] == "now the changelog"
|
|
970
|
+
|
|
971
|
+
missing = await client.get("/v1/sessions/hsessnope")
|
|
972
|
+
assert missing.status_code == 404
|
|
973
|
+
assert missing.json()["error"]["code"] == "session_not_found"
|
|
974
|
+
|
|
975
|
+
|
|
976
|
+
@pytest.mark.anyio
|
|
977
|
+
async def test_session_listing_pages_with_an_explicit_cursor():
|
|
978
|
+
server = _server()
|
|
979
|
+
transport = httpx.ASGITransport(app=server.app)
|
|
980
|
+
async with httpx.AsyncClient(transport=transport, base_url="http://test") as client:
|
|
981
|
+
for index in range(3):
|
|
982
|
+
await client.post(
|
|
983
|
+
"/v1/responses",
|
|
984
|
+
headers={VERSION_HEADER: UHP_PROTOCOL_VERSION, "Idempotency-Key": f"p-{index}"},
|
|
985
|
+
json={"input": f"task {index}"},
|
|
986
|
+
)
|
|
987
|
+
|
|
988
|
+
page = (await client.get("/v1/sessions?limit=2")).json()
|
|
989
|
+
assert len(page["sessions"]) == 2
|
|
990
|
+
# A full page that is not the last one must say so.
|
|
991
|
+
assert page["next_cursor"] is not None
|
|
992
|
+
|
|
993
|
+
rest = (await client.get(f"/v1/sessions?limit=2&cursor={page['next_cursor']}")).json()
|
|
994
|
+
assert len(rest["sessions"]) == 1
|
|
995
|
+
assert rest["next_cursor"] is None
|
|
996
|
+
|
|
997
|
+
seen = [s["id"] for s in page["sessions"]] + [s["id"] for s in rest["sessions"]]
|
|
998
|
+
assert len(set(seen)) == 3, "paging repeated or dropped a session"
|
|
999
|
+
|
|
1000
|
+
|
|
1001
|
+
@pytest.mark.anyio
|
|
1002
|
+
async def test_session_listing_is_off_on_a_shared_bearer_bind():
|
|
1003
|
+
"""One bearer for every caller would make a list everyone's prompts."""
|
|
1004
|
+
server = _server()
|
|
1005
|
+
server.config.expose_session_listing = False
|
|
1006
|
+
transport = httpx.ASGITransport(app=server.app)
|
|
1007
|
+
async with httpx.AsyncClient(transport=transport, base_url="http://test") as client:
|
|
1008
|
+
assert (await client.get("/v1/uhp")).json()["capabilities"]["session_listing"] is False
|
|
1009
|
+
for path in ("/v1/sessions", "/v1/sessions/hsess1", "/v1/sessions/hsess1/turns"):
|
|
1010
|
+
response = await client.get(path)
|
|
1011
|
+
assert response.status_code == 404, path
|
|
1012
|
+
|
|
1013
|
+
|
|
1014
|
+
def test_byok_bind_defaults_session_listing_off():
|
|
1015
|
+
from superqode.harness.uhp_server import create_uhp_server
|
|
1016
|
+
|
|
1017
|
+
byok = create_uhp_server(require_caller_provider_key=True, runner=_echo_runner)
|
|
1018
|
+
local = create_uhp_server(runner=_echo_runner)
|
|
1019
|
+
assert byok.config.expose_session_listing is False
|
|
1020
|
+
assert local.config.expose_session_listing is True
|
|
1021
|
+
|
|
1022
|
+
|
|
1023
|
+
@pytest.mark.anyio
|
|
1024
|
+
async def test_bad_limit_answers_in_the_uhp_error_envelope():
|
|
1025
|
+
"""A validation failure must not leak the framework's own error shape."""
|
|
1026
|
+
server = _server()
|
|
1027
|
+
transport = httpx.ASGITransport(app=server.app)
|
|
1028
|
+
async with httpx.AsyncClient(transport=transport, base_url="http://test") as client:
|
|
1029
|
+
response = await client.get("/v1/sessions?limit=abc")
|
|
1030
|
+
assert response.status_code == 400
|
|
1031
|
+
error = response.json()["error"]
|
|
1032
|
+
assert error["code"] == "invalid_input"
|
|
1033
|
+
assert error["param"] == "limit"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|