superqode 2.2.4__tar.gz → 2.2.5__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1036) hide show
  1. {superqode-2.2.4 → superqode-2.2.5}/CHANGELOG.md +50 -17
  2. {superqode-2.2.4 → superqode-2.2.5}/PKG-INFO +9 -4
  3. {superqode-2.2.4 → superqode-2.2.5}/README.md +8 -3
  4. {superqode-2.2.4 → superqode-2.2.5}/pyproject.toml +1 -1
  5. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/__init__.py +1 -1
  6. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/uhp.py +3 -3
  7. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/backends/runtime.py +10 -0
  8. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/uhp_client.py +59 -15
  9. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/uhp_server.py +134 -30
  10. {superqode-2.2.4 → superqode-2.2.5}/src/superqode.egg-info/PKG-INFO +9 -4
  11. {superqode-2.2.4 → superqode-2.2.5}/tests/test_uhp_client.py +74 -2
  12. {superqode-2.2.4 → superqode-2.2.5}/tests/test_uhp_connect.py +1 -1
  13. {superqode-2.2.4 → superqode-2.2.5}/tests/test_uhp_server.py +303 -3
  14. {superqode-2.2.4 → superqode-2.2.5}/LICENSE +0 -0
  15. {superqode-2.2.4 → superqode-2.2.5}/MANIFEST.in +0 -0
  16. {superqode-2.2.4 → superqode-2.2.5}/NOTICE +0 -0
  17. {superqode-2.2.4 → superqode-2.2.5}/examples/README.md +0 -0
  18. {superqode-2.2.4 → superqode-2.2.5}/examples/a2a/README.md +0 -0
  19. {superqode-2.2.4 → superqode-2.2.5}/examples/a2a/smoke_client.py +0 -0
  20. {superqode-2.2.4 → superqode-2.2.5}/examples/bench/dspy-comprehension.manifest.yaml +0 -0
  21. {superqode-2.2.4 → superqode-2.2.5}/examples/bench/dspy-comprehension.yaml +0 -0
  22. {superqode-2.2.4 → superqode-2.2.5}/examples/bench/spec-core.yaml +0 -0
  23. {superqode-2.2.4 → superqode-2.2.5}/examples/bench/spec-deepagents.yaml +0 -0
  24. {superqode-2.2.4 → superqode-2.2.5}/examples/bench/spec-prime-agent.yaml +0 -0
  25. {superqode-2.2.4 → superqode-2.2.5}/examples/byok-acp-team.yaml +0 -0
  26. {superqode-2.2.4 → superqode-2.2.5}/examples/codex_sdk_quickstart.py +0 -0
  27. {superqode-2.2.4 → superqode-2.2.5}/examples/evals/omni-release.yaml +0 -0
  28. {superqode-2.2.4 → superqode-2.2.5}/examples/evals/omni-tiny.yaml +0 -0
  29. {superqode-2.2.4 → superqode-2.2.5}/examples/extensions/README.md +0 -0
  30. {superqode-2.2.4 → superqode-2.2.5}/examples/extensions/manifest-guard/context.md +0 -0
  31. {superqode-2.2.4 → superqode-2.2.5}/examples/extensions/manifest-guard/hooks.py +0 -0
  32. {superqode-2.2.4 → superqode-2.2.5}/examples/extensions/manifest-guard/tools.py +0 -0
  33. {superqode-2.2.4 → superqode-2.2.5}/examples/extensions/packages/README.md +0 -0
  34. {superqode-2.2.4 → superqode-2.2.5}/examples/extensions/packages/broken-extension/src/superqode_example_broken/__init__.py +0 -0
  35. {superqode-2.2.4 → superqode-2.2.5}/examples/extensions/packages/policy-extension/src/superqode_example_policy/__init__.py +0 -0
  36. {superqode-2.2.4 → superqode-2.2.5}/examples/extensions/packages/skill-extension/src/superqode_example_skill/SKILL.md +0 -0
  37. {superqode-2.2.4 → superqode-2.2.5}/examples/extensions/packages/skill-extension/src/superqode_example_skill/__init__.py +0 -0
  38. {superqode-2.2.4 → superqode-2.2.5}/examples/extensions/packages/tool-extension/src/superqode_example_tool/__init__.py +0 -0
  39. {superqode-2.2.4 → superqode-2.2.5}/examples/extensions/packages/tool-extension-v2/src/superqode_example_tool/__init__.py +0 -0
  40. {superqode-2.2.4 → superqode-2.2.5}/examples/extensions/python-package/src/superqode_example_extension/__init__.py +0 -0
  41. {superqode-2.2.4 → superqode-2.2.5}/examples/harness-packages/README.md +0 -0
  42. {superqode-2.2.4 → superqode-2.2.5}/examples/harness-packages/hello-harness/src/superqode_hello_harness/__init__.py +0 -0
  43. {superqode-2.2.4 → superqode-2.2.5}/examples/harnesses/coding.yaml +0 -0
  44. {superqode-2.2.4 → superqode-2.2.5}/examples/harnesses/deepagents.yaml +0 -0
  45. {superqode-2.2.4 → superqode-2.2.5}/examples/harnesses/deepseek-harness.yaml +0 -0
  46. {superqode-2.2.4 → superqode-2.2.5}/examples/harnesses/ds4.yaml +0 -0
  47. {superqode-2.2.4 → superqode-2.2.5}/examples/harnesses/gemma4.yaml +0 -0
  48. {superqode-2.2.4 → superqode-2.2.5}/examples/harnesses/google-adk.yaml +0 -0
  49. {superqode-2.2.4 → superqode-2.2.5}/examples/harnesses/local-recursive-dynamic.yaml +0 -0
  50. {superqode-2.2.4 → superqode-2.2.5}/examples/harnesses/mcp-docs.yaml +0 -0
  51. {superqode-2.2.4 → superqode-2.2.5}/examples/harnesses/no-tool.yaml +0 -0
  52. {superqode-2.2.4 → superqode-2.2.5}/examples/harnesses/omni-tiny-local.yaml +0 -0
  53. {superqode-2.2.4 → superqode-2.2.5}/examples/harnesses/omnigent-multi-agent.yaml +0 -0
  54. {superqode-2.2.4 → superqode-2.2.5}/examples/harnesses/openai-agents.yaml +0 -0
  55. {superqode-2.2.4 → superqode-2.2.5}/examples/harnesses/prime-agent.yaml +0 -0
  56. {superqode-2.2.4 → superqode-2.2.5}/examples/harnesses/pydanticai.yaml +0 -0
  57. {superqode-2.2.4 → superqode-2.2.5}/examples/harnesses/rlm-code-lid.yaml +0 -0
  58. {superqode-2.2.4 → superqode-2.2.5}/examples/local-models-team.yaml +0 -0
  59. {superqode-2.2.4 → superqode-2.2.5}/examples/mcp/local_docs_server.py +0 -0
  60. {superqode-2.2.4 → superqode-2.2.5}/examples/omnigent-multi-agent.agent.yaml +0 -0
  61. {superqode-2.2.4 → superqode-2.2.5}/examples/qm-deployment-layer/README.md +0 -0
  62. {superqode-2.2.4 → superqode-2.2.5}/examples/qm-deployment-layer/sandbox/skills/superqode-harness/SKILL.md +0 -0
  63. {superqode-2.2.4 → superqode-2.2.5}/examples/rlm-demo/INCIDENT.md +0 -0
  64. {superqode-2.2.4 → superqode-2.2.5}/examples/rlm-demo/README.md +0 -0
  65. {superqode-2.2.4 → superqode-2.2.5}/examples/rlm-demo/RUNBOOK.md +0 -0
  66. {superqode-2.2.4 → superqode-2.2.5}/examples/rlm-demo/deploy_audit/__init__.py +0 -0
  67. {superqode-2.2.4 → superqode-2.2.5}/examples/rlm-demo/deploy_audit/parser.py +0 -0
  68. {superqode-2.2.4 → superqode-2.2.5}/examples/rlm-demo/deploy_audit/report.py +0 -0
  69. {superqode-2.2.4 → superqode-2.2.5}/examples/rlm-demo/rlm-docker.yaml +0 -0
  70. {superqode-2.2.4 → superqode-2.2.5}/examples/rlm-demo/rlm-monty.yaml +0 -0
  71. {superqode-2.2.4 → superqode-2.2.5}/examples/rlm-demo/tests/test_report.py +0 -0
  72. {superqode-2.2.4 → superqode-2.2.5}/examples/simple-team.yaml +0 -0
  73. {superqode-2.2.4 → superqode-2.2.5}/scripts/check_release_metadata.py +0 -0
  74. {superqode-2.2.4 → superqode-2.2.5}/setup.cfg +0 -0
  75. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/a2a/__init__.py +0 -0
  76. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/a2a/client.py +0 -0
  77. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/a2a/conformance.py +0 -0
  78. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/a2a/connection.py +0 -0
  79. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/a2a/context.py +0 -0
  80. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/a2a/inspect.py +0 -0
  81. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/a2a/keys.py +0 -0
  82. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/a2a/limits.py +0 -0
  83. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/a2a/oauth.py +0 -0
  84. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/a2a/presets.py +0 -0
  85. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/a2a/registry.py +0 -0
  86. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/a2a/reply.py +0 -0
  87. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/a2a/security.py +0 -0
  88. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/a2a/server.py +0 -0
  89. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/a2a/shortlist.py +0 -0
  90. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/a2a/skills.py +0 -0
  91. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/a2a/tools.py +0 -0
  92. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/a2a/trust.py +0 -0
  93. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/a2a/types.py +0 -0
  94. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/a2a/understand.py +0 -0
  95. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/a2a/workflows.py +0 -0
  96. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/acp/__init__.py +0 -0
  97. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/acp/client.py +0 -0
  98. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/acp/doctor.py +0 -0
  99. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/acp/permission_screen.py +0 -0
  100. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/acp/permission_store.py +0 -0
  101. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/acp/render.py +0 -0
  102. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/acp/server.py +0 -0
  103. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/acp/session_store.py +0 -0
  104. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/acp/slash.py +0 -0
  105. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/acp/tool_call_context.py +0 -0
  106. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/acp/types.py +0 -0
  107. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/acp_discovery.py +0 -0
  108. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agent/__init__.py +0 -0
  109. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agent/auto_memory.py +0 -0
  110. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agent/command_safety.py +0 -0
  111. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agent/compaction.py +0 -0
  112. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agent/context_manager.py +0 -0
  113. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agent/edit_strategies.py +0 -0
  114. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agent/exec_policy.py +0 -0
  115. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agent/hooks.py +0 -0
  116. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agent/loop.py +0 -0
  117. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agent/loop_guard.py +0 -0
  118. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agent/loop_policy.py +0 -0
  119. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agent/network_policy.py +0 -0
  120. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agent/output_handler.py +0 -0
  121. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agent/parallel_compare.py +0 -0
  122. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agent/peer_agents.py +0 -0
  123. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agent/plan_mode.py +0 -0
  124. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agent/reminders.py +0 -0
  125. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agent/rubric.py +0 -0
  126. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agent/session_manager.py +0 -0
  127. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agent/structured_output.py +0 -0
  128. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agent/summarization.py +0 -0
  129. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agent/system_prompts.py +0 -0
  130. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agent/terminal_output_limits.py +0 -0
  131. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agent/text_tool_calls.py +0 -0
  132. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agent/tool_args.py +0 -0
  133. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agent/tool_tracking.py +0 -0
  134. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agent/utility_model.py +0 -0
  135. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agent_output.py +0 -0
  136. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agent_stream.py +0 -0
  137. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/__init__.py +0 -0
  138. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/acp_registry.py +0 -0
  139. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/client.py +0 -0
  140. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/agentpool.phil65.github.io.toml +0 -0
  141. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/ampcode.com.toml +0 -0
  142. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/augmentcode.com.toml +0 -0
  143. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/autodev.github.io.toml +0 -0
  144. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/blackbox.ai.toml +0 -0
  145. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/bub.dev.toml +0 -0
  146. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/cagent.dev.toml +0 -0
  147. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/claude.com.toml +0 -0
  148. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/cline.bot.toml +0 -0
  149. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/codeassistant.dev.toml +0 -0
  150. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/codebuddy.tencent.com.toml +0 -0
  151. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/codex.openai.com.toml +0 -0
  152. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/copilot.github.com.toml +0 -0
  153. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/cortex.snowflake.com.toml +0 -0
  154. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/crow-ai.dev.toml +0 -0
  155. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/cursor.com.toml +0 -0
  156. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/deepagents-code.langchain.com.toml +0 -0
  157. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/deepagents.langchain.com.toml +0 -0
  158. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/devin.ai.toml +0 -0
  159. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/dirac.run.toml +0 -0
  160. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/factory.ai.toml +0 -0
  161. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/fastagent.ai.toml +0 -0
  162. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/fount.dev.toml +0 -0
  163. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/fx.sh.toml +0 -0
  164. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/geminicli.com.toml +0 -0
  165. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/glm.z.ai.toml +0 -0
  166. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/goose.block.xyz.toml +0 -0
  167. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/harnlang.com.toml +0 -0
  168. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/hermes-agent.nousresearch.com.toml +0 -0
  169. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/junie.jetbrains.com.toml +0 -0
  170. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/kilo.ai.toml +0 -0
  171. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/kimi.moonshot.cn.toml +0 -0
  172. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/kiro.dev.toml +0 -0
  173. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/llmlingagent.dev.toml +0 -0
  174. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/minioncode.dev.toml +0 -0
  175. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/mistral-vibe.mistral.ai.toml +0 -0
  176. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/openclaw.ai.toml +0 -0
  177. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/opencode.ai.toml +0 -0
  178. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/openhands.dev.toml +0 -0
  179. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/pi.dev.toml +0 -0
  180. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/poolside.ai.toml +0 -0
  181. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/primeintellect.ai.toml +0 -0
  182. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/qoder.com.toml +0 -0
  183. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/qwenlm.github.io.toml +0 -0
  184. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/sigit.dev.toml +0 -0
  185. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/stakpak.dev.toml +0 -0
  186. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/stdiobus.dev.toml +0 -0
  187. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/vtcode.dev.toml +0 -0
  188. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/data/x.ai.toml +0 -0
  189. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/discovery.py +0 -0
  190. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/free_models.py +0 -0
  191. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/install_commands.py +0 -0
  192. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/messaging.py +0 -0
  193. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/official_acp.py +0 -0
  194. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/persona.py +0 -0
  195. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/registry.py +0 -0
  196. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/schema.py +0 -0
  197. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/agents/unified.py +0 -0
  198. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/__init__.py +0 -0
  199. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/async_utils.py +0 -0
  200. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/capabilities.py +0 -0
  201. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/constants.py +0 -0
  202. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/css.py +0 -0
  203. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/harness_picker.py +0 -0
  204. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/inputs.py +0 -0
  205. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/__init__.py +0 -0
  206. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/actions_misc.py +0 -0
  207. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/agent_run.py +0 -0
  208. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/build_harness.py +0 -0
  209. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/clickable_commands.py +0 -0
  210. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/codex.py +0 -0
  211. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/commands_impl.py +0 -0
  212. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/completion.py +0 -0
  213. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/connect.py +0 -0
  214. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/dialogs.py +0 -0
  215. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/events.py +0 -0
  216. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/explore.py +0 -0
  217. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/factory.py +0 -0
  218. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/feedback.py +0 -0
  219. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/formatting.py +0 -0
  220. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/harness_hub.py +0 -0
  221. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/helper_clipboard.py +0 -0
  222. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/helper_completion_helpers.py +0 -0
  223. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/helper_diff_review.py +0 -0
  224. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/helper_exit_lifecycle.py +0 -0
  225. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/helper_file_view.py +0 -0
  226. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/helper_interaction_mode.py +0 -0
  227. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/helper_mcp_attach.py +0 -0
  228. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/helper_message_queue.py +0 -0
  229. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/helper_permissions.py +0 -0
  230. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/helper_recipes_skills.py +0 -0
  231. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/helper_share.py +0 -0
  232. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/helper_startup.py +0 -0
  233. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/helper_todos_plan.py +0 -0
  234. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/helper_vim.py +0 -0
  235. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/helper_wizard.py +0 -0
  236. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/helpers.py +0 -0
  237. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/huggingface.py +0 -0
  238. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/local_models.py +0 -0
  239. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/mcp.py +0 -0
  240. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/model_catalog.py +0 -0
  241. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/pickers.py +0 -0
  242. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/pipy_commands.py +0 -0
  243. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/rlm_commands.py +0 -0
  244. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/sidebar.py +0 -0
  245. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/slash_commands.py +0 -0
  246. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/switchboard.py +0 -0
  247. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/mixins/tour.py +0 -0
  248. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/models.py +0 -0
  249. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/navigation.py +0 -0
  250. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/outcomes.py +0 -0
  251. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/progress.py +0 -0
  252. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/prompt_stack.py +0 -0
  253. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/recipes.py +0 -0
  254. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/session_state.py +0 -0
  255. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/suggester.py +0 -0
  256. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/theme_bridge.py +0 -0
  257. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/welcome.py +0 -0
  258. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app/widgets.py +0 -0
  259. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app_enhanced.py +0 -0
  260. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/app_main.py +0 -0
  261. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/approval.py +0 -0
  262. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/atomic.py +0 -0
  263. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/auth/__init__.py +0 -0
  264. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/benchmarks.py +0 -0
  265. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/channels/__init__.py +0 -0
  266. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/channels/config.py +0 -0
  267. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/channels/discord.py +0 -0
  268. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/channels/service.py +0 -0
  269. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/channels/slack.py +0 -0
  270. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/channels/telegram.py +0 -0
  271. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/claude.py +0 -0
  272. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/codex.py +0 -0
  273. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/__init__.py +0 -0
  274. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/a2a.py +0 -0
  275. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/a2a_connect.py +0 -0
  276. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/a2a_keys.py +0 -0
  277. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/acp.py +0 -0
  278. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/agents.py +0 -0
  279. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/auth.py +0 -0
  280. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/benchmark.py +0 -0
  281. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/config.py +0 -0
  282. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/connect.py +0 -0
  283. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/daemon.py +0 -0
  284. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/factory.py +0 -0
  285. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/gauge.py +0 -0
  286. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/harness/__init__.py +0 -0
  287. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/harness/_group.py +0 -0
  288. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/harness/_helpers.py +0 -0
  289. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/harness/bench.py +0 -0
  290. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/harness/candidates.py +0 -0
  291. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/harness/evaluation.py +0 -0
  292. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/harness/evidence.py +0 -0
  293. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/harness/inbox.py +0 -0
  294. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/harness/lifecycle.py +0 -0
  295. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/harness/logbook.py +0 -0
  296. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/harness/observability.py +0 -0
  297. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/harness/optimization.py +0 -0
  298. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/harness/promotion.py +0 -0
  299. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/harness/protocol.py +0 -0
  300. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/harness/registry.py +0 -0
  301. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/harness/replay.py +0 -0
  302. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/harness/run_history.py +0 -0
  303. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/harness/worker.py +0 -0
  304. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/hub.py +0 -0
  305. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/local.py +0 -0
  306. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/memory.py +0 -0
  307. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/models.py +0 -0
  308. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/plugins.py +0 -0
  309. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/policy.py +0 -0
  310. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/profiles.py +0 -0
  311. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/providers.py +0 -0
  312. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/runtime.py +0 -0
  313. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/sandbox.py +0 -0
  314. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/serve.py +0 -0
  315. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/sessions.py +0 -0
  316. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/share.py +0 -0
  317. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/skillopt.py +0 -0
  318. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/skills.py +0 -0
  319. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/tools.py +0 -0
  320. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/trust.py +0 -0
  321. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/update.py +0 -0
  322. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/commands/work.py +0 -0
  323. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/config/__init__.py +0 -0
  324. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/config/loader.py +0 -0
  325. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/config/schema.py +0 -0
  326. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/core/__init__.py +0 -0
  327. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/danger.py +0 -0
  328. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/data/eval_fixtures/ci-dynamic-root-cause.log +0 -0
  329. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/data/eval_fixtures/ci-root-cause.log +0 -0
  330. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/data/eval_packs/local_dynamic_workflow_smoke.yaml +0 -0
  331. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/data/eval_packs/local_recursive_smoke.yaml +0 -0
  332. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/data/superqode-template.yaml +0 -0
  333. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/design_system.py +0 -0
  334. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/dialogs/__init__.py +0 -0
  335. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/dialogs/base.py +0 -0
  336. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/dialogs/model.py +0 -0
  337. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/dialogs/provider.py +0 -0
  338. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/dialogs/runtime.py +0 -0
  339. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/diff_view.py +0 -0
  340. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/enterprise.py +0 -0
  341. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/evaluation/__init__.py +0 -0
  342. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/evaluation/adapters.py +0 -0
  343. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/evaluation/behaviors.py +0 -0
  344. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/evaluation/engine.py +0 -0
  345. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/evaluation/scenarios.py +0 -0
  346. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/execution/__init__.py +0 -0
  347. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/execution/linter.py +0 -0
  348. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/execution/modes.py +0 -0
  349. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/execution/resolver.py +0 -0
  350. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/execution/runner.py +0 -0
  351. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/extensions.py +0 -0
  352. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/file_explorer.py +0 -0
  353. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/file_viewer.py +0 -0
  354. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/flash.py +0 -0
  355. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/gauge/__init__.py +0 -0
  356. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/gauge/levels.py +0 -0
  357. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/gauge/record.py +0 -0
  358. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/gauge/sources.py +0 -0
  359. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/governance.py +0 -0
  360. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/__init__.py +0 -0
  361. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/accelerator.py +0 -0
  362. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/agent_importer.py +0 -0
  363. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/approval_memory.py +0 -0
  364. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/backends/__init__.py +0 -0
  365. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/backends/base.py +0 -0
  366. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/backends/deepagents.py +0 -0
  367. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/backends/dsh.py +0 -0
  368. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/backends/managed.py +0 -0
  369. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/backends/pipy.py +0 -0
  370. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/backends/prime_agent.py +0 -0
  371. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/backends/pydanticai.py +0 -0
  372. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/backends/registry.py +0 -0
  373. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/backends/rlm.py +0 -0
  374. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/backends/rlm_code.py +0 -0
  375. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/backends/tau.py +0 -0
  376. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/backends/uhp.py +0 -0
  377. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/bench.py +0 -0
  378. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/catalog.py +0 -0
  379. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/compiler.py +0 -0
  380. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/conformance.py +0 -0
  381. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/context_handles.py +0 -0
  382. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/diagnostics.py +0 -0
  383. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/discovery.py +0 -0
  384. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/drift.py +0 -0
  385. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/eval.py +0 -0
  386. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/events.py +0 -0
  387. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/explain.py +0 -0
  388. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/hooks.py +0 -0
  389. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/hub.py +0 -0
  390. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/kernel.py +0 -0
  391. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/loader.py +0 -0
  392. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/mcp_bridge.py +0 -0
  393. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/model_policy.py +0 -0
  394. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/model_routes.py +0 -0
  395. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/observability.py +0 -0
  396. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/omni.py +0 -0
  397. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/omnigent_importer.py +0 -0
  398. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/optimize.py +0 -0
  399. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/output.py +0 -0
  400. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/permissions.py +0 -0
  401. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/pipy_adapter.py +0 -0
  402. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/pipy_extensions.py +0 -0
  403. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/promotion.py +0 -0
  404. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/protocol.py +0 -0
  405. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/protocol_adapters.py +0 -0
  406. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/protocol_controller.py +0 -0
  407. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/registry.py +0 -0
  408. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/rlm_adapter.py +0 -0
  409. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/rlm_code_adapter.py +0 -0
  410. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/sandbox.py +0 -0
  411. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/self_improve.py +0 -0
  412. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/spec.py +0 -0
  413. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/store.py +0 -0
  414. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/tau_adapter.py +0 -0
  415. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/tau_management.py +0 -0
  416. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/templates.py +0 -0
  417. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/testing.py +0 -0
  418. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/uhp_adapter.py +0 -0
  419. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/wizard.py +0 -0
  420. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/workflow.py +0 -0
  421. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/harness/workflow_presets.py +0 -0
  422. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/headless.py +0 -0
  423. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/history.py +0 -0
  424. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/local/__init__.py +0 -0
  425. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/local/airplane.py +0 -0
  426. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/local/bench.py +0 -0
  427. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/local/build.py +0 -0
  428. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/local/code_index.py +0 -0
  429. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/local/data/model-packs/devstral.yaml +0 -0
  430. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/local/data/model-packs/ds4.yaml +0 -0
  431. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/local/data/model-packs/gemma4.yaml +0 -0
  432. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/local/data/model-packs/glm.yaml +0 -0
  433. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/local/data/model-packs/gpt-oss.yaml +0 -0
  434. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/local/data/model-packs/kimi.yaml +0 -0
  435. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/local/data/model-packs/laguna.yaml +0 -0
  436. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/local/data/model-packs/minimax.yaml +0 -0
  437. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/local/data/model-packs/qwen-coder.yaml +0 -0
  438. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/local/data/model-packs/qwen3.yaml +0 -0
  439. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/local/data/stack_matrix.yaml +0 -0
  440. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/local/doctor.py +0 -0
  441. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/local/engines.py +0 -0
  442. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/local/guardrails.py +0 -0
  443. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/local/hardware.py +0 -0
  444. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/local/inventory.py +0 -0
  445. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/local/labs.py +0 -0
  446. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/local/laguna.py +0 -0
  447. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/local/matrix.py +0 -0
  448. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/local/migrate.py +0 -0
  449. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/local/optimize.py +0 -0
  450. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/local/packs.py +0 -0
  451. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/local/repo.py +0 -0
  452. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/local/servers.py +0 -0
  453. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/local/setup.py +0 -0
  454. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/local/smoke.py +0 -0
  455. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/logging/__init__.py +0 -0
  456. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/logging/adapters.py +0 -0
  457. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/logging/formatter.py +0 -0
  458. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/logging/integration.py +0 -0
  459. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/logging/sinks.py +0 -0
  460. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/logging/unified_log.py +0 -0
  461. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/lsp/__init__.py +0 -0
  462. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/lsp/client.py +0 -0
  463. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/main.py +0 -0
  464. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/mcp/__init__.py +0 -0
  465. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/mcp/auth_storage.py +0 -0
  466. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/mcp/client.py +0 -0
  467. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/mcp/config.py +0 -0
  468. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/mcp/elicitation.py +0 -0
  469. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/mcp/harness_server.py +0 -0
  470. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/mcp/hf_auth.py +0 -0
  471. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/mcp/integration.py +0 -0
  472. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/mcp/oauth.py +0 -0
  473. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/mcp/oauth_callback.py +0 -0
  474. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/mcp/sampling.py +0 -0
  475. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/mcp/search.py +0 -0
  476. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/mcp/types.py +0 -0
  477. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/memory/__init__.py +0 -0
  478. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/memory/config.py +0 -0
  479. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/memory/providers.py +0 -0
  480. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/memory/types.py +0 -0
  481. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/notifications.py +0 -0
  482. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/permissions/__init__.py +0 -0
  483. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/permissions/rules.py +0 -0
  484. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/__init__.py +0 -0
  485. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/ai/__init__.py +0 -0
  486. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/ai/fake.py +0 -0
  487. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/ai/gateway.py +0 -0
  488. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/ai/models.py +0 -0
  489. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/ai/transform.py +0 -0
  490. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/coding_session.py +0 -0
  491. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/compaction.py +0 -0
  492. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/config.py +0 -0
  493. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/event_stream.py +0 -0
  494. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/events.py +0 -0
  495. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/harness.py +0 -0
  496. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/harness_events.py +0 -0
  497. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/loop.py +0 -0
  498. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/messages.py +0 -0
  499. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/permissions.py +0 -0
  500. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/prompt_templates.py +0 -0
  501. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/provider_events.py +0 -0
  502. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/resources.py +0 -0
  503. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/session/__init__.py +0 -0
  504. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/session/codec.py +0 -0
  505. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/session/entries.py +0 -0
  506. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/session/jsonl.py +0 -0
  507. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/session/memory.py +0 -0
  508. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/session/repository.py +0 -0
  509. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/session/session.py +0 -0
  510. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/session/storage.py +0 -0
  511. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/signals.py +0 -0
  512. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/skills.py +0 -0
  513. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/stream.py +0 -0
  514. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/system_prompt.py +0 -0
  515. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/tools/__init__.py +0 -0
  516. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/tools/base.py +0 -0
  517. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/tools/edit_diff.py +0 -0
  518. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/tools/files.py +0 -0
  519. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/tools/paths.py +0 -0
  520. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/tools/registry.py +0 -0
  521. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/tools/search.py +0 -0
  522. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/tools/shell.py +0 -0
  523. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/tools/truncate.py +0 -0
  524. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/types.py +0 -0
  525. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pipy/validation.py +0 -0
  526. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/plan.py +0 -0
  527. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/platform_locks.py +0 -0
  528. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/plugins.py +0 -0
  529. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/project_trust.py +0 -0
  530. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/__init__.py +0 -0
  531. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/_builtin_profiles.py +0 -0
  532. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/acp_free_models.py +0 -0
  533. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/acp_models.py +0 -0
  534. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/acp_registry.py +0 -0
  535. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/apple_fm.py +0 -0
  536. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/catalog.py +0 -0
  537. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/connection_profiles.py +0 -0
  538. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/copilot_auth.py +0 -0
  539. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/credentials.py +0 -0
  540. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/dynamic.py +0 -0
  541. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/env_introspect.py +0 -0
  542. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/free_inference.py +0 -0
  543. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/gateway/__init__.py +0 -0
  544. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/gateway/base.py +0 -0
  545. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/gateway/litellm_gateway.py +0 -0
  546. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/gateway/openresponses_gateway.py +0 -0
  547. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/gateway/synthetic.py +0 -0
  548. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/grok_cli_auth.py +0 -0
  549. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/harness_catalog.py +0 -0
  550. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/health.py +0 -0
  551. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/huggingface/__init__.py +0 -0
  552. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/huggingface/convert.py +0 -0
  553. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/huggingface/downloader.py +0 -0
  554. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/huggingface/endpoints.py +0 -0
  555. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/huggingface/fetch.py +0 -0
  556. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/huggingface/hub.py +0 -0
  557. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/huggingface/inference.py +0 -0
  558. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/huggingface/transformers_runner.py +0 -0
  559. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/live_models.py +0 -0
  560. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/local/__init__.py +0 -0
  561. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/local/_mlx_worker.py +0 -0
  562. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/local/base.py +0 -0
  563. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/local/capabilities.py +0 -0
  564. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/local/context_probe.py +0 -0
  565. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/local/discovery.py +0 -0
  566. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/local/ds4.py +0 -0
  567. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/local/lmstudio.py +0 -0
  568. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/local/mlx.py +0 -0
  569. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/local/mlx_engine.py +0 -0
  570. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/local/mlx_tools.py +0 -0
  571. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/local/ollama.py +0 -0
  572. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/local/sglang.py +0 -0
  573. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/local/smoke.py +0 -0
  574. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/local/tgi.py +0 -0
  575. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/local/tool_support.py +0 -0
  576. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/local/vllm.py +0 -0
  577. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/manager.py +0 -0
  578. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/model_specs.py +0 -0
  579. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/models.py +0 -0
  580. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/models_dev.py +0 -0
  581. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/opencode_models.py +0 -0
  582. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/openresponses/__init__.py +0 -0
  583. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/openresponses/converters/__init__.py +0 -0
  584. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/openresponses/converters/messages.py +0 -0
  585. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/openresponses/converters/tools.py +0 -0
  586. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/openresponses/schema/__init__.py +0 -0
  587. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/openresponses/schema/models.py +0 -0
  588. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/openresponses/streaming/__init__.py +0 -0
  589. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/openresponses/streaming/parser.py +0 -0
  590. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/openresponses/tools/__init__.py +0 -0
  591. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/openresponses/tools/apply_patch.py +0 -0
  592. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/openresponses/tools/code_interpreter.py +0 -0
  593. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/openresponses/tools/file_search.py +0 -0
  594. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/openresponses/tools/mcp_adapter.py +0 -0
  595. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/prime_agent.py +0 -0
  596. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/profiles.py +0 -0
  597. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/recommendations.py +0 -0
  598. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/registry.py +0 -0
  599. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/subscription_env.py +0 -0
  600. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/subscription_login.py +0 -0
  601. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/uhp.py +0 -0
  602. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/providers/usage.py +0 -0
  603. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/pure_mode.py +0 -0
  604. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/py.typed +0 -0
  605. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/rendering/__init__.py +0 -0
  606. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/rendering/html_export.py +0 -0
  607. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/rendering/markdown.py +0 -0
  608. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/rendering/transcript_export.py +0 -0
  609. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/rlm/__init__.py +0 -0
  610. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/rlm/coding_session.py +0 -0
  611. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/rlm/config.py +0 -0
  612. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/rlm/context.py +0 -0
  613. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/rlm/identity.py +0 -0
  614. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/rlm/kernel.py +0 -0
  615. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/rlm/kernel_backend.py +0 -0
  616. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/rlm/kernel_docker.py +0 -0
  617. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/rlm/kernel_monty.py +0 -0
  618. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/rlm/kernel_server.py +0 -0
  619. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/rlm/policy.py +0 -0
  620. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/rlm/root_runtime.py +0 -0
  621. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/rlm/root_worker.py +0 -0
  622. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/rlm/sandbox.py +0 -0
  623. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/rlm/subcalls.py +0 -0
  624. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/rlm/supervisor.py +0 -0
  625. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/rlm/worker.py +0 -0
  626. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/rlm/worker_process.py +0 -0
  627. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/runtime/__init__.py +0 -0
  628. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/runtime/adk.py +0 -0
  629. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/runtime/antigravity_cli.py +0 -0
  630. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/runtime/antigravity_managed.py +0 -0
  631. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/runtime/antigravity_sdk.py +0 -0
  632. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/runtime/antigravity_status.py +0 -0
  633. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/runtime/base.py +0 -0
  634. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/runtime/builtin.py +0 -0
  635. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/runtime/claude_agent_sdk.py +0 -0
  636. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/runtime/codex_sdk.py +0 -0
  637. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/runtime/copilot_sdk.py +0 -0
  638. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/runtime/devin_cli.py +0 -0
  639. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/runtime/devin_status.py +0 -0
  640. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/runtime/errors.py +0 -0
  641. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/runtime/openai_agents.py +0 -0
  642. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/runtime/openai_sandbox.py +0 -0
  643. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/runtime/openai_session.py +0 -0
  644. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/runtime/pydanticai.py +0 -0
  645. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/runtime/registry.py +0 -0
  646. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/runtime/tool_bridge.py +0 -0
  647. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/runtime/tool_bridge_openai.py +0 -0
  648. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/runtime/tool_bridge_pydanticai.py +0 -0
  649. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/runtime/vendor_cli.py +0 -0
  650. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/safety/__init__.py +0 -0
  651. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/safety/sandbox.py +0 -0
  652. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/safety/warnings.py +0 -0
  653. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/sandbox/__init__.py +0 -0
  654. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/sandbox/backends.py +0 -0
  655. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/sandbox/execution.py +0 -0
  656. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/sandbox/local_sandbox.py +0 -0
  657. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/search_registry.py +0 -0
  658. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/server/__init__.py +0 -0
  659. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/server/api.py +0 -0
  660. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/server/web.py +0 -0
  661. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/session/__init__.py +0 -0
  662. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/session/factory.py +0 -0
  663. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/session/persistence.py +0 -0
  664. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/session/share_artifacts.py +0 -0
  665. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/session/sharing.py +0 -0
  666. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/session/switchboard.py +0 -0
  667. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/session.py +0 -0
  668. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/sidebar.py +0 -0
  669. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/skillopt.py +0 -0
  670. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/skills.py +0 -0
  671. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/stream_view.py +0 -0
  672. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/styles/__init__.py +0 -0
  673. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tool_call.py +0 -0
  674. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/__init__.py +0 -0
  675. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/agent_tools.py +0 -0
  676. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/apply_patch.py +0 -0
  677. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/base.py +0 -0
  678. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/batch_tool.py +0 -0
  679. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/compact_tool.py +0 -0
  680. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/context_handle.py +0 -0
  681. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/context_tools.py +0 -0
  682. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/core_tools.py +0 -0
  683. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/diagnostics.py +0 -0
  684. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/diff_utils.py +0 -0
  685. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/display.py +0 -0
  686. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/dynamic_workflow.py +0 -0
  687. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/edit_tools.py +0 -0
  688. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/enhanced_base.py +0 -0
  689. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/env_policy.py +0 -0
  690. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/file_tools.py +0 -0
  691. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/file_tracking.py +0 -0
  692. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/governed.py +0 -0
  693. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/harness_agent_session.py +0 -0
  694. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/image_tools.py +0 -0
  695. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/lsp_tools.py +0 -0
  696. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/mcp_tools.py +0 -0
  697. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/monty_tool.py +0 -0
  698. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/network_tools.py +0 -0
  699. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/output_spill.py +0 -0
  700. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/peer_agent_tools.py +0 -0
  701. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/permissions.py +0 -0
  702. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/post_edit.py +0 -0
  703. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/question_tool.py +0 -0
  704. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/request_permissions_tool.py +0 -0
  705. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/search_tools.py +0 -0
  706. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/semantic_search.py +0 -0
  707. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/shell_session.py +0 -0
  708. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/shell_tools.py +0 -0
  709. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/skill_tools.py +0 -0
  710. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/spawn_harness.py +0 -0
  711. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/todo_tools.py +0 -0
  712. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/tool_search.py +0 -0
  713. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/validation.py +0 -0
  714. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tools/web_tools.py +0 -0
  715. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tui_integration.py +0 -0
  716. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tui_widgets/__init__.py +0 -0
  717. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tui_widgets/widgets/__init__.py +0 -0
  718. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tui_widgets/widgets/progress.py +0 -0
  719. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/tui_widgets/widgets/tool_display.py +0 -0
  720. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/undo_manager.py +0 -0
  721. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/utils/__init__.py +0 -0
  722. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/utils/error_handling.py +0 -0
  723. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/utils/fuzzy.py +0 -0
  724. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/__init__.py +0 -0
  725. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/a2a_connect.py +0 -0
  726. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/agent_store.py +0 -0
  727. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/agent_switcher.py +0 -0
  728. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/animation_manager.py +0 -0
  729. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/code_context.py +0 -0
  730. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/command_palette.py +0 -0
  731. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/connection_status.py +0 -0
  732. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/conversation_history.py +0 -0
  733. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/diff_indicator.py +0 -0
  734. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/enhanced_status_bar.py +0 -0
  735. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/enhanced_toast.py +0 -0
  736. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/file_browser.py +0 -0
  737. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/file_reference.py +0 -0
  738. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/harness_hub.py +0 -0
  739. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/leader_key.py +0 -0
  740. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/mode_switcher.py +0 -0
  741. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/model_picker.py +0 -0
  742. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/outcome_screen.py +0 -0
  743. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/permission_preview.py +0 -0
  744. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/prompt.py +0 -0
  745. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/provider_connect.py +0 -0
  746. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/pty_shell.py +0 -0
  747. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/resizable_sidebar.py +0 -0
  748. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/response_changes.py +0 -0
  749. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/response_display.py +0 -0
  750. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/rewind_overlay.py +0 -0
  751. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/rich_tool_display.py +0 -0
  752. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/sidebar_panels.py +0 -0
  753. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/slash_commands.py +0 -0
  754. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/slash_complete.py +0 -0
  755. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/split_view.py +0 -0
  756. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/status_bar.py +0 -0
  757. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/superqode_display.py +0 -0
  758. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/theme_picker.py +0 -0
  759. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/thinking.py +0 -0
  760. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/thinking_display.py +0 -0
  761. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/throbber.py +0 -0
  762. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/toast.py +0 -0
  763. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/uhp_connect.py +0 -0
  764. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/widgets/unified_output.py +0 -0
  765. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/workorders/__init__.py +0 -0
  766. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/workorders/cockpit.py +0 -0
  767. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/workorders/integration.py +0 -0
  768. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/workorders/models.py +0 -0
  769. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/workorders/runner.py +0 -0
  770. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/workorders/store.py +0 -0
  771. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/workorders/usage.py +0 -0
  772. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/workorders/worker.py +0 -0
  773. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/workspace/__init__.py +0 -0
  774. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/workspace/artifacts.py +0 -0
  775. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/workspace/change_summary.py +0 -0
  776. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/workspace/coordinator.py +0 -0
  777. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/workspace/diff_tracker.py +0 -0
  778. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/workspace/git_guard.py +0 -0
  779. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/workspace/git_snapshot.py +0 -0
  780. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/workspace/manager.py +0 -0
  781. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/workspace/snapshot.py +0 -0
  782. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/workspace/watcher.py +0 -0
  783. {superqode-2.2.4 → superqode-2.2.5}/src/superqode/workspace/worktree.py +0 -0
  784. {superqode-2.2.4 → superqode-2.2.5}/src/superqode.egg-info/SOURCES.txt +0 -0
  785. {superqode-2.2.4 → superqode-2.2.5}/src/superqode.egg-info/dependency_links.txt +0 -0
  786. {superqode-2.2.4 → superqode-2.2.5}/src/superqode.egg-info/entry_points.txt +0 -0
  787. {superqode-2.2.4 → superqode-2.2.5}/src/superqode.egg-info/requires.txt +0 -0
  788. {superqode-2.2.4 → superqode-2.2.5}/src/superqode.egg-info/top_level.txt +0 -0
  789. {superqode-2.2.4 → superqode-2.2.5}/tests/test_030_candidate.py +0 -0
  790. {superqode-2.2.4 → superqode-2.2.5}/tests/test_a2a_bridge.py +0 -0
  791. {superqode-2.2.4 → superqode-2.2.5}/tests/test_a2a_conformance.py +0 -0
  792. {superqode-2.2.4 → superqode-2.2.5}/tests/test_a2a_connect.py +0 -0
  793. {superqode-2.2.4 → superqode-2.2.5}/tests/test_a2a_context.py +0 -0
  794. {superqode-2.2.4 → superqode-2.2.5}/tests/test_a2a_keys.py +0 -0
  795. {superqode-2.2.4 → superqode-2.2.5}/tests/test_a2a_limits.py +0 -0
  796. {superqode-2.2.4 → superqode-2.2.5}/tests/test_a2a_oauth.py +0 -0
  797. {superqode-2.2.4 → superqode-2.2.5}/tests/test_a2a_security.py +0 -0
  798. {superqode-2.2.4 → superqode-2.2.5}/tests/test_a2a_shortlist.py +0 -0
  799. {superqode-2.2.4 → superqode-2.2.5}/tests/test_a2a_trust.py +0 -0
  800. {superqode-2.2.4 → superqode-2.2.5}/tests/test_a2a_understand.py +0 -0
  801. {superqode-2.2.4 → superqode-2.2.5}/tests/test_acp_agent_dispatch.py +0 -0
  802. {superqode-2.2.4 → superqode-2.2.5}/tests/test_acp_client.py +0 -0
  803. {superqode-2.2.4 → superqode-2.2.5}/tests/test_acp_free_models.py +0 -0
  804. {superqode-2.2.4 → superqode-2.2.5}/tests/test_acp_parent_tool_linking.py +0 -0
  805. {superqode-2.2.4 → superqode-2.2.5}/tests/test_acp_permission_store.py +0 -0
  806. {superqode-2.2.4 → superqode-2.2.5}/tests/test_acp_registry.py +0 -0
  807. {superqode-2.2.4 → superqode-2.2.5}/tests/test_acp_render.py +0 -0
  808. {superqode-2.2.4 → superqode-2.2.5}/tests/test_acp_server.py +0 -0
  809. {superqode-2.2.4 → superqode-2.2.5}/tests/test_acp_session_store.py +0 -0
  810. {superqode-2.2.4 → superqode-2.2.5}/tests/test_acp_slash.py +0 -0
  811. {superqode-2.2.4 → superqode-2.2.5}/tests/test_adaptive_compaction.py +0 -0
  812. {superqode-2.2.4 → superqode-2.2.5}/tests/test_agent_importer.py +0 -0
  813. {superqode-2.2.4 → superqode-2.2.5}/tests/test_agent_install_commands.py +0 -0
  814. {superqode-2.2.4 → superqode-2.2.5}/tests/test_agent_loop_harness.py +0 -0
  815. {superqode-2.2.4 → superqode-2.2.5}/tests/test_agent_memory.py +0 -0
  816. {superqode-2.2.4 → superqode-2.2.5}/tests/test_agents_md_compat.py +0 -0
  817. {superqode-2.2.4 → superqode-2.2.5}/tests/test_agy_tui_commands.py +0 -0
  818. {superqode-2.2.4 → superqode-2.2.5}/tests/test_app_main_contract.py +0 -0
  819. {superqode-2.2.4 → superqode-2.2.5}/tests/test_apply_patch.py +0 -0
  820. {superqode-2.2.4 → superqode-2.2.5}/tests/test_auth.py +0 -0
  821. {superqode-2.2.4 → superqode-2.2.5}/tests/test_bash_spill.py +0 -0
  822. {superqode-2.2.4 → superqode-2.2.5}/tests/test_benchmarks.py +0 -0
  823. {superqode-2.2.4 → superqode-2.2.5}/tests/test_catalog_freshness.py +0 -0
  824. {superqode-2.2.4 → superqode-2.2.5}/tests/test_change_summary.py +0 -0
  825. {superqode-2.2.4 → superqode-2.2.5}/tests/test_channels.py +0 -0
  826. {superqode-2.2.4 → superqode-2.2.5}/tests/test_cli_commands.py +0 -0
  827. {superqode-2.2.4 → superqode-2.2.5}/tests/test_cli_connect.py +0 -0
  828. {superqode-2.2.4 → superqode-2.2.5}/tests/test_cli_contract.py +0 -0
  829. {superqode-2.2.4 → superqode-2.2.5}/tests/test_cli_reference_coverage.py +0 -0
  830. {superqode-2.2.4 → superqode-2.2.5}/tests/test_clickable_commands.py +0 -0
  831. {superqode-2.2.4 → superqode-2.2.5}/tests/test_command_safety.py +0 -0
  832. {superqode-2.2.4 → superqode-2.2.5}/tests/test_commands_runtime.py +0 -0
  833. {superqode-2.2.4 → superqode-2.2.5}/tests/test_compaction.py +0 -0
  834. {superqode-2.2.4 → superqode-2.2.5}/tests/test_config_loader.py +0 -0
  835. {superqode-2.2.4 → superqode-2.2.5}/tests/test_config_runtime.py +0 -0
  836. {superqode-2.2.4 → superqode-2.2.5}/tests/test_connect_harness_screen.py +0 -0
  837. {superqode-2.2.4 → superqode-2.2.5}/tests/test_connect_setup.py +0 -0
  838. {superqode-2.2.4 → superqode-2.2.5}/tests/test_connection_profiles.py +0 -0
  839. {superqode-2.2.4 → superqode-2.2.5}/tests/test_context_handles.py +0 -0
  840. {superqode-2.2.4 → superqode-2.2.5}/tests/test_context_probe.py +0 -0
  841. {superqode-2.2.4 → superqode-2.2.5}/tests/test_context_remaining.py +0 -0
  842. {superqode-2.2.4 → superqode-2.2.5}/tests/test_copilot_login_ux.py +0 -0
  843. {superqode-2.2.4 → superqode-2.2.5}/tests/test_copilot_tui_commands.py +0 -0
  844. {superqode-2.2.4 → superqode-2.2.5}/tests/test_create_skill_tool.py +0 -0
  845. {superqode-2.2.4 → superqode-2.2.5}/tests/test_deepagents_model_spec.py +0 -0
  846. {superqode-2.2.4 → superqode-2.2.5}/tests/test_deferred_tools.py +0 -0
  847. {superqode-2.2.4 → superqode-2.2.5}/tests/test_design_system_contrast.py +0 -0
  848. {superqode-2.2.4 → superqode-2.2.5}/tests/test_developer_workflow_docs.py +0 -0
  849. {superqode-2.2.4 → superqode-2.2.5}/tests/test_ds4_local_client.py +0 -0
  850. {superqode-2.2.4 → superqode-2.2.5}/tests/test_dsh_harness.py +0 -0
  851. {superqode-2.2.4 → superqode-2.2.5}/tests/test_dynamic_workflow_tool.py +0 -0
  852. {superqode-2.2.4 → superqode-2.2.5}/tests/test_edit_line_number_strip.py +0 -0
  853. {superqode-2.2.4 → superqode-2.2.5}/tests/test_env_introspect.py +0 -0
  854. {superqode-2.2.4 → superqode-2.2.5}/tests/test_execution_resolver.py +0 -0
  855. {superqode-2.2.4 → superqode-2.2.5}/tests/test_extensions.py +0 -0
  856. {superqode-2.2.4 → superqode-2.2.5}/tests/test_final_parity_wave.py +0 -0
  857. {superqode-2.2.4 → superqode-2.2.5}/tests/test_free_models.py +0 -0
  858. {superqode-2.2.4 → superqode-2.2.5}/tests/test_governance.py +0 -0
  859. {superqode-2.2.4 → superqode-2.2.5}/tests/test_grok_cli_auth.py +0 -0
  860. {superqode-2.2.4 → superqode-2.2.5}/tests/test_harness_agent_session.py +0 -0
  861. {superqode-2.2.4 → superqode-2.2.5}/tests/test_harness_backends.py +0 -0
  862. {superqode-2.2.4 → superqode-2.2.5}/tests/test_harness_bench.py +0 -0
  863. {superqode-2.2.4 → superqode-2.2.5}/tests/test_harness_bench_paths.py +0 -0
  864. {superqode-2.2.4 → superqode-2.2.5}/tests/test_harness_catalog.py +0 -0
  865. {superqode-2.2.4 → superqode-2.2.5}/tests/test_harness_connect_catalog.py +0 -0
  866. {superqode-2.2.4 → superqode-2.2.5}/tests/test_harness_drift.py +0 -0
  867. {superqode-2.2.4 → superqode-2.2.5}/tests/test_harness_eval_splits.py +0 -0
  868. {superqode-2.2.4 → superqode-2.2.5}/tests/test_harness_examples.py +0 -0
  869. {superqode-2.2.4 → superqode-2.2.5}/tests/test_harness_explain.py +0 -0
  870. {superqode-2.2.4 → superqode-2.2.5}/tests/test_harness_hooks.py +0 -0
  871. {superqode-2.2.4 → superqode-2.2.5}/tests/test_harness_hub_catalog.py +0 -0
  872. {superqode-2.2.4 → superqode-2.2.5}/tests/test_harness_hub_screen.py +0 -0
  873. {superqode-2.2.4 → superqode-2.2.5}/tests/test_harness_kernel.py +0 -0
  874. {superqode-2.2.4 → superqode-2.2.5}/tests/test_harness_mcp_server.py +0 -0
  875. {superqode-2.2.4 → superqode-2.2.5}/tests/test_harness_model_policy.py +0 -0
  876. {superqode-2.2.4 → superqode-2.2.5}/tests/test_harness_observability.py +0 -0
  877. {superqode-2.2.4 → superqode-2.2.5}/tests/test_harness_omni.py +0 -0
  878. {superqode-2.2.4 → superqode-2.2.5}/tests/test_harness_output.py +0 -0
  879. {superqode-2.2.4 → superqode-2.2.5}/tests/test_harness_permissions.py +0 -0
  880. {superqode-2.2.4 → superqode-2.2.5}/tests/test_harness_promotion.py +0 -0
  881. {superqode-2.2.4 → superqode-2.2.5}/tests/test_harness_protocol.py +0 -0
  882. {superqode-2.2.4 → superqode-2.2.5}/tests/test_harness_sandbox.py +0 -0
  883. {superqode-2.2.4 → superqode-2.2.5}/tests/test_harness_seesaw_dimensions.py +0 -0
  884. {superqode-2.2.4 → superqode-2.2.5}/tests/test_harness_self_improve.py +0 -0
  885. {superqode-2.2.4 → superqode-2.2.5}/tests/test_harness_spec.py +0 -0
  886. {superqode-2.2.4 → superqode-2.2.5}/tests/test_harness_store.py +0 -0
  887. {superqode-2.2.4 → superqode-2.2.5}/tests/test_harness_usage.py +0 -0
  888. {superqode-2.2.4 → superqode-2.2.5}/tests/test_harness_wizard.py +0 -0
  889. {superqode-2.2.4 → superqode-2.2.5}/tests/test_harness_workflow.py +0 -0
  890. {superqode-2.2.4 → superqode-2.2.5}/tests/test_headless.py +0 -0
  891. {superqode-2.2.4 → superqode-2.2.5}/tests/test_hf_fetch.py +0 -0
  892. {superqode-2.2.4 → superqode-2.2.5}/tests/test_hooks.py +0 -0
  893. {superqode-2.2.4 → superqode-2.2.5}/tests/test_install_script.py +0 -0
  894. {superqode-2.2.4 → superqode-2.2.5}/tests/test_integration_docs.py +0 -0
  895. {superqode-2.2.4 → superqode-2.2.5}/tests/test_kimi_k3_provider.py +0 -0
  896. {superqode-2.2.4 → superqode-2.2.5}/tests/test_kimi_k3_routes.py +0 -0
  897. {superqode-2.2.4 → superqode-2.2.5}/tests/test_linter_runner.py +0 -0
  898. {superqode-2.2.4 → superqode-2.2.5}/tests/test_litellm_gateway.py +0 -0
  899. {superqode-2.2.4 → superqode-2.2.5}/tests/test_live_acp_registry.py +0 -0
  900. {superqode-2.2.4 → superqode-2.2.5}/tests/test_live_models.py +0 -0
  901. {superqode-2.2.4 → superqode-2.2.5}/tests/test_local_airplane.py +0 -0
  902. {superqode-2.2.4 → superqode-2.2.5}/tests/test_local_build.py +0 -0
  903. {superqode-2.2.4 → superqode-2.2.5}/tests/test_local_code_index.py +0 -0
  904. {superqode-2.2.4 → superqode-2.2.5}/tests/test_local_labs.py +0 -0
  905. {superqode-2.2.4 → superqode-2.2.5}/tests/test_local_migrate.py +0 -0
  906. {superqode-2.2.4 → superqode-2.2.5}/tests/test_local_model_optimizations.py +0 -0
  907. {superqode-2.2.4 → superqode-2.2.5}/tests/test_local_packs.py +0 -0
  908. {superqode-2.2.4 → superqode-2.2.5}/tests/test_local_sandbox.py +0 -0
  909. {superqode-2.2.4 → superqode-2.2.5}/tests/test_local_search.py +0 -0
  910. {superqode-2.2.4 → superqode-2.2.5}/tests/test_local_servers.py +0 -0
  911. {superqode-2.2.4 → superqode-2.2.5}/tests/test_local_setup.py +0 -0
  912. {superqode-2.2.4 → superqode-2.2.5}/tests/test_local_smoke.py +0 -0
  913. {superqode-2.2.4 → superqode-2.2.5}/tests/test_local_stack.py +0 -0
  914. {superqode-2.2.4 → superqode-2.2.5}/tests/test_local_tool_capabilities.py +0 -0
  915. {superqode-2.2.4 → superqode-2.2.5}/tests/test_local_tool_support.py +0 -0
  916. {superqode-2.2.4 → superqode-2.2.5}/tests/test_login_api.py +0 -0
  917. {superqode-2.2.4 → superqode-2.2.5}/tests/test_loop_guard.py +0 -0
  918. {superqode-2.2.4 → superqode-2.2.5}/tests/test_managed_harness_backend.py +0 -0
  919. {superqode-2.2.4 → superqode-2.2.5}/tests/test_markdown_render.py +0 -0
  920. {superqode-2.2.4 → superqode-2.2.5}/tests/test_mcp.py +0 -0
  921. {superqode-2.2.4 → superqode-2.2.5}/tests/test_mcp_example_server.py +0 -0
  922. {superqode-2.2.4 → superqode-2.2.5}/tests/test_mcp_integration.py +0 -0
  923. {superqode-2.2.4 → superqode-2.2.5}/tests/test_mcp_live.py +0 -0
  924. {superqode-2.2.4 → superqode-2.2.5}/tests/test_mcp_oauth_generalized.py +0 -0
  925. {superqode-2.2.4 → superqode-2.2.5}/tests/test_mcp_tools_runtime.py +0 -0
  926. {superqode-2.2.4 → superqode-2.2.5}/tests/test_mcp_two_way.py +0 -0
  927. {superqode-2.2.4 → superqode-2.2.5}/tests/test_memory_recall.py +0 -0
  928. {superqode-2.2.4 → superqode-2.2.5}/tests/test_mlx_tools.py +0 -0
  929. {superqode-2.2.4 → superqode-2.2.5}/tests/test_model_profiles.py +0 -0
  930. {superqode-2.2.4 → superqode-2.2.5}/tests/test_model_specs.py +0 -0
  931. {superqode-2.2.4 → superqode-2.2.5}/tests/test_models_dev.py +0 -0
  932. {superqode-2.2.4 → superqode-2.2.5}/tests/test_monty_tool.py +0 -0
  933. {superqode-2.2.4 → superqode-2.2.5}/tests/test_navigation_history.py +0 -0
  934. {superqode-2.2.4 → superqode-2.2.5}/tests/test_network_policy.py +0 -0
  935. {superqode-2.2.4 → superqode-2.2.5}/tests/test_ollama_client.py +0 -0
  936. {superqode-2.2.4 → superqode-2.2.5}/tests/test_omnigent_agent_session_smoke.py +0 -0
  937. {superqode-2.2.4 → superqode-2.2.5}/tests/test_omnigent_importer.py +0 -0
  938. {superqode-2.2.4 → superqode-2.2.5}/tests/test_openai_session.py +0 -0
  939. {superqode-2.2.4 → superqode-2.2.5}/tests/test_output_spill.py +0 -0
  940. {superqode-2.2.4 → superqode-2.2.5}/tests/test_parallel_compare.py +0 -0
  941. {superqode-2.2.4 → superqode-2.2.5}/tests/test_peer_agents.py +0 -0
  942. {superqode-2.2.4 → superqode-2.2.5}/tests/test_plugin_hook_wiring.py +0 -0
  943. {superqode-2.2.4 → superqode-2.2.5}/tests/test_plugins.py +0 -0
  944. {superqode-2.2.4 → superqode-2.2.5}/tests/test_policies_and_turndiff.py +0 -0
  945. {superqode-2.2.4 → superqode-2.2.5}/tests/test_post_edit_verify.py +0 -0
  946. {superqode-2.2.4 → superqode-2.2.5}/tests/test_prime_agent_client.py +0 -0
  947. {superqode-2.2.4 → superqode-2.2.5}/tests/test_prime_agent_harness.py +0 -0
  948. {superqode-2.2.4 → superqode-2.2.5}/tests/test_prime_agent_provider.py +0 -0
  949. {superqode-2.2.4 → superqode-2.2.5}/tests/test_prime_command_surface.py +0 -0
  950. {superqode-2.2.4 → superqode-2.2.5}/tests/test_prime_tui_rpc.py +0 -0
  951. {superqode-2.2.4 → superqode-2.2.5}/tests/test_progressive_discovery.py +0 -0
  952. {superqode-2.2.4 → superqode-2.2.5}/tests/test_progressive_reveals.py +0 -0
  953. {superqode-2.2.4 → superqode-2.2.5}/tests/test_project_trust.py +0 -0
  954. {superqode-2.2.4 → superqode-2.2.5}/tests/test_prompt_stack.py +0 -0
  955. {superqode-2.2.4 → superqode-2.2.5}/tests/test_provider_catalog.py +0 -0
  956. {superqode-2.2.4 → superqode-2.2.5}/tests/test_provider_dynamic.py +0 -0
  957. {superqode-2.2.4 → superqode-2.2.5}/tests/test_provider_models.py +0 -0
  958. {superqode-2.2.4 → superqode-2.2.5}/tests/test_provider_recommendations.py +0 -0
  959. {superqode-2.2.4 → superqode-2.2.5}/tests/test_pure_mode_sessions.py +0 -0
  960. {superqode-2.2.4 → superqode-2.2.5}/tests/test_qm_deployment_layer.py +0 -0
  961. {superqode-2.2.4 → superqode-2.2.5}/tests/test_rate_limit_retry.py +0 -0
  962. {superqode-2.2.4 → superqode-2.2.5}/tests/test_read_tool_limits.py +0 -0
  963. {superqode-2.2.4 → superqode-2.2.5}/tests/test_reasoning_and_budget.py +0 -0
  964. {superqode-2.2.4 → superqode-2.2.5}/tests/test_recursive_eval_packs.py +0 -0
  965. {superqode-2.2.4 → superqode-2.2.5}/tests/test_release_metadata.py +0 -0
  966. {superqode-2.2.4 → superqode-2.2.5}/tests/test_rlm_code_integration.py +0 -0
  967. {superqode-2.2.4 → superqode-2.2.5}/tests/test_runtime_adk.py +0 -0
  968. {superqode-2.2.4 → superqode-2.2.5}/tests/test_runtime_antigravity_cli.py +0 -0
  969. {superqode-2.2.4 → superqode-2.2.5}/tests/test_runtime_antigravity_managed.py +0 -0
  970. {superqode-2.2.4 → superqode-2.2.5}/tests/test_runtime_antigravity_sdk.py +0 -0
  971. {superqode-2.2.4 → superqode-2.2.5}/tests/test_runtime_builtin.py +0 -0
  972. {superqode-2.2.4 → superqode-2.2.5}/tests/test_runtime_claude_agent_sdk.py +0 -0
  973. {superqode-2.2.4 → superqode-2.2.5}/tests/test_runtime_codex_sdk.py +0 -0
  974. {superqode-2.2.4 → superqode-2.2.5}/tests/test_runtime_copilot_sdk.py +0 -0
  975. {superqode-2.2.4 → superqode-2.2.5}/tests/test_runtime_devin_cli.py +0 -0
  976. {superqode-2.2.4 → superqode-2.2.5}/tests/test_runtime_dialog.py +0 -0
  977. {superqode-2.2.4 → superqode-2.2.5}/tests/test_runtime_openai_agents.py +0 -0
  978. {superqode-2.2.4 → superqode-2.2.5}/tests/test_runtime_openai_events.py +0 -0
  979. {superqode-2.2.4 → superqode-2.2.5}/tests/test_runtime_openai_hitl.py +0 -0
  980. {superqode-2.2.4 → superqode-2.2.5}/tests/test_runtime_openai_sandbox.py +0 -0
  981. {superqode-2.2.4 → superqode-2.2.5}/tests/test_runtime_protocol.py +0 -0
  982. {superqode-2.2.4 → superqode-2.2.5}/tests/test_runtime_pydanticai.py +0 -0
  983. {superqode-2.2.4 → superqode-2.2.5}/tests/test_sandbox_backends.py +0 -0
  984. {superqode-2.2.4 → superqode-2.2.5}/tests/test_sandbox_execution.py +0 -0
  985. {superqode-2.2.4 → superqode-2.2.5}/tests/test_search_roots.py +0 -0
  986. {superqode-2.2.4 → superqode-2.2.5}/tests/test_semantic_search.py +0 -0
  987. {superqode-2.2.4 → superqode-2.2.5}/tests/test_session_switchboard.py +0 -0
  988. {superqode-2.2.4 → superqode-2.2.5}/tests/test_shell_session.py +0 -0
  989. {superqode-2.2.4 → superqode-2.2.5}/tests/test_simple_login.py +0 -0
  990. {superqode-2.2.4 → superqode-2.2.5}/tests/test_simple_query_fastpath.py +0 -0
  991. {superqode-2.2.4 → superqode-2.2.5}/tests/test_skillopt.py +0 -0
  992. {superqode-2.2.4 → superqode-2.2.5}/tests/test_slash_runtime.py +0 -0
  993. {superqode-2.2.4 → superqode-2.2.5}/tests/test_spawn_harness_tool.py +0 -0
  994. {superqode-2.2.4 → superqode-2.2.5}/tests/test_status_bar_layout.py +0 -0
  995. {superqode-2.2.4 → superqode-2.2.5}/tests/test_steering_continue_reminders.py +0 -0
  996. {superqode-2.2.4 → superqode-2.2.5}/tests/test_streaming_tool_calls.py +0 -0
  997. {superqode-2.2.4 → superqode-2.2.5}/tests/test_subscription_billing_policy.py +0 -0
  998. {superqode-2.2.4 → superqode-2.2.5}/tests/test_subscription_login.py +0 -0
  999. {superqode-2.2.4 → superqode-2.2.5}/tests/test_subscription_login_consent.py +0 -0
  1000. {superqode-2.2.4 → superqode-2.2.5}/tests/test_synthetic_gateways.py +0 -0
  1001. {superqode-2.2.4 → superqode-2.2.5}/tests/test_tau_harness_adapter.py +0 -0
  1002. {superqode-2.2.4 → superqode-2.2.5}/tests/test_terminal_output_limits.py +0 -0
  1003. {superqode-2.2.4 → superqode-2.2.5}/tests/test_theme_contrast.py +0 -0
  1004. {superqode-2.2.4 → superqode-2.2.5}/tests/test_theme_picker.py +0 -0
  1005. {superqode-2.2.4 → superqode-2.2.5}/tests/test_theme_repaint.py +0 -0
  1006. {superqode-2.2.4 → superqode-2.2.5}/tests/test_todo_tools.py +0 -0
  1007. {superqode-2.2.4 → superqode-2.2.5}/tests/test_tool_args_repair.py +0 -0
  1008. {superqode-2.2.4 → superqode-2.2.5}/tests/test_tool_batch_safety.py +0 -0
  1009. {superqode-2.2.4 → superqode-2.2.5}/tests/test_tool_bridge.py +0 -0
  1010. {superqode-2.2.4 → superqode-2.2.5}/tests/test_tool_bridge_openai.py +0 -0
  1011. {superqode-2.2.4 → superqode-2.2.5}/tests/test_tool_call_repair.py +0 -0
  1012. {superqode-2.2.4 → superqode-2.2.5}/tests/test_tool_output_pruning.py +0 -0
  1013. {superqode-2.2.4 → superqode-2.2.5}/tests/test_tool_tracking.py +0 -0
  1014. {superqode-2.2.4 → superqode-2.2.5}/tests/test_tools.py +0 -0
  1015. {superqode-2.2.4 → superqode-2.2.5}/tests/test_tui_change_summary.py +0 -0
  1016. {superqode-2.2.4 → superqode-2.2.5}/tests/test_tui_chat_mode.py +0 -0
  1017. {superqode-2.2.4 → superqode-2.2.5}/tests/test_tui_diagnostics.py +0 -0
  1018. {superqode-2.2.4 → superqode-2.2.5}/tests/test_tui_exit.py +0 -0
  1019. {superqode-2.2.4 → superqode-2.2.5}/tests/test_tui_feedback.py +0 -0
  1020. {superqode-2.2.4 → superqode-2.2.5}/tests/test_tui_launch_performance.py +0 -0
  1021. {superqode-2.2.4 → superqode-2.2.5}/tests/test_tui_llamacpp_connect.py +0 -0
  1022. {superqode-2.2.4 → superqode-2.2.5}/tests/test_tui_markdown_cleanup.py +0 -0
  1023. {superqode-2.2.4 → superqode-2.2.5}/tests/test_tui_mlx_connect.py +0 -0
  1024. {superqode-2.2.4 → superqode-2.2.5}/tests/test_tui_mounted.py +0 -0
  1025. {superqode-2.2.4 → superqode-2.2.5}/tests/test_tui_onboarding.py +0 -0
  1026. {superqode-2.2.4 → superqode-2.2.5}/tests/test_tui_smoke.py +0 -0
  1027. {superqode-2.2.4 → superqode-2.2.5}/tests/test_tui_tool_display.py +0 -0
  1028. {superqode-2.2.4 → superqode-2.2.5}/tests/test_uhp_backend.py +0 -0
  1029. {superqode-2.2.4 → superqode-2.2.5}/tests/test_update_command.py +0 -0
  1030. {superqode-2.2.4 → superqode-2.2.5}/tests/test_vendor_cli_runtime.py +0 -0
  1031. {superqode-2.2.4 → superqode-2.2.5}/tests/test_version.py +0 -0
  1032. {superqode-2.2.4 → superqode-2.2.5}/tests/test_view_image.py +0 -0
  1033. {superqode-2.2.4 → superqode-2.2.5}/tests/test_web_server_auth.py +0 -0
  1034. {superqode-2.2.4 → superqode-2.2.5}/tests/test_workorders.py +0 -0
  1035. {superqode-2.2.4 → superqode-2.2.5}/tests/test_workspace.py +0 -0
  1036. {superqode-2.2.4 → superqode-2.2.5}/tests/test_zai_provider.py +0 -0
@@ -7,6 +7,45 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [2.2.5] - 2026-09-13
11
+
12
+ SuperQode's UHP server adopts protocol `2026-09-12` and passes the UHP
13
+ conformance suite at class core, 40 of 40 checks with no skips. Every
14
+ capability it advertises it now implements, cancellation included.
15
+
16
+ ### 🧩 Unified Harness Protocol
17
+
18
+ - **UHP `2026-09-12`.** The client targets it and the server serves it
19
+ alongside `2026-08-11`, from one code path, because the newer version is
20
+ additive. The server echoes the version the caller asked for; a caller who
21
+ names none gets the default, which is now `2026-09-12`.
22
+ - The client drops to `2026-08-11` by itself when a server answers
23
+ `unsupported_protocol_version`, so an older server still works.
24
+ - Discovery reports `plugins: false`. The chapter is new in `2026-09-12` and
25
+ belongs to class Full, and a capability a server does not implement is
26
+ reported false instead of omitted.
27
+ - **Six specification requirements the Core suite does not reach.** A response
28
+ now names the harness that served it when the request named none; a
29
+ `previous_response_id` the server no longer retains is `404 session_expired`
30
+ instead of a quiet new session; a model the harness cannot serve is
31
+ `422 model_unavailable` instead of being echoed back as the model that ran;
32
+ session ids carry the specified `hsess` prefix; a repeated `Idempotency-Key`
33
+ waits for the first run instead of returning its in-flight record; and
34
+ `timeout_seconds`, `max_step`, `max_output_tokens` and `background` are
35
+ honoured instead of being accepted and dropped. Work stopped at a budget
36
+ reports `incomplete`, never `completed`.
37
+ - **Cancellation stops the work.** `POST /v1/responses/{id}/cancel` and the
38
+ session equivalent now abort the running turn and wait for it to be over
39
+ before answering, so the response they return is already terminal. Both
40
+ previously marked the record and left the agent running, which on a BYOK
41
+ host meant a cancelled task kept spending the caller's key. A caller
42
+ blocked on the task it cancelled gets the cancelled response instead of a
43
+ dropped request.
44
+ - **Conformant at class core.** `serve uhp` passes the UHP conformance suite
45
+ 40 of 40, no failures and no skips, measured against suite `2026.9.12`. The
46
+ report is in `docs/assets/`. The class named in the discovery
47
+ document is now one the suite backs.
48
+
10
49
  ## [2.2.4] - 2026-09-13
11
50
 
12
51
  Hosting a UHP harness gets its own install extra, so `serve uhp` no longer
@@ -29,26 +68,20 @@ conformance suite against a local bind.
29
68
 
30
69
  ## [2.2.3] - 2026-09-13
31
70
 
32
- Security fixes for the UHP client and the BYOK server bind shipped in 2.2.2.
33
- Anyone who ran `superqode connect uhp` on 2.2.2 sent their model key to the
34
- address they connected to, including on the anonymous discovery request, so
35
- upgrading is worth doing before the next connect. No API changed and no
36
- protocol behaviour changed: the Core conformance result is the same 38/40.
71
+ Credential handling fixes for the UHP client and the BYOK server bind shipped
72
+ in 2.2.2. Anyone who used `connect uhp` on 2.2.2 should upgrade. No API
73
+ changed and no protocol behaviour changed: the Core conformance result is the
74
+ same 38/40.
37
75
 
38
76
  ### 🔐 UHP security
39
77
 
40
- - The client sends `X-Provider-Api-Key` on a task submission only. It was
41
- attached to every request, including the anonymous discovery and catalog
42
- GETs, so `connect uhp --base-url <address>` handed that address the caller's
43
- model key before the caller had decided to trust it. The key is also
44
- withheld from a remote plaintext `http://` origin, with a warning.
45
- - A caller's model key no longer races with another caller's. It is written to
46
- every environment variable the provider reads, and BYOK turns are serialised
47
- for as long as it is in the process environment, which LiteLLM reads
48
- credentials from. Concurrent turns previously overwrote each other's key.
49
- - `Dockerfile.uhp` no longer passes `--api-key` on the command line. The bearer
50
- came from the environment either way, and the argument published it in
51
- `/proc/1/cmdline`, which the bound harness's shell tool can read.
78
+ - The client sends `X-Provider-Api-Key` on task submission only. Earlier
79
+ releases attached it more broadly than needed. It is also withheld from a
80
+ remote plaintext `http://` origin, with a warning.
81
+ - A caller's model key no longer races with another caller's on a bind serving
82
+ more than one at a time.
83
+ - `Dockerfile.uhp` takes the bearer from the environment instead of the
84
+ command line.
52
85
  - On a remote bind each session gets its own directory under the working
53
86
  directory, so callers cannot read each other's files or session transcripts.
54
87
  A local bind still runs in the directory it was given.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: superqode
3
- Version: 2.2.4
3
+ Version: 2.2.5
4
4
  Summary: The harness layer for coding agents
5
5
  Author-email: Shashi Jagtap <info@super-agentic.ai>
6
6
  Maintainer-email: Shashi Jagtap <info@super-agentic.ai>
@@ -476,15 +476,20 @@ Read the [A2A guide](docs/providers/a2a.md).
476
476
  The same install that drives a remote UHP server can also expose a local
477
477
  HarnessSpec so other UHP clients call SuperQode:
478
478
 
479
+ Serving needs the `uhp` extra (FastAPI and uvicorn). The client side needs
480
+ nothing extra.
481
+
479
482
  ```bash
483
+ uv tool install 'superqode[uhp]'
480
484
  superqode serve uhp --spec harness.yaml --port 8787
481
485
  superqode connect uhp --base-url http://127.0.0.1:8787
482
486
  superqode harness run uhp --prompt "summarise this repository"
483
487
  ```
484
488
 
485
- `serve uhp` binds one HarnessSpec and advertises UHP Core. It is complementary
486
- to HarnessRouter, which wraps third-party CLIs as a catalog. Core names the
487
- surface SuperQode implements; it is not a conformance-suite certificate.
489
+ `serve uhp` binds one HarnessSpec and is complementary to HarnessRouter, which
490
+ wraps third-party CLIs as a catalog. It passes the UHP conformance suite at
491
+ class core, 40 of 40 checks with no skips, and serves protocol `2026-09-12`
492
+ alongside `2026-08-11`.
488
493
 
489
494
  The public hostname for that bind is [`uhp.superqode.dev`](https://uhp.superqode.dev/v1/uhp).
490
495
  Anonymous callers get discovery and the static harness catalog (no model call).
@@ -322,15 +322,20 @@ Read the [A2A guide](docs/providers/a2a.md).
322
322
  The same install that drives a remote UHP server can also expose a local
323
323
  HarnessSpec so other UHP clients call SuperQode:
324
324
 
325
+ Serving needs the `uhp` extra (FastAPI and uvicorn). The client side needs
326
+ nothing extra.
327
+
325
328
  ```bash
329
+ uv tool install 'superqode[uhp]'
326
330
  superqode serve uhp --spec harness.yaml --port 8787
327
331
  superqode connect uhp --base-url http://127.0.0.1:8787
328
332
  superqode harness run uhp --prompt "summarise this repository"
329
333
  ```
330
334
 
331
- `serve uhp` binds one HarnessSpec and advertises UHP Core. It is complementary
332
- to HarnessRouter, which wraps third-party CLIs as a catalog. Core names the
333
- surface SuperQode implements; it is not a conformance-suite certificate.
335
+ `serve uhp` binds one HarnessSpec and is complementary to HarnessRouter, which
336
+ wraps third-party CLIs as a catalog. It passes the UHP conformance suite at
337
+ class core, 40 of 40 checks with no skips, and serves protocol `2026-09-12`
338
+ alongside `2026-08-11`.
334
339
 
335
340
  The public hostname for that bind is [`uhp.superqode.dev`](https://uhp.superqode.dev/v1/uhp).
336
341
  Anonymous callers get discovery and the static harness catalog (no model call).
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "superqode"
3
- version = "2.2.4"
3
+ version = "2.2.5"
4
4
  description = "The harness layer for coding agents"
5
5
  readme = "README.md"
6
6
  license = "Apache-2.0"
@@ -38,7 +38,7 @@ __all__ = [
38
38
  "sidebar",
39
39
  ]
40
40
 
41
- __version__ = "2.2.4"
41
+ __version__ = "2.2.5"
42
42
 
43
43
  # Stable, lightweight public extension surface. Importing this package does
44
44
  # not discover or execute third-party extensions; discovery happens only when
@@ -167,11 +167,11 @@ def _render(
167
167
  if settings.max_output_tokens:
168
168
  click.echo(f"Token cap: {settings.max_output_tokens} per task")
169
169
  if result["discovered"] and not result["speaks_target_version"]:
170
- from superqode.harness.uhp_client import UHP_PROTOCOL_VERSION
170
+ from superqode.harness.uhp_client import UHP_SUPPORTED_VERSIONS
171
171
 
172
+ spoken = " or ".join(UHP_SUPPORTED_VERSIONS)
172
173
  click.echo(
173
- f"\n! This server does not list {UHP_PROTOCOL_VERSION}, "
174
- "which is the version SuperQode speaks."
174
+ f"\n! This server lists no version SuperQode speaks ({spoken}). Tasks will be refused."
175
175
  )
176
176
 
177
177
  if not harnesses:
@@ -335,6 +335,7 @@ def _create_runtime_for_request(
335
335
  plan_mode=profile.name == "plan",
336
336
  tools_enabled=request.spec.flavor != HarnessFlavor.NO_TOOL,
337
337
  max_iterations=_max_iterations_for_request(request, model_policy),
338
+ max_tokens=_optional_positive_int(request.metadata.get("agent_max_tokens")),
338
339
  temperature=model_policy.temperature,
339
340
  reasoning_effort=model_policy.reasoning,
340
341
  enable_session_storage=True,
@@ -510,3 +511,12 @@ def _max_iterations_for_request(
510
511
  if request.metadata.get("agent_max_iterations") is not None:
511
512
  return int(request.metadata["agent_max_iterations"])
512
513
  return model_policy.max_iterations
514
+
515
+
516
+ def _optional_positive_int(value: Any) -> int | None:
517
+ """A per-run token ceiling, or None when there is no usable one."""
518
+ try:
519
+ parsed = int(value)
520
+ except (TypeError, ValueError):
521
+ return None
522
+ return parsed if parsed > 0 else None
@@ -27,7 +27,11 @@ import httpx
27
27
 
28
28
  logger = logging.getLogger(__name__)
29
29
 
30
- UHP_PROTOCOL_VERSION = "2026-08-11"
30
+ UHP_PROTOCOL_VERSION = "2026-09-12"
31
+
32
+ #: Versions this client can read, newest first. 2026-09-12 is additive to
33
+ #: 2026-08-11, so one client parses both; only the header differs.
34
+ UHP_SUPPORTED_VERSIONS: tuple[str, ...] = ("2026-09-12", "2026-08-11")
31
35
 
32
36
  #: Sent on every request so a server does not silently answer at another
33
37
  #: version than the one this client was written against.
@@ -197,10 +201,18 @@ class UHPDiscovery:
197
201
 
198
202
  @property
199
203
  def speaks_target_version(self) -> bool:
200
- """Whether the server offers the version this client was built for."""
201
- return UHP_PROTOCOL_VERSION in self.versions or (
202
- self.default_version == UHP_PROTOCOL_VERSION
203
- )
204
+ """Whether this client and the server have a version in common."""
205
+ offered = set(self.versions) | ({self.default_version} if self.default_version else set())
206
+ return bool(offered & set(UHP_SUPPORTED_VERSIONS))
207
+
208
+ @property
209
+ def best_common_version(self) -> str:
210
+ """The newest version both sides speak, or empty when there is none."""
211
+ offered = set(self.versions) | ({self.default_version} if self.default_version else set())
212
+ for version in UHP_SUPPORTED_VERSIONS:
213
+ if version in offered:
214
+ return version
215
+ return ""
204
216
 
205
217
  def supports(self, capability: str) -> bool:
206
218
  """Whether the server declared one named capability."""
@@ -599,17 +611,49 @@ class UHPClient:
599
611
  headers: Mapping[str, str] | None = None,
600
612
  ) -> Any:
601
613
  client = self._ensure_client()
614
+ for attempt in (0, 1):
615
+ try:
616
+ response = await client.request(
617
+ method,
618
+ self._url(path),
619
+ json=dict(json_body) if json_body is not None else None,
620
+ params=dict(params) if params else None,
621
+ headers={**self._headers, **dict(headers or {})},
622
+ )
623
+ except httpx.HTTPError as exc:
624
+ raise UHPServerError(f"UHP request to {path} failed: {exc}") from exc
625
+ if attempt == 0 and self._downgrade_version(response):
626
+ continue
627
+ return self._decode(response)
628
+ return None
629
+
630
+ def _downgrade_version(self, response: httpx.Response) -> bool:
631
+ """Drop to an older version the server does list, once.
632
+
633
+ A server that does not serve the newest version answers
634
+ `unsupported_protocol_version` with the ones it does, so a client
635
+ written against the newer additive version can still talk to it.
636
+ """
637
+ if response.status_code != 400:
638
+ return False
602
639
  try:
603
- response = await client.request(
604
- method,
605
- self._url(path),
606
- json=dict(json_body) if json_body is not None else None,
607
- params=dict(params) if params else None,
608
- headers={**self._headers, **dict(headers or {})},
609
- )
610
- except httpx.HTTPError as exc:
611
- raise UHPServerError(f"UHP request to {path} failed: {exc}") from exc
612
- return self._decode(response)
640
+ payload = response.json()
641
+ except ValueError:
642
+ return False
643
+ error = payload.get("error") if isinstance(payload, Mapping) else None
644
+ if not isinstance(error, Mapping) or error.get("code") != "unsupported_protocol_version":
645
+ return False
646
+ detail = error.get("detail")
647
+ offered = detail.get("supported") if isinstance(detail, Mapping) else None
648
+ if not isinstance(offered, Sequence):
649
+ return False
650
+ current = self._headers.get(VERSION_HEADER)
651
+ for version in UHP_SUPPORTED_VERSIONS:
652
+ if version in offered and version != current:
653
+ logger.info("UHP server does not serve %s; retrying at %s", current, version)
654
+ self._headers[VERSION_HEADER] = version
655
+ return True
656
+ return False
613
657
 
614
658
  @staticmethod
615
659
  def _decode(response: httpx.Response) -> Any:
@@ -33,12 +33,17 @@ except Exception: # pragma: no cover - optional at import time
33
33
  from superqode.harness.uhp_client import (
34
34
  PROVIDER_KEY_HEADER,
35
35
  UHP_PROTOCOL_VERSION,
36
+ UHP_SUPPORTED_VERSIONS,
36
37
  VERSION_HEADER,
37
38
  )
38
39
 
39
- #: Advertised and accepted protocol version.
40
+ #: Default protocol version: what a caller gets when it names none.
40
41
  SUPPORTED_VERSION = UHP_PROTOCOL_VERSION
41
42
 
43
+ #: Every version served, newest first. 2026-09-12 is additive to 2026-08-11,
44
+ #: so both answer from one code path and only the echoed header differs.
45
+ SUPPORTED_VERSIONS: tuple[str, ...] = UHP_SUPPORTED_VERSIONS
46
+
42
47
  #: Discovery document object type.
43
48
  DISCOVERY_OBJECT = "uhp.discovery"
44
49
 
@@ -333,13 +338,15 @@ def _response_payload(
333
338
  created_at: int,
334
339
  previous_response_id: str | None,
335
340
  session_id: str,
341
+ harness_id: str,
336
342
  store: bool = True,
337
343
  usage: Mapping[str, int] | None = None,
338
344
  error: Mapping[str, Any] | None = None,
339
345
  ignored_fields: Sequence[str] = (),
340
346
  extra_metadata: Mapping[str, Any] | None = None,
341
347
  ) -> dict[str, Any]:
342
- metadata: dict[str, Any] = {"session_id": session_id}
348
+ # tasks §1.2: a request that names no harness MUST be told which one ran.
349
+ metadata: dict[str, Any] = {"session_id": session_id, "harness_id": harness_id}
343
350
  if ignored_fields:
344
351
  metadata["ignored_fields"] = list(ignored_fields)
345
352
  if extra_metadata:
@@ -406,7 +413,7 @@ class UHPServer:
406
413
  return {
407
414
  "object": DISCOVERY_OBJECT,
408
415
  "protocol": "uhp",
409
- "versions": [SUPPORTED_VERSION],
416
+ "versions": list(SUPPORTED_VERSIONS),
410
417
  "default_version": SUPPORTED_VERSION,
411
418
  "conformance_class": self.config.conformance_class,
412
419
  "capabilities": {
@@ -419,6 +426,11 @@ class UHPServer:
419
426
  "harness_management": False,
420
427
  "session_sharing": False,
421
428
  "idempotency": True,
429
+ # 2026-09-12 adds plugins. Reported false, not omitted: a
430
+ # client must be able to tell "not supported" from "older
431
+ # than this field". `plugin_schemas` belongs to a server that
432
+ # answers true, so it stays off the document.
433
+ "plugins": False,
422
434
  },
423
435
  "implementation": {
424
436
  "name": self.config.implementation_name,
@@ -441,7 +453,8 @@ class UHPServer:
441
453
  except ModuleNotFoundError as exc: # pragma: no cover - install-shape error
442
454
  raise MissingUHPServerDependency(
443
455
  "Serving UHP needs FastAPI and uvicorn, which are not installed.\n"
444
- " pip install 'superqode[uhp]'\n"
456
+ " uv tool install 'superqode[uhp]' (if you installed the CLI as a tool)\n"
457
+ " uv pip install 'superqode[uhp]' (inside a virtual environment)\n"
445
458
  "The UHP client works without them."
446
459
  ) from exc
447
460
 
@@ -469,10 +482,11 @@ class UHPServer:
469
482
  return JSONResponse(
470
483
  status_code=401,
471
484
  content=auth_error,
472
- headers={VERSION_HEADER: SUPPORTED_VERSION},
485
+ headers={VERSION_HEADER: negotiated},
473
486
  )
474
487
  response = await call_next(request)
475
- response.headers[VERSION_HEADER] = SUPPORTED_VERSION
488
+ # The version actually served, which is the one the caller asked for.
489
+ response.headers[VERSION_HEADER] = negotiated
476
490
  return response
477
491
 
478
492
  @app.get("/v1/uhp")
@@ -590,7 +604,12 @@ class UHPServer:
590
604
  media_type="text/event-stream",
591
605
  headers={VERSION_HEADER: SUPPORTED_VERSION},
592
606
  )
593
- return existing
607
+ # tasks §6: a repeated key waits for the first run and
608
+ # returns its result. Handing back an in-flight record
609
+ # would make a retry look like a finished, empty task.
610
+ if not body.get("background"):
611
+ await server._await_response(existing_id)
612
+ return server._responses.get(existing_id, existing)
594
613
 
595
614
  harness_error = server._validate_harness_selection(body)
596
615
  if harness_error is not None:
@@ -628,8 +647,11 @@ class UHPServer:
628
647
  media_type="text/event-stream",
629
648
  headers={VERSION_HEADER: SUPPORTED_VERSION},
630
649
  )
650
+ if body.get("background"):
651
+ # Accepted and running; the caller follows it by id.
652
+ return record
631
653
  await server._await_response(record["id"])
632
- return server._responses[record["id"]]
654
+ return server._responses.get(record["id"], record)
633
655
 
634
656
  @app.get("/v1/responses/{response_id}")
635
657
  async def get_response(response_id: str) -> Any:
@@ -676,12 +698,17 @@ class UHPServer:
676
698
  param="response_id",
677
699
  ),
678
700
  )
679
- event = server._cancel_events.get(response_id)
680
- if event is not None:
681
- event.set()
701
+ # Terminal already: cancel changes nothing and says so.
702
+ if record.get("status") != "in_progress":
703
+ return record
704
+ await server._stop(response_id)
705
+ record = server._responses.get(response_id, record)
706
+ # _execute owns the terminal status. It only stays in_progress if
707
+ # the run was never started, so name it cancelled here.
682
708
  if record.get("status") == "in_progress":
683
709
  record["status"] = "cancelled"
684
710
  record["error"] = None
711
+ if record.get("status") == "cancelled":
685
712
  record["incomplete_details"] = {"reason": "cancelled"}
686
713
  return record
687
714
 
@@ -715,13 +742,16 @@ class UHPServer:
715
742
  param="session_id",
716
743
  ),
717
744
  )
718
- for response_id in session.get("response_ids", []):
719
- event = server._cancel_events.get(response_id)
720
- if event is not None:
721
- event.set()
745
+ for response_id in list(session.get("response_ids", [])):
722
746
  record = server._responses.get(response_id)
723
- if record is not None and record.get("status") == "in_progress":
747
+ if record is None or record.get("status") != "in_progress":
748
+ continue
749
+ await server._stop(response_id)
750
+ record = server._responses.get(response_id, record)
751
+ if record.get("status") == "in_progress":
724
752
  record["status"] = "cancelled"
753
+ if record.get("status") == "cancelled":
754
+ record["incomplete_details"] = {"reason": "cancelled"}
725
755
  return {"id": session_id, "status": "cancelled"}
726
756
 
727
757
  @app.get("/health")
@@ -745,18 +775,19 @@ class UHPServer:
745
775
  return "/" not in rest or rest.endswith("/models")
746
776
  return False
747
777
 
748
- def _negotiate_version(self, requested: str | None) -> dict[str, Any] | None:
778
+ def _negotiate_version(self, requested: str | None) -> str | dict[str, Any]:
779
+ """The version to answer at, or the error envelope refusing to."""
749
780
  if not requested or not requested.strip():
750
- return None
781
+ return SUPPORTED_VERSION
751
782
  version = requested.strip()
752
- if version == SUPPORTED_VERSION:
753
- return None
783
+ if version in SUPPORTED_VERSIONS:
784
+ return version
754
785
  return _error_envelope(
755
786
  error_type="invalid_request_error",
756
787
  code="unsupported_protocol_version",
757
788
  message=f"Unsupported UHP-Version '{version}'.",
758
789
  param="UHP-Version",
759
- detail={"supported": [SUPPORTED_VERSION]},
790
+ detail={"supported": list(SUPPORTED_VERSIONS)},
760
791
  )
761
792
 
762
793
  def _check_auth(self, authorization: str | None) -> dict[str, Any] | None:
@@ -831,9 +862,21 @@ class UHPServer:
831
862
  if previous_response_id:
832
863
  prior = self._responses.get(previous_response_id)
833
864
  if prior is None:
834
- # Soft-fail into a new session rather than 404 — some clients
835
- # resume after retention expiry; store a fresh session.
836
- session_id = None
865
+ # lifecycle §4: an expired session is a 404 a client can act
866
+ # on. Starting a fresh one quietly loses the conversation it
867
+ # asked to continue, and says nothing.
868
+ return (
869
+ 404,
870
+ _error_envelope(
871
+ error_type="invalid_request_error",
872
+ code="session_expired",
873
+ message=(
874
+ f"No response '{previous_response_id}' is retained, so the session "
875
+ "it belongs to cannot be continued."
876
+ ),
877
+ param="previous_response_id",
878
+ ),
879
+ )
837
880
  else:
838
881
  meta = prior.get("metadata") if isinstance(prior.get("metadata"), Mapping) else {}
839
882
  session_id = str(meta.get("session_id") or "") or None
@@ -855,7 +898,8 @@ class UHPServer:
855
898
  )
856
899
 
857
900
  if not session_id:
858
- session_id = f"sess_{uuid.uuid4().hex[:16]}"
901
+ # architecture §3 fixes the session prefix as `hsess`.
902
+ session_id = f"hsess{uuid.uuid4().hex[:16]}"
859
903
 
860
904
  response_id = f"resp_{uuid.uuid4().hex}"
861
905
  created_at = int(time.time())
@@ -865,10 +909,22 @@ class UHPServer:
865
909
  if body.get("include") is not None:
866
910
  ignored.append("include")
867
911
 
912
+ served = self.config.default_model or self.config.model or "server-default"
868
913
  requested_model = body.get("model")
869
- model = str(
870
- requested_model or self.config.default_model or self.config.model or "server-default"
871
- )
914
+ if requested_model and str(requested_model) != served:
915
+ # tasks §1.3: refuse, or substitute and say so. Never report a
916
+ # model that did not run. This bind serves exactly what it lists.
917
+ return (
918
+ 422,
919
+ _error_envelope(
920
+ error_type="invalid_request_error",
921
+ code="model_unavailable",
922
+ message=f"This harness cannot serve model '{requested_model}'.",
923
+ param="model",
924
+ detail={"available": [served], "requested": str(requested_model)},
925
+ ),
926
+ )
927
+ model = str(requested_model or served)
872
928
 
873
929
  record = _response_payload(
874
930
  response_id=response_id,
@@ -878,6 +934,7 @@ class UHPServer:
878
934
  created_at=created_at,
879
935
  previous_response_id=previous_response_id,
880
936
  session_id=session_id,
937
+ harness_id=self.config.harness_id,
881
938
  store=bool(body.get("store", True)),
882
939
  ignored_fields=ignored,
883
940
  )
@@ -930,9 +987,36 @@ class UHPServer:
930
987
  return []
931
988
 
932
989
  async def _await_response(self, response_id: str) -> None:
990
+ """Wait for one run to settle, cancellation included."""
933
991
  task = self._tasks.get(response_id)
934
- if task is not None:
992
+ if task is None:
993
+ return
994
+ try:
935
995
  await task
996
+ except asyncio.CancelledError:
997
+ # The run was cancelled, not this caller: the record is terminal
998
+ # and the caller still wants it. Anything else is our own
999
+ # cancellation and has to keep travelling.
1000
+ if not task.cancelled():
1001
+ raise
1002
+
1003
+ async def _stop(self, response_id: str) -> None:
1004
+ """Stop one running task and wait for it to actually be over."""
1005
+ event = self._cancel_events.get(response_id)
1006
+ if event is not None:
1007
+ event.set()
1008
+ task = self._tasks.get(response_id)
1009
+ if task is None or task.done():
1010
+ return
1011
+ task.cancel()
1012
+ try:
1013
+ await task
1014
+ except asyncio.CancelledError:
1015
+ if not task.cancelled():
1016
+ raise
1017
+ except Exception:
1018
+ # The run raised on its way out. The record already says so.
1019
+ pass
936
1020
 
937
1021
  async def _execute(self, response_id: str, request: UHPRunRequest) -> None:
938
1022
  record = self._responses[response_id]
@@ -940,7 +1024,22 @@ class UHPServer:
940
1024
  if request.cancel_event and request.cancel_event.is_set():
941
1025
  record["status"] = "cancelled"
942
1026
  return
943
- result = await self._runner(request)
1027
+ if request.timeout_seconds:
1028
+ # tasks §1.1: stop at the budget and report incomplete. Work
1029
+ # truncated by a budget is never `completed`.
1030
+ try:
1031
+ result = await asyncio.wait_for(
1032
+ self._runner(request), timeout=float(request.timeout_seconds)
1033
+ )
1034
+ except TimeoutError:
1035
+ if request.cancel_event is not None:
1036
+ request.cancel_event.set()
1037
+ record["status"] = "incomplete"
1038
+ record["incomplete_details"] = {"reason": "timeout"}
1039
+ record["error"] = None
1040
+ return
1041
+ else:
1042
+ result = await self._runner(request)
944
1043
  if request.cancel_event and request.cancel_event.is_set():
945
1044
  record["status"] = "cancelled"
946
1045
  record["error"] = None
@@ -1118,6 +1217,11 @@ class UHPServer:
1118
1217
  run_metadata = {
1119
1218
  key: value for key, value in dict(request.metadata).items() if key != "provider_api_key"
1120
1219
  }
1220
+ # The request's budgets, in the keys the harness runtime reads.
1221
+ if request.max_step:
1222
+ run_metadata["agent_max_iterations"] = int(request.max_step)
1223
+ if request.max_output_tokens:
1224
+ run_metadata["agent_max_tokens"] = int(request.max_output_tokens)
1121
1225
  token = str(request.metadata.get("provider_api_key") or "")
1122
1226
  try:
1123
1227
  async with _caller_provider_key(token, _provider_key_envs(provider)):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: superqode
3
- Version: 2.2.4
3
+ Version: 2.2.5
4
4
  Summary: The harness layer for coding agents
5
5
  Author-email: Shashi Jagtap <info@super-agentic.ai>
6
6
  Maintainer-email: Shashi Jagtap <info@super-agentic.ai>
@@ -476,15 +476,20 @@ Read the [A2A guide](docs/providers/a2a.md).
476
476
  The same install that drives a remote UHP server can also expose a local
477
477
  HarnessSpec so other UHP clients call SuperQode:
478
478
 
479
+ Serving needs the `uhp` extra (FastAPI and uvicorn). The client side needs
480
+ nothing extra.
481
+
479
482
  ```bash
483
+ uv tool install 'superqode[uhp]'
480
484
  superqode serve uhp --spec harness.yaml --port 8787
481
485
  superqode connect uhp --base-url http://127.0.0.1:8787
482
486
  superqode harness run uhp --prompt "summarise this repository"
483
487
  ```
484
488
 
485
- `serve uhp` binds one HarnessSpec and advertises UHP Core. It is complementary
486
- to HarnessRouter, which wraps third-party CLIs as a catalog. Core names the
487
- surface SuperQode implements; it is not a conformance-suite certificate.
489
+ `serve uhp` binds one HarnessSpec and is complementary to HarnessRouter, which
490
+ wraps third-party CLIs as a catalog. It passes the UHP conformance suite at
491
+ class core, 40 of 40 checks with no skips, and serves protocol `2026-09-12`
492
+ alongside `2026-08-11`.
488
493
 
489
494
  The public hostname for that bind is [`uhp.superqode.dev`](https://uhp.superqode.dev/v1/uhp).
490
495
  Anonymous callers get discovery and the static harness catalog (no model call).