superqode 2.2.0__tar.gz → 2.2.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1036) hide show
  1. {superqode-2.2.0 → superqode-2.2.2}/CHANGELOG.md +52 -0
  2. {superqode-2.2.0 → superqode-2.2.2}/PKG-INFO +35 -3
  3. {superqode-2.2.0 → superqode-2.2.2}/README.md +34 -2
  4. {superqode-2.2.0 → superqode-2.2.2}/pyproject.toml +1 -1
  5. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/__init__.py +1 -1
  6. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/a2a/client.py +31 -0
  7. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/a2a/conformance.py +6 -0
  8. superqode-2.2.2/src/superqode/a2a/context.py +132 -0
  9. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/a2a/inspect.py +4 -0
  10. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/a2a/server.py +59 -11
  11. superqode-2.2.2/src/superqode/a2a/trust.py +280 -0
  12. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app/constants.py +1 -0
  13. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/commands/a2a_connect.py +56 -1
  14. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/commands/connect.py +18 -1
  15. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/commands/harness/run_history.py +25 -1
  16. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/commands/serve.py +86 -1
  17. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/__init__.py +12 -0
  18. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/backends/uhp.py +6 -1
  19. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/uhp_adapter.py +35 -1
  20. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/uhp_client.py +219 -7
  21. superqode-2.2.2/src/superqode/harness/uhp_server.py +1125 -0
  22. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/widgets/a2a_connect.py +9 -0
  23. {superqode-2.2.0 → superqode-2.2.2}/src/superqode.egg-info/PKG-INFO +35 -3
  24. {superqode-2.2.0 → superqode-2.2.2}/src/superqode.egg-info/SOURCES.txt +6 -0
  25. {superqode-2.2.0 → superqode-2.2.2}/tests/test_a2a_bridge.py +88 -0
  26. {superqode-2.2.0 → superqode-2.2.2}/tests/test_a2a_connect.py +21 -0
  27. superqode-2.2.2/tests/test_a2a_context.py +69 -0
  28. superqode-2.2.2/tests/test_a2a_trust.py +125 -0
  29. {superqode-2.2.0 → superqode-2.2.2}/tests/test_cli_contract.py +7 -2
  30. {superqode-2.2.0 → superqode-2.2.2}/tests/test_uhp_client.py +117 -0
  31. superqode-2.2.2/tests/test_uhp_server.py +456 -0
  32. {superqode-2.2.0 → superqode-2.2.2}/LICENSE +0 -0
  33. {superqode-2.2.0 → superqode-2.2.2}/MANIFEST.in +0 -0
  34. {superqode-2.2.0 → superqode-2.2.2}/NOTICE +0 -0
  35. {superqode-2.2.0 → superqode-2.2.2}/examples/README.md +0 -0
  36. {superqode-2.2.0 → superqode-2.2.2}/examples/a2a/README.md +0 -0
  37. {superqode-2.2.0 → superqode-2.2.2}/examples/a2a/smoke_client.py +0 -0
  38. {superqode-2.2.0 → superqode-2.2.2}/examples/bench/dspy-comprehension.manifest.yaml +0 -0
  39. {superqode-2.2.0 → superqode-2.2.2}/examples/bench/dspy-comprehension.yaml +0 -0
  40. {superqode-2.2.0 → superqode-2.2.2}/examples/bench/spec-core.yaml +0 -0
  41. {superqode-2.2.0 → superqode-2.2.2}/examples/bench/spec-deepagents.yaml +0 -0
  42. {superqode-2.2.0 → superqode-2.2.2}/examples/bench/spec-prime-agent.yaml +0 -0
  43. {superqode-2.2.0 → superqode-2.2.2}/examples/byok-acp-team.yaml +0 -0
  44. {superqode-2.2.0 → superqode-2.2.2}/examples/codex_sdk_quickstart.py +0 -0
  45. {superqode-2.2.0 → superqode-2.2.2}/examples/evals/omni-release.yaml +0 -0
  46. {superqode-2.2.0 → superqode-2.2.2}/examples/evals/omni-tiny.yaml +0 -0
  47. {superqode-2.2.0 → superqode-2.2.2}/examples/extensions/README.md +0 -0
  48. {superqode-2.2.0 → superqode-2.2.2}/examples/extensions/manifest-guard/context.md +0 -0
  49. {superqode-2.2.0 → superqode-2.2.2}/examples/extensions/manifest-guard/hooks.py +0 -0
  50. {superqode-2.2.0 → superqode-2.2.2}/examples/extensions/manifest-guard/tools.py +0 -0
  51. {superqode-2.2.0 → superqode-2.2.2}/examples/extensions/packages/README.md +0 -0
  52. {superqode-2.2.0 → superqode-2.2.2}/examples/extensions/packages/broken-extension/src/superqode_example_broken/__init__.py +0 -0
  53. {superqode-2.2.0 → superqode-2.2.2}/examples/extensions/packages/policy-extension/src/superqode_example_policy/__init__.py +0 -0
  54. {superqode-2.2.0 → superqode-2.2.2}/examples/extensions/packages/skill-extension/src/superqode_example_skill/SKILL.md +0 -0
  55. {superqode-2.2.0 → superqode-2.2.2}/examples/extensions/packages/skill-extension/src/superqode_example_skill/__init__.py +0 -0
  56. {superqode-2.2.0 → superqode-2.2.2}/examples/extensions/packages/tool-extension/src/superqode_example_tool/__init__.py +0 -0
  57. {superqode-2.2.0 → superqode-2.2.2}/examples/extensions/packages/tool-extension-v2/src/superqode_example_tool/__init__.py +0 -0
  58. {superqode-2.2.0 → superqode-2.2.2}/examples/extensions/python-package/src/superqode_example_extension/__init__.py +0 -0
  59. {superqode-2.2.0 → superqode-2.2.2}/examples/harness-packages/README.md +0 -0
  60. {superqode-2.2.0 → superqode-2.2.2}/examples/harness-packages/hello-harness/src/superqode_hello_harness/__init__.py +0 -0
  61. {superqode-2.2.0 → superqode-2.2.2}/examples/harnesses/coding.yaml +0 -0
  62. {superqode-2.2.0 → superqode-2.2.2}/examples/harnesses/deepagents.yaml +0 -0
  63. {superqode-2.2.0 → superqode-2.2.2}/examples/harnesses/deepseek-harness.yaml +0 -0
  64. {superqode-2.2.0 → superqode-2.2.2}/examples/harnesses/ds4.yaml +0 -0
  65. {superqode-2.2.0 → superqode-2.2.2}/examples/harnesses/gemma4.yaml +0 -0
  66. {superqode-2.2.0 → superqode-2.2.2}/examples/harnesses/google-adk.yaml +0 -0
  67. {superqode-2.2.0 → superqode-2.2.2}/examples/harnesses/local-recursive-dynamic.yaml +0 -0
  68. {superqode-2.2.0 → superqode-2.2.2}/examples/harnesses/mcp-docs.yaml +0 -0
  69. {superqode-2.2.0 → superqode-2.2.2}/examples/harnesses/no-tool.yaml +0 -0
  70. {superqode-2.2.0 → superqode-2.2.2}/examples/harnesses/omni-tiny-local.yaml +0 -0
  71. {superqode-2.2.0 → superqode-2.2.2}/examples/harnesses/omnigent-multi-agent.yaml +0 -0
  72. {superqode-2.2.0 → superqode-2.2.2}/examples/harnesses/openai-agents.yaml +0 -0
  73. {superqode-2.2.0 → superqode-2.2.2}/examples/harnesses/prime-agent.yaml +0 -0
  74. {superqode-2.2.0 → superqode-2.2.2}/examples/harnesses/pydanticai.yaml +0 -0
  75. {superqode-2.2.0 → superqode-2.2.2}/examples/harnesses/rlm-code-lid.yaml +0 -0
  76. {superqode-2.2.0 → superqode-2.2.2}/examples/local-models-team.yaml +0 -0
  77. {superqode-2.2.0 → superqode-2.2.2}/examples/mcp/local_docs_server.py +0 -0
  78. {superqode-2.2.0 → superqode-2.2.2}/examples/omnigent-multi-agent.agent.yaml +0 -0
  79. {superqode-2.2.0 → superqode-2.2.2}/examples/qm-deployment-layer/README.md +0 -0
  80. {superqode-2.2.0 → superqode-2.2.2}/examples/qm-deployment-layer/sandbox/skills/superqode-harness/SKILL.md +0 -0
  81. {superqode-2.2.0 → superqode-2.2.2}/examples/rlm-demo/INCIDENT.md +0 -0
  82. {superqode-2.2.0 → superqode-2.2.2}/examples/rlm-demo/README.md +0 -0
  83. {superqode-2.2.0 → superqode-2.2.2}/examples/rlm-demo/RUNBOOK.md +0 -0
  84. {superqode-2.2.0 → superqode-2.2.2}/examples/rlm-demo/deploy_audit/__init__.py +0 -0
  85. {superqode-2.2.0 → superqode-2.2.2}/examples/rlm-demo/deploy_audit/parser.py +0 -0
  86. {superqode-2.2.0 → superqode-2.2.2}/examples/rlm-demo/deploy_audit/report.py +0 -0
  87. {superqode-2.2.0 → superqode-2.2.2}/examples/rlm-demo/rlm-docker.yaml +0 -0
  88. {superqode-2.2.0 → superqode-2.2.2}/examples/rlm-demo/rlm-monty.yaml +0 -0
  89. {superqode-2.2.0 → superqode-2.2.2}/examples/rlm-demo/tests/test_report.py +0 -0
  90. {superqode-2.2.0 → superqode-2.2.2}/examples/simple-team.yaml +0 -0
  91. {superqode-2.2.0 → superqode-2.2.2}/scripts/check_release_metadata.py +0 -0
  92. {superqode-2.2.0 → superqode-2.2.2}/setup.cfg +0 -0
  93. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/a2a/__init__.py +0 -0
  94. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/a2a/connection.py +0 -0
  95. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/a2a/keys.py +0 -0
  96. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/a2a/limits.py +0 -0
  97. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/a2a/oauth.py +0 -0
  98. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/a2a/presets.py +0 -0
  99. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/a2a/registry.py +0 -0
  100. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/a2a/reply.py +0 -0
  101. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/a2a/security.py +0 -0
  102. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/a2a/shortlist.py +0 -0
  103. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/a2a/skills.py +0 -0
  104. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/a2a/tools.py +0 -0
  105. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/a2a/types.py +0 -0
  106. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/a2a/understand.py +0 -0
  107. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/a2a/workflows.py +0 -0
  108. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/acp/__init__.py +0 -0
  109. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/acp/client.py +0 -0
  110. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/acp/doctor.py +0 -0
  111. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/acp/permission_screen.py +0 -0
  112. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/acp/permission_store.py +0 -0
  113. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/acp/render.py +0 -0
  114. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/acp/server.py +0 -0
  115. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/acp/session_store.py +0 -0
  116. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/acp/slash.py +0 -0
  117. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/acp/tool_call_context.py +0 -0
  118. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/acp/types.py +0 -0
  119. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/acp_discovery.py +0 -0
  120. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agent/__init__.py +0 -0
  121. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agent/auto_memory.py +0 -0
  122. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agent/command_safety.py +0 -0
  123. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agent/compaction.py +0 -0
  124. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agent/context_manager.py +0 -0
  125. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agent/edit_strategies.py +0 -0
  126. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agent/exec_policy.py +0 -0
  127. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agent/hooks.py +0 -0
  128. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agent/loop.py +0 -0
  129. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agent/loop_guard.py +0 -0
  130. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agent/loop_policy.py +0 -0
  131. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agent/network_policy.py +0 -0
  132. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agent/output_handler.py +0 -0
  133. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agent/parallel_compare.py +0 -0
  134. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agent/peer_agents.py +0 -0
  135. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agent/plan_mode.py +0 -0
  136. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agent/reminders.py +0 -0
  137. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agent/rubric.py +0 -0
  138. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agent/session_manager.py +0 -0
  139. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agent/structured_output.py +0 -0
  140. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agent/summarization.py +0 -0
  141. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agent/system_prompts.py +0 -0
  142. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agent/terminal_output_limits.py +0 -0
  143. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agent/text_tool_calls.py +0 -0
  144. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agent/tool_args.py +0 -0
  145. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agent/tool_tracking.py +0 -0
  146. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agent/utility_model.py +0 -0
  147. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agent_output.py +0 -0
  148. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agent_stream.py +0 -0
  149. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agents/__init__.py +0 -0
  150. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agents/acp_registry.py +0 -0
  151. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agents/client.py +0 -0
  152. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agents/data/agentpool.phil65.github.io.toml +0 -0
  153. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agents/data/ampcode.com.toml +0 -0
  154. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agents/data/augmentcode.com.toml +0 -0
  155. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agents/data/autodev.github.io.toml +0 -0
  156. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agents/data/blackbox.ai.toml +0 -0
  157. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agents/data/bub.dev.toml +0 -0
  158. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agents/data/cagent.dev.toml +0 -0
  159. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agents/data/claude.com.toml +0 -0
  160. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agents/data/cline.bot.toml +0 -0
  161. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agents/data/codeassistant.dev.toml +0 -0
  162. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agents/data/codebuddy.tencent.com.toml +0 -0
  163. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agents/data/codex.openai.com.toml +0 -0
  164. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agents/data/copilot.github.com.toml +0 -0
  165. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agents/data/cortex.snowflake.com.toml +0 -0
  166. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agents/data/crow-ai.dev.toml +0 -0
  167. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agents/data/cursor.com.toml +0 -0
  168. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agents/data/deepagents-code.langchain.com.toml +0 -0
  169. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agents/data/deepagents.langchain.com.toml +0 -0
  170. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agents/data/devin.ai.toml +0 -0
  171. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agents/data/dirac.run.toml +0 -0
  172. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agents/data/factory.ai.toml +0 -0
  173. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agents/data/fastagent.ai.toml +0 -0
  174. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agents/data/fount.dev.toml +0 -0
  175. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agents/data/fx.sh.toml +0 -0
  176. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agents/data/geminicli.com.toml +0 -0
  177. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agents/data/glm.z.ai.toml +0 -0
  178. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agents/data/goose.block.xyz.toml +0 -0
  179. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agents/data/harnlang.com.toml +0 -0
  180. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agents/data/hermes-agent.nousresearch.com.toml +0 -0
  181. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agents/data/junie.jetbrains.com.toml +0 -0
  182. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agents/data/kilo.ai.toml +0 -0
  183. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agents/data/kimi.moonshot.cn.toml +0 -0
  184. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agents/data/kiro.dev.toml +0 -0
  185. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agents/data/llmlingagent.dev.toml +0 -0
  186. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agents/data/minioncode.dev.toml +0 -0
  187. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agents/data/mistral-vibe.mistral.ai.toml +0 -0
  188. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agents/data/openclaw.ai.toml +0 -0
  189. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agents/data/opencode.ai.toml +0 -0
  190. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agents/data/openhands.dev.toml +0 -0
  191. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agents/data/pi.dev.toml +0 -0
  192. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agents/data/poolside.ai.toml +0 -0
  193. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agents/data/primeintellect.ai.toml +0 -0
  194. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agents/data/qoder.com.toml +0 -0
  195. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agents/data/qwenlm.github.io.toml +0 -0
  196. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agents/data/sigit.dev.toml +0 -0
  197. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agents/data/stakpak.dev.toml +0 -0
  198. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agents/data/stdiobus.dev.toml +0 -0
  199. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agents/data/vtcode.dev.toml +0 -0
  200. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agents/data/x.ai.toml +0 -0
  201. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agents/discovery.py +0 -0
  202. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agents/free_models.py +0 -0
  203. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agents/install_commands.py +0 -0
  204. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agents/messaging.py +0 -0
  205. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agents/official_acp.py +0 -0
  206. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agents/persona.py +0 -0
  207. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agents/registry.py +0 -0
  208. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agents/schema.py +0 -0
  209. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/agents/unified.py +0 -0
  210. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app/__init__.py +0 -0
  211. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app/async_utils.py +0 -0
  212. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app/capabilities.py +0 -0
  213. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app/css.py +0 -0
  214. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app/harness_picker.py +0 -0
  215. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app/inputs.py +0 -0
  216. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app/mixins/__init__.py +0 -0
  217. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app/mixins/actions_misc.py +0 -0
  218. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app/mixins/agent_run.py +0 -0
  219. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app/mixins/build_harness.py +0 -0
  220. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app/mixins/clickable_commands.py +0 -0
  221. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app/mixins/codex.py +0 -0
  222. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app/mixins/commands_impl.py +0 -0
  223. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app/mixins/completion.py +0 -0
  224. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app/mixins/connect.py +0 -0
  225. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app/mixins/dialogs.py +0 -0
  226. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app/mixins/events.py +0 -0
  227. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app/mixins/explore.py +0 -0
  228. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app/mixins/factory.py +0 -0
  229. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app/mixins/feedback.py +0 -0
  230. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app/mixins/formatting.py +0 -0
  231. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app/mixins/harness_hub.py +0 -0
  232. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app/mixins/helper_clipboard.py +0 -0
  233. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app/mixins/helper_completion_helpers.py +0 -0
  234. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app/mixins/helper_diff_review.py +0 -0
  235. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app/mixins/helper_exit_lifecycle.py +0 -0
  236. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app/mixins/helper_file_view.py +0 -0
  237. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app/mixins/helper_interaction_mode.py +0 -0
  238. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app/mixins/helper_mcp_attach.py +0 -0
  239. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app/mixins/helper_message_queue.py +0 -0
  240. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app/mixins/helper_permissions.py +0 -0
  241. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app/mixins/helper_recipes_skills.py +0 -0
  242. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app/mixins/helper_share.py +0 -0
  243. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app/mixins/helper_startup.py +0 -0
  244. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app/mixins/helper_todos_plan.py +0 -0
  245. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app/mixins/helper_vim.py +0 -0
  246. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app/mixins/helper_wizard.py +0 -0
  247. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app/mixins/helpers.py +0 -0
  248. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app/mixins/huggingface.py +0 -0
  249. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app/mixins/local_models.py +0 -0
  250. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app/mixins/mcp.py +0 -0
  251. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app/mixins/model_catalog.py +0 -0
  252. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app/mixins/pickers.py +0 -0
  253. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app/mixins/pipy_commands.py +0 -0
  254. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app/mixins/rlm_commands.py +0 -0
  255. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app/mixins/sidebar.py +0 -0
  256. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app/mixins/slash_commands.py +0 -0
  257. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app/mixins/switchboard.py +0 -0
  258. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app/mixins/tour.py +0 -0
  259. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app/models.py +0 -0
  260. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app/navigation.py +0 -0
  261. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app/outcomes.py +0 -0
  262. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app/progress.py +0 -0
  263. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app/prompt_stack.py +0 -0
  264. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app/recipes.py +0 -0
  265. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app/session_state.py +0 -0
  266. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app/suggester.py +0 -0
  267. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app/theme_bridge.py +0 -0
  268. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app/welcome.py +0 -0
  269. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app/widgets.py +0 -0
  270. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app_enhanced.py +0 -0
  271. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/app_main.py +0 -0
  272. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/approval.py +0 -0
  273. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/atomic.py +0 -0
  274. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/auth/__init__.py +0 -0
  275. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/benchmarks.py +0 -0
  276. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/channels/__init__.py +0 -0
  277. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/channels/config.py +0 -0
  278. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/channels/discord.py +0 -0
  279. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/channels/service.py +0 -0
  280. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/channels/slack.py +0 -0
  281. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/channels/telegram.py +0 -0
  282. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/claude.py +0 -0
  283. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/codex.py +0 -0
  284. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/commands/__init__.py +0 -0
  285. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/commands/a2a.py +0 -0
  286. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/commands/a2a_keys.py +0 -0
  287. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/commands/acp.py +0 -0
  288. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/commands/agents.py +0 -0
  289. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/commands/auth.py +0 -0
  290. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/commands/benchmark.py +0 -0
  291. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/commands/config.py +0 -0
  292. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/commands/daemon.py +0 -0
  293. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/commands/factory.py +0 -0
  294. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/commands/gauge.py +0 -0
  295. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/commands/harness/__init__.py +0 -0
  296. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/commands/harness/_group.py +0 -0
  297. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/commands/harness/_helpers.py +0 -0
  298. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/commands/harness/bench.py +0 -0
  299. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/commands/harness/candidates.py +0 -0
  300. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/commands/harness/evaluation.py +0 -0
  301. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/commands/harness/evidence.py +0 -0
  302. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/commands/harness/inbox.py +0 -0
  303. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/commands/harness/lifecycle.py +0 -0
  304. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/commands/harness/logbook.py +0 -0
  305. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/commands/harness/observability.py +0 -0
  306. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/commands/harness/optimization.py +0 -0
  307. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/commands/harness/promotion.py +0 -0
  308. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/commands/harness/protocol.py +0 -0
  309. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/commands/harness/registry.py +0 -0
  310. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/commands/harness/replay.py +0 -0
  311. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/commands/harness/worker.py +0 -0
  312. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/commands/hub.py +0 -0
  313. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/commands/local.py +0 -0
  314. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/commands/memory.py +0 -0
  315. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/commands/models.py +0 -0
  316. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/commands/plugins.py +0 -0
  317. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/commands/policy.py +0 -0
  318. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/commands/profiles.py +0 -0
  319. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/commands/providers.py +0 -0
  320. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/commands/runtime.py +0 -0
  321. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/commands/sandbox.py +0 -0
  322. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/commands/sessions.py +0 -0
  323. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/commands/share.py +0 -0
  324. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/commands/skillopt.py +0 -0
  325. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/commands/skills.py +0 -0
  326. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/commands/tools.py +0 -0
  327. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/commands/trust.py +0 -0
  328. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/commands/uhp.py +0 -0
  329. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/commands/update.py +0 -0
  330. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/commands/work.py +0 -0
  331. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/config/__init__.py +0 -0
  332. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/config/loader.py +0 -0
  333. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/config/schema.py +0 -0
  334. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/core/__init__.py +0 -0
  335. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/danger.py +0 -0
  336. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/data/eval_fixtures/ci-dynamic-root-cause.log +0 -0
  337. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/data/eval_fixtures/ci-root-cause.log +0 -0
  338. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/data/eval_packs/local_dynamic_workflow_smoke.yaml +0 -0
  339. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/data/eval_packs/local_recursive_smoke.yaml +0 -0
  340. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/data/superqode-template.yaml +0 -0
  341. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/design_system.py +0 -0
  342. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/dialogs/__init__.py +0 -0
  343. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/dialogs/base.py +0 -0
  344. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/dialogs/model.py +0 -0
  345. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/dialogs/provider.py +0 -0
  346. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/dialogs/runtime.py +0 -0
  347. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/diff_view.py +0 -0
  348. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/enterprise.py +0 -0
  349. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/evaluation/__init__.py +0 -0
  350. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/evaluation/adapters.py +0 -0
  351. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/evaluation/behaviors.py +0 -0
  352. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/evaluation/engine.py +0 -0
  353. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/evaluation/scenarios.py +0 -0
  354. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/execution/__init__.py +0 -0
  355. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/execution/linter.py +0 -0
  356. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/execution/modes.py +0 -0
  357. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/execution/resolver.py +0 -0
  358. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/execution/runner.py +0 -0
  359. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/extensions.py +0 -0
  360. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/file_explorer.py +0 -0
  361. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/file_viewer.py +0 -0
  362. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/flash.py +0 -0
  363. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/gauge/__init__.py +0 -0
  364. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/gauge/levels.py +0 -0
  365. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/gauge/record.py +0 -0
  366. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/gauge/sources.py +0 -0
  367. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/governance.py +0 -0
  368. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/accelerator.py +0 -0
  369. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/agent_importer.py +0 -0
  370. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/approval_memory.py +0 -0
  371. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/backends/__init__.py +0 -0
  372. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/backends/base.py +0 -0
  373. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/backends/deepagents.py +0 -0
  374. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/backends/dsh.py +0 -0
  375. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/backends/managed.py +0 -0
  376. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/backends/pipy.py +0 -0
  377. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/backends/prime_agent.py +0 -0
  378. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/backends/pydanticai.py +0 -0
  379. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/backends/registry.py +0 -0
  380. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/backends/rlm.py +0 -0
  381. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/backends/rlm_code.py +0 -0
  382. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/backends/runtime.py +0 -0
  383. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/backends/tau.py +0 -0
  384. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/bench.py +0 -0
  385. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/catalog.py +0 -0
  386. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/compiler.py +0 -0
  387. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/conformance.py +0 -0
  388. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/context_handles.py +0 -0
  389. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/diagnostics.py +0 -0
  390. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/discovery.py +0 -0
  391. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/drift.py +0 -0
  392. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/eval.py +0 -0
  393. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/events.py +0 -0
  394. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/explain.py +0 -0
  395. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/hooks.py +0 -0
  396. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/hub.py +0 -0
  397. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/kernel.py +0 -0
  398. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/loader.py +0 -0
  399. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/mcp_bridge.py +0 -0
  400. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/model_policy.py +0 -0
  401. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/model_routes.py +0 -0
  402. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/observability.py +0 -0
  403. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/omni.py +0 -0
  404. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/omnigent_importer.py +0 -0
  405. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/optimize.py +0 -0
  406. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/output.py +0 -0
  407. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/permissions.py +0 -0
  408. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/pipy_adapter.py +0 -0
  409. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/pipy_extensions.py +0 -0
  410. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/promotion.py +0 -0
  411. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/protocol.py +0 -0
  412. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/protocol_adapters.py +0 -0
  413. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/protocol_controller.py +0 -0
  414. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/registry.py +0 -0
  415. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/rlm_adapter.py +0 -0
  416. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/rlm_code_adapter.py +0 -0
  417. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/sandbox.py +0 -0
  418. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/self_improve.py +0 -0
  419. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/spec.py +0 -0
  420. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/store.py +0 -0
  421. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/tau_adapter.py +0 -0
  422. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/tau_management.py +0 -0
  423. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/templates.py +0 -0
  424. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/testing.py +0 -0
  425. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/wizard.py +0 -0
  426. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/workflow.py +0 -0
  427. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/harness/workflow_presets.py +0 -0
  428. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/headless.py +0 -0
  429. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/history.py +0 -0
  430. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/local/__init__.py +0 -0
  431. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/local/airplane.py +0 -0
  432. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/local/bench.py +0 -0
  433. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/local/build.py +0 -0
  434. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/local/code_index.py +0 -0
  435. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/local/data/model-packs/devstral.yaml +0 -0
  436. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/local/data/model-packs/ds4.yaml +0 -0
  437. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/local/data/model-packs/gemma4.yaml +0 -0
  438. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/local/data/model-packs/glm.yaml +0 -0
  439. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/local/data/model-packs/gpt-oss.yaml +0 -0
  440. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/local/data/model-packs/kimi.yaml +0 -0
  441. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/local/data/model-packs/laguna.yaml +0 -0
  442. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/local/data/model-packs/minimax.yaml +0 -0
  443. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/local/data/model-packs/qwen-coder.yaml +0 -0
  444. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/local/data/model-packs/qwen3.yaml +0 -0
  445. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/local/data/stack_matrix.yaml +0 -0
  446. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/local/doctor.py +0 -0
  447. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/local/engines.py +0 -0
  448. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/local/guardrails.py +0 -0
  449. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/local/hardware.py +0 -0
  450. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/local/inventory.py +0 -0
  451. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/local/labs.py +0 -0
  452. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/local/laguna.py +0 -0
  453. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/local/matrix.py +0 -0
  454. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/local/migrate.py +0 -0
  455. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/local/optimize.py +0 -0
  456. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/local/packs.py +0 -0
  457. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/local/repo.py +0 -0
  458. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/local/servers.py +0 -0
  459. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/local/setup.py +0 -0
  460. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/local/smoke.py +0 -0
  461. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/logging/__init__.py +0 -0
  462. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/logging/adapters.py +0 -0
  463. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/logging/formatter.py +0 -0
  464. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/logging/integration.py +0 -0
  465. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/logging/sinks.py +0 -0
  466. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/logging/unified_log.py +0 -0
  467. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/lsp/__init__.py +0 -0
  468. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/lsp/client.py +0 -0
  469. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/main.py +0 -0
  470. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/mcp/__init__.py +0 -0
  471. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/mcp/auth_storage.py +0 -0
  472. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/mcp/client.py +0 -0
  473. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/mcp/config.py +0 -0
  474. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/mcp/elicitation.py +0 -0
  475. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/mcp/harness_server.py +0 -0
  476. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/mcp/hf_auth.py +0 -0
  477. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/mcp/integration.py +0 -0
  478. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/mcp/oauth.py +0 -0
  479. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/mcp/oauth_callback.py +0 -0
  480. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/mcp/sampling.py +0 -0
  481. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/mcp/search.py +0 -0
  482. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/mcp/types.py +0 -0
  483. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/memory/__init__.py +0 -0
  484. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/memory/config.py +0 -0
  485. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/memory/providers.py +0 -0
  486. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/memory/types.py +0 -0
  487. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/notifications.py +0 -0
  488. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/permissions/__init__.py +0 -0
  489. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/permissions/rules.py +0 -0
  490. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/pipy/__init__.py +0 -0
  491. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/pipy/ai/__init__.py +0 -0
  492. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/pipy/ai/fake.py +0 -0
  493. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/pipy/ai/gateway.py +0 -0
  494. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/pipy/ai/models.py +0 -0
  495. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/pipy/ai/transform.py +0 -0
  496. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/pipy/coding_session.py +0 -0
  497. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/pipy/compaction.py +0 -0
  498. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/pipy/config.py +0 -0
  499. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/pipy/event_stream.py +0 -0
  500. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/pipy/events.py +0 -0
  501. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/pipy/harness.py +0 -0
  502. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/pipy/harness_events.py +0 -0
  503. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/pipy/loop.py +0 -0
  504. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/pipy/messages.py +0 -0
  505. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/pipy/permissions.py +0 -0
  506. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/pipy/prompt_templates.py +0 -0
  507. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/pipy/provider_events.py +0 -0
  508. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/pipy/resources.py +0 -0
  509. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/pipy/session/__init__.py +0 -0
  510. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/pipy/session/codec.py +0 -0
  511. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/pipy/session/entries.py +0 -0
  512. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/pipy/session/jsonl.py +0 -0
  513. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/pipy/session/memory.py +0 -0
  514. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/pipy/session/repository.py +0 -0
  515. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/pipy/session/session.py +0 -0
  516. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/pipy/session/storage.py +0 -0
  517. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/pipy/signals.py +0 -0
  518. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/pipy/skills.py +0 -0
  519. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/pipy/stream.py +0 -0
  520. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/pipy/system_prompt.py +0 -0
  521. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/pipy/tools/__init__.py +0 -0
  522. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/pipy/tools/base.py +0 -0
  523. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/pipy/tools/edit_diff.py +0 -0
  524. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/pipy/tools/files.py +0 -0
  525. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/pipy/tools/paths.py +0 -0
  526. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/pipy/tools/registry.py +0 -0
  527. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/pipy/tools/search.py +0 -0
  528. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/pipy/tools/shell.py +0 -0
  529. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/pipy/tools/truncate.py +0 -0
  530. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/pipy/types.py +0 -0
  531. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/pipy/validation.py +0 -0
  532. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/plan.py +0 -0
  533. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/platform_locks.py +0 -0
  534. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/plugins.py +0 -0
  535. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/project_trust.py +0 -0
  536. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/__init__.py +0 -0
  537. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/_builtin_profiles.py +0 -0
  538. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/acp_free_models.py +0 -0
  539. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/acp_models.py +0 -0
  540. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/acp_registry.py +0 -0
  541. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/apple_fm.py +0 -0
  542. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/catalog.py +0 -0
  543. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/connection_profiles.py +0 -0
  544. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/copilot_auth.py +0 -0
  545. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/credentials.py +0 -0
  546. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/dynamic.py +0 -0
  547. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/env_introspect.py +0 -0
  548. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/free_inference.py +0 -0
  549. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/gateway/__init__.py +0 -0
  550. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/gateway/base.py +0 -0
  551. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/gateway/litellm_gateway.py +0 -0
  552. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/gateway/openresponses_gateway.py +0 -0
  553. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/gateway/synthetic.py +0 -0
  554. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/grok_cli_auth.py +0 -0
  555. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/harness_catalog.py +0 -0
  556. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/health.py +0 -0
  557. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/huggingface/__init__.py +0 -0
  558. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/huggingface/convert.py +0 -0
  559. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/huggingface/downloader.py +0 -0
  560. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/huggingface/endpoints.py +0 -0
  561. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/huggingface/fetch.py +0 -0
  562. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/huggingface/hub.py +0 -0
  563. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/huggingface/inference.py +0 -0
  564. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/huggingface/transformers_runner.py +0 -0
  565. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/live_models.py +0 -0
  566. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/local/__init__.py +0 -0
  567. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/local/_mlx_worker.py +0 -0
  568. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/local/base.py +0 -0
  569. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/local/capabilities.py +0 -0
  570. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/local/context_probe.py +0 -0
  571. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/local/discovery.py +0 -0
  572. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/local/ds4.py +0 -0
  573. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/local/lmstudio.py +0 -0
  574. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/local/mlx.py +0 -0
  575. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/local/mlx_engine.py +0 -0
  576. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/local/mlx_tools.py +0 -0
  577. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/local/ollama.py +0 -0
  578. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/local/sglang.py +0 -0
  579. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/local/smoke.py +0 -0
  580. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/local/tgi.py +0 -0
  581. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/local/tool_support.py +0 -0
  582. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/local/vllm.py +0 -0
  583. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/manager.py +0 -0
  584. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/model_specs.py +0 -0
  585. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/models.py +0 -0
  586. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/models_dev.py +0 -0
  587. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/opencode_models.py +0 -0
  588. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/openresponses/__init__.py +0 -0
  589. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/openresponses/converters/__init__.py +0 -0
  590. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/openresponses/converters/messages.py +0 -0
  591. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/openresponses/converters/tools.py +0 -0
  592. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/openresponses/schema/__init__.py +0 -0
  593. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/openresponses/schema/models.py +0 -0
  594. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/openresponses/streaming/__init__.py +0 -0
  595. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/openresponses/streaming/parser.py +0 -0
  596. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/openresponses/tools/__init__.py +0 -0
  597. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/openresponses/tools/apply_patch.py +0 -0
  598. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/openresponses/tools/code_interpreter.py +0 -0
  599. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/openresponses/tools/file_search.py +0 -0
  600. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/openresponses/tools/mcp_adapter.py +0 -0
  601. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/prime_agent.py +0 -0
  602. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/profiles.py +0 -0
  603. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/recommendations.py +0 -0
  604. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/registry.py +0 -0
  605. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/subscription_env.py +0 -0
  606. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/subscription_login.py +0 -0
  607. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/uhp.py +0 -0
  608. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/providers/usage.py +0 -0
  609. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/pure_mode.py +0 -0
  610. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/py.typed +0 -0
  611. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/rendering/__init__.py +0 -0
  612. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/rendering/html_export.py +0 -0
  613. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/rendering/markdown.py +0 -0
  614. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/rendering/transcript_export.py +0 -0
  615. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/rlm/__init__.py +0 -0
  616. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/rlm/coding_session.py +0 -0
  617. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/rlm/config.py +0 -0
  618. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/rlm/context.py +0 -0
  619. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/rlm/identity.py +0 -0
  620. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/rlm/kernel.py +0 -0
  621. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/rlm/kernel_backend.py +0 -0
  622. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/rlm/kernel_docker.py +0 -0
  623. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/rlm/kernel_monty.py +0 -0
  624. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/rlm/kernel_server.py +0 -0
  625. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/rlm/policy.py +0 -0
  626. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/rlm/root_runtime.py +0 -0
  627. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/rlm/root_worker.py +0 -0
  628. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/rlm/sandbox.py +0 -0
  629. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/rlm/subcalls.py +0 -0
  630. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/rlm/supervisor.py +0 -0
  631. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/rlm/worker.py +0 -0
  632. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/rlm/worker_process.py +0 -0
  633. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/runtime/__init__.py +0 -0
  634. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/runtime/adk.py +0 -0
  635. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/runtime/antigravity_cli.py +0 -0
  636. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/runtime/antigravity_managed.py +0 -0
  637. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/runtime/antigravity_sdk.py +0 -0
  638. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/runtime/antigravity_status.py +0 -0
  639. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/runtime/base.py +0 -0
  640. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/runtime/builtin.py +0 -0
  641. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/runtime/claude_agent_sdk.py +0 -0
  642. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/runtime/codex_sdk.py +0 -0
  643. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/runtime/copilot_sdk.py +0 -0
  644. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/runtime/devin_cli.py +0 -0
  645. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/runtime/devin_status.py +0 -0
  646. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/runtime/errors.py +0 -0
  647. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/runtime/openai_agents.py +0 -0
  648. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/runtime/openai_sandbox.py +0 -0
  649. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/runtime/openai_session.py +0 -0
  650. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/runtime/pydanticai.py +0 -0
  651. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/runtime/registry.py +0 -0
  652. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/runtime/tool_bridge.py +0 -0
  653. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/runtime/tool_bridge_openai.py +0 -0
  654. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/runtime/tool_bridge_pydanticai.py +0 -0
  655. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/runtime/vendor_cli.py +0 -0
  656. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/safety/__init__.py +0 -0
  657. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/safety/sandbox.py +0 -0
  658. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/safety/warnings.py +0 -0
  659. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/sandbox/__init__.py +0 -0
  660. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/sandbox/backends.py +0 -0
  661. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/sandbox/execution.py +0 -0
  662. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/sandbox/local_sandbox.py +0 -0
  663. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/search_registry.py +0 -0
  664. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/server/__init__.py +0 -0
  665. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/server/api.py +0 -0
  666. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/server/web.py +0 -0
  667. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/session/__init__.py +0 -0
  668. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/session/factory.py +0 -0
  669. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/session/persistence.py +0 -0
  670. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/session/share_artifacts.py +0 -0
  671. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/session/sharing.py +0 -0
  672. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/session/switchboard.py +0 -0
  673. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/session.py +0 -0
  674. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/sidebar.py +0 -0
  675. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/skillopt.py +0 -0
  676. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/skills.py +0 -0
  677. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/stream_view.py +0 -0
  678. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/styles/__init__.py +0 -0
  679. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/tool_call.py +0 -0
  680. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/tools/__init__.py +0 -0
  681. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/tools/agent_tools.py +0 -0
  682. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/tools/apply_patch.py +0 -0
  683. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/tools/base.py +0 -0
  684. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/tools/batch_tool.py +0 -0
  685. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/tools/compact_tool.py +0 -0
  686. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/tools/context_handle.py +0 -0
  687. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/tools/context_tools.py +0 -0
  688. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/tools/core_tools.py +0 -0
  689. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/tools/diagnostics.py +0 -0
  690. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/tools/diff_utils.py +0 -0
  691. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/tools/display.py +0 -0
  692. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/tools/dynamic_workflow.py +0 -0
  693. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/tools/edit_tools.py +0 -0
  694. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/tools/enhanced_base.py +0 -0
  695. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/tools/env_policy.py +0 -0
  696. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/tools/file_tools.py +0 -0
  697. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/tools/file_tracking.py +0 -0
  698. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/tools/governed.py +0 -0
  699. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/tools/harness_agent_session.py +0 -0
  700. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/tools/image_tools.py +0 -0
  701. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/tools/lsp_tools.py +0 -0
  702. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/tools/mcp_tools.py +0 -0
  703. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/tools/monty_tool.py +0 -0
  704. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/tools/network_tools.py +0 -0
  705. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/tools/output_spill.py +0 -0
  706. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/tools/peer_agent_tools.py +0 -0
  707. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/tools/permissions.py +0 -0
  708. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/tools/post_edit.py +0 -0
  709. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/tools/question_tool.py +0 -0
  710. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/tools/request_permissions_tool.py +0 -0
  711. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/tools/search_tools.py +0 -0
  712. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/tools/semantic_search.py +0 -0
  713. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/tools/shell_session.py +0 -0
  714. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/tools/shell_tools.py +0 -0
  715. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/tools/skill_tools.py +0 -0
  716. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/tools/spawn_harness.py +0 -0
  717. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/tools/todo_tools.py +0 -0
  718. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/tools/tool_search.py +0 -0
  719. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/tools/validation.py +0 -0
  720. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/tools/web_tools.py +0 -0
  721. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/tui_integration.py +0 -0
  722. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/tui_widgets/__init__.py +0 -0
  723. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/tui_widgets/widgets/__init__.py +0 -0
  724. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/tui_widgets/widgets/progress.py +0 -0
  725. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/tui_widgets/widgets/tool_display.py +0 -0
  726. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/undo_manager.py +0 -0
  727. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/utils/__init__.py +0 -0
  728. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/utils/error_handling.py +0 -0
  729. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/utils/fuzzy.py +0 -0
  730. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/widgets/__init__.py +0 -0
  731. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/widgets/agent_store.py +0 -0
  732. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/widgets/agent_switcher.py +0 -0
  733. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/widgets/animation_manager.py +0 -0
  734. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/widgets/code_context.py +0 -0
  735. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/widgets/command_palette.py +0 -0
  736. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/widgets/connection_status.py +0 -0
  737. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/widgets/conversation_history.py +0 -0
  738. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/widgets/diff_indicator.py +0 -0
  739. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/widgets/enhanced_status_bar.py +0 -0
  740. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/widgets/enhanced_toast.py +0 -0
  741. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/widgets/file_browser.py +0 -0
  742. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/widgets/file_reference.py +0 -0
  743. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/widgets/harness_hub.py +0 -0
  744. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/widgets/leader_key.py +0 -0
  745. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/widgets/mode_switcher.py +0 -0
  746. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/widgets/model_picker.py +0 -0
  747. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/widgets/outcome_screen.py +0 -0
  748. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/widgets/permission_preview.py +0 -0
  749. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/widgets/prompt.py +0 -0
  750. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/widgets/provider_connect.py +0 -0
  751. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/widgets/pty_shell.py +0 -0
  752. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/widgets/resizable_sidebar.py +0 -0
  753. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/widgets/response_changes.py +0 -0
  754. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/widgets/response_display.py +0 -0
  755. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/widgets/rewind_overlay.py +0 -0
  756. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/widgets/rich_tool_display.py +0 -0
  757. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/widgets/sidebar_panels.py +0 -0
  758. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/widgets/slash_commands.py +0 -0
  759. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/widgets/slash_complete.py +0 -0
  760. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/widgets/split_view.py +0 -0
  761. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/widgets/status_bar.py +0 -0
  762. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/widgets/superqode_display.py +0 -0
  763. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/widgets/theme_picker.py +0 -0
  764. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/widgets/thinking.py +0 -0
  765. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/widgets/thinking_display.py +0 -0
  766. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/widgets/throbber.py +0 -0
  767. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/widgets/toast.py +0 -0
  768. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/widgets/uhp_connect.py +0 -0
  769. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/widgets/unified_output.py +0 -0
  770. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/workorders/__init__.py +0 -0
  771. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/workorders/cockpit.py +0 -0
  772. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/workorders/integration.py +0 -0
  773. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/workorders/models.py +0 -0
  774. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/workorders/runner.py +0 -0
  775. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/workorders/store.py +0 -0
  776. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/workorders/usage.py +0 -0
  777. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/workorders/worker.py +0 -0
  778. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/workspace/__init__.py +0 -0
  779. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/workspace/artifacts.py +0 -0
  780. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/workspace/change_summary.py +0 -0
  781. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/workspace/coordinator.py +0 -0
  782. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/workspace/diff_tracker.py +0 -0
  783. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/workspace/git_guard.py +0 -0
  784. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/workspace/git_snapshot.py +0 -0
  785. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/workspace/manager.py +0 -0
  786. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/workspace/snapshot.py +0 -0
  787. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/workspace/watcher.py +0 -0
  788. {superqode-2.2.0 → superqode-2.2.2}/src/superqode/workspace/worktree.py +0 -0
  789. {superqode-2.2.0 → superqode-2.2.2}/src/superqode.egg-info/dependency_links.txt +0 -0
  790. {superqode-2.2.0 → superqode-2.2.2}/src/superqode.egg-info/entry_points.txt +0 -0
  791. {superqode-2.2.0 → superqode-2.2.2}/src/superqode.egg-info/requires.txt +0 -0
  792. {superqode-2.2.0 → superqode-2.2.2}/src/superqode.egg-info/top_level.txt +0 -0
  793. {superqode-2.2.0 → superqode-2.2.2}/tests/test_030_candidate.py +0 -0
  794. {superqode-2.2.0 → superqode-2.2.2}/tests/test_a2a_conformance.py +0 -0
  795. {superqode-2.2.0 → superqode-2.2.2}/tests/test_a2a_keys.py +0 -0
  796. {superqode-2.2.0 → superqode-2.2.2}/tests/test_a2a_limits.py +0 -0
  797. {superqode-2.2.0 → superqode-2.2.2}/tests/test_a2a_oauth.py +0 -0
  798. {superqode-2.2.0 → superqode-2.2.2}/tests/test_a2a_security.py +0 -0
  799. {superqode-2.2.0 → superqode-2.2.2}/tests/test_a2a_shortlist.py +0 -0
  800. {superqode-2.2.0 → superqode-2.2.2}/tests/test_a2a_understand.py +0 -0
  801. {superqode-2.2.0 → superqode-2.2.2}/tests/test_acp_agent_dispatch.py +0 -0
  802. {superqode-2.2.0 → superqode-2.2.2}/tests/test_acp_client.py +0 -0
  803. {superqode-2.2.0 → superqode-2.2.2}/tests/test_acp_free_models.py +0 -0
  804. {superqode-2.2.0 → superqode-2.2.2}/tests/test_acp_parent_tool_linking.py +0 -0
  805. {superqode-2.2.0 → superqode-2.2.2}/tests/test_acp_permission_store.py +0 -0
  806. {superqode-2.2.0 → superqode-2.2.2}/tests/test_acp_registry.py +0 -0
  807. {superqode-2.2.0 → superqode-2.2.2}/tests/test_acp_render.py +0 -0
  808. {superqode-2.2.0 → superqode-2.2.2}/tests/test_acp_server.py +0 -0
  809. {superqode-2.2.0 → superqode-2.2.2}/tests/test_acp_session_store.py +0 -0
  810. {superqode-2.2.0 → superqode-2.2.2}/tests/test_acp_slash.py +0 -0
  811. {superqode-2.2.0 → superqode-2.2.2}/tests/test_adaptive_compaction.py +0 -0
  812. {superqode-2.2.0 → superqode-2.2.2}/tests/test_agent_importer.py +0 -0
  813. {superqode-2.2.0 → superqode-2.2.2}/tests/test_agent_install_commands.py +0 -0
  814. {superqode-2.2.0 → superqode-2.2.2}/tests/test_agent_loop_harness.py +0 -0
  815. {superqode-2.2.0 → superqode-2.2.2}/tests/test_agent_memory.py +0 -0
  816. {superqode-2.2.0 → superqode-2.2.2}/tests/test_agents_md_compat.py +0 -0
  817. {superqode-2.2.0 → superqode-2.2.2}/tests/test_agy_tui_commands.py +0 -0
  818. {superqode-2.2.0 → superqode-2.2.2}/tests/test_app_main_contract.py +0 -0
  819. {superqode-2.2.0 → superqode-2.2.2}/tests/test_apply_patch.py +0 -0
  820. {superqode-2.2.0 → superqode-2.2.2}/tests/test_auth.py +0 -0
  821. {superqode-2.2.0 → superqode-2.2.2}/tests/test_bash_spill.py +0 -0
  822. {superqode-2.2.0 → superqode-2.2.2}/tests/test_benchmarks.py +0 -0
  823. {superqode-2.2.0 → superqode-2.2.2}/tests/test_catalog_freshness.py +0 -0
  824. {superqode-2.2.0 → superqode-2.2.2}/tests/test_change_summary.py +0 -0
  825. {superqode-2.2.0 → superqode-2.2.2}/tests/test_channels.py +0 -0
  826. {superqode-2.2.0 → superqode-2.2.2}/tests/test_cli_commands.py +0 -0
  827. {superqode-2.2.0 → superqode-2.2.2}/tests/test_cli_connect.py +0 -0
  828. {superqode-2.2.0 → superqode-2.2.2}/tests/test_cli_reference_coverage.py +0 -0
  829. {superqode-2.2.0 → superqode-2.2.2}/tests/test_clickable_commands.py +0 -0
  830. {superqode-2.2.0 → superqode-2.2.2}/tests/test_command_safety.py +0 -0
  831. {superqode-2.2.0 → superqode-2.2.2}/tests/test_commands_runtime.py +0 -0
  832. {superqode-2.2.0 → superqode-2.2.2}/tests/test_compaction.py +0 -0
  833. {superqode-2.2.0 → superqode-2.2.2}/tests/test_config_loader.py +0 -0
  834. {superqode-2.2.0 → superqode-2.2.2}/tests/test_config_runtime.py +0 -0
  835. {superqode-2.2.0 → superqode-2.2.2}/tests/test_connect_harness_screen.py +0 -0
  836. {superqode-2.2.0 → superqode-2.2.2}/tests/test_connect_setup.py +0 -0
  837. {superqode-2.2.0 → superqode-2.2.2}/tests/test_connection_profiles.py +0 -0
  838. {superqode-2.2.0 → superqode-2.2.2}/tests/test_context_handles.py +0 -0
  839. {superqode-2.2.0 → superqode-2.2.2}/tests/test_context_probe.py +0 -0
  840. {superqode-2.2.0 → superqode-2.2.2}/tests/test_context_remaining.py +0 -0
  841. {superqode-2.2.0 → superqode-2.2.2}/tests/test_copilot_login_ux.py +0 -0
  842. {superqode-2.2.0 → superqode-2.2.2}/tests/test_copilot_tui_commands.py +0 -0
  843. {superqode-2.2.0 → superqode-2.2.2}/tests/test_create_skill_tool.py +0 -0
  844. {superqode-2.2.0 → superqode-2.2.2}/tests/test_deepagents_model_spec.py +0 -0
  845. {superqode-2.2.0 → superqode-2.2.2}/tests/test_deferred_tools.py +0 -0
  846. {superqode-2.2.0 → superqode-2.2.2}/tests/test_design_system_contrast.py +0 -0
  847. {superqode-2.2.0 → superqode-2.2.2}/tests/test_developer_workflow_docs.py +0 -0
  848. {superqode-2.2.0 → superqode-2.2.2}/tests/test_ds4_local_client.py +0 -0
  849. {superqode-2.2.0 → superqode-2.2.2}/tests/test_dsh_harness.py +0 -0
  850. {superqode-2.2.0 → superqode-2.2.2}/tests/test_dynamic_workflow_tool.py +0 -0
  851. {superqode-2.2.0 → superqode-2.2.2}/tests/test_edit_line_number_strip.py +0 -0
  852. {superqode-2.2.0 → superqode-2.2.2}/tests/test_env_introspect.py +0 -0
  853. {superqode-2.2.0 → superqode-2.2.2}/tests/test_execution_resolver.py +0 -0
  854. {superqode-2.2.0 → superqode-2.2.2}/tests/test_extensions.py +0 -0
  855. {superqode-2.2.0 → superqode-2.2.2}/tests/test_final_parity_wave.py +0 -0
  856. {superqode-2.2.0 → superqode-2.2.2}/tests/test_free_models.py +0 -0
  857. {superqode-2.2.0 → superqode-2.2.2}/tests/test_governance.py +0 -0
  858. {superqode-2.2.0 → superqode-2.2.2}/tests/test_grok_cli_auth.py +0 -0
  859. {superqode-2.2.0 → superqode-2.2.2}/tests/test_harness_agent_session.py +0 -0
  860. {superqode-2.2.0 → superqode-2.2.2}/tests/test_harness_backends.py +0 -0
  861. {superqode-2.2.0 → superqode-2.2.2}/tests/test_harness_bench.py +0 -0
  862. {superqode-2.2.0 → superqode-2.2.2}/tests/test_harness_bench_paths.py +0 -0
  863. {superqode-2.2.0 → superqode-2.2.2}/tests/test_harness_catalog.py +0 -0
  864. {superqode-2.2.0 → superqode-2.2.2}/tests/test_harness_connect_catalog.py +0 -0
  865. {superqode-2.2.0 → superqode-2.2.2}/tests/test_harness_drift.py +0 -0
  866. {superqode-2.2.0 → superqode-2.2.2}/tests/test_harness_eval_splits.py +0 -0
  867. {superqode-2.2.0 → superqode-2.2.2}/tests/test_harness_examples.py +0 -0
  868. {superqode-2.2.0 → superqode-2.2.2}/tests/test_harness_explain.py +0 -0
  869. {superqode-2.2.0 → superqode-2.2.2}/tests/test_harness_hooks.py +0 -0
  870. {superqode-2.2.0 → superqode-2.2.2}/tests/test_harness_hub_catalog.py +0 -0
  871. {superqode-2.2.0 → superqode-2.2.2}/tests/test_harness_hub_screen.py +0 -0
  872. {superqode-2.2.0 → superqode-2.2.2}/tests/test_harness_kernel.py +0 -0
  873. {superqode-2.2.0 → superqode-2.2.2}/tests/test_harness_mcp_server.py +0 -0
  874. {superqode-2.2.0 → superqode-2.2.2}/tests/test_harness_model_policy.py +0 -0
  875. {superqode-2.2.0 → superqode-2.2.2}/tests/test_harness_observability.py +0 -0
  876. {superqode-2.2.0 → superqode-2.2.2}/tests/test_harness_omni.py +0 -0
  877. {superqode-2.2.0 → superqode-2.2.2}/tests/test_harness_output.py +0 -0
  878. {superqode-2.2.0 → superqode-2.2.2}/tests/test_harness_permissions.py +0 -0
  879. {superqode-2.2.0 → superqode-2.2.2}/tests/test_harness_promotion.py +0 -0
  880. {superqode-2.2.0 → superqode-2.2.2}/tests/test_harness_protocol.py +0 -0
  881. {superqode-2.2.0 → superqode-2.2.2}/tests/test_harness_sandbox.py +0 -0
  882. {superqode-2.2.0 → superqode-2.2.2}/tests/test_harness_seesaw_dimensions.py +0 -0
  883. {superqode-2.2.0 → superqode-2.2.2}/tests/test_harness_self_improve.py +0 -0
  884. {superqode-2.2.0 → superqode-2.2.2}/tests/test_harness_spec.py +0 -0
  885. {superqode-2.2.0 → superqode-2.2.2}/tests/test_harness_store.py +0 -0
  886. {superqode-2.2.0 → superqode-2.2.2}/tests/test_harness_usage.py +0 -0
  887. {superqode-2.2.0 → superqode-2.2.2}/tests/test_harness_wizard.py +0 -0
  888. {superqode-2.2.0 → superqode-2.2.2}/tests/test_harness_workflow.py +0 -0
  889. {superqode-2.2.0 → superqode-2.2.2}/tests/test_headless.py +0 -0
  890. {superqode-2.2.0 → superqode-2.2.2}/tests/test_hf_fetch.py +0 -0
  891. {superqode-2.2.0 → superqode-2.2.2}/tests/test_hooks.py +0 -0
  892. {superqode-2.2.0 → superqode-2.2.2}/tests/test_install_script.py +0 -0
  893. {superqode-2.2.0 → superqode-2.2.2}/tests/test_integration_docs.py +0 -0
  894. {superqode-2.2.0 → superqode-2.2.2}/tests/test_kimi_k3_provider.py +0 -0
  895. {superqode-2.2.0 → superqode-2.2.2}/tests/test_kimi_k3_routes.py +0 -0
  896. {superqode-2.2.0 → superqode-2.2.2}/tests/test_linter_runner.py +0 -0
  897. {superqode-2.2.0 → superqode-2.2.2}/tests/test_litellm_gateway.py +0 -0
  898. {superqode-2.2.0 → superqode-2.2.2}/tests/test_live_acp_registry.py +0 -0
  899. {superqode-2.2.0 → superqode-2.2.2}/tests/test_live_models.py +0 -0
  900. {superqode-2.2.0 → superqode-2.2.2}/tests/test_local_airplane.py +0 -0
  901. {superqode-2.2.0 → superqode-2.2.2}/tests/test_local_build.py +0 -0
  902. {superqode-2.2.0 → superqode-2.2.2}/tests/test_local_code_index.py +0 -0
  903. {superqode-2.2.0 → superqode-2.2.2}/tests/test_local_labs.py +0 -0
  904. {superqode-2.2.0 → superqode-2.2.2}/tests/test_local_migrate.py +0 -0
  905. {superqode-2.2.0 → superqode-2.2.2}/tests/test_local_model_optimizations.py +0 -0
  906. {superqode-2.2.0 → superqode-2.2.2}/tests/test_local_packs.py +0 -0
  907. {superqode-2.2.0 → superqode-2.2.2}/tests/test_local_sandbox.py +0 -0
  908. {superqode-2.2.0 → superqode-2.2.2}/tests/test_local_search.py +0 -0
  909. {superqode-2.2.0 → superqode-2.2.2}/tests/test_local_servers.py +0 -0
  910. {superqode-2.2.0 → superqode-2.2.2}/tests/test_local_setup.py +0 -0
  911. {superqode-2.2.0 → superqode-2.2.2}/tests/test_local_smoke.py +0 -0
  912. {superqode-2.2.0 → superqode-2.2.2}/tests/test_local_stack.py +0 -0
  913. {superqode-2.2.0 → superqode-2.2.2}/tests/test_local_tool_capabilities.py +0 -0
  914. {superqode-2.2.0 → superqode-2.2.2}/tests/test_local_tool_support.py +0 -0
  915. {superqode-2.2.0 → superqode-2.2.2}/tests/test_login_api.py +0 -0
  916. {superqode-2.2.0 → superqode-2.2.2}/tests/test_loop_guard.py +0 -0
  917. {superqode-2.2.0 → superqode-2.2.2}/tests/test_managed_harness_backend.py +0 -0
  918. {superqode-2.2.0 → superqode-2.2.2}/tests/test_markdown_render.py +0 -0
  919. {superqode-2.2.0 → superqode-2.2.2}/tests/test_mcp.py +0 -0
  920. {superqode-2.2.0 → superqode-2.2.2}/tests/test_mcp_example_server.py +0 -0
  921. {superqode-2.2.0 → superqode-2.2.2}/tests/test_mcp_integration.py +0 -0
  922. {superqode-2.2.0 → superqode-2.2.2}/tests/test_mcp_live.py +0 -0
  923. {superqode-2.2.0 → superqode-2.2.2}/tests/test_mcp_oauth_generalized.py +0 -0
  924. {superqode-2.2.0 → superqode-2.2.2}/tests/test_mcp_tools_runtime.py +0 -0
  925. {superqode-2.2.0 → superqode-2.2.2}/tests/test_mcp_two_way.py +0 -0
  926. {superqode-2.2.0 → superqode-2.2.2}/tests/test_memory_recall.py +0 -0
  927. {superqode-2.2.0 → superqode-2.2.2}/tests/test_mlx_tools.py +0 -0
  928. {superqode-2.2.0 → superqode-2.2.2}/tests/test_model_profiles.py +0 -0
  929. {superqode-2.2.0 → superqode-2.2.2}/tests/test_model_specs.py +0 -0
  930. {superqode-2.2.0 → superqode-2.2.2}/tests/test_models_dev.py +0 -0
  931. {superqode-2.2.0 → superqode-2.2.2}/tests/test_monty_tool.py +0 -0
  932. {superqode-2.2.0 → superqode-2.2.2}/tests/test_navigation_history.py +0 -0
  933. {superqode-2.2.0 → superqode-2.2.2}/tests/test_network_policy.py +0 -0
  934. {superqode-2.2.0 → superqode-2.2.2}/tests/test_ollama_client.py +0 -0
  935. {superqode-2.2.0 → superqode-2.2.2}/tests/test_omnigent_agent_session_smoke.py +0 -0
  936. {superqode-2.2.0 → superqode-2.2.2}/tests/test_omnigent_importer.py +0 -0
  937. {superqode-2.2.0 → superqode-2.2.2}/tests/test_openai_session.py +0 -0
  938. {superqode-2.2.0 → superqode-2.2.2}/tests/test_output_spill.py +0 -0
  939. {superqode-2.2.0 → superqode-2.2.2}/tests/test_parallel_compare.py +0 -0
  940. {superqode-2.2.0 → superqode-2.2.2}/tests/test_peer_agents.py +0 -0
  941. {superqode-2.2.0 → superqode-2.2.2}/tests/test_plugin_hook_wiring.py +0 -0
  942. {superqode-2.2.0 → superqode-2.2.2}/tests/test_plugins.py +0 -0
  943. {superqode-2.2.0 → superqode-2.2.2}/tests/test_policies_and_turndiff.py +0 -0
  944. {superqode-2.2.0 → superqode-2.2.2}/tests/test_post_edit_verify.py +0 -0
  945. {superqode-2.2.0 → superqode-2.2.2}/tests/test_prime_agent_client.py +0 -0
  946. {superqode-2.2.0 → superqode-2.2.2}/tests/test_prime_agent_harness.py +0 -0
  947. {superqode-2.2.0 → superqode-2.2.2}/tests/test_prime_agent_provider.py +0 -0
  948. {superqode-2.2.0 → superqode-2.2.2}/tests/test_prime_command_surface.py +0 -0
  949. {superqode-2.2.0 → superqode-2.2.2}/tests/test_prime_tui_rpc.py +0 -0
  950. {superqode-2.2.0 → superqode-2.2.2}/tests/test_progressive_discovery.py +0 -0
  951. {superqode-2.2.0 → superqode-2.2.2}/tests/test_progressive_reveals.py +0 -0
  952. {superqode-2.2.0 → superqode-2.2.2}/tests/test_project_trust.py +0 -0
  953. {superqode-2.2.0 → superqode-2.2.2}/tests/test_prompt_stack.py +0 -0
  954. {superqode-2.2.0 → superqode-2.2.2}/tests/test_provider_catalog.py +0 -0
  955. {superqode-2.2.0 → superqode-2.2.2}/tests/test_provider_dynamic.py +0 -0
  956. {superqode-2.2.0 → superqode-2.2.2}/tests/test_provider_models.py +0 -0
  957. {superqode-2.2.0 → superqode-2.2.2}/tests/test_provider_recommendations.py +0 -0
  958. {superqode-2.2.0 → superqode-2.2.2}/tests/test_pure_mode_sessions.py +0 -0
  959. {superqode-2.2.0 → superqode-2.2.2}/tests/test_qm_deployment_layer.py +0 -0
  960. {superqode-2.2.0 → superqode-2.2.2}/tests/test_rate_limit_retry.py +0 -0
  961. {superqode-2.2.0 → superqode-2.2.2}/tests/test_read_tool_limits.py +0 -0
  962. {superqode-2.2.0 → superqode-2.2.2}/tests/test_reasoning_and_budget.py +0 -0
  963. {superqode-2.2.0 → superqode-2.2.2}/tests/test_recursive_eval_packs.py +0 -0
  964. {superqode-2.2.0 → superqode-2.2.2}/tests/test_release_metadata.py +0 -0
  965. {superqode-2.2.0 → superqode-2.2.2}/tests/test_rlm_code_integration.py +0 -0
  966. {superqode-2.2.0 → superqode-2.2.2}/tests/test_runtime_adk.py +0 -0
  967. {superqode-2.2.0 → superqode-2.2.2}/tests/test_runtime_antigravity_cli.py +0 -0
  968. {superqode-2.2.0 → superqode-2.2.2}/tests/test_runtime_antigravity_managed.py +0 -0
  969. {superqode-2.2.0 → superqode-2.2.2}/tests/test_runtime_antigravity_sdk.py +0 -0
  970. {superqode-2.2.0 → superqode-2.2.2}/tests/test_runtime_builtin.py +0 -0
  971. {superqode-2.2.0 → superqode-2.2.2}/tests/test_runtime_claude_agent_sdk.py +0 -0
  972. {superqode-2.2.0 → superqode-2.2.2}/tests/test_runtime_codex_sdk.py +0 -0
  973. {superqode-2.2.0 → superqode-2.2.2}/tests/test_runtime_copilot_sdk.py +0 -0
  974. {superqode-2.2.0 → superqode-2.2.2}/tests/test_runtime_devin_cli.py +0 -0
  975. {superqode-2.2.0 → superqode-2.2.2}/tests/test_runtime_dialog.py +0 -0
  976. {superqode-2.2.0 → superqode-2.2.2}/tests/test_runtime_openai_agents.py +0 -0
  977. {superqode-2.2.0 → superqode-2.2.2}/tests/test_runtime_openai_events.py +0 -0
  978. {superqode-2.2.0 → superqode-2.2.2}/tests/test_runtime_openai_hitl.py +0 -0
  979. {superqode-2.2.0 → superqode-2.2.2}/tests/test_runtime_openai_sandbox.py +0 -0
  980. {superqode-2.2.0 → superqode-2.2.2}/tests/test_runtime_protocol.py +0 -0
  981. {superqode-2.2.0 → superqode-2.2.2}/tests/test_runtime_pydanticai.py +0 -0
  982. {superqode-2.2.0 → superqode-2.2.2}/tests/test_sandbox_backends.py +0 -0
  983. {superqode-2.2.0 → superqode-2.2.2}/tests/test_sandbox_execution.py +0 -0
  984. {superqode-2.2.0 → superqode-2.2.2}/tests/test_search_roots.py +0 -0
  985. {superqode-2.2.0 → superqode-2.2.2}/tests/test_semantic_search.py +0 -0
  986. {superqode-2.2.0 → superqode-2.2.2}/tests/test_session_switchboard.py +0 -0
  987. {superqode-2.2.0 → superqode-2.2.2}/tests/test_shell_session.py +0 -0
  988. {superqode-2.2.0 → superqode-2.2.2}/tests/test_simple_login.py +0 -0
  989. {superqode-2.2.0 → superqode-2.2.2}/tests/test_simple_query_fastpath.py +0 -0
  990. {superqode-2.2.0 → superqode-2.2.2}/tests/test_skillopt.py +0 -0
  991. {superqode-2.2.0 → superqode-2.2.2}/tests/test_slash_runtime.py +0 -0
  992. {superqode-2.2.0 → superqode-2.2.2}/tests/test_spawn_harness_tool.py +0 -0
  993. {superqode-2.2.0 → superqode-2.2.2}/tests/test_status_bar_layout.py +0 -0
  994. {superqode-2.2.0 → superqode-2.2.2}/tests/test_steering_continue_reminders.py +0 -0
  995. {superqode-2.2.0 → superqode-2.2.2}/tests/test_streaming_tool_calls.py +0 -0
  996. {superqode-2.2.0 → superqode-2.2.2}/tests/test_subscription_billing_policy.py +0 -0
  997. {superqode-2.2.0 → superqode-2.2.2}/tests/test_subscription_login.py +0 -0
  998. {superqode-2.2.0 → superqode-2.2.2}/tests/test_subscription_login_consent.py +0 -0
  999. {superqode-2.2.0 → superqode-2.2.2}/tests/test_synthetic_gateways.py +0 -0
  1000. {superqode-2.2.0 → superqode-2.2.2}/tests/test_tau_harness_adapter.py +0 -0
  1001. {superqode-2.2.0 → superqode-2.2.2}/tests/test_terminal_output_limits.py +0 -0
  1002. {superqode-2.2.0 → superqode-2.2.2}/tests/test_theme_contrast.py +0 -0
  1003. {superqode-2.2.0 → superqode-2.2.2}/tests/test_theme_picker.py +0 -0
  1004. {superqode-2.2.0 → superqode-2.2.2}/tests/test_theme_repaint.py +0 -0
  1005. {superqode-2.2.0 → superqode-2.2.2}/tests/test_todo_tools.py +0 -0
  1006. {superqode-2.2.0 → superqode-2.2.2}/tests/test_tool_args_repair.py +0 -0
  1007. {superqode-2.2.0 → superqode-2.2.2}/tests/test_tool_batch_safety.py +0 -0
  1008. {superqode-2.2.0 → superqode-2.2.2}/tests/test_tool_bridge.py +0 -0
  1009. {superqode-2.2.0 → superqode-2.2.2}/tests/test_tool_bridge_openai.py +0 -0
  1010. {superqode-2.2.0 → superqode-2.2.2}/tests/test_tool_call_repair.py +0 -0
  1011. {superqode-2.2.0 → superqode-2.2.2}/tests/test_tool_output_pruning.py +0 -0
  1012. {superqode-2.2.0 → superqode-2.2.2}/tests/test_tool_tracking.py +0 -0
  1013. {superqode-2.2.0 → superqode-2.2.2}/tests/test_tools.py +0 -0
  1014. {superqode-2.2.0 → superqode-2.2.2}/tests/test_tui_change_summary.py +0 -0
  1015. {superqode-2.2.0 → superqode-2.2.2}/tests/test_tui_chat_mode.py +0 -0
  1016. {superqode-2.2.0 → superqode-2.2.2}/tests/test_tui_diagnostics.py +0 -0
  1017. {superqode-2.2.0 → superqode-2.2.2}/tests/test_tui_exit.py +0 -0
  1018. {superqode-2.2.0 → superqode-2.2.2}/tests/test_tui_feedback.py +0 -0
  1019. {superqode-2.2.0 → superqode-2.2.2}/tests/test_tui_launch_performance.py +0 -0
  1020. {superqode-2.2.0 → superqode-2.2.2}/tests/test_tui_llamacpp_connect.py +0 -0
  1021. {superqode-2.2.0 → superqode-2.2.2}/tests/test_tui_markdown_cleanup.py +0 -0
  1022. {superqode-2.2.0 → superqode-2.2.2}/tests/test_tui_mlx_connect.py +0 -0
  1023. {superqode-2.2.0 → superqode-2.2.2}/tests/test_tui_mounted.py +0 -0
  1024. {superqode-2.2.0 → superqode-2.2.2}/tests/test_tui_onboarding.py +0 -0
  1025. {superqode-2.2.0 → superqode-2.2.2}/tests/test_tui_smoke.py +0 -0
  1026. {superqode-2.2.0 → superqode-2.2.2}/tests/test_tui_tool_display.py +0 -0
  1027. {superqode-2.2.0 → superqode-2.2.2}/tests/test_uhp_backend.py +0 -0
  1028. {superqode-2.2.0 → superqode-2.2.2}/tests/test_uhp_connect.py +0 -0
  1029. {superqode-2.2.0 → superqode-2.2.2}/tests/test_update_command.py +0 -0
  1030. {superqode-2.2.0 → superqode-2.2.2}/tests/test_vendor_cli_runtime.py +0 -0
  1031. {superqode-2.2.0 → superqode-2.2.2}/tests/test_version.py +0 -0
  1032. {superqode-2.2.0 → superqode-2.2.2}/tests/test_view_image.py +0 -0
  1033. {superqode-2.2.0 → superqode-2.2.2}/tests/test_web_server_auth.py +0 -0
  1034. {superqode-2.2.0 → superqode-2.2.2}/tests/test_workorders.py +0 -0
  1035. {superqode-2.2.0 → superqode-2.2.2}/tests/test_workspace.py +0 -0
  1036. {superqode-2.2.0 → superqode-2.2.2}/tests/test_zai_provider.py +0 -0
@@ -7,6 +7,58 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [2.2.2] - 2026-09-12
11
+
12
+ The installed CLI can complete a harness turn against a BYOK UHP host such as
13
+ `uhp.superqode.dev`. The client sends the caller's provider key
14
+ (`GEMINI_API_KEY` / `GOOGLE_API_KEY` when the provider is Google). The public
15
+ Core bind stays catalog-open and does not attach a model key. A separate Cloud
16
+ Run image (`Dockerfile.uhp`) deploys that bind without touching A2A.
17
+
18
+ ### 🧩 Unified Harness Protocol
19
+
20
+ - `UHPClient` and `harness run uhp` send `X-Provider-Api-Key` from the
21
+ caller's environment so a remote Core host can run a turn without a
22
+ server-side `GEMINI_API_KEY`.
23
+ - Remote `serve uhp --allow-remote` requires `--api-key`. Catalog GETs stay
24
+ public; `POST /v1/responses` without the caller provider key returns
25
+ `missing_provider_key` and does not start LiteLLM.
26
+ - Public bind defaults: provider `google`, model `gemini-flash-latest`, harness
27
+ `chrn_superqode_core`. Image and Cloud Build files are `Dockerfile.uhp` and
28
+ `cloudbuild.uhp.yaml` (service `superqode-uhp`).
29
+
30
+ ## [2.2.1] - 2026-09-12
31
+
32
+ Local UHP for the package cut: SuperQode speaks it as a client (connect, run,
33
+ file upload and artifact download) and as a native Core server that binds one
34
+ HarnessSpec. Harness stop reasons map to UHP failed or incomplete instead of an
35
+ empty completed response. The same cut includes A2ABreak card-review and
36
+ contextId hardening. A public UHP host (GoDaddy) and Google Cloud infra stay for
37
+ 2.3.0.
38
+
39
+ ### 🧩 Unified Harness Protocol
40
+
41
+ - Client path: `superqode connect uhp` discovers a server and selects a harness;
42
+ `harness run uhp` runs tasks through the same session, event and evidence model
43
+ as a local harness.
44
+ - File upload and artifact download: `--file` / `input_files=` send local files
45
+ through `POST /v1/files`; `--download-dir` and `download_citations` write
46
+ `container_file_citation` artifacts back to disk.
47
+ - Native server: `superqode serve uhp --spec harness.yaml` exposes one configured
48
+ HarnessSpec over UHP Core. Complementary to HarnessRouter (a multi-backend
49
+ runner), not a substitute for it.
50
+ - Harness `stopped_reason` values such as `error`, `blocked` and `loop_detected`
51
+ map to UHP `failed`; `needs_approval` and `max_iterations` map to `incomplete`.
52
+ An empty provider failure is no longer reported as `completed`.
53
+ - The server advertises `conformance_class: core`. That names the surface it
54
+ implements; it is not a UHP conformance-suite certificate.
55
+
56
+ ### 🔐 A2ABreak hardening
57
+
58
+ - Card review on connect/inspect surfaces SuperOptiX-aligned findings, and
59
+ `contextId` plus task ACL bind to the caller principal (protocol gaps, not
60
+ product CVEs).
61
+
10
62
  ## [2.2.0] - 2026-09-07
11
63
 
12
64
  Every Harness Hub record now states the language its harness is implemented in,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: superqode
3
- Version: 2.2.0
3
+ Version: 2.2.2
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,29 @@ 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
+ The public hostname for that bind is [`uhp.superqode.dev`](https://uhp.superqode.dev/v1/uhp).
487
+ Anonymous callers get discovery and the static harness catalog (no model call).
488
+ A harness turn requires a SuperQode UHP API key and the caller's own provider
489
+ key. SuperQode does not pay for that model. Until the hostname is mapped, use
490
+ local `serve uhp` as above.
491
+
492
+ Read the [UHP guide](docs/providers/uhp.md).
493
+
463
494
  ## Harness Execution Model
464
495
 
465
496
  ```text
@@ -495,11 +526,12 @@ superqode harness graph <run-id> --json
495
526
 
496
527
  | Guide | What it covers |
497
528
  | --- | --- |
498
- | [Website](https://superqode.dev) | Product, Hub, A2A agent |
529
+ | [Website](https://superqode.dev) | Product, Hub, A2A and UHP |
499
530
  | [Quick Start](https://docs.superqode.dev/getting-started/quickstart/) | Install, connect, and run your first task |
500
531
  | [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 |
532
+ | [Connection Methods](docs/concepts/modes.md) | Local, ACP, BYOK, SDK, MCP, A2A, and UHP routes |
502
533
  | [A2A Agents](docs/providers/a2a.md) | Serving a harness over A2A, skills, API keys, and the Agent Card |
534
+ | [UHP](docs/providers/uhp.md) | Client connect/run, file upload, and native `serve uhp` (Core class) |
503
535
  | [Developer Workflows](docs/developer-workflows.md) | The complete TUI and CLI command set |
504
536
  | [Harness System](docs/advanced/harness-system.md) | HarnessSpec fields, runtimes, and policy |
505
537
  | [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,29 @@ 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
+ The public hostname for that bind is [`uhp.superqode.dev`](https://uhp.superqode.dev/v1/uhp).
336
+ Anonymous callers get discovery and the static harness catalog (no model call).
337
+ A harness turn requires a SuperQode UHP API key and the caller's own provider
338
+ key. SuperQode does not pay for that model. Until the hostname is mapped, use
339
+ local `serve uhp` as above.
340
+
341
+ Read the [UHP guide](docs/providers/uhp.md).
342
+
312
343
  ## Harness Execution Model
313
344
 
314
345
  ```text
@@ -344,11 +375,12 @@ superqode harness graph <run-id> --json
344
375
 
345
376
  | Guide | What it covers |
346
377
  | --- | --- |
347
- | [Website](https://superqode.dev) | Product, Hub, A2A agent |
378
+ | [Website](https://superqode.dev) | Product, Hub, A2A and UHP |
348
379
  | [Quick Start](https://docs.superqode.dev/getting-started/quickstart/) | Install, connect, and run your first task |
349
380
  | [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 |
381
+ | [Connection Methods](docs/concepts/modes.md) | Local, ACP, BYOK, SDK, MCP, A2A, and UHP routes |
351
382
  | [A2A Agents](docs/providers/a2a.md) | Serving a harness over A2A, skills, API keys, and the Agent Card |
383
+ | [UHP](docs/providers/uhp.md) | Client connect/run, file upload, and native `serve uhp` (Core class) |
352
384
  | [Developer Workflows](docs/developer-workflows.md) | The complete TUI and CLI command set |
353
385
  | [Harness System](docs/advanced/harness-system.md) | HarnessSpec fields, runtimes, and policy |
354
386
  | [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.2.0"
3
+ version = "2.2.2"
4
4
  description = "The harness layer for coding agents"
5
5
  readme = "README.md"
6
6
  license = "Apache-2.0"
@@ -38,7 +38,7 @@ __all__ = [
38
38
  "sidebar",
39
39
  ]
40
40
 
41
- __version__ = "2.2.0"
41
+ __version__ = "2.2.2"
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()