superqode 2.1.0__tar.gz → 2.2.1__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.1.0 → superqode-2.2.1}/CHANGELOG.md +94 -0
  2. {superqode-2.1.0 → superqode-2.2.1}/PKG-INFO +29 -3
  3. {superqode-2.1.0 → superqode-2.2.1}/README.md +28 -2
  4. {superqode-2.1.0 → superqode-2.2.1}/pyproject.toml +1 -1
  5. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/__init__.py +1 -1
  6. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/a2a/client.py +31 -0
  7. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/a2a/conformance.py +6 -0
  8. superqode-2.2.1/src/superqode/a2a/context.py +132 -0
  9. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/a2a/inspect.py +4 -0
  10. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/a2a/server.py +59 -11
  11. superqode-2.2.1/src/superqode/a2a/trust.py +280 -0
  12. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/acp_discovery.py +2 -2
  13. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agents/acp_registry.py +7 -7
  14. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agents/data/cagent.dev.toml +8 -9
  15. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agents/data/codeassistant.dev.toml +8 -8
  16. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agents/data/crow-ai.dev.toml +2 -2
  17. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agents/data/fount.dev.toml +2 -2
  18. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agents/data/goose.block.xyz.toml +2 -2
  19. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agents/data/llmlingagent.dev.toml +8 -9
  20. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agents/data/poolside.ai.toml +2 -2
  21. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agents/data/qoder.com.toml +2 -2
  22. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agents/data/sigit.dev.toml +2 -2
  23. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agents/data/stakpak.dev.toml +7 -8
  24. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agents/data/stdiobus.dev.toml +8 -4
  25. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agents/data/vtcode.dev.toml +9 -10
  26. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agents/registry.py +6 -6
  27. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app/constants.py +2 -0
  28. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app/mixins/connect.py +12 -0
  29. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app/mixins/harness_hub.py +42 -8
  30. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/commands/a2a_connect.py +56 -1
  31. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/commands/connect.py +18 -1
  32. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/commands/harness/run_history.py +25 -1
  33. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/commands/hub.py +23 -2
  34. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/commands/serve.py +83 -1
  35. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/config/loader.py +11 -11
  36. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/__init__.py +12 -0
  37. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/backends/uhp.py +6 -1
  38. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/hub.py +600 -2
  39. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/uhp_adapter.py +35 -1
  40. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/uhp_client.py +203 -7
  41. superqode-2.2.1/src/superqode/harness/uhp_server.py +1051 -0
  42. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/connection_profiles.py +177 -1
  43. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/harness_catalog.py +4 -4
  44. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/widgets/a2a_connect.py +9 -0
  45. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/widgets/agent_store.py +1 -1
  46. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/widgets/harness_hub.py +248 -62
  47. {superqode-2.1.0 → superqode-2.2.1}/src/superqode.egg-info/PKG-INFO +29 -3
  48. {superqode-2.1.0 → superqode-2.2.1}/src/superqode.egg-info/SOURCES.txt +6 -0
  49. {superqode-2.1.0 → superqode-2.2.1}/tests/test_a2a_bridge.py +88 -0
  50. {superqode-2.1.0 → superqode-2.2.1}/tests/test_a2a_connect.py +21 -0
  51. superqode-2.2.1/tests/test_a2a_context.py +69 -0
  52. superqode-2.2.1/tests/test_a2a_trust.py +125 -0
  53. {superqode-2.1.0 → superqode-2.2.1}/tests/test_cli_contract.py +11 -2
  54. {superqode-2.1.0 → superqode-2.2.1}/tests/test_connect_harness_screen.py +1 -0
  55. {superqode-2.1.0 → superqode-2.2.1}/tests/test_connection_profiles.py +1 -0
  56. {superqode-2.1.0 → superqode-2.2.1}/tests/test_tui_smoke.py +3 -1
  57. {superqode-2.1.0 → superqode-2.2.1}/tests/test_uhp_client.py +117 -0
  58. superqode-2.2.1/tests/test_uhp_server.py +405 -0
  59. {superqode-2.1.0 → superqode-2.2.1}/LICENSE +0 -0
  60. {superqode-2.1.0 → superqode-2.2.1}/MANIFEST.in +0 -0
  61. {superqode-2.1.0 → superqode-2.2.1}/NOTICE +0 -0
  62. {superqode-2.1.0 → superqode-2.2.1}/examples/README.md +0 -0
  63. {superqode-2.1.0 → superqode-2.2.1}/examples/a2a/README.md +0 -0
  64. {superqode-2.1.0 → superqode-2.2.1}/examples/a2a/smoke_client.py +0 -0
  65. {superqode-2.1.0 → superqode-2.2.1}/examples/bench/dspy-comprehension.manifest.yaml +0 -0
  66. {superqode-2.1.0 → superqode-2.2.1}/examples/bench/dspy-comprehension.yaml +0 -0
  67. {superqode-2.1.0 → superqode-2.2.1}/examples/bench/spec-core.yaml +0 -0
  68. {superqode-2.1.0 → superqode-2.2.1}/examples/bench/spec-deepagents.yaml +0 -0
  69. {superqode-2.1.0 → superqode-2.2.1}/examples/bench/spec-prime-agent.yaml +0 -0
  70. {superqode-2.1.0 → superqode-2.2.1}/examples/byok-acp-team.yaml +0 -0
  71. {superqode-2.1.0 → superqode-2.2.1}/examples/codex_sdk_quickstart.py +0 -0
  72. {superqode-2.1.0 → superqode-2.2.1}/examples/evals/omni-release.yaml +0 -0
  73. {superqode-2.1.0 → superqode-2.2.1}/examples/evals/omni-tiny.yaml +0 -0
  74. {superqode-2.1.0 → superqode-2.2.1}/examples/extensions/README.md +0 -0
  75. {superqode-2.1.0 → superqode-2.2.1}/examples/extensions/manifest-guard/context.md +0 -0
  76. {superqode-2.1.0 → superqode-2.2.1}/examples/extensions/manifest-guard/hooks.py +0 -0
  77. {superqode-2.1.0 → superqode-2.2.1}/examples/extensions/manifest-guard/tools.py +0 -0
  78. {superqode-2.1.0 → superqode-2.2.1}/examples/extensions/packages/README.md +0 -0
  79. {superqode-2.1.0 → superqode-2.2.1}/examples/extensions/packages/broken-extension/src/superqode_example_broken/__init__.py +0 -0
  80. {superqode-2.1.0 → superqode-2.2.1}/examples/extensions/packages/policy-extension/src/superqode_example_policy/__init__.py +0 -0
  81. {superqode-2.1.0 → superqode-2.2.1}/examples/extensions/packages/skill-extension/src/superqode_example_skill/SKILL.md +0 -0
  82. {superqode-2.1.0 → superqode-2.2.1}/examples/extensions/packages/skill-extension/src/superqode_example_skill/__init__.py +0 -0
  83. {superqode-2.1.0 → superqode-2.2.1}/examples/extensions/packages/tool-extension/src/superqode_example_tool/__init__.py +0 -0
  84. {superqode-2.1.0 → superqode-2.2.1}/examples/extensions/packages/tool-extension-v2/src/superqode_example_tool/__init__.py +0 -0
  85. {superqode-2.1.0 → superqode-2.2.1}/examples/extensions/python-package/src/superqode_example_extension/__init__.py +0 -0
  86. {superqode-2.1.0 → superqode-2.2.1}/examples/harness-packages/README.md +0 -0
  87. {superqode-2.1.0 → superqode-2.2.1}/examples/harness-packages/hello-harness/src/superqode_hello_harness/__init__.py +0 -0
  88. {superqode-2.1.0 → superqode-2.2.1}/examples/harnesses/coding.yaml +0 -0
  89. {superqode-2.1.0 → superqode-2.2.1}/examples/harnesses/deepagents.yaml +0 -0
  90. {superqode-2.1.0 → superqode-2.2.1}/examples/harnesses/deepseek-harness.yaml +0 -0
  91. {superqode-2.1.0 → superqode-2.2.1}/examples/harnesses/ds4.yaml +0 -0
  92. {superqode-2.1.0 → superqode-2.2.1}/examples/harnesses/gemma4.yaml +0 -0
  93. {superqode-2.1.0 → superqode-2.2.1}/examples/harnesses/google-adk.yaml +0 -0
  94. {superqode-2.1.0 → superqode-2.2.1}/examples/harnesses/local-recursive-dynamic.yaml +0 -0
  95. {superqode-2.1.0 → superqode-2.2.1}/examples/harnesses/mcp-docs.yaml +0 -0
  96. {superqode-2.1.0 → superqode-2.2.1}/examples/harnesses/no-tool.yaml +0 -0
  97. {superqode-2.1.0 → superqode-2.2.1}/examples/harnesses/omni-tiny-local.yaml +0 -0
  98. {superqode-2.1.0 → superqode-2.2.1}/examples/harnesses/omnigent-multi-agent.yaml +0 -0
  99. {superqode-2.1.0 → superqode-2.2.1}/examples/harnesses/openai-agents.yaml +0 -0
  100. {superqode-2.1.0 → superqode-2.2.1}/examples/harnesses/prime-agent.yaml +0 -0
  101. {superqode-2.1.0 → superqode-2.2.1}/examples/harnesses/pydanticai.yaml +0 -0
  102. {superqode-2.1.0 → superqode-2.2.1}/examples/harnesses/rlm-code-lid.yaml +0 -0
  103. {superqode-2.1.0 → superqode-2.2.1}/examples/local-models-team.yaml +0 -0
  104. {superqode-2.1.0 → superqode-2.2.1}/examples/mcp/local_docs_server.py +0 -0
  105. {superqode-2.1.0 → superqode-2.2.1}/examples/omnigent-multi-agent.agent.yaml +0 -0
  106. {superqode-2.1.0 → superqode-2.2.1}/examples/qm-deployment-layer/README.md +0 -0
  107. {superqode-2.1.0 → superqode-2.2.1}/examples/qm-deployment-layer/sandbox/skills/superqode-harness/SKILL.md +0 -0
  108. {superqode-2.1.0 → superqode-2.2.1}/examples/rlm-demo/INCIDENT.md +0 -0
  109. {superqode-2.1.0 → superqode-2.2.1}/examples/rlm-demo/README.md +0 -0
  110. {superqode-2.1.0 → superqode-2.2.1}/examples/rlm-demo/RUNBOOK.md +0 -0
  111. {superqode-2.1.0 → superqode-2.2.1}/examples/rlm-demo/deploy_audit/__init__.py +0 -0
  112. {superqode-2.1.0 → superqode-2.2.1}/examples/rlm-demo/deploy_audit/parser.py +0 -0
  113. {superqode-2.1.0 → superqode-2.2.1}/examples/rlm-demo/deploy_audit/report.py +0 -0
  114. {superqode-2.1.0 → superqode-2.2.1}/examples/rlm-demo/rlm-docker.yaml +0 -0
  115. {superqode-2.1.0 → superqode-2.2.1}/examples/rlm-demo/rlm-monty.yaml +0 -0
  116. {superqode-2.1.0 → superqode-2.2.1}/examples/rlm-demo/tests/test_report.py +0 -0
  117. {superqode-2.1.0 → superqode-2.2.1}/examples/simple-team.yaml +0 -0
  118. {superqode-2.1.0 → superqode-2.2.1}/scripts/check_release_metadata.py +0 -0
  119. {superqode-2.1.0 → superqode-2.2.1}/setup.cfg +0 -0
  120. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/a2a/__init__.py +0 -0
  121. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/a2a/connection.py +0 -0
  122. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/a2a/keys.py +0 -0
  123. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/a2a/limits.py +0 -0
  124. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/a2a/oauth.py +0 -0
  125. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/a2a/presets.py +0 -0
  126. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/a2a/registry.py +0 -0
  127. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/a2a/reply.py +0 -0
  128. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/a2a/security.py +0 -0
  129. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/a2a/shortlist.py +0 -0
  130. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/a2a/skills.py +0 -0
  131. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/a2a/tools.py +0 -0
  132. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/a2a/types.py +0 -0
  133. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/a2a/understand.py +0 -0
  134. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/a2a/workflows.py +0 -0
  135. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/acp/__init__.py +0 -0
  136. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/acp/client.py +0 -0
  137. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/acp/doctor.py +0 -0
  138. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/acp/permission_screen.py +0 -0
  139. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/acp/permission_store.py +0 -0
  140. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/acp/render.py +0 -0
  141. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/acp/server.py +0 -0
  142. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/acp/session_store.py +0 -0
  143. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/acp/slash.py +0 -0
  144. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/acp/tool_call_context.py +0 -0
  145. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/acp/types.py +0 -0
  146. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agent/__init__.py +0 -0
  147. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agent/auto_memory.py +0 -0
  148. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agent/command_safety.py +0 -0
  149. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agent/compaction.py +0 -0
  150. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agent/context_manager.py +0 -0
  151. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agent/edit_strategies.py +0 -0
  152. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agent/exec_policy.py +0 -0
  153. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agent/hooks.py +0 -0
  154. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agent/loop.py +0 -0
  155. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agent/loop_guard.py +0 -0
  156. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agent/loop_policy.py +0 -0
  157. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agent/network_policy.py +0 -0
  158. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agent/output_handler.py +0 -0
  159. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agent/parallel_compare.py +0 -0
  160. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agent/peer_agents.py +0 -0
  161. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agent/plan_mode.py +0 -0
  162. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agent/reminders.py +0 -0
  163. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agent/rubric.py +0 -0
  164. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agent/session_manager.py +0 -0
  165. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agent/structured_output.py +0 -0
  166. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agent/summarization.py +0 -0
  167. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agent/system_prompts.py +0 -0
  168. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agent/terminal_output_limits.py +0 -0
  169. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agent/text_tool_calls.py +0 -0
  170. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agent/tool_args.py +0 -0
  171. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agent/tool_tracking.py +0 -0
  172. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agent/utility_model.py +0 -0
  173. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agent_output.py +0 -0
  174. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agent_stream.py +0 -0
  175. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agents/__init__.py +0 -0
  176. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agents/client.py +0 -0
  177. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agents/data/agentpool.phil65.github.io.toml +0 -0
  178. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agents/data/ampcode.com.toml +0 -0
  179. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agents/data/augmentcode.com.toml +0 -0
  180. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agents/data/autodev.github.io.toml +0 -0
  181. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agents/data/blackbox.ai.toml +0 -0
  182. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agents/data/bub.dev.toml +0 -0
  183. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agents/data/claude.com.toml +0 -0
  184. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agents/data/cline.bot.toml +0 -0
  185. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agents/data/codebuddy.tencent.com.toml +0 -0
  186. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agents/data/codex.openai.com.toml +0 -0
  187. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agents/data/copilot.github.com.toml +0 -0
  188. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agents/data/cortex.snowflake.com.toml +0 -0
  189. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agents/data/cursor.com.toml +0 -0
  190. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agents/data/deepagents-code.langchain.com.toml +0 -0
  191. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agents/data/deepagents.langchain.com.toml +0 -0
  192. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agents/data/devin.ai.toml +0 -0
  193. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agents/data/dirac.run.toml +0 -0
  194. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agents/data/factory.ai.toml +0 -0
  195. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agents/data/fastagent.ai.toml +0 -0
  196. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agents/data/fx.sh.toml +0 -0
  197. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agents/data/geminicli.com.toml +0 -0
  198. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agents/data/glm.z.ai.toml +0 -0
  199. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agents/data/harnlang.com.toml +0 -0
  200. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agents/data/hermes-agent.nousresearch.com.toml +0 -0
  201. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agents/data/junie.jetbrains.com.toml +0 -0
  202. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agents/data/kilo.ai.toml +0 -0
  203. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agents/data/kimi.moonshot.cn.toml +0 -0
  204. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agents/data/kiro.dev.toml +0 -0
  205. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agents/data/minioncode.dev.toml +0 -0
  206. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agents/data/mistral-vibe.mistral.ai.toml +0 -0
  207. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agents/data/openclaw.ai.toml +0 -0
  208. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agents/data/opencode.ai.toml +0 -0
  209. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agents/data/openhands.dev.toml +0 -0
  210. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agents/data/pi.dev.toml +0 -0
  211. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agents/data/primeintellect.ai.toml +0 -0
  212. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agents/data/qwenlm.github.io.toml +0 -0
  213. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agents/data/x.ai.toml +0 -0
  214. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agents/discovery.py +0 -0
  215. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agents/free_models.py +0 -0
  216. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agents/install_commands.py +0 -0
  217. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agents/messaging.py +0 -0
  218. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agents/official_acp.py +0 -0
  219. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agents/persona.py +0 -0
  220. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agents/schema.py +0 -0
  221. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/agents/unified.py +0 -0
  222. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app/__init__.py +0 -0
  223. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app/async_utils.py +0 -0
  224. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app/capabilities.py +0 -0
  225. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app/css.py +0 -0
  226. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app/harness_picker.py +0 -0
  227. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app/inputs.py +0 -0
  228. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app/mixins/__init__.py +0 -0
  229. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app/mixins/actions_misc.py +0 -0
  230. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app/mixins/agent_run.py +0 -0
  231. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app/mixins/build_harness.py +0 -0
  232. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app/mixins/clickable_commands.py +0 -0
  233. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app/mixins/codex.py +0 -0
  234. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app/mixins/commands_impl.py +0 -0
  235. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app/mixins/completion.py +0 -0
  236. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app/mixins/dialogs.py +0 -0
  237. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app/mixins/events.py +0 -0
  238. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app/mixins/explore.py +0 -0
  239. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app/mixins/factory.py +0 -0
  240. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app/mixins/feedback.py +0 -0
  241. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app/mixins/formatting.py +0 -0
  242. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app/mixins/helper_clipboard.py +0 -0
  243. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app/mixins/helper_completion_helpers.py +0 -0
  244. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app/mixins/helper_diff_review.py +0 -0
  245. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app/mixins/helper_exit_lifecycle.py +0 -0
  246. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app/mixins/helper_file_view.py +0 -0
  247. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app/mixins/helper_interaction_mode.py +0 -0
  248. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app/mixins/helper_mcp_attach.py +0 -0
  249. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app/mixins/helper_message_queue.py +0 -0
  250. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app/mixins/helper_permissions.py +0 -0
  251. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app/mixins/helper_recipes_skills.py +0 -0
  252. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app/mixins/helper_share.py +0 -0
  253. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app/mixins/helper_startup.py +0 -0
  254. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app/mixins/helper_todos_plan.py +0 -0
  255. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app/mixins/helper_vim.py +0 -0
  256. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app/mixins/helper_wizard.py +0 -0
  257. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app/mixins/helpers.py +0 -0
  258. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app/mixins/huggingface.py +0 -0
  259. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app/mixins/local_models.py +0 -0
  260. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app/mixins/mcp.py +0 -0
  261. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app/mixins/model_catalog.py +0 -0
  262. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app/mixins/pickers.py +0 -0
  263. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app/mixins/pipy_commands.py +0 -0
  264. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app/mixins/rlm_commands.py +0 -0
  265. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app/mixins/sidebar.py +0 -0
  266. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app/mixins/slash_commands.py +0 -0
  267. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app/mixins/switchboard.py +0 -0
  268. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app/mixins/tour.py +0 -0
  269. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app/models.py +0 -0
  270. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app/navigation.py +0 -0
  271. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app/outcomes.py +0 -0
  272. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app/progress.py +0 -0
  273. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app/prompt_stack.py +0 -0
  274. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app/recipes.py +0 -0
  275. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app/session_state.py +0 -0
  276. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app/suggester.py +0 -0
  277. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app/theme_bridge.py +0 -0
  278. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app/welcome.py +0 -0
  279. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app/widgets.py +0 -0
  280. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app_enhanced.py +0 -0
  281. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/app_main.py +0 -0
  282. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/approval.py +0 -0
  283. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/atomic.py +0 -0
  284. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/auth/__init__.py +0 -0
  285. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/benchmarks.py +0 -0
  286. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/channels/__init__.py +0 -0
  287. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/channels/config.py +0 -0
  288. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/channels/discord.py +0 -0
  289. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/channels/service.py +0 -0
  290. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/channels/slack.py +0 -0
  291. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/channels/telegram.py +0 -0
  292. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/claude.py +0 -0
  293. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/codex.py +0 -0
  294. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/commands/__init__.py +0 -0
  295. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/commands/a2a.py +0 -0
  296. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/commands/a2a_keys.py +0 -0
  297. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/commands/acp.py +0 -0
  298. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/commands/agents.py +0 -0
  299. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/commands/auth.py +0 -0
  300. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/commands/benchmark.py +0 -0
  301. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/commands/config.py +0 -0
  302. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/commands/daemon.py +0 -0
  303. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/commands/factory.py +0 -0
  304. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/commands/gauge.py +0 -0
  305. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/commands/harness/__init__.py +0 -0
  306. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/commands/harness/_group.py +0 -0
  307. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/commands/harness/_helpers.py +0 -0
  308. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/commands/harness/bench.py +0 -0
  309. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/commands/harness/candidates.py +0 -0
  310. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/commands/harness/evaluation.py +0 -0
  311. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/commands/harness/evidence.py +0 -0
  312. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/commands/harness/inbox.py +0 -0
  313. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/commands/harness/lifecycle.py +0 -0
  314. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/commands/harness/logbook.py +0 -0
  315. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/commands/harness/observability.py +0 -0
  316. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/commands/harness/optimization.py +0 -0
  317. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/commands/harness/promotion.py +0 -0
  318. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/commands/harness/protocol.py +0 -0
  319. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/commands/harness/registry.py +0 -0
  320. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/commands/harness/replay.py +0 -0
  321. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/commands/harness/worker.py +0 -0
  322. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/commands/local.py +0 -0
  323. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/commands/memory.py +0 -0
  324. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/commands/models.py +0 -0
  325. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/commands/plugins.py +0 -0
  326. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/commands/policy.py +0 -0
  327. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/commands/profiles.py +0 -0
  328. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/commands/providers.py +0 -0
  329. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/commands/runtime.py +0 -0
  330. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/commands/sandbox.py +0 -0
  331. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/commands/sessions.py +0 -0
  332. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/commands/share.py +0 -0
  333. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/commands/skillopt.py +0 -0
  334. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/commands/skills.py +0 -0
  335. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/commands/tools.py +0 -0
  336. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/commands/trust.py +0 -0
  337. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/commands/uhp.py +0 -0
  338. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/commands/update.py +0 -0
  339. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/commands/work.py +0 -0
  340. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/config/__init__.py +0 -0
  341. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/config/schema.py +0 -0
  342. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/core/__init__.py +0 -0
  343. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/danger.py +0 -0
  344. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/data/eval_fixtures/ci-dynamic-root-cause.log +0 -0
  345. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/data/eval_fixtures/ci-root-cause.log +0 -0
  346. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/data/eval_packs/local_dynamic_workflow_smoke.yaml +0 -0
  347. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/data/eval_packs/local_recursive_smoke.yaml +0 -0
  348. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/data/superqode-template.yaml +0 -0
  349. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/design_system.py +0 -0
  350. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/dialogs/__init__.py +0 -0
  351. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/dialogs/base.py +0 -0
  352. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/dialogs/model.py +0 -0
  353. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/dialogs/provider.py +0 -0
  354. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/dialogs/runtime.py +0 -0
  355. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/diff_view.py +0 -0
  356. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/enterprise.py +0 -0
  357. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/evaluation/__init__.py +0 -0
  358. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/evaluation/adapters.py +0 -0
  359. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/evaluation/behaviors.py +0 -0
  360. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/evaluation/engine.py +0 -0
  361. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/evaluation/scenarios.py +0 -0
  362. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/execution/__init__.py +0 -0
  363. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/execution/linter.py +0 -0
  364. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/execution/modes.py +0 -0
  365. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/execution/resolver.py +0 -0
  366. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/execution/runner.py +0 -0
  367. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/extensions.py +0 -0
  368. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/file_explorer.py +0 -0
  369. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/file_viewer.py +0 -0
  370. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/flash.py +0 -0
  371. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/gauge/__init__.py +0 -0
  372. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/gauge/levels.py +0 -0
  373. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/gauge/record.py +0 -0
  374. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/gauge/sources.py +0 -0
  375. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/governance.py +0 -0
  376. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/accelerator.py +0 -0
  377. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/agent_importer.py +0 -0
  378. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/approval_memory.py +0 -0
  379. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/backends/__init__.py +0 -0
  380. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/backends/base.py +0 -0
  381. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/backends/deepagents.py +0 -0
  382. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/backends/dsh.py +0 -0
  383. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/backends/managed.py +0 -0
  384. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/backends/pipy.py +0 -0
  385. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/backends/prime_agent.py +0 -0
  386. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/backends/pydanticai.py +0 -0
  387. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/backends/registry.py +0 -0
  388. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/backends/rlm.py +0 -0
  389. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/backends/rlm_code.py +0 -0
  390. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/backends/runtime.py +0 -0
  391. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/backends/tau.py +0 -0
  392. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/bench.py +0 -0
  393. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/catalog.py +0 -0
  394. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/compiler.py +0 -0
  395. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/conformance.py +0 -0
  396. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/context_handles.py +0 -0
  397. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/diagnostics.py +0 -0
  398. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/discovery.py +0 -0
  399. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/drift.py +0 -0
  400. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/eval.py +0 -0
  401. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/events.py +0 -0
  402. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/explain.py +0 -0
  403. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/hooks.py +0 -0
  404. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/kernel.py +0 -0
  405. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/loader.py +0 -0
  406. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/mcp_bridge.py +0 -0
  407. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/model_policy.py +0 -0
  408. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/model_routes.py +0 -0
  409. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/observability.py +0 -0
  410. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/omni.py +0 -0
  411. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/omnigent_importer.py +0 -0
  412. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/optimize.py +0 -0
  413. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/output.py +0 -0
  414. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/permissions.py +0 -0
  415. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/pipy_adapter.py +0 -0
  416. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/pipy_extensions.py +0 -0
  417. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/promotion.py +0 -0
  418. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/protocol.py +0 -0
  419. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/protocol_adapters.py +0 -0
  420. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/protocol_controller.py +0 -0
  421. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/registry.py +0 -0
  422. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/rlm_adapter.py +0 -0
  423. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/rlm_code_adapter.py +0 -0
  424. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/sandbox.py +0 -0
  425. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/self_improve.py +0 -0
  426. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/spec.py +0 -0
  427. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/store.py +0 -0
  428. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/tau_adapter.py +0 -0
  429. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/tau_management.py +0 -0
  430. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/templates.py +0 -0
  431. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/testing.py +0 -0
  432. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/wizard.py +0 -0
  433. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/workflow.py +0 -0
  434. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/harness/workflow_presets.py +0 -0
  435. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/headless.py +0 -0
  436. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/history.py +0 -0
  437. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/local/__init__.py +0 -0
  438. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/local/airplane.py +0 -0
  439. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/local/bench.py +0 -0
  440. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/local/build.py +0 -0
  441. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/local/code_index.py +0 -0
  442. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/local/data/model-packs/devstral.yaml +0 -0
  443. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/local/data/model-packs/ds4.yaml +0 -0
  444. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/local/data/model-packs/gemma4.yaml +0 -0
  445. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/local/data/model-packs/glm.yaml +0 -0
  446. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/local/data/model-packs/gpt-oss.yaml +0 -0
  447. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/local/data/model-packs/kimi.yaml +0 -0
  448. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/local/data/model-packs/laguna.yaml +0 -0
  449. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/local/data/model-packs/minimax.yaml +0 -0
  450. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/local/data/model-packs/qwen-coder.yaml +0 -0
  451. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/local/data/model-packs/qwen3.yaml +0 -0
  452. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/local/data/stack_matrix.yaml +0 -0
  453. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/local/doctor.py +0 -0
  454. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/local/engines.py +0 -0
  455. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/local/guardrails.py +0 -0
  456. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/local/hardware.py +0 -0
  457. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/local/inventory.py +0 -0
  458. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/local/labs.py +0 -0
  459. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/local/laguna.py +0 -0
  460. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/local/matrix.py +0 -0
  461. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/local/migrate.py +0 -0
  462. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/local/optimize.py +0 -0
  463. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/local/packs.py +0 -0
  464. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/local/repo.py +0 -0
  465. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/local/servers.py +0 -0
  466. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/local/setup.py +0 -0
  467. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/local/smoke.py +0 -0
  468. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/logging/__init__.py +0 -0
  469. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/logging/adapters.py +0 -0
  470. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/logging/formatter.py +0 -0
  471. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/logging/integration.py +0 -0
  472. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/logging/sinks.py +0 -0
  473. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/logging/unified_log.py +0 -0
  474. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/lsp/__init__.py +0 -0
  475. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/lsp/client.py +0 -0
  476. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/main.py +0 -0
  477. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/mcp/__init__.py +0 -0
  478. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/mcp/auth_storage.py +0 -0
  479. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/mcp/client.py +0 -0
  480. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/mcp/config.py +0 -0
  481. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/mcp/elicitation.py +0 -0
  482. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/mcp/harness_server.py +0 -0
  483. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/mcp/hf_auth.py +0 -0
  484. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/mcp/integration.py +0 -0
  485. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/mcp/oauth.py +0 -0
  486. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/mcp/oauth_callback.py +0 -0
  487. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/mcp/sampling.py +0 -0
  488. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/mcp/search.py +0 -0
  489. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/mcp/types.py +0 -0
  490. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/memory/__init__.py +0 -0
  491. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/memory/config.py +0 -0
  492. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/memory/providers.py +0 -0
  493. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/memory/types.py +0 -0
  494. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/notifications.py +0 -0
  495. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/permissions/__init__.py +0 -0
  496. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/permissions/rules.py +0 -0
  497. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/pipy/__init__.py +0 -0
  498. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/pipy/ai/__init__.py +0 -0
  499. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/pipy/ai/fake.py +0 -0
  500. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/pipy/ai/gateway.py +0 -0
  501. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/pipy/ai/models.py +0 -0
  502. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/pipy/ai/transform.py +0 -0
  503. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/pipy/coding_session.py +0 -0
  504. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/pipy/compaction.py +0 -0
  505. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/pipy/config.py +0 -0
  506. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/pipy/event_stream.py +0 -0
  507. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/pipy/events.py +0 -0
  508. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/pipy/harness.py +0 -0
  509. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/pipy/harness_events.py +0 -0
  510. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/pipy/loop.py +0 -0
  511. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/pipy/messages.py +0 -0
  512. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/pipy/permissions.py +0 -0
  513. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/pipy/prompt_templates.py +0 -0
  514. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/pipy/provider_events.py +0 -0
  515. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/pipy/resources.py +0 -0
  516. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/pipy/session/__init__.py +0 -0
  517. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/pipy/session/codec.py +0 -0
  518. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/pipy/session/entries.py +0 -0
  519. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/pipy/session/jsonl.py +0 -0
  520. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/pipy/session/memory.py +0 -0
  521. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/pipy/session/repository.py +0 -0
  522. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/pipy/session/session.py +0 -0
  523. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/pipy/session/storage.py +0 -0
  524. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/pipy/signals.py +0 -0
  525. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/pipy/skills.py +0 -0
  526. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/pipy/stream.py +0 -0
  527. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/pipy/system_prompt.py +0 -0
  528. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/pipy/tools/__init__.py +0 -0
  529. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/pipy/tools/base.py +0 -0
  530. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/pipy/tools/edit_diff.py +0 -0
  531. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/pipy/tools/files.py +0 -0
  532. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/pipy/tools/paths.py +0 -0
  533. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/pipy/tools/registry.py +0 -0
  534. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/pipy/tools/search.py +0 -0
  535. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/pipy/tools/shell.py +0 -0
  536. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/pipy/tools/truncate.py +0 -0
  537. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/pipy/types.py +0 -0
  538. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/pipy/validation.py +0 -0
  539. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/plan.py +0 -0
  540. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/platform_locks.py +0 -0
  541. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/plugins.py +0 -0
  542. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/project_trust.py +0 -0
  543. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/__init__.py +0 -0
  544. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/_builtin_profiles.py +0 -0
  545. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/acp_free_models.py +0 -0
  546. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/acp_models.py +0 -0
  547. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/acp_registry.py +0 -0
  548. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/apple_fm.py +0 -0
  549. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/catalog.py +0 -0
  550. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/copilot_auth.py +0 -0
  551. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/credentials.py +0 -0
  552. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/dynamic.py +0 -0
  553. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/env_introspect.py +0 -0
  554. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/free_inference.py +0 -0
  555. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/gateway/__init__.py +0 -0
  556. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/gateway/base.py +0 -0
  557. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/gateway/litellm_gateway.py +0 -0
  558. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/gateway/openresponses_gateway.py +0 -0
  559. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/gateway/synthetic.py +0 -0
  560. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/grok_cli_auth.py +0 -0
  561. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/health.py +0 -0
  562. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/huggingface/__init__.py +0 -0
  563. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/huggingface/convert.py +0 -0
  564. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/huggingface/downloader.py +0 -0
  565. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/huggingface/endpoints.py +0 -0
  566. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/huggingface/fetch.py +0 -0
  567. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/huggingface/hub.py +0 -0
  568. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/huggingface/inference.py +0 -0
  569. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/huggingface/transformers_runner.py +0 -0
  570. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/live_models.py +0 -0
  571. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/local/__init__.py +0 -0
  572. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/local/_mlx_worker.py +0 -0
  573. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/local/base.py +0 -0
  574. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/local/capabilities.py +0 -0
  575. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/local/context_probe.py +0 -0
  576. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/local/discovery.py +0 -0
  577. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/local/ds4.py +0 -0
  578. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/local/lmstudio.py +0 -0
  579. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/local/mlx.py +0 -0
  580. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/local/mlx_engine.py +0 -0
  581. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/local/mlx_tools.py +0 -0
  582. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/local/ollama.py +0 -0
  583. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/local/sglang.py +0 -0
  584. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/local/smoke.py +0 -0
  585. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/local/tgi.py +0 -0
  586. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/local/tool_support.py +0 -0
  587. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/local/vllm.py +0 -0
  588. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/manager.py +0 -0
  589. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/model_specs.py +0 -0
  590. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/models.py +0 -0
  591. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/models_dev.py +0 -0
  592. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/opencode_models.py +0 -0
  593. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/openresponses/__init__.py +0 -0
  594. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/openresponses/converters/__init__.py +0 -0
  595. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/openresponses/converters/messages.py +0 -0
  596. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/openresponses/converters/tools.py +0 -0
  597. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/openresponses/schema/__init__.py +0 -0
  598. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/openresponses/schema/models.py +0 -0
  599. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/openresponses/streaming/__init__.py +0 -0
  600. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/openresponses/streaming/parser.py +0 -0
  601. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/openresponses/tools/__init__.py +0 -0
  602. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/openresponses/tools/apply_patch.py +0 -0
  603. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/openresponses/tools/code_interpreter.py +0 -0
  604. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/openresponses/tools/file_search.py +0 -0
  605. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/openresponses/tools/mcp_adapter.py +0 -0
  606. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/prime_agent.py +0 -0
  607. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/profiles.py +0 -0
  608. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/recommendations.py +0 -0
  609. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/registry.py +0 -0
  610. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/subscription_env.py +0 -0
  611. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/subscription_login.py +0 -0
  612. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/uhp.py +0 -0
  613. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/providers/usage.py +0 -0
  614. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/pure_mode.py +0 -0
  615. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/py.typed +0 -0
  616. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/rendering/__init__.py +0 -0
  617. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/rendering/html_export.py +0 -0
  618. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/rendering/markdown.py +0 -0
  619. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/rendering/transcript_export.py +0 -0
  620. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/rlm/__init__.py +0 -0
  621. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/rlm/coding_session.py +0 -0
  622. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/rlm/config.py +0 -0
  623. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/rlm/context.py +0 -0
  624. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/rlm/identity.py +0 -0
  625. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/rlm/kernel.py +0 -0
  626. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/rlm/kernel_backend.py +0 -0
  627. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/rlm/kernel_docker.py +0 -0
  628. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/rlm/kernel_monty.py +0 -0
  629. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/rlm/kernel_server.py +0 -0
  630. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/rlm/policy.py +0 -0
  631. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/rlm/root_runtime.py +0 -0
  632. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/rlm/root_worker.py +0 -0
  633. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/rlm/sandbox.py +0 -0
  634. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/rlm/subcalls.py +0 -0
  635. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/rlm/supervisor.py +0 -0
  636. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/rlm/worker.py +0 -0
  637. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/rlm/worker_process.py +0 -0
  638. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/runtime/__init__.py +0 -0
  639. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/runtime/adk.py +0 -0
  640. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/runtime/antigravity_cli.py +0 -0
  641. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/runtime/antigravity_managed.py +0 -0
  642. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/runtime/antigravity_sdk.py +0 -0
  643. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/runtime/antigravity_status.py +0 -0
  644. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/runtime/base.py +0 -0
  645. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/runtime/builtin.py +0 -0
  646. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/runtime/claude_agent_sdk.py +0 -0
  647. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/runtime/codex_sdk.py +0 -0
  648. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/runtime/copilot_sdk.py +0 -0
  649. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/runtime/devin_cli.py +0 -0
  650. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/runtime/devin_status.py +0 -0
  651. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/runtime/errors.py +0 -0
  652. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/runtime/openai_agents.py +0 -0
  653. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/runtime/openai_sandbox.py +0 -0
  654. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/runtime/openai_session.py +0 -0
  655. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/runtime/pydanticai.py +0 -0
  656. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/runtime/registry.py +0 -0
  657. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/runtime/tool_bridge.py +0 -0
  658. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/runtime/tool_bridge_openai.py +0 -0
  659. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/runtime/tool_bridge_pydanticai.py +0 -0
  660. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/runtime/vendor_cli.py +0 -0
  661. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/safety/__init__.py +0 -0
  662. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/safety/sandbox.py +0 -0
  663. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/safety/warnings.py +0 -0
  664. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/sandbox/__init__.py +0 -0
  665. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/sandbox/backends.py +0 -0
  666. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/sandbox/execution.py +0 -0
  667. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/sandbox/local_sandbox.py +0 -0
  668. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/search_registry.py +0 -0
  669. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/server/__init__.py +0 -0
  670. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/server/api.py +0 -0
  671. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/server/web.py +0 -0
  672. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/session/__init__.py +0 -0
  673. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/session/factory.py +0 -0
  674. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/session/persistence.py +0 -0
  675. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/session/share_artifacts.py +0 -0
  676. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/session/sharing.py +0 -0
  677. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/session/switchboard.py +0 -0
  678. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/session.py +0 -0
  679. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/sidebar.py +0 -0
  680. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/skillopt.py +0 -0
  681. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/skills.py +0 -0
  682. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/stream_view.py +0 -0
  683. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/styles/__init__.py +0 -0
  684. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/tool_call.py +0 -0
  685. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/tools/__init__.py +0 -0
  686. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/tools/agent_tools.py +0 -0
  687. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/tools/apply_patch.py +0 -0
  688. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/tools/base.py +0 -0
  689. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/tools/batch_tool.py +0 -0
  690. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/tools/compact_tool.py +0 -0
  691. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/tools/context_handle.py +0 -0
  692. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/tools/context_tools.py +0 -0
  693. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/tools/core_tools.py +0 -0
  694. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/tools/diagnostics.py +0 -0
  695. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/tools/diff_utils.py +0 -0
  696. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/tools/display.py +0 -0
  697. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/tools/dynamic_workflow.py +0 -0
  698. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/tools/edit_tools.py +0 -0
  699. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/tools/enhanced_base.py +0 -0
  700. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/tools/env_policy.py +0 -0
  701. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/tools/file_tools.py +0 -0
  702. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/tools/file_tracking.py +0 -0
  703. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/tools/governed.py +0 -0
  704. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/tools/harness_agent_session.py +0 -0
  705. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/tools/image_tools.py +0 -0
  706. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/tools/lsp_tools.py +0 -0
  707. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/tools/mcp_tools.py +0 -0
  708. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/tools/monty_tool.py +0 -0
  709. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/tools/network_tools.py +0 -0
  710. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/tools/output_spill.py +0 -0
  711. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/tools/peer_agent_tools.py +0 -0
  712. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/tools/permissions.py +0 -0
  713. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/tools/post_edit.py +0 -0
  714. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/tools/question_tool.py +0 -0
  715. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/tools/request_permissions_tool.py +0 -0
  716. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/tools/search_tools.py +0 -0
  717. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/tools/semantic_search.py +0 -0
  718. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/tools/shell_session.py +0 -0
  719. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/tools/shell_tools.py +0 -0
  720. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/tools/skill_tools.py +0 -0
  721. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/tools/spawn_harness.py +0 -0
  722. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/tools/todo_tools.py +0 -0
  723. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/tools/tool_search.py +0 -0
  724. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/tools/validation.py +0 -0
  725. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/tools/web_tools.py +0 -0
  726. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/tui_integration.py +0 -0
  727. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/tui_widgets/__init__.py +0 -0
  728. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/tui_widgets/widgets/__init__.py +0 -0
  729. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/tui_widgets/widgets/progress.py +0 -0
  730. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/tui_widgets/widgets/tool_display.py +0 -0
  731. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/undo_manager.py +0 -0
  732. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/utils/__init__.py +0 -0
  733. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/utils/error_handling.py +0 -0
  734. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/utils/fuzzy.py +0 -0
  735. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/widgets/__init__.py +0 -0
  736. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/widgets/agent_switcher.py +0 -0
  737. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/widgets/animation_manager.py +0 -0
  738. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/widgets/code_context.py +0 -0
  739. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/widgets/command_palette.py +0 -0
  740. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/widgets/connection_status.py +0 -0
  741. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/widgets/conversation_history.py +0 -0
  742. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/widgets/diff_indicator.py +0 -0
  743. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/widgets/enhanced_status_bar.py +0 -0
  744. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/widgets/enhanced_toast.py +0 -0
  745. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/widgets/file_browser.py +0 -0
  746. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/widgets/file_reference.py +0 -0
  747. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/widgets/leader_key.py +0 -0
  748. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/widgets/mode_switcher.py +0 -0
  749. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/widgets/model_picker.py +0 -0
  750. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/widgets/outcome_screen.py +0 -0
  751. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/widgets/permission_preview.py +0 -0
  752. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/widgets/prompt.py +0 -0
  753. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/widgets/provider_connect.py +0 -0
  754. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/widgets/pty_shell.py +0 -0
  755. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/widgets/resizable_sidebar.py +0 -0
  756. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/widgets/response_changes.py +0 -0
  757. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/widgets/response_display.py +0 -0
  758. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/widgets/rewind_overlay.py +0 -0
  759. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/widgets/rich_tool_display.py +0 -0
  760. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/widgets/sidebar_panels.py +0 -0
  761. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/widgets/slash_commands.py +0 -0
  762. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/widgets/slash_complete.py +0 -0
  763. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/widgets/split_view.py +0 -0
  764. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/widgets/status_bar.py +0 -0
  765. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/widgets/superqode_display.py +0 -0
  766. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/widgets/theme_picker.py +0 -0
  767. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/widgets/thinking.py +0 -0
  768. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/widgets/thinking_display.py +0 -0
  769. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/widgets/throbber.py +0 -0
  770. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/widgets/toast.py +0 -0
  771. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/widgets/uhp_connect.py +0 -0
  772. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/widgets/unified_output.py +0 -0
  773. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/workorders/__init__.py +0 -0
  774. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/workorders/cockpit.py +0 -0
  775. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/workorders/integration.py +0 -0
  776. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/workorders/models.py +0 -0
  777. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/workorders/runner.py +0 -0
  778. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/workorders/store.py +0 -0
  779. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/workorders/usage.py +0 -0
  780. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/workorders/worker.py +0 -0
  781. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/workspace/__init__.py +0 -0
  782. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/workspace/artifacts.py +0 -0
  783. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/workspace/change_summary.py +0 -0
  784. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/workspace/coordinator.py +0 -0
  785. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/workspace/diff_tracker.py +0 -0
  786. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/workspace/git_guard.py +0 -0
  787. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/workspace/git_snapshot.py +0 -0
  788. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/workspace/manager.py +0 -0
  789. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/workspace/snapshot.py +0 -0
  790. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/workspace/watcher.py +0 -0
  791. {superqode-2.1.0 → superqode-2.2.1}/src/superqode/workspace/worktree.py +0 -0
  792. {superqode-2.1.0 → superqode-2.2.1}/src/superqode.egg-info/dependency_links.txt +0 -0
  793. {superqode-2.1.0 → superqode-2.2.1}/src/superqode.egg-info/entry_points.txt +0 -0
  794. {superqode-2.1.0 → superqode-2.2.1}/src/superqode.egg-info/requires.txt +0 -0
  795. {superqode-2.1.0 → superqode-2.2.1}/src/superqode.egg-info/top_level.txt +0 -0
  796. {superqode-2.1.0 → superqode-2.2.1}/tests/test_030_candidate.py +0 -0
  797. {superqode-2.1.0 → superqode-2.2.1}/tests/test_a2a_conformance.py +0 -0
  798. {superqode-2.1.0 → superqode-2.2.1}/tests/test_a2a_keys.py +0 -0
  799. {superqode-2.1.0 → superqode-2.2.1}/tests/test_a2a_limits.py +0 -0
  800. {superqode-2.1.0 → superqode-2.2.1}/tests/test_a2a_oauth.py +0 -0
  801. {superqode-2.1.0 → superqode-2.2.1}/tests/test_a2a_security.py +0 -0
  802. {superqode-2.1.0 → superqode-2.2.1}/tests/test_a2a_shortlist.py +0 -0
  803. {superqode-2.1.0 → superqode-2.2.1}/tests/test_a2a_understand.py +0 -0
  804. {superqode-2.1.0 → superqode-2.2.1}/tests/test_acp_agent_dispatch.py +0 -0
  805. {superqode-2.1.0 → superqode-2.2.1}/tests/test_acp_client.py +0 -0
  806. {superqode-2.1.0 → superqode-2.2.1}/tests/test_acp_free_models.py +0 -0
  807. {superqode-2.1.0 → superqode-2.2.1}/tests/test_acp_parent_tool_linking.py +0 -0
  808. {superqode-2.1.0 → superqode-2.2.1}/tests/test_acp_permission_store.py +0 -0
  809. {superqode-2.1.0 → superqode-2.2.1}/tests/test_acp_registry.py +0 -0
  810. {superqode-2.1.0 → superqode-2.2.1}/tests/test_acp_render.py +0 -0
  811. {superqode-2.1.0 → superqode-2.2.1}/tests/test_acp_server.py +0 -0
  812. {superqode-2.1.0 → superqode-2.2.1}/tests/test_acp_session_store.py +0 -0
  813. {superqode-2.1.0 → superqode-2.2.1}/tests/test_acp_slash.py +0 -0
  814. {superqode-2.1.0 → superqode-2.2.1}/tests/test_adaptive_compaction.py +0 -0
  815. {superqode-2.1.0 → superqode-2.2.1}/tests/test_agent_importer.py +0 -0
  816. {superqode-2.1.0 → superqode-2.2.1}/tests/test_agent_install_commands.py +0 -0
  817. {superqode-2.1.0 → superqode-2.2.1}/tests/test_agent_loop_harness.py +0 -0
  818. {superqode-2.1.0 → superqode-2.2.1}/tests/test_agent_memory.py +0 -0
  819. {superqode-2.1.0 → superqode-2.2.1}/tests/test_agents_md_compat.py +0 -0
  820. {superqode-2.1.0 → superqode-2.2.1}/tests/test_agy_tui_commands.py +0 -0
  821. {superqode-2.1.0 → superqode-2.2.1}/tests/test_app_main_contract.py +0 -0
  822. {superqode-2.1.0 → superqode-2.2.1}/tests/test_apply_patch.py +0 -0
  823. {superqode-2.1.0 → superqode-2.2.1}/tests/test_auth.py +0 -0
  824. {superqode-2.1.0 → superqode-2.2.1}/tests/test_bash_spill.py +0 -0
  825. {superqode-2.1.0 → superqode-2.2.1}/tests/test_benchmarks.py +0 -0
  826. {superqode-2.1.0 → superqode-2.2.1}/tests/test_catalog_freshness.py +0 -0
  827. {superqode-2.1.0 → superqode-2.2.1}/tests/test_change_summary.py +0 -0
  828. {superqode-2.1.0 → superqode-2.2.1}/tests/test_channels.py +0 -0
  829. {superqode-2.1.0 → superqode-2.2.1}/tests/test_cli_commands.py +0 -0
  830. {superqode-2.1.0 → superqode-2.2.1}/tests/test_cli_connect.py +0 -0
  831. {superqode-2.1.0 → superqode-2.2.1}/tests/test_cli_reference_coverage.py +0 -0
  832. {superqode-2.1.0 → superqode-2.2.1}/tests/test_clickable_commands.py +0 -0
  833. {superqode-2.1.0 → superqode-2.2.1}/tests/test_command_safety.py +0 -0
  834. {superqode-2.1.0 → superqode-2.2.1}/tests/test_commands_runtime.py +0 -0
  835. {superqode-2.1.0 → superqode-2.2.1}/tests/test_compaction.py +0 -0
  836. {superqode-2.1.0 → superqode-2.2.1}/tests/test_config_loader.py +0 -0
  837. {superqode-2.1.0 → superqode-2.2.1}/tests/test_config_runtime.py +0 -0
  838. {superqode-2.1.0 → superqode-2.2.1}/tests/test_connect_setup.py +0 -0
  839. {superqode-2.1.0 → superqode-2.2.1}/tests/test_context_handles.py +0 -0
  840. {superqode-2.1.0 → superqode-2.2.1}/tests/test_context_probe.py +0 -0
  841. {superqode-2.1.0 → superqode-2.2.1}/tests/test_context_remaining.py +0 -0
  842. {superqode-2.1.0 → superqode-2.2.1}/tests/test_copilot_login_ux.py +0 -0
  843. {superqode-2.1.0 → superqode-2.2.1}/tests/test_copilot_tui_commands.py +0 -0
  844. {superqode-2.1.0 → superqode-2.2.1}/tests/test_create_skill_tool.py +0 -0
  845. {superqode-2.1.0 → superqode-2.2.1}/tests/test_deepagents_model_spec.py +0 -0
  846. {superqode-2.1.0 → superqode-2.2.1}/tests/test_deferred_tools.py +0 -0
  847. {superqode-2.1.0 → superqode-2.2.1}/tests/test_design_system_contrast.py +0 -0
  848. {superqode-2.1.0 → superqode-2.2.1}/tests/test_developer_workflow_docs.py +0 -0
  849. {superqode-2.1.0 → superqode-2.2.1}/tests/test_ds4_local_client.py +0 -0
  850. {superqode-2.1.0 → superqode-2.2.1}/tests/test_dsh_harness.py +0 -0
  851. {superqode-2.1.0 → superqode-2.2.1}/tests/test_dynamic_workflow_tool.py +0 -0
  852. {superqode-2.1.0 → superqode-2.2.1}/tests/test_edit_line_number_strip.py +0 -0
  853. {superqode-2.1.0 → superqode-2.2.1}/tests/test_env_introspect.py +0 -0
  854. {superqode-2.1.0 → superqode-2.2.1}/tests/test_execution_resolver.py +0 -0
  855. {superqode-2.1.0 → superqode-2.2.1}/tests/test_extensions.py +0 -0
  856. {superqode-2.1.0 → superqode-2.2.1}/tests/test_final_parity_wave.py +0 -0
  857. {superqode-2.1.0 → superqode-2.2.1}/tests/test_free_models.py +0 -0
  858. {superqode-2.1.0 → superqode-2.2.1}/tests/test_governance.py +0 -0
  859. {superqode-2.1.0 → superqode-2.2.1}/tests/test_grok_cli_auth.py +0 -0
  860. {superqode-2.1.0 → superqode-2.2.1}/tests/test_harness_agent_session.py +0 -0
  861. {superqode-2.1.0 → superqode-2.2.1}/tests/test_harness_backends.py +0 -0
  862. {superqode-2.1.0 → superqode-2.2.1}/tests/test_harness_bench.py +0 -0
  863. {superqode-2.1.0 → superqode-2.2.1}/tests/test_harness_bench_paths.py +0 -0
  864. {superqode-2.1.0 → superqode-2.2.1}/tests/test_harness_catalog.py +0 -0
  865. {superqode-2.1.0 → superqode-2.2.1}/tests/test_harness_connect_catalog.py +0 -0
  866. {superqode-2.1.0 → superqode-2.2.1}/tests/test_harness_drift.py +0 -0
  867. {superqode-2.1.0 → superqode-2.2.1}/tests/test_harness_eval_splits.py +0 -0
  868. {superqode-2.1.0 → superqode-2.2.1}/tests/test_harness_examples.py +0 -0
  869. {superqode-2.1.0 → superqode-2.2.1}/tests/test_harness_explain.py +0 -0
  870. {superqode-2.1.0 → superqode-2.2.1}/tests/test_harness_hooks.py +0 -0
  871. {superqode-2.1.0 → superqode-2.2.1}/tests/test_harness_hub_catalog.py +0 -0
  872. {superqode-2.1.0 → superqode-2.2.1}/tests/test_harness_hub_screen.py +0 -0
  873. {superqode-2.1.0 → superqode-2.2.1}/tests/test_harness_kernel.py +0 -0
  874. {superqode-2.1.0 → superqode-2.2.1}/tests/test_harness_mcp_server.py +0 -0
  875. {superqode-2.1.0 → superqode-2.2.1}/tests/test_harness_model_policy.py +0 -0
  876. {superqode-2.1.0 → superqode-2.2.1}/tests/test_harness_observability.py +0 -0
  877. {superqode-2.1.0 → superqode-2.2.1}/tests/test_harness_omni.py +0 -0
  878. {superqode-2.1.0 → superqode-2.2.1}/tests/test_harness_output.py +0 -0
  879. {superqode-2.1.0 → superqode-2.2.1}/tests/test_harness_permissions.py +0 -0
  880. {superqode-2.1.0 → superqode-2.2.1}/tests/test_harness_promotion.py +0 -0
  881. {superqode-2.1.0 → superqode-2.2.1}/tests/test_harness_protocol.py +0 -0
  882. {superqode-2.1.0 → superqode-2.2.1}/tests/test_harness_sandbox.py +0 -0
  883. {superqode-2.1.0 → superqode-2.2.1}/tests/test_harness_seesaw_dimensions.py +0 -0
  884. {superqode-2.1.0 → superqode-2.2.1}/tests/test_harness_self_improve.py +0 -0
  885. {superqode-2.1.0 → superqode-2.2.1}/tests/test_harness_spec.py +0 -0
  886. {superqode-2.1.0 → superqode-2.2.1}/tests/test_harness_store.py +0 -0
  887. {superqode-2.1.0 → superqode-2.2.1}/tests/test_harness_usage.py +0 -0
  888. {superqode-2.1.0 → superqode-2.2.1}/tests/test_harness_wizard.py +0 -0
  889. {superqode-2.1.0 → superqode-2.2.1}/tests/test_harness_workflow.py +0 -0
  890. {superqode-2.1.0 → superqode-2.2.1}/tests/test_headless.py +0 -0
  891. {superqode-2.1.0 → superqode-2.2.1}/tests/test_hf_fetch.py +0 -0
  892. {superqode-2.1.0 → superqode-2.2.1}/tests/test_hooks.py +0 -0
  893. {superqode-2.1.0 → superqode-2.2.1}/tests/test_install_script.py +0 -0
  894. {superqode-2.1.0 → superqode-2.2.1}/tests/test_integration_docs.py +0 -0
  895. {superqode-2.1.0 → superqode-2.2.1}/tests/test_kimi_k3_provider.py +0 -0
  896. {superqode-2.1.0 → superqode-2.2.1}/tests/test_kimi_k3_routes.py +0 -0
  897. {superqode-2.1.0 → superqode-2.2.1}/tests/test_linter_runner.py +0 -0
  898. {superqode-2.1.0 → superqode-2.2.1}/tests/test_litellm_gateway.py +0 -0
  899. {superqode-2.1.0 → superqode-2.2.1}/tests/test_live_acp_registry.py +0 -0
  900. {superqode-2.1.0 → superqode-2.2.1}/tests/test_live_models.py +0 -0
  901. {superqode-2.1.0 → superqode-2.2.1}/tests/test_local_airplane.py +0 -0
  902. {superqode-2.1.0 → superqode-2.2.1}/tests/test_local_build.py +0 -0
  903. {superqode-2.1.0 → superqode-2.2.1}/tests/test_local_code_index.py +0 -0
  904. {superqode-2.1.0 → superqode-2.2.1}/tests/test_local_labs.py +0 -0
  905. {superqode-2.1.0 → superqode-2.2.1}/tests/test_local_migrate.py +0 -0
  906. {superqode-2.1.0 → superqode-2.2.1}/tests/test_local_model_optimizations.py +0 -0
  907. {superqode-2.1.0 → superqode-2.2.1}/tests/test_local_packs.py +0 -0
  908. {superqode-2.1.0 → superqode-2.2.1}/tests/test_local_sandbox.py +0 -0
  909. {superqode-2.1.0 → superqode-2.2.1}/tests/test_local_search.py +0 -0
  910. {superqode-2.1.0 → superqode-2.2.1}/tests/test_local_servers.py +0 -0
  911. {superqode-2.1.0 → superqode-2.2.1}/tests/test_local_setup.py +0 -0
  912. {superqode-2.1.0 → superqode-2.2.1}/tests/test_local_smoke.py +0 -0
  913. {superqode-2.1.0 → superqode-2.2.1}/tests/test_local_stack.py +0 -0
  914. {superqode-2.1.0 → superqode-2.2.1}/tests/test_local_tool_capabilities.py +0 -0
  915. {superqode-2.1.0 → superqode-2.2.1}/tests/test_local_tool_support.py +0 -0
  916. {superqode-2.1.0 → superqode-2.2.1}/tests/test_login_api.py +0 -0
  917. {superqode-2.1.0 → superqode-2.2.1}/tests/test_loop_guard.py +0 -0
  918. {superqode-2.1.0 → superqode-2.2.1}/tests/test_managed_harness_backend.py +0 -0
  919. {superqode-2.1.0 → superqode-2.2.1}/tests/test_markdown_render.py +0 -0
  920. {superqode-2.1.0 → superqode-2.2.1}/tests/test_mcp.py +0 -0
  921. {superqode-2.1.0 → superqode-2.2.1}/tests/test_mcp_example_server.py +0 -0
  922. {superqode-2.1.0 → superqode-2.2.1}/tests/test_mcp_integration.py +0 -0
  923. {superqode-2.1.0 → superqode-2.2.1}/tests/test_mcp_live.py +0 -0
  924. {superqode-2.1.0 → superqode-2.2.1}/tests/test_mcp_oauth_generalized.py +0 -0
  925. {superqode-2.1.0 → superqode-2.2.1}/tests/test_mcp_tools_runtime.py +0 -0
  926. {superqode-2.1.0 → superqode-2.2.1}/tests/test_mcp_two_way.py +0 -0
  927. {superqode-2.1.0 → superqode-2.2.1}/tests/test_memory_recall.py +0 -0
  928. {superqode-2.1.0 → superqode-2.2.1}/tests/test_mlx_tools.py +0 -0
  929. {superqode-2.1.0 → superqode-2.2.1}/tests/test_model_profiles.py +0 -0
  930. {superqode-2.1.0 → superqode-2.2.1}/tests/test_model_specs.py +0 -0
  931. {superqode-2.1.0 → superqode-2.2.1}/tests/test_models_dev.py +0 -0
  932. {superqode-2.1.0 → superqode-2.2.1}/tests/test_monty_tool.py +0 -0
  933. {superqode-2.1.0 → superqode-2.2.1}/tests/test_navigation_history.py +0 -0
  934. {superqode-2.1.0 → superqode-2.2.1}/tests/test_network_policy.py +0 -0
  935. {superqode-2.1.0 → superqode-2.2.1}/tests/test_ollama_client.py +0 -0
  936. {superqode-2.1.0 → superqode-2.2.1}/tests/test_omnigent_agent_session_smoke.py +0 -0
  937. {superqode-2.1.0 → superqode-2.2.1}/tests/test_omnigent_importer.py +0 -0
  938. {superqode-2.1.0 → superqode-2.2.1}/tests/test_openai_session.py +0 -0
  939. {superqode-2.1.0 → superqode-2.2.1}/tests/test_output_spill.py +0 -0
  940. {superqode-2.1.0 → superqode-2.2.1}/tests/test_parallel_compare.py +0 -0
  941. {superqode-2.1.0 → superqode-2.2.1}/tests/test_peer_agents.py +0 -0
  942. {superqode-2.1.0 → superqode-2.2.1}/tests/test_plugin_hook_wiring.py +0 -0
  943. {superqode-2.1.0 → superqode-2.2.1}/tests/test_plugins.py +0 -0
  944. {superqode-2.1.0 → superqode-2.2.1}/tests/test_policies_and_turndiff.py +0 -0
  945. {superqode-2.1.0 → superqode-2.2.1}/tests/test_post_edit_verify.py +0 -0
  946. {superqode-2.1.0 → superqode-2.2.1}/tests/test_prime_agent_client.py +0 -0
  947. {superqode-2.1.0 → superqode-2.2.1}/tests/test_prime_agent_harness.py +0 -0
  948. {superqode-2.1.0 → superqode-2.2.1}/tests/test_prime_agent_provider.py +0 -0
  949. {superqode-2.1.0 → superqode-2.2.1}/tests/test_prime_command_surface.py +0 -0
  950. {superqode-2.1.0 → superqode-2.2.1}/tests/test_prime_tui_rpc.py +0 -0
  951. {superqode-2.1.0 → superqode-2.2.1}/tests/test_progressive_discovery.py +0 -0
  952. {superqode-2.1.0 → superqode-2.2.1}/tests/test_progressive_reveals.py +0 -0
  953. {superqode-2.1.0 → superqode-2.2.1}/tests/test_project_trust.py +0 -0
  954. {superqode-2.1.0 → superqode-2.2.1}/tests/test_prompt_stack.py +0 -0
  955. {superqode-2.1.0 → superqode-2.2.1}/tests/test_provider_catalog.py +0 -0
  956. {superqode-2.1.0 → superqode-2.2.1}/tests/test_provider_dynamic.py +0 -0
  957. {superqode-2.1.0 → superqode-2.2.1}/tests/test_provider_models.py +0 -0
  958. {superqode-2.1.0 → superqode-2.2.1}/tests/test_provider_recommendations.py +0 -0
  959. {superqode-2.1.0 → superqode-2.2.1}/tests/test_pure_mode_sessions.py +0 -0
  960. {superqode-2.1.0 → superqode-2.2.1}/tests/test_qm_deployment_layer.py +0 -0
  961. {superqode-2.1.0 → superqode-2.2.1}/tests/test_rate_limit_retry.py +0 -0
  962. {superqode-2.1.0 → superqode-2.2.1}/tests/test_read_tool_limits.py +0 -0
  963. {superqode-2.1.0 → superqode-2.2.1}/tests/test_reasoning_and_budget.py +0 -0
  964. {superqode-2.1.0 → superqode-2.2.1}/tests/test_recursive_eval_packs.py +0 -0
  965. {superqode-2.1.0 → superqode-2.2.1}/tests/test_release_metadata.py +0 -0
  966. {superqode-2.1.0 → superqode-2.2.1}/tests/test_rlm_code_integration.py +0 -0
  967. {superqode-2.1.0 → superqode-2.2.1}/tests/test_runtime_adk.py +0 -0
  968. {superqode-2.1.0 → superqode-2.2.1}/tests/test_runtime_antigravity_cli.py +0 -0
  969. {superqode-2.1.0 → superqode-2.2.1}/tests/test_runtime_antigravity_managed.py +0 -0
  970. {superqode-2.1.0 → superqode-2.2.1}/tests/test_runtime_antigravity_sdk.py +0 -0
  971. {superqode-2.1.0 → superqode-2.2.1}/tests/test_runtime_builtin.py +0 -0
  972. {superqode-2.1.0 → superqode-2.2.1}/tests/test_runtime_claude_agent_sdk.py +0 -0
  973. {superqode-2.1.0 → superqode-2.2.1}/tests/test_runtime_codex_sdk.py +0 -0
  974. {superqode-2.1.0 → superqode-2.2.1}/tests/test_runtime_copilot_sdk.py +0 -0
  975. {superqode-2.1.0 → superqode-2.2.1}/tests/test_runtime_devin_cli.py +0 -0
  976. {superqode-2.1.0 → superqode-2.2.1}/tests/test_runtime_dialog.py +0 -0
  977. {superqode-2.1.0 → superqode-2.2.1}/tests/test_runtime_openai_agents.py +0 -0
  978. {superqode-2.1.0 → superqode-2.2.1}/tests/test_runtime_openai_events.py +0 -0
  979. {superqode-2.1.0 → superqode-2.2.1}/tests/test_runtime_openai_hitl.py +0 -0
  980. {superqode-2.1.0 → superqode-2.2.1}/tests/test_runtime_openai_sandbox.py +0 -0
  981. {superqode-2.1.0 → superqode-2.2.1}/tests/test_runtime_protocol.py +0 -0
  982. {superqode-2.1.0 → superqode-2.2.1}/tests/test_runtime_pydanticai.py +0 -0
  983. {superqode-2.1.0 → superqode-2.2.1}/tests/test_sandbox_backends.py +0 -0
  984. {superqode-2.1.0 → superqode-2.2.1}/tests/test_sandbox_execution.py +0 -0
  985. {superqode-2.1.0 → superqode-2.2.1}/tests/test_search_roots.py +0 -0
  986. {superqode-2.1.0 → superqode-2.2.1}/tests/test_semantic_search.py +0 -0
  987. {superqode-2.1.0 → superqode-2.2.1}/tests/test_session_switchboard.py +0 -0
  988. {superqode-2.1.0 → superqode-2.2.1}/tests/test_shell_session.py +0 -0
  989. {superqode-2.1.0 → superqode-2.2.1}/tests/test_simple_login.py +0 -0
  990. {superqode-2.1.0 → superqode-2.2.1}/tests/test_simple_query_fastpath.py +0 -0
  991. {superqode-2.1.0 → superqode-2.2.1}/tests/test_skillopt.py +0 -0
  992. {superqode-2.1.0 → superqode-2.2.1}/tests/test_slash_runtime.py +0 -0
  993. {superqode-2.1.0 → superqode-2.2.1}/tests/test_spawn_harness_tool.py +0 -0
  994. {superqode-2.1.0 → superqode-2.2.1}/tests/test_status_bar_layout.py +0 -0
  995. {superqode-2.1.0 → superqode-2.2.1}/tests/test_steering_continue_reminders.py +0 -0
  996. {superqode-2.1.0 → superqode-2.2.1}/tests/test_streaming_tool_calls.py +0 -0
  997. {superqode-2.1.0 → superqode-2.2.1}/tests/test_subscription_billing_policy.py +0 -0
  998. {superqode-2.1.0 → superqode-2.2.1}/tests/test_subscription_login.py +0 -0
  999. {superqode-2.1.0 → superqode-2.2.1}/tests/test_subscription_login_consent.py +0 -0
  1000. {superqode-2.1.0 → superqode-2.2.1}/tests/test_synthetic_gateways.py +0 -0
  1001. {superqode-2.1.0 → superqode-2.2.1}/tests/test_tau_harness_adapter.py +0 -0
  1002. {superqode-2.1.0 → superqode-2.2.1}/tests/test_terminal_output_limits.py +0 -0
  1003. {superqode-2.1.0 → superqode-2.2.1}/tests/test_theme_contrast.py +0 -0
  1004. {superqode-2.1.0 → superqode-2.2.1}/tests/test_theme_picker.py +0 -0
  1005. {superqode-2.1.0 → superqode-2.2.1}/tests/test_theme_repaint.py +0 -0
  1006. {superqode-2.1.0 → superqode-2.2.1}/tests/test_todo_tools.py +0 -0
  1007. {superqode-2.1.0 → superqode-2.2.1}/tests/test_tool_args_repair.py +0 -0
  1008. {superqode-2.1.0 → superqode-2.2.1}/tests/test_tool_batch_safety.py +0 -0
  1009. {superqode-2.1.0 → superqode-2.2.1}/tests/test_tool_bridge.py +0 -0
  1010. {superqode-2.1.0 → superqode-2.2.1}/tests/test_tool_bridge_openai.py +0 -0
  1011. {superqode-2.1.0 → superqode-2.2.1}/tests/test_tool_call_repair.py +0 -0
  1012. {superqode-2.1.0 → superqode-2.2.1}/tests/test_tool_output_pruning.py +0 -0
  1013. {superqode-2.1.0 → superqode-2.2.1}/tests/test_tool_tracking.py +0 -0
  1014. {superqode-2.1.0 → superqode-2.2.1}/tests/test_tools.py +0 -0
  1015. {superqode-2.1.0 → superqode-2.2.1}/tests/test_tui_change_summary.py +0 -0
  1016. {superqode-2.1.0 → superqode-2.2.1}/tests/test_tui_chat_mode.py +0 -0
  1017. {superqode-2.1.0 → superqode-2.2.1}/tests/test_tui_diagnostics.py +0 -0
  1018. {superqode-2.1.0 → superqode-2.2.1}/tests/test_tui_exit.py +0 -0
  1019. {superqode-2.1.0 → superqode-2.2.1}/tests/test_tui_feedback.py +0 -0
  1020. {superqode-2.1.0 → superqode-2.2.1}/tests/test_tui_launch_performance.py +0 -0
  1021. {superqode-2.1.0 → superqode-2.2.1}/tests/test_tui_llamacpp_connect.py +0 -0
  1022. {superqode-2.1.0 → superqode-2.2.1}/tests/test_tui_markdown_cleanup.py +0 -0
  1023. {superqode-2.1.0 → superqode-2.2.1}/tests/test_tui_mlx_connect.py +0 -0
  1024. {superqode-2.1.0 → superqode-2.2.1}/tests/test_tui_mounted.py +0 -0
  1025. {superqode-2.1.0 → superqode-2.2.1}/tests/test_tui_onboarding.py +0 -0
  1026. {superqode-2.1.0 → superqode-2.2.1}/tests/test_tui_tool_display.py +0 -0
  1027. {superqode-2.1.0 → superqode-2.2.1}/tests/test_uhp_backend.py +0 -0
  1028. {superqode-2.1.0 → superqode-2.2.1}/tests/test_uhp_connect.py +0 -0
  1029. {superqode-2.1.0 → superqode-2.2.1}/tests/test_update_command.py +0 -0
  1030. {superqode-2.1.0 → superqode-2.2.1}/tests/test_vendor_cli_runtime.py +0 -0
  1031. {superqode-2.1.0 → superqode-2.2.1}/tests/test_version.py +0 -0
  1032. {superqode-2.1.0 → superqode-2.2.1}/tests/test_view_image.py +0 -0
  1033. {superqode-2.1.0 → superqode-2.2.1}/tests/test_web_server_auth.py +0 -0
  1034. {superqode-2.1.0 → superqode-2.2.1}/tests/test_workorders.py +0 -0
  1035. {superqode-2.1.0 → superqode-2.2.1}/tests/test_workspace.py +0 -0
  1036. {superqode-2.1.0 → superqode-2.2.1}/tests/test_zai_provider.py +0 -0
@@ -7,6 +7,100 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [2.2.1] - 2026-09-12
11
+
12
+ Local UHP for the package cut: SuperQode speaks it as a client (connect, run,
13
+ file upload and artifact download) and as a native Core server that binds one
14
+ HarnessSpec. Harness stop reasons map to UHP failed or incomplete instead of an
15
+ empty completed response. The same cut includes A2ABreak card-review and
16
+ contextId hardening. A public UHP host (GoDaddy) and Google Cloud infra stay for
17
+ 2.3.0.
18
+
19
+ ### 🧩 Unified Harness Protocol
20
+
21
+ - Client path: `superqode connect uhp` discovers a server and selects a harness;
22
+ `harness run uhp` runs tasks through the same session, event and evidence model
23
+ as a local harness.
24
+ - File upload and artifact download: `--file` / `input_files=` send local files
25
+ through `POST /v1/files`; `--download-dir` and `download_citations` write
26
+ `container_file_citation` artifacts back to disk.
27
+ - Native server: `superqode serve uhp --spec harness.yaml` exposes one configured
28
+ HarnessSpec over UHP Core. Complementary to HarnessRouter (a multi-backend
29
+ runner), not a substitute for it.
30
+ - Harness `stopped_reason` values such as `error`, `blocked` and `loop_detected`
31
+ map to UHP `failed`; `needs_approval` and `max_iterations` map to `incomplete`.
32
+ An empty provider failure is no longer reported as `completed`.
33
+ - The server advertises `conformance_class: core`. That names the surface it
34
+ implements; it is not a UHP conformance-suite certificate.
35
+
36
+ ### 🔐 A2ABreak hardening
37
+
38
+ - Card review on connect/inspect surfaces SuperOptiX-aligned findings, and
39
+ `contextId` plus task ACL bind to the caller principal (protocol gaps, not
40
+ product CVEs).
41
+
42
+ ## [2.2.0] - 2026-09-07
43
+
44
+ Every Harness Hub record now states the language its harness is implemented in,
45
+ taken from the project's own build manifest rather than its marketing, and that
46
+ fact is filterable from the terminal, the CLI and the website. The same pass
47
+ found install commands that fetched the wrong software and corrected them.
48
+
49
+ ### 🔤 Implementation language
50
+
51
+ - Hub records carry `language`, `language_confidence` and `language_evidence`.
52
+ The schema moves to 1.6.
53
+ - "Confirmed" comes from a build manifest, GitHub's language breakdown, or a
54
+ statement by the vendor. "Inferred" is read off what a closed-source product
55
+ ships, such as an npm wrapper over platform binaries or Cargo target triples
56
+ in an installer, and every surface marks it as such.
57
+ - `superqode hub` prints a language column and takes `--language`, whose
58
+ choices come from the catalogue and so cannot drift from it.
59
+ - `superqode hub show` reports the language, how firmly it is known, and the
60
+ evidence behind it.
61
+ - `:hub` filters by language from named buttons that wrap across rows, so no
62
+ language sits off the right edge of an 80-column terminal.
63
+ - New `:connect by-language` screen. It browses every route by what the harness
64
+ is written in: SuperQode's own harnesses, vendor subscriptions, key harnesses
65
+ and the ACP registry.
66
+
67
+ ### 🔭 Hub
68
+
69
+ - Inspecting a harness shows its language, the one command that launches it,
70
+ and a Links block carrying the official repository. Several entries repeat a
71
+ single URL across repository, homepage and docs; those now collapse to one
72
+ row instead of printing the same address three times.
73
+ - The preview pane keeps what you need to choose and start. Setup steps, tools,
74
+ policies and commands moved behind Inspect. Warnings stay in the preview,
75
+ since hiding a sandbox caveat behind a keypress is not a summary.
76
+ - ACP agents left `:hub`. `:connect acp` already reaches every one of them and
77
+ marks what is installed, so listing them twice made the Hub twice as long
78
+ without saying anything new.
79
+ - Presets left `:hub` too. They are tunings of the four built-in harnesses
80
+ rather than harnesses in their own right; `:harness switch <preset>` and the
81
+ preset menu still reach them.
82
+ - The Hub opens on All. It previously switched itself to Ready whenever
83
+ anything was installed, which read as a short catalogue rather than a
84
+ filtered one.
85
+ - Entries are ordered alphabetically with nothing promoted, and the list
86
+ returns to the top when the view changes.
87
+
88
+ ### 🔧 Install commands and repository URLs
89
+
90
+ - Three commands installed unrelated software: `cargo install fount` fetched a
91
+ Fountain screenplay editor, `npm install -g crow-cli` a Crystal transpiler,
92
+ and `pipx install goose-ai` a placeholder package. `cagent` and `kimi-cli`
93
+ had the same collision on npm.
94
+ - Eight more named packages that do not exist: `qoder-cli`, `sigit`,
95
+ `vtcode-acp`, `@poolsideai/pool`, `cagent`, `stakpak`, `code-assistant` and
96
+ `stdio-bus`.
97
+ - Gemini CLI, Auggie and Kimi were published under the `@anthropic-ai/` scope,
98
+ which belongs to another vendor and carries no such packages. One of the
99
+ three was a live `npx` invocation rather than documentation.
100
+ - Seven repository URLs answered 404 or named the wrong project. OpenCode
101
+ pointed at the archived 2024 Go project, which also reported the wrong
102
+ language for it.
103
+
10
104
  ## [2.1.0] - 2026-09-06
11
105
 
12
106
  Adds `sq gauge`, which writes an Agent Quality Record for a release decision.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: superqode
3
- Version: 2.1.0
3
+ Version: 2.2.1
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>
@@ -439,6 +439,14 @@ can call it today:
439
439
  superqode connect a2a --url https://a2a.superqode.dev
440
440
  ```
441
441
 
442
+ Or use the A2A project's official CLI ([`a2a`](https://github.com/a2aproject/a2a-cli)):
443
+
444
+ ```bash
445
+ a2a card get -a https://a2a.superqode.dev
446
+ a2a send -a https://a2a.superqode.dev \
447
+ "Which harness should we shortlist for a Python monorepo?"
448
+ ```
449
+
442
450
  It scores 100% of MUST and 100% of MAY against the
443
451
  [Technology Compatibility Kit](https://github.com/a2aproject/a2a-tck) the A2A
444
452
  project maintains under the Linux Foundation, on the JSON-RPC and HTTP+JSON
@@ -460,6 +468,23 @@ superqode a2a-keys issue "Acme Corp" --tier one-off --days 30
460
468
 
461
469
  Read the [A2A guide](docs/providers/a2a.md).
462
470
 
471
+ ## Serve a Harness Over UHP
472
+
473
+ The same install that drives a remote UHP server can also expose a local
474
+ HarnessSpec so other UHP clients call SuperQode:
475
+
476
+ ```bash
477
+ superqode serve uhp --spec harness.yaml --port 8787
478
+ superqode connect uhp --base-url http://127.0.0.1:8787
479
+ superqode harness run uhp --prompt "summarise this repository"
480
+ ```
481
+
482
+ `serve uhp` binds one HarnessSpec and advertises UHP Core. It is complementary
483
+ to HarnessRouter, which wraps third-party CLIs as a catalog. Core names the
484
+ surface SuperQode implements; it is not a conformance-suite certificate.
485
+
486
+ Read the [UHP guide](docs/providers/uhp.md).
487
+
463
488
  ## Harness Execution Model
464
489
 
465
490
  ```text
@@ -495,11 +520,12 @@ superqode harness graph <run-id> --json
495
520
 
496
521
  | Guide | What it covers |
497
522
  | --- | --- |
498
- | [Website](https://superqode.dev) | Product, Hub, A2A agent |
523
+ | [Website](https://superqode.dev) | Product, Hub, A2A and UHP |
499
524
  | [Quick Start](https://docs.superqode.dev/getting-started/quickstart/) | Install, connect, and run your first task |
500
525
  | [Harness Hub](https://docs.superqode.dev/harness-hub/) | Browsing, filtering, and the published catalog |
501
- | [Connection Methods](docs/concepts/modes.md) | Local, ACP, BYOK, SDK, MCP, and A2A routes |
526
+ | [Connection Methods](docs/concepts/modes.md) | Local, ACP, BYOK, SDK, MCP, A2A, and UHP routes |
502
527
  | [A2A Agents](docs/providers/a2a.md) | Serving a harness over A2A, skills, API keys, and the Agent Card |
528
+ | [UHP](docs/providers/uhp.md) | Client connect/run, file upload, and native `serve uhp` (Core class) |
503
529
  | [Developer Workflows](docs/developer-workflows.md) | The complete TUI and CLI command set |
504
530
  | [Harness System](docs/advanced/harness-system.md) | HarnessSpec fields, runtimes, and policy |
505
531
  | [Harness Protocol](docs/advanced/harness-protocol.md) | The versioned session and evidence contract |
@@ -288,6 +288,14 @@ can call it today:
288
288
  superqode connect a2a --url https://a2a.superqode.dev
289
289
  ```
290
290
 
291
+ Or use the A2A project's official CLI ([`a2a`](https://github.com/a2aproject/a2a-cli)):
292
+
293
+ ```bash
294
+ a2a card get -a https://a2a.superqode.dev
295
+ a2a send -a https://a2a.superqode.dev \
296
+ "Which harness should we shortlist for a Python monorepo?"
297
+ ```
298
+
291
299
  It scores 100% of MUST and 100% of MAY against the
292
300
  [Technology Compatibility Kit](https://github.com/a2aproject/a2a-tck) the A2A
293
301
  project maintains under the Linux Foundation, on the JSON-RPC and HTTP+JSON
@@ -309,6 +317,23 @@ superqode a2a-keys issue "Acme Corp" --tier one-off --days 30
309
317
 
310
318
  Read the [A2A guide](docs/providers/a2a.md).
311
319
 
320
+ ## Serve a Harness Over UHP
321
+
322
+ The same install that drives a remote UHP server can also expose a local
323
+ HarnessSpec so other UHP clients call SuperQode:
324
+
325
+ ```bash
326
+ superqode serve uhp --spec harness.yaml --port 8787
327
+ superqode connect uhp --base-url http://127.0.0.1:8787
328
+ superqode harness run uhp --prompt "summarise this repository"
329
+ ```
330
+
331
+ `serve uhp` binds one HarnessSpec and advertises UHP Core. It is complementary
332
+ to HarnessRouter, which wraps third-party CLIs as a catalog. Core names the
333
+ surface SuperQode implements; it is not a conformance-suite certificate.
334
+
335
+ Read the [UHP guide](docs/providers/uhp.md).
336
+
312
337
  ## Harness Execution Model
313
338
 
314
339
  ```text
@@ -344,11 +369,12 @@ superqode harness graph <run-id> --json
344
369
 
345
370
  | Guide | What it covers |
346
371
  | --- | --- |
347
- | [Website](https://superqode.dev) | Product, Hub, A2A agent |
372
+ | [Website](https://superqode.dev) | Product, Hub, A2A and UHP |
348
373
  | [Quick Start](https://docs.superqode.dev/getting-started/quickstart/) | Install, connect, and run your first task |
349
374
  | [Harness Hub](https://docs.superqode.dev/harness-hub/) | Browsing, filtering, and the published catalog |
350
- | [Connection Methods](docs/concepts/modes.md) | Local, ACP, BYOK, SDK, MCP, and A2A routes |
375
+ | [Connection Methods](docs/concepts/modes.md) | Local, ACP, BYOK, SDK, MCP, A2A, and UHP routes |
351
376
  | [A2A Agents](docs/providers/a2a.md) | Serving a harness over A2A, skills, API keys, and the Agent Card |
377
+ | [UHP](docs/providers/uhp.md) | Client connect/run, file upload, and native `serve uhp` (Core class) |
352
378
  | [Developer Workflows](docs/developer-workflows.md) | The complete TUI and CLI command set |
353
379
  | [Harness System](docs/advanced/harness-system.md) | HarnessSpec fields, runtimes, and policy |
354
380
  | [Harness Protocol](docs/advanced/harness-protocol.md) | The versioned session and evidence contract |
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "superqode"
3
- version = "2.1.0"
3
+ version = "2.2.1"
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.1.0"
41
+ __version__ = "2.2.1"
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
@@ -214,6 +214,7 @@ class A2AClient:
214
214
  fallback = self.agent_url
215
215
 
216
216
  self.inspect.auth(auth_summary(data))
217
+ self._record_card_review(data)
217
218
  selected, skipped = _select_interface(interfaces, fallback)
218
219
  listed = interfaces if isinstance(interfaces, list) else []
219
220
  note = ""
@@ -237,6 +238,36 @@ class A2AClient:
237
238
  )
238
239
  return card, binding, version
239
240
 
241
+ def _record_card_review(self, data: dict) -> None:
242
+ """Record A2ABreak card-review findings. Never treat JWS as auth."""
243
+ from superqode.a2a.trust import (
244
+ origin_is_allowed,
245
+ parse_origin_allowlist,
246
+ record_card_review,
247
+ resolve_jws_trust_root,
248
+ review_agent_card,
249
+ )
250
+
251
+ allowed = getattr(self, "allowed_origins", None)
252
+ if allowed is None:
253
+ allowed = parse_origin_allowlist()
254
+ trust_root = getattr(self, "jws_trust_root", None)
255
+ if trust_root is None:
256
+ trust_root = resolve_jws_trust_root()
257
+ review = review_agent_card(
258
+ data,
259
+ origin=self.agent_url,
260
+ allowed_origins=tuple(allowed or ()),
261
+ jws_trust_root=str(trust_root or ""),
262
+ )
263
+ self._card_review = review
264
+ record_card_review(self.inspect, review)
265
+ if tuple(allowed or ()) and not origin_is_allowed(self.agent_url, tuple(allowed)):
266
+ raise A2AClientError(
267
+ f"Origin is not on the A2A allowlist: {self.agent_url}",
268
+ inspect=self.inspect,
269
+ )
270
+
240
271
  async def _ensure_interface(self) -> tuple[str, str, str]:
241
272
  if self._interface_url is None or self._binding is None or self._protocol_version is None:
242
273
  await self.get_agent_card()
@@ -84,6 +84,8 @@ async def run_a2a_conformance(
84
84
  send: bool = True,
85
85
  http_client=None,
86
86
  timeout: float = 180.0,
87
+ allowed_origins: tuple[str, ...] = (),
88
+ jws_trust_root: str = "",
87
89
  ) -> A2AConformanceReport:
88
90
  """Run the four checks against ``settings.url``."""
89
91
  from superqode.a2a.client import A2AClient, A2AClientError
@@ -105,6 +107,10 @@ async def run_a2a_conformance(
105
107
  client_key=settings.key or None,
106
108
  timeout=timeout,
107
109
  ) as client:
110
+ if allowed_origins:
111
+ client.allowed_origins = allowed_origins
112
+ if jws_trust_root:
113
+ client.jws_trust_root = jws_trust_root
108
114
  try:
109
115
  card = await client.get_agent_card()
110
116
  except A2AClientError as exc:
@@ -0,0 +1,132 @@
1
+ """Principal-bound A2A context ownership (A2ABreak).
2
+
3
+ The A2A spec lets a client supply ``contextId`` and does not bind it to a
4
+ caller. SuperQode binds each context to the caller principal (API key id,
5
+ operator, opaque ``X-SuperQode-Caller-Key``, or per-caller anonymous
6
+ isolation) and refuses cross-principal reuse.
7
+
8
+ This is not the SuperOptiX cookie model. SuperQode already has API keys and
9
+ an operator token. Anonymous callers can send an opaque caller key, otherwise
10
+ they are isolated by the same address identity used for rate limits.
11
+ """
12
+
13
+ from __future__ import annotations
14
+
15
+ from typing import Any
16
+
17
+ from superqode.a2a.keys import ANONYMOUS_TIER, OPERATOR_TIER
18
+ from superqode.a2a.limits import caller_identity
19
+
20
+ #: Opaque per-caller key for anonymous isolation. Not a SuperOptiX cookie.
21
+ CALLER_HEADER = "x-superqode-caller-key"
22
+
23
+ CONTEXT_OWNERSHIP_MESSAGE = (
24
+ "This contextId is bound to another caller. The A2A spec does not "
25
+ "assign context ownership; SuperQode binds each context to the "
26
+ "caller that created it."
27
+ )
28
+
29
+
30
+ class ContextOwnershipError(Exception):
31
+ """Client-supplied contextId belongs to a different principal."""
32
+
33
+ def __init__(self, context_id: str) -> None:
34
+ super().__init__(CONTEXT_OWNERSHIP_MESSAGE)
35
+ self.context_id = context_id
36
+
37
+
38
+ class SuperQodeA2AUser:
39
+ """Caller principal presented to the official A2A task store.
40
+
41
+ ``user_name`` is the owner key the SDK uses for List, Get, Cancel, and
42
+ Subscribe. Anonymous callers still receive a non-empty name so they are
43
+ not collapsed into one shared bucket.
44
+ """
45
+
46
+ def __init__(self, name: str, *, authenticated: bool) -> None:
47
+ self._name = name
48
+ self._authenticated = authenticated
49
+
50
+ @property
51
+ def is_authenticated(self) -> bool:
52
+ return self._authenticated
53
+
54
+ @property
55
+ def user_name(self) -> str:
56
+ return self._name
57
+
58
+
59
+ class ContextOwnerStore:
60
+ """In-process map of contextId to the principal that claimed it."""
61
+
62
+ def __init__(self) -> None:
63
+ self._owners: dict[str, str] = {}
64
+
65
+ def owner_of(self, context_id: str) -> str | None:
66
+ return self._owners.get(context_id)
67
+
68
+ def claim(
69
+ self,
70
+ context_id: str,
71
+ principal: str,
72
+ *,
73
+ stored_owner: str | None = None,
74
+ ) -> None:
75
+ """Bind ``context_id`` to ``principal``, or reject a cross-principal reuse."""
76
+ existing = self._owners.get(context_id) or (stored_owner or "").strip() or None
77
+ if existing:
78
+ self._owners[context_id] = existing
79
+ if existing != principal:
80
+ raise ContextOwnershipError(context_id)
81
+ return
82
+ self._owners[context_id] = principal
83
+
84
+
85
+ def valid_caller_key(value: str) -> bool:
86
+ """Accept a short opaque token, the same shape SuperOptiX uses on the header."""
87
+ if not value or not (8 <= len(value) <= 128):
88
+ return False
89
+ return all(char.isalnum() or char in "-_" for char in value)
90
+
91
+
92
+ def request_principal(decision: Any, request: Any) -> str:
93
+ """Resolve the principal for an HTTP request after access is decided."""
94
+ tier = str(getattr(decision, "tier", "") or ANONYMOUS_TIER)
95
+ key_id = str(getattr(decision, "key_id", "") or "")
96
+ if tier == OPERATOR_TIER:
97
+ return "operator"
98
+ if key_id:
99
+ return f"key:{key_id}"
100
+ header = ""
101
+ try:
102
+ header = (request.headers.get(CALLER_HEADER) or "").strip()
103
+ except AttributeError:
104
+ header = ""
105
+ if valid_caller_key(header):
106
+ return f"caller:{header}"
107
+ host = getattr(getattr(request, "client", None), "host", None)
108
+ try:
109
+ forwarded = request.headers.get("x-forwarded-for")
110
+ except AttributeError:
111
+ forwarded = None
112
+ return caller_identity("", host, forwarded)
113
+
114
+
115
+ def caller_principal(context: Any) -> str:
116
+ """Return the principal recorded on an executor call context."""
117
+ call_context = getattr(context, "call_context", None)
118
+ state = getattr(call_context, "state", None) or {}
119
+ identity = str(state.get("identity") or "").strip()
120
+ if identity:
121
+ return identity
122
+ user = getattr(call_context, "user", None)
123
+ user_name = str(getattr(user, "user_name", "") or "").strip()
124
+ if user_name:
125
+ return user_name
126
+ key_id = str(state.get("key_id") or "").strip()
127
+ if key_id:
128
+ return f"key:{key_id}"
129
+ tier = str(state.get("tier") or ANONYMOUS_TIER)
130
+ if tier == OPERATOR_TIER:
131
+ return "operator"
132
+ return "anonymous:unknown"
@@ -97,6 +97,10 @@ class InspectLog:
97
97
  def auth(self, summary: str, **detail: Any) -> None:
98
98
  self.add("auth", summary, **detail)
99
99
 
100
+ def trust(self, summary: str, **detail: Any) -> None:
101
+ """One Agent Card protocol-risk finding (A2ABreak)."""
102
+ self.add("trust", summary, **detail)
103
+
100
104
  def lines(self) -> list[str]:
101
105
  return [event.summary for event in self.events]
102
106
 
@@ -22,8 +22,15 @@ if TYPE_CHECKING:
22
22
  from superqode.agent.loop import AgentConfig
23
23
  from superqode.harness import HarnessProtocolController, HarnessSessionRef, HarnessSpec
24
24
 
25
+ from superqode.a2a.context import (
26
+ ContextOwnershipError,
27
+ ContextOwnerStore,
28
+ SuperQodeA2AUser,
29
+ caller_principal,
30
+ request_principal,
31
+ )
25
32
  from superqode.a2a.keys import ANONYMOUS_TIER, AccessDecision, decide_access
26
- from superqode.a2a.limits import RateLimiter, RateLimitPolicy, caller_identity
33
+ from superqode.a2a.limits import RateLimiter, RateLimitPolicy
27
34
 
28
35
 
29
36
  #: The version reported in the Agent Card.
@@ -121,7 +128,7 @@ class A2AServerConfig(BaseModel):
121
128
  #: Must resolve. Host platforms render this in their agent gallery, and a
122
129
  #: dead URL shows as a broken image rather than as no image.
123
130
  #: ``scripts/check_published_agent_card.py`` verifies it.
124
- icon_url: str = "https://super-agentic.ai/uploads/superqode.png"
131
+ icon_url: str = "https://superqode.dev/assets/superqode.png"
125
132
  jsonrpc_path: str = "/"
126
133
  #: Also advertise and serve the A2A 0.3 wire format. Gemini Enterprise,
127
134
  #: Foundry Agent Service, and Agent Registry all still accept 0.3 cards,
@@ -197,6 +204,7 @@ class SuperQodeA2AExecutor:
197
204
  self.config = config
198
205
  self._sessions: dict[str, HarnessSessionRef] = {}
199
206
  self._task_sessions: dict[str, HarnessSessionRef] = {}
207
+ self._owners = ContextOwnerStore()
200
208
  self._session_lock = asyncio.Lock()
201
209
 
202
210
  async def execute(self, context: Any, event_queue: Any) -> None:
@@ -216,6 +224,17 @@ class SuperQodeA2AExecutor:
216
224
  await updater.start_work()
217
225
 
218
226
  user_input = context.get_user_input()
227
+ principal = caller_principal(context)
228
+ try:
229
+ self._owners.claim(
230
+ context_id,
231
+ principal,
232
+ stored_owner=self._stored_owner(context_id),
233
+ )
234
+ except ContextOwnershipError as exc:
235
+ await updater.failed(updater.new_agent_message([sdk["Part"](text=str(exc))]))
236
+ return
237
+
219
238
  if self._wants_shortlist(context, user_input):
220
239
  await self._answer_shortlist(
221
240
  updater,
@@ -246,7 +265,11 @@ class SuperQodeA2AExecutor:
246
265
  )
247
266
  return
248
267
 
249
- session = await self._session_for(context_id)
268
+ try:
269
+ session = await self._session_for(context_id, principal)
270
+ except ContextOwnershipError as exc:
271
+ await updater.failed(updater.new_agent_message([sdk["Part"](text=str(exc))]))
272
+ return
250
273
  self._task_sessions[task_id] = session
251
274
  artifact_id = f"superqode-{task_id}"
252
275
  content: list[str] = []
@@ -418,6 +441,10 @@ class SuperQodeA2AExecutor:
418
441
  sdk = _a2a_sdk()
419
442
  task_id = _required_id(context.task_id, "task")
420
443
  context_id = _required_id(context.context_id, "context")
444
+ principal = caller_principal(context)
445
+ owner = self._owners.owner_of(context_id) or self._stored_owner(context_id)
446
+ if owner and owner != principal:
447
+ return
421
448
  session = self._task_sessions.get(task_id)
422
449
  if session is not None:
423
450
  try:
@@ -428,7 +455,14 @@ class SuperQodeA2AExecutor:
428
455
  pass
429
456
  await sdk["TaskUpdater"](event_queue, task_id, context_id).cancel()
430
457
 
431
- async def _session_for(self, context_id: str) -> HarnessSessionRef:
458
+ def _stored_owner(self, context_id: str) -> str | None:
459
+ record = self.controller.store.get_session(f"a2a-{context_id}")
460
+ if record is None:
461
+ return None
462
+ owner = str((record.metadata or {}).get("a2a_owner") or "").strip()
463
+ return owner or None
464
+
465
+ async def _session_for(self, context_id: str, principal: str) -> HarnessSessionRef:
432
466
  from superqode.harness import HarnessCreateRequest
433
467
 
434
468
  async with self._session_lock:
@@ -437,7 +471,11 @@ class SuperQodeA2AExecutor:
437
471
  return cached
438
472
 
439
473
  session_id = f"a2a-{context_id}"
440
- if self.controller.store.get_session(session_id) is not None:
474
+ stored = self.controller.store.get_session(session_id)
475
+ if stored is not None:
476
+ stored_owner = str((stored.metadata or {}).get("a2a_owner") or "").strip()
477
+ if stored_owner and stored_owner != principal:
478
+ raise ContextOwnershipError(context_id)
441
479
  session = await self.controller.resume(session_id)
442
480
  else:
443
481
  descriptor = self.controller.descriptors()[0]
@@ -448,7 +486,11 @@ class SuperQodeA2AExecutor:
448
486
  model=self.config.model,
449
487
  working_directory=self.config.working_directory.resolve(),
450
488
  session_id=session_id,
451
- metadata={"transport": "a2a", "a2a_context_id": context_id},
489
+ metadata={
490
+ "transport": "a2a",
491
+ "a2a_context_id": context_id,
492
+ "a2a_owner": principal,
493
+ },
452
494
  )
453
495
  )
454
496
  self._sessions[context_id] = session
@@ -600,11 +642,7 @@ class A2AServer:
600
642
  content={"detail": f"Unauthorized: {decision.reason}"},
601
643
  headers={"WWW-Authenticate": "Bearer"},
602
644
  )
603
- identity = caller_identity(
604
- decision.key_id,
605
- getattr(getattr(request, "client", None), "host", None),
606
- request.headers.get("x-forwarded-for"),
607
- )
645
+ identity = request_principal(decision, request)
608
646
  limit = limiter.check(identity, decision.tier)
609
647
  if not limit.allowed:
610
648
  return sdk["JSONResponse"](
@@ -616,6 +654,7 @@ class A2AServer:
616
654
  # Carried on the scope so the call-context builder, and through it
617
655
  # the executor, can see which tier is asking.
618
656
  request.state.superqode_access = decision
657
+ request.state.superqode_identity = identity
619
658
  return await call_next(request)
620
659
 
621
660
  if self._task_engine is not None:
@@ -879,8 +918,17 @@ def _AccessContextBuilder(sdk: dict[str, Any]) -> Any:
879
918
  def build(self, request: Any) -> Any:
880
919
  context = super().build(request)
881
920
  decision = getattr(request.state, "superqode_access", None)
921
+ identity = str(getattr(request.state, "superqode_identity", "") or "").strip()
882
922
  if isinstance(decision, AccessDecision):
883
923
  context.state.update(decision.to_state())
924
+ if not identity and isinstance(decision, AccessDecision):
925
+ identity = request_principal(decision, request)
926
+ if identity:
927
+ context.state["identity"] = identity
928
+ authenticated = bool(
929
+ isinstance(decision, AccessDecision) and not decision.anonymous
930
+ )
931
+ context.user = SuperQodeA2AUser(identity, authenticated=authenticated)
884
932
  return context
885
933
 
886
934
  return _Builder()