superqode 2.2.1__tar.gz → 2.2.3__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.1 → superqode-2.2.3}/CHANGELOG.md +49 -0
  2. {superqode-2.2.1 → superqode-2.2.3}/PKG-INFO +7 -1
  3. {superqode-2.2.1 → superqode-2.2.3}/README.md +6 -0
  4. {superqode-2.2.1 → superqode-2.2.3}/pyproject.toml +1 -1
  5. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/__init__.py +1 -1
  6. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/commands/serve.py +8 -5
  7. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/uhp_client.py +59 -3
  8. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/uhp_server.py +162 -19
  9. {superqode-2.2.1 → superqode-2.2.3}/src/superqode.egg-info/PKG-INFO +7 -1
  10. {superqode-2.2.1 → superqode-2.2.3}/tests/test_uhp_client.py +103 -0
  11. {superqode-2.2.1 → superqode-2.2.3}/tests/test_uhp_server.py +194 -1
  12. {superqode-2.2.1 → superqode-2.2.3}/LICENSE +0 -0
  13. {superqode-2.2.1 → superqode-2.2.3}/MANIFEST.in +0 -0
  14. {superqode-2.2.1 → superqode-2.2.3}/NOTICE +0 -0
  15. {superqode-2.2.1 → superqode-2.2.3}/examples/README.md +0 -0
  16. {superqode-2.2.1 → superqode-2.2.3}/examples/a2a/README.md +0 -0
  17. {superqode-2.2.1 → superqode-2.2.3}/examples/a2a/smoke_client.py +0 -0
  18. {superqode-2.2.1 → superqode-2.2.3}/examples/bench/dspy-comprehension.manifest.yaml +0 -0
  19. {superqode-2.2.1 → superqode-2.2.3}/examples/bench/dspy-comprehension.yaml +0 -0
  20. {superqode-2.2.1 → superqode-2.2.3}/examples/bench/spec-core.yaml +0 -0
  21. {superqode-2.2.1 → superqode-2.2.3}/examples/bench/spec-deepagents.yaml +0 -0
  22. {superqode-2.2.1 → superqode-2.2.3}/examples/bench/spec-prime-agent.yaml +0 -0
  23. {superqode-2.2.1 → superqode-2.2.3}/examples/byok-acp-team.yaml +0 -0
  24. {superqode-2.2.1 → superqode-2.2.3}/examples/codex_sdk_quickstart.py +0 -0
  25. {superqode-2.2.1 → superqode-2.2.3}/examples/evals/omni-release.yaml +0 -0
  26. {superqode-2.2.1 → superqode-2.2.3}/examples/evals/omni-tiny.yaml +0 -0
  27. {superqode-2.2.1 → superqode-2.2.3}/examples/extensions/README.md +0 -0
  28. {superqode-2.2.1 → superqode-2.2.3}/examples/extensions/manifest-guard/context.md +0 -0
  29. {superqode-2.2.1 → superqode-2.2.3}/examples/extensions/manifest-guard/hooks.py +0 -0
  30. {superqode-2.2.1 → superqode-2.2.3}/examples/extensions/manifest-guard/tools.py +0 -0
  31. {superqode-2.2.1 → superqode-2.2.3}/examples/extensions/packages/README.md +0 -0
  32. {superqode-2.2.1 → superqode-2.2.3}/examples/extensions/packages/broken-extension/src/superqode_example_broken/__init__.py +0 -0
  33. {superqode-2.2.1 → superqode-2.2.3}/examples/extensions/packages/policy-extension/src/superqode_example_policy/__init__.py +0 -0
  34. {superqode-2.2.1 → superqode-2.2.3}/examples/extensions/packages/skill-extension/src/superqode_example_skill/SKILL.md +0 -0
  35. {superqode-2.2.1 → superqode-2.2.3}/examples/extensions/packages/skill-extension/src/superqode_example_skill/__init__.py +0 -0
  36. {superqode-2.2.1 → superqode-2.2.3}/examples/extensions/packages/tool-extension/src/superqode_example_tool/__init__.py +0 -0
  37. {superqode-2.2.1 → superqode-2.2.3}/examples/extensions/packages/tool-extension-v2/src/superqode_example_tool/__init__.py +0 -0
  38. {superqode-2.2.1 → superqode-2.2.3}/examples/extensions/python-package/src/superqode_example_extension/__init__.py +0 -0
  39. {superqode-2.2.1 → superqode-2.2.3}/examples/harness-packages/README.md +0 -0
  40. {superqode-2.2.1 → superqode-2.2.3}/examples/harness-packages/hello-harness/src/superqode_hello_harness/__init__.py +0 -0
  41. {superqode-2.2.1 → superqode-2.2.3}/examples/harnesses/coding.yaml +0 -0
  42. {superqode-2.2.1 → superqode-2.2.3}/examples/harnesses/deepagents.yaml +0 -0
  43. {superqode-2.2.1 → superqode-2.2.3}/examples/harnesses/deepseek-harness.yaml +0 -0
  44. {superqode-2.2.1 → superqode-2.2.3}/examples/harnesses/ds4.yaml +0 -0
  45. {superqode-2.2.1 → superqode-2.2.3}/examples/harnesses/gemma4.yaml +0 -0
  46. {superqode-2.2.1 → superqode-2.2.3}/examples/harnesses/google-adk.yaml +0 -0
  47. {superqode-2.2.1 → superqode-2.2.3}/examples/harnesses/local-recursive-dynamic.yaml +0 -0
  48. {superqode-2.2.1 → superqode-2.2.3}/examples/harnesses/mcp-docs.yaml +0 -0
  49. {superqode-2.2.1 → superqode-2.2.3}/examples/harnesses/no-tool.yaml +0 -0
  50. {superqode-2.2.1 → superqode-2.2.3}/examples/harnesses/omni-tiny-local.yaml +0 -0
  51. {superqode-2.2.1 → superqode-2.2.3}/examples/harnesses/omnigent-multi-agent.yaml +0 -0
  52. {superqode-2.2.1 → superqode-2.2.3}/examples/harnesses/openai-agents.yaml +0 -0
  53. {superqode-2.2.1 → superqode-2.2.3}/examples/harnesses/prime-agent.yaml +0 -0
  54. {superqode-2.2.1 → superqode-2.2.3}/examples/harnesses/pydanticai.yaml +0 -0
  55. {superqode-2.2.1 → superqode-2.2.3}/examples/harnesses/rlm-code-lid.yaml +0 -0
  56. {superqode-2.2.1 → superqode-2.2.3}/examples/local-models-team.yaml +0 -0
  57. {superqode-2.2.1 → superqode-2.2.3}/examples/mcp/local_docs_server.py +0 -0
  58. {superqode-2.2.1 → superqode-2.2.3}/examples/omnigent-multi-agent.agent.yaml +0 -0
  59. {superqode-2.2.1 → superqode-2.2.3}/examples/qm-deployment-layer/README.md +0 -0
  60. {superqode-2.2.1 → superqode-2.2.3}/examples/qm-deployment-layer/sandbox/skills/superqode-harness/SKILL.md +0 -0
  61. {superqode-2.2.1 → superqode-2.2.3}/examples/rlm-demo/INCIDENT.md +0 -0
  62. {superqode-2.2.1 → superqode-2.2.3}/examples/rlm-demo/README.md +0 -0
  63. {superqode-2.2.1 → superqode-2.2.3}/examples/rlm-demo/RUNBOOK.md +0 -0
  64. {superqode-2.2.1 → superqode-2.2.3}/examples/rlm-demo/deploy_audit/__init__.py +0 -0
  65. {superqode-2.2.1 → superqode-2.2.3}/examples/rlm-demo/deploy_audit/parser.py +0 -0
  66. {superqode-2.2.1 → superqode-2.2.3}/examples/rlm-demo/deploy_audit/report.py +0 -0
  67. {superqode-2.2.1 → superqode-2.2.3}/examples/rlm-demo/rlm-docker.yaml +0 -0
  68. {superqode-2.2.1 → superqode-2.2.3}/examples/rlm-demo/rlm-monty.yaml +0 -0
  69. {superqode-2.2.1 → superqode-2.2.3}/examples/rlm-demo/tests/test_report.py +0 -0
  70. {superqode-2.2.1 → superqode-2.2.3}/examples/simple-team.yaml +0 -0
  71. {superqode-2.2.1 → superqode-2.2.3}/scripts/check_release_metadata.py +0 -0
  72. {superqode-2.2.1 → superqode-2.2.3}/setup.cfg +0 -0
  73. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/a2a/__init__.py +0 -0
  74. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/a2a/client.py +0 -0
  75. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/a2a/conformance.py +0 -0
  76. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/a2a/connection.py +0 -0
  77. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/a2a/context.py +0 -0
  78. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/a2a/inspect.py +0 -0
  79. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/a2a/keys.py +0 -0
  80. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/a2a/limits.py +0 -0
  81. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/a2a/oauth.py +0 -0
  82. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/a2a/presets.py +0 -0
  83. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/a2a/registry.py +0 -0
  84. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/a2a/reply.py +0 -0
  85. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/a2a/security.py +0 -0
  86. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/a2a/server.py +0 -0
  87. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/a2a/shortlist.py +0 -0
  88. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/a2a/skills.py +0 -0
  89. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/a2a/tools.py +0 -0
  90. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/a2a/trust.py +0 -0
  91. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/a2a/types.py +0 -0
  92. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/a2a/understand.py +0 -0
  93. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/a2a/workflows.py +0 -0
  94. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/acp/__init__.py +0 -0
  95. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/acp/client.py +0 -0
  96. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/acp/doctor.py +0 -0
  97. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/acp/permission_screen.py +0 -0
  98. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/acp/permission_store.py +0 -0
  99. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/acp/render.py +0 -0
  100. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/acp/server.py +0 -0
  101. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/acp/session_store.py +0 -0
  102. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/acp/slash.py +0 -0
  103. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/acp/tool_call_context.py +0 -0
  104. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/acp/types.py +0 -0
  105. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/acp_discovery.py +0 -0
  106. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agent/__init__.py +0 -0
  107. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agent/auto_memory.py +0 -0
  108. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agent/command_safety.py +0 -0
  109. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agent/compaction.py +0 -0
  110. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agent/context_manager.py +0 -0
  111. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agent/edit_strategies.py +0 -0
  112. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agent/exec_policy.py +0 -0
  113. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agent/hooks.py +0 -0
  114. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agent/loop.py +0 -0
  115. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agent/loop_guard.py +0 -0
  116. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agent/loop_policy.py +0 -0
  117. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agent/network_policy.py +0 -0
  118. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agent/output_handler.py +0 -0
  119. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agent/parallel_compare.py +0 -0
  120. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agent/peer_agents.py +0 -0
  121. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agent/plan_mode.py +0 -0
  122. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agent/reminders.py +0 -0
  123. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agent/rubric.py +0 -0
  124. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agent/session_manager.py +0 -0
  125. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agent/structured_output.py +0 -0
  126. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agent/summarization.py +0 -0
  127. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agent/system_prompts.py +0 -0
  128. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agent/terminal_output_limits.py +0 -0
  129. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agent/text_tool_calls.py +0 -0
  130. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agent/tool_args.py +0 -0
  131. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agent/tool_tracking.py +0 -0
  132. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agent/utility_model.py +0 -0
  133. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agent_output.py +0 -0
  134. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agent_stream.py +0 -0
  135. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agents/__init__.py +0 -0
  136. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agents/acp_registry.py +0 -0
  137. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agents/client.py +0 -0
  138. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agents/data/agentpool.phil65.github.io.toml +0 -0
  139. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agents/data/ampcode.com.toml +0 -0
  140. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agents/data/augmentcode.com.toml +0 -0
  141. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agents/data/autodev.github.io.toml +0 -0
  142. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agents/data/blackbox.ai.toml +0 -0
  143. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agents/data/bub.dev.toml +0 -0
  144. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agents/data/cagent.dev.toml +0 -0
  145. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agents/data/claude.com.toml +0 -0
  146. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agents/data/cline.bot.toml +0 -0
  147. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agents/data/codeassistant.dev.toml +0 -0
  148. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agents/data/codebuddy.tencent.com.toml +0 -0
  149. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agents/data/codex.openai.com.toml +0 -0
  150. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agents/data/copilot.github.com.toml +0 -0
  151. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agents/data/cortex.snowflake.com.toml +0 -0
  152. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agents/data/crow-ai.dev.toml +0 -0
  153. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agents/data/cursor.com.toml +0 -0
  154. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agents/data/deepagents-code.langchain.com.toml +0 -0
  155. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agents/data/deepagents.langchain.com.toml +0 -0
  156. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agents/data/devin.ai.toml +0 -0
  157. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agents/data/dirac.run.toml +0 -0
  158. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agents/data/factory.ai.toml +0 -0
  159. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agents/data/fastagent.ai.toml +0 -0
  160. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agents/data/fount.dev.toml +0 -0
  161. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agents/data/fx.sh.toml +0 -0
  162. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agents/data/geminicli.com.toml +0 -0
  163. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agents/data/glm.z.ai.toml +0 -0
  164. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agents/data/goose.block.xyz.toml +0 -0
  165. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agents/data/harnlang.com.toml +0 -0
  166. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agents/data/hermes-agent.nousresearch.com.toml +0 -0
  167. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agents/data/junie.jetbrains.com.toml +0 -0
  168. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agents/data/kilo.ai.toml +0 -0
  169. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agents/data/kimi.moonshot.cn.toml +0 -0
  170. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agents/data/kiro.dev.toml +0 -0
  171. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agents/data/llmlingagent.dev.toml +0 -0
  172. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agents/data/minioncode.dev.toml +0 -0
  173. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agents/data/mistral-vibe.mistral.ai.toml +0 -0
  174. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agents/data/openclaw.ai.toml +0 -0
  175. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agents/data/opencode.ai.toml +0 -0
  176. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agents/data/openhands.dev.toml +0 -0
  177. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agents/data/pi.dev.toml +0 -0
  178. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agents/data/poolside.ai.toml +0 -0
  179. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agents/data/primeintellect.ai.toml +0 -0
  180. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agents/data/qoder.com.toml +0 -0
  181. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agents/data/qwenlm.github.io.toml +0 -0
  182. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agents/data/sigit.dev.toml +0 -0
  183. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agents/data/stakpak.dev.toml +0 -0
  184. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agents/data/stdiobus.dev.toml +0 -0
  185. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agents/data/vtcode.dev.toml +0 -0
  186. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agents/data/x.ai.toml +0 -0
  187. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agents/discovery.py +0 -0
  188. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agents/free_models.py +0 -0
  189. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agents/install_commands.py +0 -0
  190. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agents/messaging.py +0 -0
  191. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agents/official_acp.py +0 -0
  192. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agents/persona.py +0 -0
  193. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agents/registry.py +0 -0
  194. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agents/schema.py +0 -0
  195. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/agents/unified.py +0 -0
  196. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app/__init__.py +0 -0
  197. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app/async_utils.py +0 -0
  198. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app/capabilities.py +0 -0
  199. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app/constants.py +0 -0
  200. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app/css.py +0 -0
  201. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app/harness_picker.py +0 -0
  202. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app/inputs.py +0 -0
  203. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app/mixins/__init__.py +0 -0
  204. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app/mixins/actions_misc.py +0 -0
  205. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app/mixins/agent_run.py +0 -0
  206. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app/mixins/build_harness.py +0 -0
  207. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app/mixins/clickable_commands.py +0 -0
  208. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app/mixins/codex.py +0 -0
  209. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app/mixins/commands_impl.py +0 -0
  210. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app/mixins/completion.py +0 -0
  211. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app/mixins/connect.py +0 -0
  212. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app/mixins/dialogs.py +0 -0
  213. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app/mixins/events.py +0 -0
  214. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app/mixins/explore.py +0 -0
  215. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app/mixins/factory.py +0 -0
  216. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app/mixins/feedback.py +0 -0
  217. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app/mixins/formatting.py +0 -0
  218. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app/mixins/harness_hub.py +0 -0
  219. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app/mixins/helper_clipboard.py +0 -0
  220. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app/mixins/helper_completion_helpers.py +0 -0
  221. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app/mixins/helper_diff_review.py +0 -0
  222. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app/mixins/helper_exit_lifecycle.py +0 -0
  223. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app/mixins/helper_file_view.py +0 -0
  224. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app/mixins/helper_interaction_mode.py +0 -0
  225. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app/mixins/helper_mcp_attach.py +0 -0
  226. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app/mixins/helper_message_queue.py +0 -0
  227. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app/mixins/helper_permissions.py +0 -0
  228. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app/mixins/helper_recipes_skills.py +0 -0
  229. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app/mixins/helper_share.py +0 -0
  230. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app/mixins/helper_startup.py +0 -0
  231. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app/mixins/helper_todos_plan.py +0 -0
  232. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app/mixins/helper_vim.py +0 -0
  233. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app/mixins/helper_wizard.py +0 -0
  234. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app/mixins/helpers.py +0 -0
  235. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app/mixins/huggingface.py +0 -0
  236. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app/mixins/local_models.py +0 -0
  237. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app/mixins/mcp.py +0 -0
  238. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app/mixins/model_catalog.py +0 -0
  239. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app/mixins/pickers.py +0 -0
  240. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app/mixins/pipy_commands.py +0 -0
  241. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app/mixins/rlm_commands.py +0 -0
  242. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app/mixins/sidebar.py +0 -0
  243. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app/mixins/slash_commands.py +0 -0
  244. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app/mixins/switchboard.py +0 -0
  245. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app/mixins/tour.py +0 -0
  246. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app/models.py +0 -0
  247. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app/navigation.py +0 -0
  248. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app/outcomes.py +0 -0
  249. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app/progress.py +0 -0
  250. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app/prompt_stack.py +0 -0
  251. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app/recipes.py +0 -0
  252. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app/session_state.py +0 -0
  253. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app/suggester.py +0 -0
  254. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app/theme_bridge.py +0 -0
  255. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app/welcome.py +0 -0
  256. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app/widgets.py +0 -0
  257. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app_enhanced.py +0 -0
  258. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/app_main.py +0 -0
  259. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/approval.py +0 -0
  260. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/atomic.py +0 -0
  261. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/auth/__init__.py +0 -0
  262. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/benchmarks.py +0 -0
  263. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/channels/__init__.py +0 -0
  264. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/channels/config.py +0 -0
  265. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/channels/discord.py +0 -0
  266. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/channels/service.py +0 -0
  267. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/channels/slack.py +0 -0
  268. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/channels/telegram.py +0 -0
  269. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/claude.py +0 -0
  270. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/codex.py +0 -0
  271. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/commands/__init__.py +0 -0
  272. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/commands/a2a.py +0 -0
  273. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/commands/a2a_connect.py +0 -0
  274. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/commands/a2a_keys.py +0 -0
  275. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/commands/acp.py +0 -0
  276. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/commands/agents.py +0 -0
  277. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/commands/auth.py +0 -0
  278. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/commands/benchmark.py +0 -0
  279. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/commands/config.py +0 -0
  280. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/commands/connect.py +0 -0
  281. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/commands/daemon.py +0 -0
  282. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/commands/factory.py +0 -0
  283. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/commands/gauge.py +0 -0
  284. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/commands/harness/__init__.py +0 -0
  285. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/commands/harness/_group.py +0 -0
  286. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/commands/harness/_helpers.py +0 -0
  287. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/commands/harness/bench.py +0 -0
  288. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/commands/harness/candidates.py +0 -0
  289. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/commands/harness/evaluation.py +0 -0
  290. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/commands/harness/evidence.py +0 -0
  291. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/commands/harness/inbox.py +0 -0
  292. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/commands/harness/lifecycle.py +0 -0
  293. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/commands/harness/logbook.py +0 -0
  294. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/commands/harness/observability.py +0 -0
  295. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/commands/harness/optimization.py +0 -0
  296. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/commands/harness/promotion.py +0 -0
  297. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/commands/harness/protocol.py +0 -0
  298. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/commands/harness/registry.py +0 -0
  299. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/commands/harness/replay.py +0 -0
  300. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/commands/harness/run_history.py +0 -0
  301. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/commands/harness/worker.py +0 -0
  302. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/commands/hub.py +0 -0
  303. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/commands/local.py +0 -0
  304. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/commands/memory.py +0 -0
  305. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/commands/models.py +0 -0
  306. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/commands/plugins.py +0 -0
  307. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/commands/policy.py +0 -0
  308. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/commands/profiles.py +0 -0
  309. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/commands/providers.py +0 -0
  310. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/commands/runtime.py +0 -0
  311. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/commands/sandbox.py +0 -0
  312. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/commands/sessions.py +0 -0
  313. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/commands/share.py +0 -0
  314. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/commands/skillopt.py +0 -0
  315. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/commands/skills.py +0 -0
  316. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/commands/tools.py +0 -0
  317. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/commands/trust.py +0 -0
  318. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/commands/uhp.py +0 -0
  319. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/commands/update.py +0 -0
  320. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/commands/work.py +0 -0
  321. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/config/__init__.py +0 -0
  322. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/config/loader.py +0 -0
  323. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/config/schema.py +0 -0
  324. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/core/__init__.py +0 -0
  325. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/danger.py +0 -0
  326. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/data/eval_fixtures/ci-dynamic-root-cause.log +0 -0
  327. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/data/eval_fixtures/ci-root-cause.log +0 -0
  328. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/data/eval_packs/local_dynamic_workflow_smoke.yaml +0 -0
  329. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/data/eval_packs/local_recursive_smoke.yaml +0 -0
  330. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/data/superqode-template.yaml +0 -0
  331. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/design_system.py +0 -0
  332. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/dialogs/__init__.py +0 -0
  333. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/dialogs/base.py +0 -0
  334. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/dialogs/model.py +0 -0
  335. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/dialogs/provider.py +0 -0
  336. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/dialogs/runtime.py +0 -0
  337. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/diff_view.py +0 -0
  338. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/enterprise.py +0 -0
  339. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/evaluation/__init__.py +0 -0
  340. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/evaluation/adapters.py +0 -0
  341. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/evaluation/behaviors.py +0 -0
  342. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/evaluation/engine.py +0 -0
  343. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/evaluation/scenarios.py +0 -0
  344. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/execution/__init__.py +0 -0
  345. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/execution/linter.py +0 -0
  346. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/execution/modes.py +0 -0
  347. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/execution/resolver.py +0 -0
  348. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/execution/runner.py +0 -0
  349. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/extensions.py +0 -0
  350. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/file_explorer.py +0 -0
  351. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/file_viewer.py +0 -0
  352. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/flash.py +0 -0
  353. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/gauge/__init__.py +0 -0
  354. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/gauge/levels.py +0 -0
  355. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/gauge/record.py +0 -0
  356. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/gauge/sources.py +0 -0
  357. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/governance.py +0 -0
  358. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/__init__.py +0 -0
  359. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/accelerator.py +0 -0
  360. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/agent_importer.py +0 -0
  361. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/approval_memory.py +0 -0
  362. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/backends/__init__.py +0 -0
  363. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/backends/base.py +0 -0
  364. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/backends/deepagents.py +0 -0
  365. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/backends/dsh.py +0 -0
  366. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/backends/managed.py +0 -0
  367. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/backends/pipy.py +0 -0
  368. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/backends/prime_agent.py +0 -0
  369. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/backends/pydanticai.py +0 -0
  370. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/backends/registry.py +0 -0
  371. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/backends/rlm.py +0 -0
  372. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/backends/rlm_code.py +0 -0
  373. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/backends/runtime.py +0 -0
  374. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/backends/tau.py +0 -0
  375. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/backends/uhp.py +0 -0
  376. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/bench.py +0 -0
  377. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/catalog.py +0 -0
  378. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/compiler.py +0 -0
  379. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/conformance.py +0 -0
  380. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/context_handles.py +0 -0
  381. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/diagnostics.py +0 -0
  382. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/discovery.py +0 -0
  383. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/drift.py +0 -0
  384. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/eval.py +0 -0
  385. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/events.py +0 -0
  386. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/explain.py +0 -0
  387. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/hooks.py +0 -0
  388. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/hub.py +0 -0
  389. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/kernel.py +0 -0
  390. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/loader.py +0 -0
  391. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/mcp_bridge.py +0 -0
  392. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/model_policy.py +0 -0
  393. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/model_routes.py +0 -0
  394. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/observability.py +0 -0
  395. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/omni.py +0 -0
  396. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/omnigent_importer.py +0 -0
  397. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/optimize.py +0 -0
  398. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/output.py +0 -0
  399. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/permissions.py +0 -0
  400. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/pipy_adapter.py +0 -0
  401. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/pipy_extensions.py +0 -0
  402. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/promotion.py +0 -0
  403. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/protocol.py +0 -0
  404. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/protocol_adapters.py +0 -0
  405. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/protocol_controller.py +0 -0
  406. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/registry.py +0 -0
  407. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/rlm_adapter.py +0 -0
  408. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/rlm_code_adapter.py +0 -0
  409. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/sandbox.py +0 -0
  410. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/self_improve.py +0 -0
  411. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/spec.py +0 -0
  412. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/store.py +0 -0
  413. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/tau_adapter.py +0 -0
  414. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/tau_management.py +0 -0
  415. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/templates.py +0 -0
  416. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/testing.py +0 -0
  417. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/uhp_adapter.py +0 -0
  418. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/wizard.py +0 -0
  419. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/workflow.py +0 -0
  420. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/harness/workflow_presets.py +0 -0
  421. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/headless.py +0 -0
  422. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/history.py +0 -0
  423. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/local/__init__.py +0 -0
  424. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/local/airplane.py +0 -0
  425. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/local/bench.py +0 -0
  426. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/local/build.py +0 -0
  427. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/local/code_index.py +0 -0
  428. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/local/data/model-packs/devstral.yaml +0 -0
  429. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/local/data/model-packs/ds4.yaml +0 -0
  430. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/local/data/model-packs/gemma4.yaml +0 -0
  431. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/local/data/model-packs/glm.yaml +0 -0
  432. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/local/data/model-packs/gpt-oss.yaml +0 -0
  433. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/local/data/model-packs/kimi.yaml +0 -0
  434. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/local/data/model-packs/laguna.yaml +0 -0
  435. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/local/data/model-packs/minimax.yaml +0 -0
  436. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/local/data/model-packs/qwen-coder.yaml +0 -0
  437. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/local/data/model-packs/qwen3.yaml +0 -0
  438. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/local/data/stack_matrix.yaml +0 -0
  439. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/local/doctor.py +0 -0
  440. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/local/engines.py +0 -0
  441. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/local/guardrails.py +0 -0
  442. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/local/hardware.py +0 -0
  443. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/local/inventory.py +0 -0
  444. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/local/labs.py +0 -0
  445. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/local/laguna.py +0 -0
  446. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/local/matrix.py +0 -0
  447. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/local/migrate.py +0 -0
  448. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/local/optimize.py +0 -0
  449. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/local/packs.py +0 -0
  450. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/local/repo.py +0 -0
  451. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/local/servers.py +0 -0
  452. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/local/setup.py +0 -0
  453. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/local/smoke.py +0 -0
  454. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/logging/__init__.py +0 -0
  455. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/logging/adapters.py +0 -0
  456. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/logging/formatter.py +0 -0
  457. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/logging/integration.py +0 -0
  458. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/logging/sinks.py +0 -0
  459. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/logging/unified_log.py +0 -0
  460. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/lsp/__init__.py +0 -0
  461. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/lsp/client.py +0 -0
  462. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/main.py +0 -0
  463. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/mcp/__init__.py +0 -0
  464. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/mcp/auth_storage.py +0 -0
  465. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/mcp/client.py +0 -0
  466. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/mcp/config.py +0 -0
  467. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/mcp/elicitation.py +0 -0
  468. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/mcp/harness_server.py +0 -0
  469. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/mcp/hf_auth.py +0 -0
  470. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/mcp/integration.py +0 -0
  471. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/mcp/oauth.py +0 -0
  472. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/mcp/oauth_callback.py +0 -0
  473. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/mcp/sampling.py +0 -0
  474. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/mcp/search.py +0 -0
  475. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/mcp/types.py +0 -0
  476. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/memory/__init__.py +0 -0
  477. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/memory/config.py +0 -0
  478. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/memory/providers.py +0 -0
  479. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/memory/types.py +0 -0
  480. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/notifications.py +0 -0
  481. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/permissions/__init__.py +0 -0
  482. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/permissions/rules.py +0 -0
  483. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/pipy/__init__.py +0 -0
  484. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/pipy/ai/__init__.py +0 -0
  485. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/pipy/ai/fake.py +0 -0
  486. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/pipy/ai/gateway.py +0 -0
  487. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/pipy/ai/models.py +0 -0
  488. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/pipy/ai/transform.py +0 -0
  489. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/pipy/coding_session.py +0 -0
  490. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/pipy/compaction.py +0 -0
  491. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/pipy/config.py +0 -0
  492. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/pipy/event_stream.py +0 -0
  493. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/pipy/events.py +0 -0
  494. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/pipy/harness.py +0 -0
  495. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/pipy/harness_events.py +0 -0
  496. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/pipy/loop.py +0 -0
  497. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/pipy/messages.py +0 -0
  498. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/pipy/permissions.py +0 -0
  499. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/pipy/prompt_templates.py +0 -0
  500. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/pipy/provider_events.py +0 -0
  501. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/pipy/resources.py +0 -0
  502. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/pipy/session/__init__.py +0 -0
  503. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/pipy/session/codec.py +0 -0
  504. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/pipy/session/entries.py +0 -0
  505. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/pipy/session/jsonl.py +0 -0
  506. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/pipy/session/memory.py +0 -0
  507. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/pipy/session/repository.py +0 -0
  508. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/pipy/session/session.py +0 -0
  509. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/pipy/session/storage.py +0 -0
  510. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/pipy/signals.py +0 -0
  511. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/pipy/skills.py +0 -0
  512. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/pipy/stream.py +0 -0
  513. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/pipy/system_prompt.py +0 -0
  514. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/pipy/tools/__init__.py +0 -0
  515. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/pipy/tools/base.py +0 -0
  516. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/pipy/tools/edit_diff.py +0 -0
  517. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/pipy/tools/files.py +0 -0
  518. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/pipy/tools/paths.py +0 -0
  519. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/pipy/tools/registry.py +0 -0
  520. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/pipy/tools/search.py +0 -0
  521. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/pipy/tools/shell.py +0 -0
  522. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/pipy/tools/truncate.py +0 -0
  523. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/pipy/types.py +0 -0
  524. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/pipy/validation.py +0 -0
  525. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/plan.py +0 -0
  526. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/platform_locks.py +0 -0
  527. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/plugins.py +0 -0
  528. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/project_trust.py +0 -0
  529. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/__init__.py +0 -0
  530. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/_builtin_profiles.py +0 -0
  531. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/acp_free_models.py +0 -0
  532. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/acp_models.py +0 -0
  533. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/acp_registry.py +0 -0
  534. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/apple_fm.py +0 -0
  535. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/catalog.py +0 -0
  536. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/connection_profiles.py +0 -0
  537. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/copilot_auth.py +0 -0
  538. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/credentials.py +0 -0
  539. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/dynamic.py +0 -0
  540. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/env_introspect.py +0 -0
  541. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/free_inference.py +0 -0
  542. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/gateway/__init__.py +0 -0
  543. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/gateway/base.py +0 -0
  544. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/gateway/litellm_gateway.py +0 -0
  545. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/gateway/openresponses_gateway.py +0 -0
  546. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/gateway/synthetic.py +0 -0
  547. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/grok_cli_auth.py +0 -0
  548. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/harness_catalog.py +0 -0
  549. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/health.py +0 -0
  550. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/huggingface/__init__.py +0 -0
  551. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/huggingface/convert.py +0 -0
  552. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/huggingface/downloader.py +0 -0
  553. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/huggingface/endpoints.py +0 -0
  554. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/huggingface/fetch.py +0 -0
  555. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/huggingface/hub.py +0 -0
  556. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/huggingface/inference.py +0 -0
  557. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/huggingface/transformers_runner.py +0 -0
  558. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/live_models.py +0 -0
  559. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/local/__init__.py +0 -0
  560. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/local/_mlx_worker.py +0 -0
  561. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/local/base.py +0 -0
  562. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/local/capabilities.py +0 -0
  563. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/local/context_probe.py +0 -0
  564. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/local/discovery.py +0 -0
  565. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/local/ds4.py +0 -0
  566. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/local/lmstudio.py +0 -0
  567. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/local/mlx.py +0 -0
  568. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/local/mlx_engine.py +0 -0
  569. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/local/mlx_tools.py +0 -0
  570. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/local/ollama.py +0 -0
  571. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/local/sglang.py +0 -0
  572. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/local/smoke.py +0 -0
  573. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/local/tgi.py +0 -0
  574. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/local/tool_support.py +0 -0
  575. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/local/vllm.py +0 -0
  576. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/manager.py +0 -0
  577. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/model_specs.py +0 -0
  578. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/models.py +0 -0
  579. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/models_dev.py +0 -0
  580. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/opencode_models.py +0 -0
  581. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/openresponses/__init__.py +0 -0
  582. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/openresponses/converters/__init__.py +0 -0
  583. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/openresponses/converters/messages.py +0 -0
  584. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/openresponses/converters/tools.py +0 -0
  585. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/openresponses/schema/__init__.py +0 -0
  586. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/openresponses/schema/models.py +0 -0
  587. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/openresponses/streaming/__init__.py +0 -0
  588. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/openresponses/streaming/parser.py +0 -0
  589. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/openresponses/tools/__init__.py +0 -0
  590. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/openresponses/tools/apply_patch.py +0 -0
  591. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/openresponses/tools/code_interpreter.py +0 -0
  592. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/openresponses/tools/file_search.py +0 -0
  593. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/openresponses/tools/mcp_adapter.py +0 -0
  594. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/prime_agent.py +0 -0
  595. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/profiles.py +0 -0
  596. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/recommendations.py +0 -0
  597. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/registry.py +0 -0
  598. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/subscription_env.py +0 -0
  599. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/subscription_login.py +0 -0
  600. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/uhp.py +0 -0
  601. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/providers/usage.py +0 -0
  602. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/pure_mode.py +0 -0
  603. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/py.typed +0 -0
  604. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/rendering/__init__.py +0 -0
  605. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/rendering/html_export.py +0 -0
  606. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/rendering/markdown.py +0 -0
  607. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/rendering/transcript_export.py +0 -0
  608. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/rlm/__init__.py +0 -0
  609. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/rlm/coding_session.py +0 -0
  610. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/rlm/config.py +0 -0
  611. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/rlm/context.py +0 -0
  612. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/rlm/identity.py +0 -0
  613. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/rlm/kernel.py +0 -0
  614. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/rlm/kernel_backend.py +0 -0
  615. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/rlm/kernel_docker.py +0 -0
  616. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/rlm/kernel_monty.py +0 -0
  617. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/rlm/kernel_server.py +0 -0
  618. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/rlm/policy.py +0 -0
  619. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/rlm/root_runtime.py +0 -0
  620. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/rlm/root_worker.py +0 -0
  621. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/rlm/sandbox.py +0 -0
  622. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/rlm/subcalls.py +0 -0
  623. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/rlm/supervisor.py +0 -0
  624. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/rlm/worker.py +0 -0
  625. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/rlm/worker_process.py +0 -0
  626. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/runtime/__init__.py +0 -0
  627. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/runtime/adk.py +0 -0
  628. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/runtime/antigravity_cli.py +0 -0
  629. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/runtime/antigravity_managed.py +0 -0
  630. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/runtime/antigravity_sdk.py +0 -0
  631. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/runtime/antigravity_status.py +0 -0
  632. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/runtime/base.py +0 -0
  633. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/runtime/builtin.py +0 -0
  634. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/runtime/claude_agent_sdk.py +0 -0
  635. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/runtime/codex_sdk.py +0 -0
  636. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/runtime/copilot_sdk.py +0 -0
  637. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/runtime/devin_cli.py +0 -0
  638. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/runtime/devin_status.py +0 -0
  639. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/runtime/errors.py +0 -0
  640. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/runtime/openai_agents.py +0 -0
  641. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/runtime/openai_sandbox.py +0 -0
  642. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/runtime/openai_session.py +0 -0
  643. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/runtime/pydanticai.py +0 -0
  644. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/runtime/registry.py +0 -0
  645. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/runtime/tool_bridge.py +0 -0
  646. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/runtime/tool_bridge_openai.py +0 -0
  647. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/runtime/tool_bridge_pydanticai.py +0 -0
  648. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/runtime/vendor_cli.py +0 -0
  649. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/safety/__init__.py +0 -0
  650. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/safety/sandbox.py +0 -0
  651. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/safety/warnings.py +0 -0
  652. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/sandbox/__init__.py +0 -0
  653. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/sandbox/backends.py +0 -0
  654. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/sandbox/execution.py +0 -0
  655. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/sandbox/local_sandbox.py +0 -0
  656. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/search_registry.py +0 -0
  657. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/server/__init__.py +0 -0
  658. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/server/api.py +0 -0
  659. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/server/web.py +0 -0
  660. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/session/__init__.py +0 -0
  661. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/session/factory.py +0 -0
  662. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/session/persistence.py +0 -0
  663. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/session/share_artifacts.py +0 -0
  664. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/session/sharing.py +0 -0
  665. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/session/switchboard.py +0 -0
  666. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/session.py +0 -0
  667. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/sidebar.py +0 -0
  668. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/skillopt.py +0 -0
  669. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/skills.py +0 -0
  670. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/stream_view.py +0 -0
  671. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/styles/__init__.py +0 -0
  672. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/tool_call.py +0 -0
  673. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/tools/__init__.py +0 -0
  674. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/tools/agent_tools.py +0 -0
  675. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/tools/apply_patch.py +0 -0
  676. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/tools/base.py +0 -0
  677. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/tools/batch_tool.py +0 -0
  678. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/tools/compact_tool.py +0 -0
  679. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/tools/context_handle.py +0 -0
  680. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/tools/context_tools.py +0 -0
  681. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/tools/core_tools.py +0 -0
  682. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/tools/diagnostics.py +0 -0
  683. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/tools/diff_utils.py +0 -0
  684. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/tools/display.py +0 -0
  685. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/tools/dynamic_workflow.py +0 -0
  686. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/tools/edit_tools.py +0 -0
  687. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/tools/enhanced_base.py +0 -0
  688. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/tools/env_policy.py +0 -0
  689. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/tools/file_tools.py +0 -0
  690. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/tools/file_tracking.py +0 -0
  691. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/tools/governed.py +0 -0
  692. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/tools/harness_agent_session.py +0 -0
  693. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/tools/image_tools.py +0 -0
  694. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/tools/lsp_tools.py +0 -0
  695. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/tools/mcp_tools.py +0 -0
  696. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/tools/monty_tool.py +0 -0
  697. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/tools/network_tools.py +0 -0
  698. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/tools/output_spill.py +0 -0
  699. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/tools/peer_agent_tools.py +0 -0
  700. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/tools/permissions.py +0 -0
  701. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/tools/post_edit.py +0 -0
  702. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/tools/question_tool.py +0 -0
  703. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/tools/request_permissions_tool.py +0 -0
  704. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/tools/search_tools.py +0 -0
  705. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/tools/semantic_search.py +0 -0
  706. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/tools/shell_session.py +0 -0
  707. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/tools/shell_tools.py +0 -0
  708. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/tools/skill_tools.py +0 -0
  709. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/tools/spawn_harness.py +0 -0
  710. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/tools/todo_tools.py +0 -0
  711. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/tools/tool_search.py +0 -0
  712. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/tools/validation.py +0 -0
  713. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/tools/web_tools.py +0 -0
  714. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/tui_integration.py +0 -0
  715. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/tui_widgets/__init__.py +0 -0
  716. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/tui_widgets/widgets/__init__.py +0 -0
  717. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/tui_widgets/widgets/progress.py +0 -0
  718. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/tui_widgets/widgets/tool_display.py +0 -0
  719. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/undo_manager.py +0 -0
  720. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/utils/__init__.py +0 -0
  721. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/utils/error_handling.py +0 -0
  722. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/utils/fuzzy.py +0 -0
  723. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/widgets/__init__.py +0 -0
  724. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/widgets/a2a_connect.py +0 -0
  725. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/widgets/agent_store.py +0 -0
  726. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/widgets/agent_switcher.py +0 -0
  727. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/widgets/animation_manager.py +0 -0
  728. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/widgets/code_context.py +0 -0
  729. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/widgets/command_palette.py +0 -0
  730. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/widgets/connection_status.py +0 -0
  731. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/widgets/conversation_history.py +0 -0
  732. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/widgets/diff_indicator.py +0 -0
  733. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/widgets/enhanced_status_bar.py +0 -0
  734. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/widgets/enhanced_toast.py +0 -0
  735. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/widgets/file_browser.py +0 -0
  736. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/widgets/file_reference.py +0 -0
  737. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/widgets/harness_hub.py +0 -0
  738. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/widgets/leader_key.py +0 -0
  739. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/widgets/mode_switcher.py +0 -0
  740. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/widgets/model_picker.py +0 -0
  741. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/widgets/outcome_screen.py +0 -0
  742. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/widgets/permission_preview.py +0 -0
  743. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/widgets/prompt.py +0 -0
  744. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/widgets/provider_connect.py +0 -0
  745. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/widgets/pty_shell.py +0 -0
  746. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/widgets/resizable_sidebar.py +0 -0
  747. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/widgets/response_changes.py +0 -0
  748. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/widgets/response_display.py +0 -0
  749. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/widgets/rewind_overlay.py +0 -0
  750. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/widgets/rich_tool_display.py +0 -0
  751. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/widgets/sidebar_panels.py +0 -0
  752. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/widgets/slash_commands.py +0 -0
  753. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/widgets/slash_complete.py +0 -0
  754. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/widgets/split_view.py +0 -0
  755. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/widgets/status_bar.py +0 -0
  756. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/widgets/superqode_display.py +0 -0
  757. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/widgets/theme_picker.py +0 -0
  758. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/widgets/thinking.py +0 -0
  759. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/widgets/thinking_display.py +0 -0
  760. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/widgets/throbber.py +0 -0
  761. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/widgets/toast.py +0 -0
  762. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/widgets/uhp_connect.py +0 -0
  763. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/widgets/unified_output.py +0 -0
  764. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/workorders/__init__.py +0 -0
  765. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/workorders/cockpit.py +0 -0
  766. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/workorders/integration.py +0 -0
  767. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/workorders/models.py +0 -0
  768. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/workorders/runner.py +0 -0
  769. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/workorders/store.py +0 -0
  770. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/workorders/usage.py +0 -0
  771. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/workorders/worker.py +0 -0
  772. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/workspace/__init__.py +0 -0
  773. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/workspace/artifacts.py +0 -0
  774. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/workspace/change_summary.py +0 -0
  775. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/workspace/coordinator.py +0 -0
  776. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/workspace/diff_tracker.py +0 -0
  777. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/workspace/git_guard.py +0 -0
  778. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/workspace/git_snapshot.py +0 -0
  779. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/workspace/manager.py +0 -0
  780. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/workspace/snapshot.py +0 -0
  781. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/workspace/watcher.py +0 -0
  782. {superqode-2.2.1 → superqode-2.2.3}/src/superqode/workspace/worktree.py +0 -0
  783. {superqode-2.2.1 → superqode-2.2.3}/src/superqode.egg-info/SOURCES.txt +0 -0
  784. {superqode-2.2.1 → superqode-2.2.3}/src/superqode.egg-info/dependency_links.txt +0 -0
  785. {superqode-2.2.1 → superqode-2.2.3}/src/superqode.egg-info/entry_points.txt +0 -0
  786. {superqode-2.2.1 → superqode-2.2.3}/src/superqode.egg-info/requires.txt +0 -0
  787. {superqode-2.2.1 → superqode-2.2.3}/src/superqode.egg-info/top_level.txt +0 -0
  788. {superqode-2.2.1 → superqode-2.2.3}/tests/test_030_candidate.py +0 -0
  789. {superqode-2.2.1 → superqode-2.2.3}/tests/test_a2a_bridge.py +0 -0
  790. {superqode-2.2.1 → superqode-2.2.3}/tests/test_a2a_conformance.py +0 -0
  791. {superqode-2.2.1 → superqode-2.2.3}/tests/test_a2a_connect.py +0 -0
  792. {superqode-2.2.1 → superqode-2.2.3}/tests/test_a2a_context.py +0 -0
  793. {superqode-2.2.1 → superqode-2.2.3}/tests/test_a2a_keys.py +0 -0
  794. {superqode-2.2.1 → superqode-2.2.3}/tests/test_a2a_limits.py +0 -0
  795. {superqode-2.2.1 → superqode-2.2.3}/tests/test_a2a_oauth.py +0 -0
  796. {superqode-2.2.1 → superqode-2.2.3}/tests/test_a2a_security.py +0 -0
  797. {superqode-2.2.1 → superqode-2.2.3}/tests/test_a2a_shortlist.py +0 -0
  798. {superqode-2.2.1 → superqode-2.2.3}/tests/test_a2a_trust.py +0 -0
  799. {superqode-2.2.1 → superqode-2.2.3}/tests/test_a2a_understand.py +0 -0
  800. {superqode-2.2.1 → superqode-2.2.3}/tests/test_acp_agent_dispatch.py +0 -0
  801. {superqode-2.2.1 → superqode-2.2.3}/tests/test_acp_client.py +0 -0
  802. {superqode-2.2.1 → superqode-2.2.3}/tests/test_acp_free_models.py +0 -0
  803. {superqode-2.2.1 → superqode-2.2.3}/tests/test_acp_parent_tool_linking.py +0 -0
  804. {superqode-2.2.1 → superqode-2.2.3}/tests/test_acp_permission_store.py +0 -0
  805. {superqode-2.2.1 → superqode-2.2.3}/tests/test_acp_registry.py +0 -0
  806. {superqode-2.2.1 → superqode-2.2.3}/tests/test_acp_render.py +0 -0
  807. {superqode-2.2.1 → superqode-2.2.3}/tests/test_acp_server.py +0 -0
  808. {superqode-2.2.1 → superqode-2.2.3}/tests/test_acp_session_store.py +0 -0
  809. {superqode-2.2.1 → superqode-2.2.3}/tests/test_acp_slash.py +0 -0
  810. {superqode-2.2.1 → superqode-2.2.3}/tests/test_adaptive_compaction.py +0 -0
  811. {superqode-2.2.1 → superqode-2.2.3}/tests/test_agent_importer.py +0 -0
  812. {superqode-2.2.1 → superqode-2.2.3}/tests/test_agent_install_commands.py +0 -0
  813. {superqode-2.2.1 → superqode-2.2.3}/tests/test_agent_loop_harness.py +0 -0
  814. {superqode-2.2.1 → superqode-2.2.3}/tests/test_agent_memory.py +0 -0
  815. {superqode-2.2.1 → superqode-2.2.3}/tests/test_agents_md_compat.py +0 -0
  816. {superqode-2.2.1 → superqode-2.2.3}/tests/test_agy_tui_commands.py +0 -0
  817. {superqode-2.2.1 → superqode-2.2.3}/tests/test_app_main_contract.py +0 -0
  818. {superqode-2.2.1 → superqode-2.2.3}/tests/test_apply_patch.py +0 -0
  819. {superqode-2.2.1 → superqode-2.2.3}/tests/test_auth.py +0 -0
  820. {superqode-2.2.1 → superqode-2.2.3}/tests/test_bash_spill.py +0 -0
  821. {superqode-2.2.1 → superqode-2.2.3}/tests/test_benchmarks.py +0 -0
  822. {superqode-2.2.1 → superqode-2.2.3}/tests/test_catalog_freshness.py +0 -0
  823. {superqode-2.2.1 → superqode-2.2.3}/tests/test_change_summary.py +0 -0
  824. {superqode-2.2.1 → superqode-2.2.3}/tests/test_channels.py +0 -0
  825. {superqode-2.2.1 → superqode-2.2.3}/tests/test_cli_commands.py +0 -0
  826. {superqode-2.2.1 → superqode-2.2.3}/tests/test_cli_connect.py +0 -0
  827. {superqode-2.2.1 → superqode-2.2.3}/tests/test_cli_contract.py +0 -0
  828. {superqode-2.2.1 → superqode-2.2.3}/tests/test_cli_reference_coverage.py +0 -0
  829. {superqode-2.2.1 → superqode-2.2.3}/tests/test_clickable_commands.py +0 -0
  830. {superqode-2.2.1 → superqode-2.2.3}/tests/test_command_safety.py +0 -0
  831. {superqode-2.2.1 → superqode-2.2.3}/tests/test_commands_runtime.py +0 -0
  832. {superqode-2.2.1 → superqode-2.2.3}/tests/test_compaction.py +0 -0
  833. {superqode-2.2.1 → superqode-2.2.3}/tests/test_config_loader.py +0 -0
  834. {superqode-2.2.1 → superqode-2.2.3}/tests/test_config_runtime.py +0 -0
  835. {superqode-2.2.1 → superqode-2.2.3}/tests/test_connect_harness_screen.py +0 -0
  836. {superqode-2.2.1 → superqode-2.2.3}/tests/test_connect_setup.py +0 -0
  837. {superqode-2.2.1 → superqode-2.2.3}/tests/test_connection_profiles.py +0 -0
  838. {superqode-2.2.1 → superqode-2.2.3}/tests/test_context_handles.py +0 -0
  839. {superqode-2.2.1 → superqode-2.2.3}/tests/test_context_probe.py +0 -0
  840. {superqode-2.2.1 → superqode-2.2.3}/tests/test_context_remaining.py +0 -0
  841. {superqode-2.2.1 → superqode-2.2.3}/tests/test_copilot_login_ux.py +0 -0
  842. {superqode-2.2.1 → superqode-2.2.3}/tests/test_copilot_tui_commands.py +0 -0
  843. {superqode-2.2.1 → superqode-2.2.3}/tests/test_create_skill_tool.py +0 -0
  844. {superqode-2.2.1 → superqode-2.2.3}/tests/test_deepagents_model_spec.py +0 -0
  845. {superqode-2.2.1 → superqode-2.2.3}/tests/test_deferred_tools.py +0 -0
  846. {superqode-2.2.1 → superqode-2.2.3}/tests/test_design_system_contrast.py +0 -0
  847. {superqode-2.2.1 → superqode-2.2.3}/tests/test_developer_workflow_docs.py +0 -0
  848. {superqode-2.2.1 → superqode-2.2.3}/tests/test_ds4_local_client.py +0 -0
  849. {superqode-2.2.1 → superqode-2.2.3}/tests/test_dsh_harness.py +0 -0
  850. {superqode-2.2.1 → superqode-2.2.3}/tests/test_dynamic_workflow_tool.py +0 -0
  851. {superqode-2.2.1 → superqode-2.2.3}/tests/test_edit_line_number_strip.py +0 -0
  852. {superqode-2.2.1 → superqode-2.2.3}/tests/test_env_introspect.py +0 -0
  853. {superqode-2.2.1 → superqode-2.2.3}/tests/test_execution_resolver.py +0 -0
  854. {superqode-2.2.1 → superqode-2.2.3}/tests/test_extensions.py +0 -0
  855. {superqode-2.2.1 → superqode-2.2.3}/tests/test_final_parity_wave.py +0 -0
  856. {superqode-2.2.1 → superqode-2.2.3}/tests/test_free_models.py +0 -0
  857. {superqode-2.2.1 → superqode-2.2.3}/tests/test_governance.py +0 -0
  858. {superqode-2.2.1 → superqode-2.2.3}/tests/test_grok_cli_auth.py +0 -0
  859. {superqode-2.2.1 → superqode-2.2.3}/tests/test_harness_agent_session.py +0 -0
  860. {superqode-2.2.1 → superqode-2.2.3}/tests/test_harness_backends.py +0 -0
  861. {superqode-2.2.1 → superqode-2.2.3}/tests/test_harness_bench.py +0 -0
  862. {superqode-2.2.1 → superqode-2.2.3}/tests/test_harness_bench_paths.py +0 -0
  863. {superqode-2.2.1 → superqode-2.2.3}/tests/test_harness_catalog.py +0 -0
  864. {superqode-2.2.1 → superqode-2.2.3}/tests/test_harness_connect_catalog.py +0 -0
  865. {superqode-2.2.1 → superqode-2.2.3}/tests/test_harness_drift.py +0 -0
  866. {superqode-2.2.1 → superqode-2.2.3}/tests/test_harness_eval_splits.py +0 -0
  867. {superqode-2.2.1 → superqode-2.2.3}/tests/test_harness_examples.py +0 -0
  868. {superqode-2.2.1 → superqode-2.2.3}/tests/test_harness_explain.py +0 -0
  869. {superqode-2.2.1 → superqode-2.2.3}/tests/test_harness_hooks.py +0 -0
  870. {superqode-2.2.1 → superqode-2.2.3}/tests/test_harness_hub_catalog.py +0 -0
  871. {superqode-2.2.1 → superqode-2.2.3}/tests/test_harness_hub_screen.py +0 -0
  872. {superqode-2.2.1 → superqode-2.2.3}/tests/test_harness_kernel.py +0 -0
  873. {superqode-2.2.1 → superqode-2.2.3}/tests/test_harness_mcp_server.py +0 -0
  874. {superqode-2.2.1 → superqode-2.2.3}/tests/test_harness_model_policy.py +0 -0
  875. {superqode-2.2.1 → superqode-2.2.3}/tests/test_harness_observability.py +0 -0
  876. {superqode-2.2.1 → superqode-2.2.3}/tests/test_harness_omni.py +0 -0
  877. {superqode-2.2.1 → superqode-2.2.3}/tests/test_harness_output.py +0 -0
  878. {superqode-2.2.1 → superqode-2.2.3}/tests/test_harness_permissions.py +0 -0
  879. {superqode-2.2.1 → superqode-2.2.3}/tests/test_harness_promotion.py +0 -0
  880. {superqode-2.2.1 → superqode-2.2.3}/tests/test_harness_protocol.py +0 -0
  881. {superqode-2.2.1 → superqode-2.2.3}/tests/test_harness_sandbox.py +0 -0
  882. {superqode-2.2.1 → superqode-2.2.3}/tests/test_harness_seesaw_dimensions.py +0 -0
  883. {superqode-2.2.1 → superqode-2.2.3}/tests/test_harness_self_improve.py +0 -0
  884. {superqode-2.2.1 → superqode-2.2.3}/tests/test_harness_spec.py +0 -0
  885. {superqode-2.2.1 → superqode-2.2.3}/tests/test_harness_store.py +0 -0
  886. {superqode-2.2.1 → superqode-2.2.3}/tests/test_harness_usage.py +0 -0
  887. {superqode-2.2.1 → superqode-2.2.3}/tests/test_harness_wizard.py +0 -0
  888. {superqode-2.2.1 → superqode-2.2.3}/tests/test_harness_workflow.py +0 -0
  889. {superqode-2.2.1 → superqode-2.2.3}/tests/test_headless.py +0 -0
  890. {superqode-2.2.1 → superqode-2.2.3}/tests/test_hf_fetch.py +0 -0
  891. {superqode-2.2.1 → superqode-2.2.3}/tests/test_hooks.py +0 -0
  892. {superqode-2.2.1 → superqode-2.2.3}/tests/test_install_script.py +0 -0
  893. {superqode-2.2.1 → superqode-2.2.3}/tests/test_integration_docs.py +0 -0
  894. {superqode-2.2.1 → superqode-2.2.3}/tests/test_kimi_k3_provider.py +0 -0
  895. {superqode-2.2.1 → superqode-2.2.3}/tests/test_kimi_k3_routes.py +0 -0
  896. {superqode-2.2.1 → superqode-2.2.3}/tests/test_linter_runner.py +0 -0
  897. {superqode-2.2.1 → superqode-2.2.3}/tests/test_litellm_gateway.py +0 -0
  898. {superqode-2.2.1 → superqode-2.2.3}/tests/test_live_acp_registry.py +0 -0
  899. {superqode-2.2.1 → superqode-2.2.3}/tests/test_live_models.py +0 -0
  900. {superqode-2.2.1 → superqode-2.2.3}/tests/test_local_airplane.py +0 -0
  901. {superqode-2.2.1 → superqode-2.2.3}/tests/test_local_build.py +0 -0
  902. {superqode-2.2.1 → superqode-2.2.3}/tests/test_local_code_index.py +0 -0
  903. {superqode-2.2.1 → superqode-2.2.3}/tests/test_local_labs.py +0 -0
  904. {superqode-2.2.1 → superqode-2.2.3}/tests/test_local_migrate.py +0 -0
  905. {superqode-2.2.1 → superqode-2.2.3}/tests/test_local_model_optimizations.py +0 -0
  906. {superqode-2.2.1 → superqode-2.2.3}/tests/test_local_packs.py +0 -0
  907. {superqode-2.2.1 → superqode-2.2.3}/tests/test_local_sandbox.py +0 -0
  908. {superqode-2.2.1 → superqode-2.2.3}/tests/test_local_search.py +0 -0
  909. {superqode-2.2.1 → superqode-2.2.3}/tests/test_local_servers.py +0 -0
  910. {superqode-2.2.1 → superqode-2.2.3}/tests/test_local_setup.py +0 -0
  911. {superqode-2.2.1 → superqode-2.2.3}/tests/test_local_smoke.py +0 -0
  912. {superqode-2.2.1 → superqode-2.2.3}/tests/test_local_stack.py +0 -0
  913. {superqode-2.2.1 → superqode-2.2.3}/tests/test_local_tool_capabilities.py +0 -0
  914. {superqode-2.2.1 → superqode-2.2.3}/tests/test_local_tool_support.py +0 -0
  915. {superqode-2.2.1 → superqode-2.2.3}/tests/test_login_api.py +0 -0
  916. {superqode-2.2.1 → superqode-2.2.3}/tests/test_loop_guard.py +0 -0
  917. {superqode-2.2.1 → superqode-2.2.3}/tests/test_managed_harness_backend.py +0 -0
  918. {superqode-2.2.1 → superqode-2.2.3}/tests/test_markdown_render.py +0 -0
  919. {superqode-2.2.1 → superqode-2.2.3}/tests/test_mcp.py +0 -0
  920. {superqode-2.2.1 → superqode-2.2.3}/tests/test_mcp_example_server.py +0 -0
  921. {superqode-2.2.1 → superqode-2.2.3}/tests/test_mcp_integration.py +0 -0
  922. {superqode-2.2.1 → superqode-2.2.3}/tests/test_mcp_live.py +0 -0
  923. {superqode-2.2.1 → superqode-2.2.3}/tests/test_mcp_oauth_generalized.py +0 -0
  924. {superqode-2.2.1 → superqode-2.2.3}/tests/test_mcp_tools_runtime.py +0 -0
  925. {superqode-2.2.1 → superqode-2.2.3}/tests/test_mcp_two_way.py +0 -0
  926. {superqode-2.2.1 → superqode-2.2.3}/tests/test_memory_recall.py +0 -0
  927. {superqode-2.2.1 → superqode-2.2.3}/tests/test_mlx_tools.py +0 -0
  928. {superqode-2.2.1 → superqode-2.2.3}/tests/test_model_profiles.py +0 -0
  929. {superqode-2.2.1 → superqode-2.2.3}/tests/test_model_specs.py +0 -0
  930. {superqode-2.2.1 → superqode-2.2.3}/tests/test_models_dev.py +0 -0
  931. {superqode-2.2.1 → superqode-2.2.3}/tests/test_monty_tool.py +0 -0
  932. {superqode-2.2.1 → superqode-2.2.3}/tests/test_navigation_history.py +0 -0
  933. {superqode-2.2.1 → superqode-2.2.3}/tests/test_network_policy.py +0 -0
  934. {superqode-2.2.1 → superqode-2.2.3}/tests/test_ollama_client.py +0 -0
  935. {superqode-2.2.1 → superqode-2.2.3}/tests/test_omnigent_agent_session_smoke.py +0 -0
  936. {superqode-2.2.1 → superqode-2.2.3}/tests/test_omnigent_importer.py +0 -0
  937. {superqode-2.2.1 → superqode-2.2.3}/tests/test_openai_session.py +0 -0
  938. {superqode-2.2.1 → superqode-2.2.3}/tests/test_output_spill.py +0 -0
  939. {superqode-2.2.1 → superqode-2.2.3}/tests/test_parallel_compare.py +0 -0
  940. {superqode-2.2.1 → superqode-2.2.3}/tests/test_peer_agents.py +0 -0
  941. {superqode-2.2.1 → superqode-2.2.3}/tests/test_plugin_hook_wiring.py +0 -0
  942. {superqode-2.2.1 → superqode-2.2.3}/tests/test_plugins.py +0 -0
  943. {superqode-2.2.1 → superqode-2.2.3}/tests/test_policies_and_turndiff.py +0 -0
  944. {superqode-2.2.1 → superqode-2.2.3}/tests/test_post_edit_verify.py +0 -0
  945. {superqode-2.2.1 → superqode-2.2.3}/tests/test_prime_agent_client.py +0 -0
  946. {superqode-2.2.1 → superqode-2.2.3}/tests/test_prime_agent_harness.py +0 -0
  947. {superqode-2.2.1 → superqode-2.2.3}/tests/test_prime_agent_provider.py +0 -0
  948. {superqode-2.2.1 → superqode-2.2.3}/tests/test_prime_command_surface.py +0 -0
  949. {superqode-2.2.1 → superqode-2.2.3}/tests/test_prime_tui_rpc.py +0 -0
  950. {superqode-2.2.1 → superqode-2.2.3}/tests/test_progressive_discovery.py +0 -0
  951. {superqode-2.2.1 → superqode-2.2.3}/tests/test_progressive_reveals.py +0 -0
  952. {superqode-2.2.1 → superqode-2.2.3}/tests/test_project_trust.py +0 -0
  953. {superqode-2.2.1 → superqode-2.2.3}/tests/test_prompt_stack.py +0 -0
  954. {superqode-2.2.1 → superqode-2.2.3}/tests/test_provider_catalog.py +0 -0
  955. {superqode-2.2.1 → superqode-2.2.3}/tests/test_provider_dynamic.py +0 -0
  956. {superqode-2.2.1 → superqode-2.2.3}/tests/test_provider_models.py +0 -0
  957. {superqode-2.2.1 → superqode-2.2.3}/tests/test_provider_recommendations.py +0 -0
  958. {superqode-2.2.1 → superqode-2.2.3}/tests/test_pure_mode_sessions.py +0 -0
  959. {superqode-2.2.1 → superqode-2.2.3}/tests/test_qm_deployment_layer.py +0 -0
  960. {superqode-2.2.1 → superqode-2.2.3}/tests/test_rate_limit_retry.py +0 -0
  961. {superqode-2.2.1 → superqode-2.2.3}/tests/test_read_tool_limits.py +0 -0
  962. {superqode-2.2.1 → superqode-2.2.3}/tests/test_reasoning_and_budget.py +0 -0
  963. {superqode-2.2.1 → superqode-2.2.3}/tests/test_recursive_eval_packs.py +0 -0
  964. {superqode-2.2.1 → superqode-2.2.3}/tests/test_release_metadata.py +0 -0
  965. {superqode-2.2.1 → superqode-2.2.3}/tests/test_rlm_code_integration.py +0 -0
  966. {superqode-2.2.1 → superqode-2.2.3}/tests/test_runtime_adk.py +0 -0
  967. {superqode-2.2.1 → superqode-2.2.3}/tests/test_runtime_antigravity_cli.py +0 -0
  968. {superqode-2.2.1 → superqode-2.2.3}/tests/test_runtime_antigravity_managed.py +0 -0
  969. {superqode-2.2.1 → superqode-2.2.3}/tests/test_runtime_antigravity_sdk.py +0 -0
  970. {superqode-2.2.1 → superqode-2.2.3}/tests/test_runtime_builtin.py +0 -0
  971. {superqode-2.2.1 → superqode-2.2.3}/tests/test_runtime_claude_agent_sdk.py +0 -0
  972. {superqode-2.2.1 → superqode-2.2.3}/tests/test_runtime_codex_sdk.py +0 -0
  973. {superqode-2.2.1 → superqode-2.2.3}/tests/test_runtime_copilot_sdk.py +0 -0
  974. {superqode-2.2.1 → superqode-2.2.3}/tests/test_runtime_devin_cli.py +0 -0
  975. {superqode-2.2.1 → superqode-2.2.3}/tests/test_runtime_dialog.py +0 -0
  976. {superqode-2.2.1 → superqode-2.2.3}/tests/test_runtime_openai_agents.py +0 -0
  977. {superqode-2.2.1 → superqode-2.2.3}/tests/test_runtime_openai_events.py +0 -0
  978. {superqode-2.2.1 → superqode-2.2.3}/tests/test_runtime_openai_hitl.py +0 -0
  979. {superqode-2.2.1 → superqode-2.2.3}/tests/test_runtime_openai_sandbox.py +0 -0
  980. {superqode-2.2.1 → superqode-2.2.3}/tests/test_runtime_protocol.py +0 -0
  981. {superqode-2.2.1 → superqode-2.2.3}/tests/test_runtime_pydanticai.py +0 -0
  982. {superqode-2.2.1 → superqode-2.2.3}/tests/test_sandbox_backends.py +0 -0
  983. {superqode-2.2.1 → superqode-2.2.3}/tests/test_sandbox_execution.py +0 -0
  984. {superqode-2.2.1 → superqode-2.2.3}/tests/test_search_roots.py +0 -0
  985. {superqode-2.2.1 → superqode-2.2.3}/tests/test_semantic_search.py +0 -0
  986. {superqode-2.2.1 → superqode-2.2.3}/tests/test_session_switchboard.py +0 -0
  987. {superqode-2.2.1 → superqode-2.2.3}/tests/test_shell_session.py +0 -0
  988. {superqode-2.2.1 → superqode-2.2.3}/tests/test_simple_login.py +0 -0
  989. {superqode-2.2.1 → superqode-2.2.3}/tests/test_simple_query_fastpath.py +0 -0
  990. {superqode-2.2.1 → superqode-2.2.3}/tests/test_skillopt.py +0 -0
  991. {superqode-2.2.1 → superqode-2.2.3}/tests/test_slash_runtime.py +0 -0
  992. {superqode-2.2.1 → superqode-2.2.3}/tests/test_spawn_harness_tool.py +0 -0
  993. {superqode-2.2.1 → superqode-2.2.3}/tests/test_status_bar_layout.py +0 -0
  994. {superqode-2.2.1 → superqode-2.2.3}/tests/test_steering_continue_reminders.py +0 -0
  995. {superqode-2.2.1 → superqode-2.2.3}/tests/test_streaming_tool_calls.py +0 -0
  996. {superqode-2.2.1 → superqode-2.2.3}/tests/test_subscription_billing_policy.py +0 -0
  997. {superqode-2.2.1 → superqode-2.2.3}/tests/test_subscription_login.py +0 -0
  998. {superqode-2.2.1 → superqode-2.2.3}/tests/test_subscription_login_consent.py +0 -0
  999. {superqode-2.2.1 → superqode-2.2.3}/tests/test_synthetic_gateways.py +0 -0
  1000. {superqode-2.2.1 → superqode-2.2.3}/tests/test_tau_harness_adapter.py +0 -0
  1001. {superqode-2.2.1 → superqode-2.2.3}/tests/test_terminal_output_limits.py +0 -0
  1002. {superqode-2.2.1 → superqode-2.2.3}/tests/test_theme_contrast.py +0 -0
  1003. {superqode-2.2.1 → superqode-2.2.3}/tests/test_theme_picker.py +0 -0
  1004. {superqode-2.2.1 → superqode-2.2.3}/tests/test_theme_repaint.py +0 -0
  1005. {superqode-2.2.1 → superqode-2.2.3}/tests/test_todo_tools.py +0 -0
  1006. {superqode-2.2.1 → superqode-2.2.3}/tests/test_tool_args_repair.py +0 -0
  1007. {superqode-2.2.1 → superqode-2.2.3}/tests/test_tool_batch_safety.py +0 -0
  1008. {superqode-2.2.1 → superqode-2.2.3}/tests/test_tool_bridge.py +0 -0
  1009. {superqode-2.2.1 → superqode-2.2.3}/tests/test_tool_bridge_openai.py +0 -0
  1010. {superqode-2.2.1 → superqode-2.2.3}/tests/test_tool_call_repair.py +0 -0
  1011. {superqode-2.2.1 → superqode-2.2.3}/tests/test_tool_output_pruning.py +0 -0
  1012. {superqode-2.2.1 → superqode-2.2.3}/tests/test_tool_tracking.py +0 -0
  1013. {superqode-2.2.1 → superqode-2.2.3}/tests/test_tools.py +0 -0
  1014. {superqode-2.2.1 → superqode-2.2.3}/tests/test_tui_change_summary.py +0 -0
  1015. {superqode-2.2.1 → superqode-2.2.3}/tests/test_tui_chat_mode.py +0 -0
  1016. {superqode-2.2.1 → superqode-2.2.3}/tests/test_tui_diagnostics.py +0 -0
  1017. {superqode-2.2.1 → superqode-2.2.3}/tests/test_tui_exit.py +0 -0
  1018. {superqode-2.2.1 → superqode-2.2.3}/tests/test_tui_feedback.py +0 -0
  1019. {superqode-2.2.1 → superqode-2.2.3}/tests/test_tui_launch_performance.py +0 -0
  1020. {superqode-2.2.1 → superqode-2.2.3}/tests/test_tui_llamacpp_connect.py +0 -0
  1021. {superqode-2.2.1 → superqode-2.2.3}/tests/test_tui_markdown_cleanup.py +0 -0
  1022. {superqode-2.2.1 → superqode-2.2.3}/tests/test_tui_mlx_connect.py +0 -0
  1023. {superqode-2.2.1 → superqode-2.2.3}/tests/test_tui_mounted.py +0 -0
  1024. {superqode-2.2.1 → superqode-2.2.3}/tests/test_tui_onboarding.py +0 -0
  1025. {superqode-2.2.1 → superqode-2.2.3}/tests/test_tui_smoke.py +0 -0
  1026. {superqode-2.2.1 → superqode-2.2.3}/tests/test_tui_tool_display.py +0 -0
  1027. {superqode-2.2.1 → superqode-2.2.3}/tests/test_uhp_backend.py +0 -0
  1028. {superqode-2.2.1 → superqode-2.2.3}/tests/test_uhp_connect.py +0 -0
  1029. {superqode-2.2.1 → superqode-2.2.3}/tests/test_update_command.py +0 -0
  1030. {superqode-2.2.1 → superqode-2.2.3}/tests/test_vendor_cli_runtime.py +0 -0
  1031. {superqode-2.2.1 → superqode-2.2.3}/tests/test_version.py +0 -0
  1032. {superqode-2.2.1 → superqode-2.2.3}/tests/test_view_image.py +0 -0
  1033. {superqode-2.2.1 → superqode-2.2.3}/tests/test_web_server_auth.py +0 -0
  1034. {superqode-2.2.1 → superqode-2.2.3}/tests/test_workorders.py +0 -0
  1035. {superqode-2.2.1 → superqode-2.2.3}/tests/test_workspace.py +0 -0
  1036. {superqode-2.2.1 → superqode-2.2.3}/tests/test_zai_provider.py +0 -0
@@ -7,6 +7,55 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [2.2.3] - 2026-09-13
11
+
12
+ Security fixes for the UHP client and the BYOK server bind shipped in 2.2.2.
13
+ Anyone who ran `superqode connect uhp` on 2.2.2 sent their model key to the
14
+ address they connected to, including on the anonymous discovery request, so
15
+ upgrading is worth doing before the next connect. No API changed and no
16
+ protocol behaviour changed: the Core conformance result is the same 38/40.
17
+
18
+ ### 🔐 UHP security
19
+
20
+ - The client sends `X-Provider-Api-Key` on a task submission only. It was
21
+ attached to every request, including the anonymous discovery and catalog
22
+ GETs, so `connect uhp --base-url <address>` handed that address the caller's
23
+ model key before the caller had decided to trust it. The key is also
24
+ withheld from a remote plaintext `http://` origin, with a warning.
25
+ - A caller's model key no longer races with another caller's. It is written to
26
+ every environment variable the provider reads, and BYOK turns are serialised
27
+ for as long as it is in the process environment, which LiteLLM reads
28
+ credentials from. Concurrent turns previously overwrote each other's key.
29
+ - `Dockerfile.uhp` no longer passes `--api-key` on the command line. The bearer
30
+ came from the environment either way, and the argument published it in
31
+ `/proc/1/cmdline`, which the bound harness's shell tool can read.
32
+ - On a remote bind each session gets its own directory under the working
33
+ directory, so callers cannot read each other's files or session transcripts.
34
+ A local bind still runs in the directory it was given.
35
+ - Request metadata can no longer set harness runtime controls such as
36
+ `agent_max_iterations`. Caller context is still passed through.
37
+ - Bearer comparison is constant time.
38
+
39
+ ## [2.2.2] - 2026-09-12
40
+
41
+ The installed CLI can complete a harness turn against a BYOK UHP host such as
42
+ `uhp.superqode.dev`. The client sends the caller's provider key
43
+ (`GEMINI_API_KEY` / `GOOGLE_API_KEY` when the provider is Google). The public
44
+ Core bind stays catalog-open and does not attach a model key. A separate Cloud
45
+ Run image (`Dockerfile.uhp`) deploys that bind without touching A2A.
46
+
47
+ ### 🧩 Unified Harness Protocol
48
+
49
+ - `UHPClient` and `harness run uhp` send `X-Provider-Api-Key` from the
50
+ caller's environment so a remote Core host can run a turn without a
51
+ server-side `GEMINI_API_KEY`.
52
+ - Remote `serve uhp --allow-remote` requires `--api-key`. Catalog GETs stay
53
+ public; `POST /v1/responses` without the caller provider key returns
54
+ `missing_provider_key` and does not start LiteLLM.
55
+ - Public bind defaults: provider `google`, model `gemini-flash-latest`, harness
56
+ `chrn_superqode_core`. Image and Cloud Build files are `Dockerfile.uhp` and
57
+ `cloudbuild.uhp.yaml` (service `superqode-uhp`).
58
+
10
59
  ## [2.2.1] - 2026-09-12
11
60
 
12
61
  Local UHP for the package cut: SuperQode speaks it as a client (connect, run,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: superqode
3
- Version: 2.2.1
3
+ Version: 2.2.3
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>
@@ -483,6 +483,12 @@ superqode harness run uhp --prompt "summarise this repository"
483
483
  to HarnessRouter, which wraps third-party CLIs as a catalog. Core names the
484
484
  surface SuperQode implements; it is not a conformance-suite certificate.
485
485
 
486
+ The public hostname for that bind is [`uhp.superqode.dev`](https://uhp.superqode.dev/v1/uhp).
487
+ Anonymous callers get discovery and the static harness catalog (no model call).
488
+ A harness turn requires a SuperQode UHP API key and the caller's own provider
489
+ key. SuperQode does not pay for that model. Until the hostname is mapped, use
490
+ local `serve uhp` as above.
491
+
486
492
  Read the [UHP guide](docs/providers/uhp.md).
487
493
 
488
494
  ## Harness Execution Model
@@ -332,6 +332,12 @@ superqode harness run uhp --prompt "summarise this repository"
332
332
  to HarnessRouter, which wraps third-party CLIs as a catalog. Core names the
333
333
  surface SuperQode implements; it is not a conformance-suite certificate.
334
334
 
335
+ The public hostname for that bind is [`uhp.superqode.dev`](https://uhp.superqode.dev/v1/uhp).
336
+ Anonymous callers get discovery and the static harness catalog (no model call).
337
+ A harness turn requires a SuperQode UHP API key and the caller's own provider
338
+ key. SuperQode does not pay for that model. Until the hostname is mapped, use
339
+ local `serve uhp` as above.
340
+
335
341
  Read the [UHP guide](docs/providers/uhp.md).
336
342
 
337
343
  ## Harness Execution Model
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "superqode"
3
- version = "2.2.1"
3
+ version = "2.2.3"
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.1"
41
+ __version__ = "2.2.3"
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
@@ -351,7 +351,7 @@ def serve_a2a(
351
351
  "--api-key",
352
352
  envvar="SUPERQODE_UHP_API_KEY",
353
353
  default=None,
354
- help="Optional bearer token; when set, all routes except discovery require it",
354
+ help="Bearer token. Required with --allow-remote. Catalog GETs stay public.",
355
355
  )
356
356
  @click.option("--allow-remote", is_flag=True, help="Allow binding outside localhost")
357
357
  @click.option(
@@ -380,10 +380,11 @@ def serve_uhp(
380
380
  is_loopback = host in {"127.0.0.1", "localhost", "::1"}
381
381
  if not is_loopback and not allow_remote:
382
382
  raise click.ClickException("Use --allow-remote to bind outside localhost.")
383
- if allow_remote and not api_key:
384
- console.print(
385
- "[yellow]Remote UHP bind without --api-key / SUPERQODE_UHP_API_KEY; "
386
- "discovery is public and every other route is open.[/yellow]"
383
+ if allow_remote and not (api_key or "").strip():
384
+ raise click.ClickException(
385
+ "Remote UHP bind requires --api-key / SUPERQODE_UHP_API_KEY. "
386
+ "Catalog GETs stay public; harness turns need the bearer and "
387
+ "the caller's X-Provider-Api-Key."
387
388
  )
388
389
 
389
390
  server = create_uhp_server(
@@ -393,6 +394,8 @@ def serve_uhp(
393
394
  working_directory=working_dir.resolve(),
394
395
  api_key=api_key,
395
396
  harness_id=harness_id,
397
+ public_catalog=allow_remote,
398
+ require_caller_provider_key=allow_remote,
396
399
  )
397
400
  console.print(
398
401
  f"[cyan]Serving SuperQode UHP {server.discovery_document()['default_version']} "
@@ -13,15 +13,20 @@ from __future__ import annotations
13
13
 
14
14
  import base64
15
15
  import json
16
+ import logging
16
17
  import mimetypes
18
+ import os
17
19
  import uuid
18
20
  from collections.abc import AsyncIterator, Mapping, Sequence
19
21
  from dataclasses import dataclass, field
20
22
  from pathlib import Path
21
23
  from typing import Any
24
+ from urllib.parse import urlparse
22
25
 
23
26
  import httpx
24
27
 
28
+ logger = logging.getLogger(__name__)
29
+
25
30
  UHP_PROTOCOL_VERSION = "2026-08-11"
26
31
 
27
32
  #: Sent on every request so a server does not silently answer at another
@@ -32,6 +37,22 @@ VERSION_HEADER = "UHP-Version"
32
37
  #: workspace, so every task submission carries one.
33
38
  IDEMPOTENCY_HEADER = "Idempotency-Key"
34
39
 
40
+ #: Caller model key for a BYOK UHP server. SuperQode does not send its own.
41
+ #: A SuperQode extension, not part of UHP. Task submission only.
42
+ PROVIDER_KEY_HEADER = "X-Provider-Api-Key"
43
+
44
+ #: Plaintext http is safe enough to carry a key to these.
45
+ _LOOPBACK_HOSTS = frozenset({"127.0.0.1", "::1", "localhost"})
46
+
47
+
48
+ def _caller_provider_api_key() -> str:
49
+ """Return the caller's model key for a BYOK UHP server, if present."""
50
+ provider = (os.environ.get("SUPERQODE_PROVIDER") or "google").strip() or "google"
51
+ if provider in {"google", "gemini"}:
52
+ return (os.environ.get("GEMINI_API_KEY") or os.environ.get("GOOGLE_API_KEY") or "").strip()
53
+ return (os.environ.get(f"{provider.upper()}_API_KEY") or "").strip()
54
+
55
+
35
56
  _TERMINAL_STREAM_EVENTS = frozenset(
36
57
  {
37
58
  "response.completed",
@@ -481,7 +502,8 @@ class UHPClient:
481
502
  timeout, because a harness can work for minutes between events.
482
503
  headers: Extra headers merged into every request. A cookie header
483
504
  belongs here for a server that gates the API with a console
484
- session instead of a bearer token.
505
+ session instead of a bearer token. ``PROVIDER_KEY_HEADER`` is the
506
+ exception: it rides task submission only.
485
507
  client: An existing ``httpx.AsyncClient`` to borrow instead of creating
486
508
  one. A borrowed client is never closed by ``aclose``.
487
509
  """
@@ -498,16 +520,46 @@ class UHPClient:
498
520
  self.base_url = self._normalize_base_url(base_url)
499
521
  self.api_key = api_key
500
522
  self.timeout = timeout
501
- self._headers = {
523
+ merged = {
502
524
  "Accept": "application/json",
503
525
  VERSION_HEADER: UHP_PROTOCOL_VERSION,
504
526
  **dict(headers or {}),
505
527
  }
528
+ # Held aside, not merged: a model key rides task submission only.
529
+ self._provider_key = str(merged.pop(PROVIDER_KEY_HEADER, "") or "").strip()
530
+ self._headers = merged
506
531
  if api_key:
507
532
  self._headers["Authorization"] = f"Bearer {api_key}"
508
533
  self._client = client
509
534
  self._owns_client = client is None
510
535
 
536
+ def _origin_is_confidential(self) -> bool:
537
+ """Whether this base URL protects a credential in transit."""
538
+ parsed = urlparse(self.base_url)
539
+ if parsed.scheme == "https":
540
+ return True
541
+ return (parsed.hostname or "").lower() in _LOOPBACK_HOSTS
542
+
543
+ def _provider_key_headers(self) -> dict[str, str]:
544
+ """The caller's model key, for a task submission only.
545
+
546
+ Withheld from a plaintext origin, not refused there: a server reached
547
+ over http may not want the key at all, and one that does answers
548
+ ``missing_provider_key``.
549
+ """
550
+ key = self._provider_key or _caller_provider_api_key()
551
+ if not key:
552
+ return {}
553
+ if not self._origin_is_confidential():
554
+ logger.warning(
555
+ "Not sending %s to %s: the connection is plaintext http, which would put the "
556
+ "model key on the wire in clear. Use an https base URL if this server needs it.",
557
+ PROVIDER_KEY_HEADER,
558
+ self.base_url,
559
+ )
560
+ return {}
561
+ return {PROVIDER_KEY_HEADER: key}
562
+
511
563
  @staticmethod
512
564
  def _normalize_base_url(base_url: str) -> str:
513
565
  """Return the server root without a trailing slash or ``/v1`` suffix."""
@@ -800,7 +852,10 @@ class UHPClient:
800
852
  message, input_files=input_files, inline_files=inline_files
801
853
  )
802
854
  body = self.build_response_body(prepared, stream=False, **kwargs)
803
- headers = {IDEMPOTENCY_HEADER: idempotency_key or self.new_idempotency_key()}
855
+ headers = {
856
+ IDEMPOTENCY_HEADER: idempotency_key or self.new_idempotency_key(),
857
+ **self._provider_key_headers(),
858
+ }
804
859
  payload = await self._request("POST", "responses", json_body=body, headers=headers)
805
860
  if not isinstance(payload, Mapping):
806
861
  raise UHPServerError("UHP server returned no response object")
@@ -834,6 +889,7 @@ class UHPClient:
834
889
  **self._headers,
835
890
  "Accept": "text/event-stream",
836
891
  IDEMPOTENCY_HEADER: idempotency_key or self.new_idempotency_key(),
892
+ **self._provider_key_headers(),
837
893
  }
838
894
  pending_error: UHPError | None = None
839
895
  try:
@@ -13,11 +13,14 @@ session listing) are deferred.
13
13
  from __future__ import annotations
14
14
 
15
15
  import asyncio
16
+ import hmac
16
17
  import json
18
+ import os
17
19
  import re
18
20
  import time
19
21
  import uuid
20
22
  from collections.abc import AsyncIterator, Awaitable, Callable, Mapping, Sequence
23
+ from contextlib import asynccontextmanager
21
24
  from dataclasses import dataclass, field
22
25
  from pathlib import Path
23
26
  from typing import Any
@@ -27,7 +30,11 @@ try:
27
30
  except Exception: # pragma: no cover - optional at import time
28
31
  FastAPIRequest = Any # type: ignore[misc,assignment]
29
32
 
30
- from superqode.harness.uhp_client import UHP_PROTOCOL_VERSION, VERSION_HEADER
33
+ from superqode.harness.uhp_client import (
34
+ PROVIDER_KEY_HEADER,
35
+ UHP_PROTOCOL_VERSION,
36
+ VERSION_HEADER,
37
+ )
31
38
 
32
39
  #: Advertised and accepted protocol version.
33
40
  SUPPORTED_VERSION = UHP_PROTOCOL_VERSION
@@ -37,6 +44,20 @@ DISCOVERY_OBJECT = "uhp.discovery"
37
44
 
38
45
  IDEMPOTENCY_HEADER = "Idempotency-Key"
39
46
 
47
+ #: Runtime controls, not caller context. A request body may not set these.
48
+ RESERVED_METADATA_KEYS = frozenset(
49
+ {
50
+ "agent_max_iterations",
51
+ "delegation_depth",
52
+ "harness_digest",
53
+ "harness_source",
54
+ "provider_api_key",
55
+ }
56
+ )
57
+
58
+ #: Guards the caller key in os.environ, which the whole process shares.
59
+ _PROVIDER_ENV_LOCK = asyncio.Lock()
60
+
40
61
  HarnessRunner = Callable[["UHPRunRequest"], Awaitable["UHPRunResult"]]
41
62
 
42
63
 
@@ -158,6 +179,13 @@ class UHPServerConfig:
158
179
  implementation_version: str = ""
159
180
  #: Honest claim: core endpoints only; suite not yet run.
160
181
  conformance_class: str = "core"
182
+ #: GET catalog without a bearer (remote public host). POST still requires api_key.
183
+ public_catalog: bool = False
184
+ #: Refuse a harness turn unless the caller sent PROVIDER_KEY_HEADER.
185
+ require_caller_provider_key: bool = False
186
+ #: Per-session directory under working_directory, so callers on a shared
187
+ #: bind cannot read each other's files. Off locally: work in the project.
188
+ isolate_session_workspaces: bool = False
161
189
 
162
190
 
163
191
  def _package_version() -> str:
@@ -169,6 +197,60 @@ def _package_version() -> str:
169
197
  return "0.0.0"
170
198
 
171
199
 
200
+ def _provider_key_envs(provider: str) -> tuple[str, ...]:
201
+ """Every env var LiteLLM may read for this provider (caller BYOK).
202
+
203
+ All of them, not just the first: which one LiteLLM reads is its choice,
204
+ and Google alone has two.
205
+ """
206
+ try:
207
+ from superqode.providers.registry import PROVIDERS
208
+
209
+ pdef = PROVIDERS.get(provider)
210
+ names = tuple(str(name) for name in (getattr(pdef, "env_vars", None) or ()) if name)
211
+ if names:
212
+ return names
213
+ except Exception:
214
+ pass
215
+ return (f"{(provider or 'OPENAI').upper()}_API_KEY",)
216
+
217
+
218
+ @asynccontextmanager
219
+ async def _caller_provider_key(token: str, env_names: Sequence[str]) -> AsyncIterator[None]:
220
+ """Hold one caller's model key in ``os.environ`` for the length of a turn.
221
+
222
+ Serialises BYOK turns: the environment is process-global, so overlapping
223
+ turns would otherwise send each other's key.
224
+ """
225
+ if not token:
226
+ yield
227
+ return
228
+ async with _PROVIDER_ENV_LOCK:
229
+ previous = {name: os.environ.get(name) for name in env_names}
230
+ for name in env_names:
231
+ os.environ[name] = token
232
+ try:
233
+ yield
234
+ finally:
235
+ for name, value in previous.items():
236
+ if value is None:
237
+ os.environ.pop(name, None)
238
+ else:
239
+ os.environ[name] = value
240
+
241
+
242
+ def _caller_metadata(body: Mapping[str, Any]) -> dict[str, Any]:
243
+ """Caller-supplied metadata with the runtime's own control keys removed."""
244
+ raw = body.get("metadata")
245
+ if not isinstance(raw, Mapping):
246
+ return {}
247
+ return {
248
+ str(key): value
249
+ for key, value in raw.items()
250
+ if str(key) not in RESERVED_METADATA_KEYS and not str(key).startswith("_")
251
+ }
252
+
253
+
172
254
  def harness_id_from_name(name: str) -> str:
173
255
  """Build a ``chrn_…`` id from a harness/spec name."""
174
256
  slug = re.sub(r"[^a-z0-9]+", "_", (name or "superqode").lower()).strip("_")
@@ -369,8 +451,8 @@ class UHPServer:
369
451
  content=negotiated,
370
452
  headers={VERSION_HEADER: SUPPORTED_VERSION},
371
453
  )
372
- # Discovery is unauthenticated per the OpenAPI contract.
373
- if not server._is_public_path(request.url.path):
454
+ # Discovery (and optional catalog GETs) stay unauthenticated.
455
+ if not server._is_public_request(request.method, request.url.path):
374
456
  auth_error = server._check_auth(request.headers.get("authorization"))
375
457
  if auth_error is not None:
376
458
  return JSONResponse(
@@ -504,8 +586,27 @@ class UHPServer:
504
586
  status, envelope = harness_error
505
587
  return JSONResponse(status_code=status, content=envelope)
506
588
 
589
+ provider_api_key = (http_request.headers.get(PROVIDER_KEY_HEADER) or "").strip()
590
+ if server.config.require_caller_provider_key and not provider_api_key:
591
+ return JSONResponse(
592
+ status_code=403,
593
+ content=_error_envelope(
594
+ error_type="permission_error",
595
+ code="missing_provider_key",
596
+ message=(
597
+ f"Harness turns on this host require header '{PROVIDER_KEY_HEADER}' "
598
+ "(your provider key). SuperQode does not attach a model key."
599
+ ),
600
+ param=PROVIDER_KEY_HEADER,
601
+ ),
602
+ )
603
+
507
604
  stream = bool(body.get("stream"))
508
- started = await server._start_response(body, idempotency_key=idempotency_key or None)
605
+ started = await server._start_response(
606
+ body,
607
+ idempotency_key=idempotency_key or None,
608
+ provider_api_key=provider_api_key or None,
609
+ )
509
610
  if isinstance(started, tuple):
510
611
  status, envelope = started
511
612
  return JSONResponse(status_code=status, content=envelope)
@@ -620,9 +721,18 @@ class UHPServer:
620
721
 
621
722
  # -- auth / version ---------------------------------------------------------
622
723
 
623
- @staticmethod
624
- def _is_public_path(path: str) -> bool:
625
- return path in {"/v1/uhp", "/health", "/docs", "/openapi.json", "/redoc"}
724
+ def _is_public_request(self, method: str, path: str) -> bool:
725
+ path = path.rstrip("/") or "/"
726
+ if path in {"/v1/uhp", "/health", "/docs", "/openapi.json", "/redoc"}:
727
+ return True
728
+ if not self.config.public_catalog or method.upper() != "GET":
729
+ return False
730
+ if path in {"/v1/harnesses", "/v1/models"}:
731
+ return True
732
+ if path.startswith("/v1/harnesses/"):
733
+ rest = path[len("/v1/harnesses/") :]
734
+ return "/" not in rest or rest.endswith("/models")
735
+ return False
626
736
 
627
737
  def _negotiate_version(self, requested: str | None) -> dict[str, Any] | None:
628
738
  if not requested or not requested.strip():
@@ -655,7 +765,8 @@ class UHPServer:
655
765
  code="invalid_credential",
656
766
  message="Authorization must be a Bearer token.",
657
767
  )
658
- if token != expected:
768
+ # Bytes, because compare_digest rejects a non-ASCII str.
769
+ if not hmac.compare_digest(token.encode("utf-8"), expected.encode("utf-8")):
659
770
  return _error_envelope(
660
771
  error_type="authentication_error",
661
772
  code="invalid_credential",
@@ -663,6 +774,15 @@ class UHPServer:
663
774
  )
664
775
  return None
665
776
 
777
+ def _workspace_for(self, session_id: str) -> Path:
778
+ """The directory a turn runs in."""
779
+ root = Path(self.config.working_directory)
780
+ if not self.config.isolate_session_workspaces:
781
+ return root
782
+ workspace = root / "sessions" / session_id
783
+ workspace.mkdir(parents=True, exist_ok=True)
784
+ return workspace
785
+
666
786
  def _validate_harness_selection(
667
787
  self, body: Mapping[str, Any]
668
788
  ) -> tuple[int, dict[str, Any]] | None:
@@ -684,7 +804,11 @@ class UHPServer:
684
804
  # -- response lifecycle -----------------------------------------------------
685
805
 
686
806
  async def _start_response(
687
- self, body: Mapping[str, Any], *, idempotency_key: str | None
807
+ self,
808
+ body: Mapping[str, Any],
809
+ *,
810
+ idempotency_key: str | None,
811
+ provider_api_key: str | None = None,
688
812
  ) -> dict[str, Any]:
689
813
  prompt = _extract_prompt(body.get("input"))
690
814
  previous_response_id = body.get("previous_response_id")
@@ -761,7 +885,7 @@ class UHPServer:
761
885
  prompt=prompt,
762
886
  model=model,
763
887
  provider=self.config.provider,
764
- working_directory=Path(self.config.working_directory),
888
+ working_directory=self._workspace_for(session_id),
765
889
  session_id=session_id,
766
890
  response_id=response_id,
767
891
  previous_response_id=previous_response_id,
@@ -772,7 +896,8 @@ class UHPServer:
772
896
  cancel_event=self._cancel_events[response_id],
773
897
  metadata={
774
898
  "harness_id": self.config.harness_id,
775
- **(dict(body["metadata"]) if isinstance(body.get("metadata"), Mapping) else {}),
899
+ **_caller_metadata(body),
900
+ **({"provider_api_key": provider_api_key} if provider_api_key else {}),
776
901
  },
777
902
  )
778
903
 
@@ -979,14 +1104,19 @@ class UHPServer:
979
1104
  if request.instructions:
980
1105
  prompt = f"{request.instructions.rstrip()}\n\n{prompt}"
981
1106
 
1107
+ run_metadata = {
1108
+ key: value for key, value in dict(request.metadata).items() if key != "provider_api_key"
1109
+ }
1110
+ token = str(request.metadata.get("provider_api_key") or "")
982
1111
  try:
983
- result = await session.prompt(
984
- prompt,
985
- provider=provider,
986
- model=model,
987
- working_directory=request.working_directory,
988
- metadata=dict(request.metadata),
989
- )
1112
+ async with _caller_provider_key(token, _provider_key_envs(provider)):
1113
+ result = await session.prompt(
1114
+ prompt,
1115
+ provider=provider,
1116
+ model=model,
1117
+ working_directory=request.working_directory,
1118
+ metadata=run_metadata,
1119
+ )
990
1120
  except Exception:
991
1121
  return UHPRunResult(
992
1122
  status="failed",
@@ -1015,8 +1145,14 @@ def create_uhp_server(
1015
1145
  harness_id: str | None = None,
1016
1146
  harness_name: str | None = None,
1017
1147
  runner: HarnessRunner | None = None,
1148
+ public_catalog: bool = False,
1149
+ require_caller_provider_key: bool = False,
1150
+ isolate_session_workspaces: bool | None = None,
1018
1151
  ) -> UHPServer:
1019
- """Build a UHP server bound to one SuperQode HarnessSpec."""
1152
+ """Build a UHP server bound to one SuperQode HarnessSpec.
1153
+
1154
+ ``isolate_session_workspaces`` defaults to whether the bind is BYOK.
1155
+ """
1020
1156
  from superqode.harness import get_harness_template, load_harness_spec
1021
1157
 
1022
1158
  if spec is None:
@@ -1047,5 +1183,12 @@ def create_uhp_server(
1047
1183
  api_key=api_key,
1048
1184
  implementation_version=_package_version(),
1049
1185
  conformance_class="core",
1186
+ public_catalog=public_catalog,
1187
+ require_caller_provider_key=require_caller_provider_key,
1188
+ isolate_session_workspaces=(
1189
+ require_caller_provider_key
1190
+ if isolate_session_workspaces is None
1191
+ else isolate_session_workspaces
1192
+ ),
1050
1193
  )
1051
1194
  return UHPServer(config, runner=runner, spec=loaded)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: superqode
3
- Version: 2.2.1
3
+ Version: 2.2.3
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>
@@ -483,6 +483,12 @@ superqode harness run uhp --prompt "summarise this repository"
483
483
  to HarnessRouter, which wraps third-party CLIs as a catalog. Core names the
484
484
  surface SuperQode implements; it is not a conformance-suite certificate.
485
485
 
486
+ The public hostname for that bind is [`uhp.superqode.dev`](https://uhp.superqode.dev/v1/uhp).
487
+ Anonymous callers get discovery and the static harness catalog (no model call).
488
+ A harness turn requires a SuperQode UHP API key and the caller's own provider
489
+ key. SuperQode does not pay for that model. Until the hostname is mapped, use
490
+ local `serve uhp` as above.
491
+
486
492
  Read the [UHP guide](docs/providers/uhp.md).
487
493
 
488
494
  ## Harness Execution Model