superqode 0.2.76__tar.gz → 0.2.78__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 (933) hide show
  1. {superqode-0.2.76 → superqode-0.2.78}/CHANGELOG.md +58 -0
  2. {superqode-0.2.76 → superqode-0.2.78}/PKG-INFO +1 -1
  3. {superqode-0.2.76 → superqode-0.2.78}/pyproject.toml +1 -1
  4. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/__init__.py +1 -1
  5. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/constants.py +1 -1
  6. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/agent_run.py +4 -1
  7. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/commands_impl.py +81 -1
  8. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/connect.py +38 -0
  9. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/dialogs.py +5 -3
  10. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/helpers.py +9 -2
  11. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/model_catalog.py +31 -57
  12. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/pickers.py +27 -12
  13. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/welcome.py +1 -1
  14. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/connection_profiles.py +53 -0
  15. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/prime_agent.py +92 -1
  16. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/subscription_login.py +36 -0
  17. {superqode-0.2.76 → superqode-0.2.78}/src/superqode.egg-info/PKG-INFO +1 -1
  18. {superqode-0.2.76 → superqode-0.2.78}/tests/test_cli_contract.py +4 -1
  19. {superqode-0.2.76 → superqode-0.2.78}/tests/test_cli_reference_coverage.py +1 -0
  20. {superqode-0.2.76 → superqode-0.2.78}/tests/test_connect_harness_screen.py +2 -1
  21. {superqode-0.2.76 → superqode-0.2.78}/tests/test_connection_profiles.py +7 -0
  22. {superqode-0.2.76 → superqode-0.2.78}/tests/test_prime_agent_provider.py +23 -0
  23. {superqode-0.2.76 → superqode-0.2.78}/tests/test_prime_command_surface.py +71 -3
  24. {superqode-0.2.76 → superqode-0.2.78}/tests/test_subscription_login_consent.py +7 -1
  25. {superqode-0.2.76 → superqode-0.2.78}/LICENSE +0 -0
  26. {superqode-0.2.76 → superqode-0.2.78}/MANIFEST.in +0 -0
  27. {superqode-0.2.76 → superqode-0.2.78}/NOTICE +0 -0
  28. {superqode-0.2.76 → superqode-0.2.78}/README.md +0 -0
  29. {superqode-0.2.76 → superqode-0.2.78}/examples/README.md +0 -0
  30. {superqode-0.2.76 → superqode-0.2.78}/examples/a2a/README.md +0 -0
  31. {superqode-0.2.76 → superqode-0.2.78}/examples/a2a/smoke_client.py +0 -0
  32. {superqode-0.2.76 → superqode-0.2.78}/examples/byok-acp-team.yaml +0 -0
  33. {superqode-0.2.76 → superqode-0.2.78}/examples/codex_sdk_quickstart.py +0 -0
  34. {superqode-0.2.76 → superqode-0.2.78}/examples/evals/omni-release.yaml +0 -0
  35. {superqode-0.2.76 → superqode-0.2.78}/examples/evals/omni-tiny.yaml +0 -0
  36. {superqode-0.2.76 → superqode-0.2.78}/examples/extensions/README.md +0 -0
  37. {superqode-0.2.76 → superqode-0.2.78}/examples/extensions/manifest-guard/context.md +0 -0
  38. {superqode-0.2.76 → superqode-0.2.78}/examples/extensions/manifest-guard/hooks.py +0 -0
  39. {superqode-0.2.76 → superqode-0.2.78}/examples/extensions/manifest-guard/tools.py +0 -0
  40. {superqode-0.2.76 → superqode-0.2.78}/examples/extensions/packages/README.md +0 -0
  41. {superqode-0.2.76 → superqode-0.2.78}/examples/extensions/packages/broken-extension/build/lib/superqode_example_broken/__init__.py +0 -0
  42. {superqode-0.2.76 → superqode-0.2.78}/examples/extensions/packages/broken-extension/src/superqode_example_broken/__init__.py +0 -0
  43. {superqode-0.2.76 → superqode-0.2.78}/examples/extensions/packages/policy-extension/src/superqode_example_policy/__init__.py +0 -0
  44. {superqode-0.2.76 → superqode-0.2.78}/examples/extensions/packages/skill-extension/src/superqode_example_skill/SKILL.md +0 -0
  45. {superqode-0.2.76 → superqode-0.2.78}/examples/extensions/packages/skill-extension/src/superqode_example_skill/__init__.py +0 -0
  46. {superqode-0.2.76 → superqode-0.2.78}/examples/extensions/packages/tool-extension/src/superqode_example_tool/__init__.py +0 -0
  47. {superqode-0.2.76 → superqode-0.2.78}/examples/extensions/packages/tool-extension-v2/src/superqode_example_tool/__init__.py +0 -0
  48. {superqode-0.2.76 → superqode-0.2.78}/examples/extensions/python-package/src/superqode_example_extension/__init__.py +0 -0
  49. {superqode-0.2.76 → superqode-0.2.78}/examples/harness-packages/README.md +0 -0
  50. {superqode-0.2.76 → superqode-0.2.78}/examples/harness-packages/hello-harness/src/superqode_hello_harness/__init__.py +0 -0
  51. {superqode-0.2.76 → superqode-0.2.78}/examples/harnesses/coding.yaml +0 -0
  52. {superqode-0.2.76 → superqode-0.2.78}/examples/harnesses/deepagents.yaml +0 -0
  53. {superqode-0.2.76 → superqode-0.2.78}/examples/harnesses/ds4.yaml +0 -0
  54. {superqode-0.2.76 → superqode-0.2.78}/examples/harnesses/gemma4.yaml +0 -0
  55. {superqode-0.2.76 → superqode-0.2.78}/examples/harnesses/google-adk.yaml +0 -0
  56. {superqode-0.2.76 → superqode-0.2.78}/examples/harnesses/local-recursive-dynamic.yaml +0 -0
  57. {superqode-0.2.76 → superqode-0.2.78}/examples/harnesses/mcp-docs.yaml +0 -0
  58. {superqode-0.2.76 → superqode-0.2.78}/examples/harnesses/no-tool.yaml +0 -0
  59. {superqode-0.2.76 → superqode-0.2.78}/examples/harnesses/omni-tiny-local.yaml +0 -0
  60. {superqode-0.2.76 → superqode-0.2.78}/examples/harnesses/omnigent-multi-agent.yaml +0 -0
  61. {superqode-0.2.76 → superqode-0.2.78}/examples/harnesses/openai-agents.yaml +0 -0
  62. {superqode-0.2.76 → superqode-0.2.78}/examples/harnesses/pydanticai.yaml +0 -0
  63. {superqode-0.2.76 → superqode-0.2.78}/examples/harnesses/rlm-code-lid.yaml +0 -0
  64. {superqode-0.2.76 → superqode-0.2.78}/examples/local-models-team.yaml +0 -0
  65. {superqode-0.2.76 → superqode-0.2.78}/examples/mcp/local_docs_server.py +0 -0
  66. {superqode-0.2.76 → superqode-0.2.78}/examples/omnigent-multi-agent.agent.yaml +0 -0
  67. {superqode-0.2.76 → superqode-0.2.78}/examples/qm-deployment-layer/README.md +0 -0
  68. {superqode-0.2.76 → superqode-0.2.78}/examples/qm-deployment-layer/sandbox/skills/superqode-harness/SKILL.md +0 -0
  69. {superqode-0.2.76 → superqode-0.2.78}/examples/simple-team.yaml +0 -0
  70. {superqode-0.2.76 → superqode-0.2.78}/scripts/check_release_metadata.py +0 -0
  71. {superqode-0.2.76 → superqode-0.2.78}/setup.cfg +0 -0
  72. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/a2a/__init__.py +0 -0
  73. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/a2a/client.py +0 -0
  74. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/a2a/presets.py +0 -0
  75. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/a2a/registry.py +0 -0
  76. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/a2a/server.py +0 -0
  77. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/a2a/skills.py +0 -0
  78. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/a2a/tools.py +0 -0
  79. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/a2a/types.py +0 -0
  80. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/a2a/workflows.py +0 -0
  81. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/acp/__init__.py +0 -0
  82. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/acp/client.py +0 -0
  83. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/acp/doctor.py +0 -0
  84. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/acp/permission_screen.py +0 -0
  85. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/acp/permission_store.py +0 -0
  86. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/acp/render.py +0 -0
  87. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/acp/server.py +0 -0
  88. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/acp/session_store.py +0 -0
  89. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/acp/slash.py +0 -0
  90. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/acp/tool_call_context.py +0 -0
  91. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/acp/types.py +0 -0
  92. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/acp_discovery.py +0 -0
  93. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agent/__init__.py +0 -0
  94. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agent/auto_memory.py +0 -0
  95. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agent/command_safety.py +0 -0
  96. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agent/compaction.py +0 -0
  97. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agent/context_manager.py +0 -0
  98. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agent/edit_strategies.py +0 -0
  99. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agent/exec_policy.py +0 -0
  100. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agent/hooks.py +0 -0
  101. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agent/loop.py +0 -0
  102. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agent/loop_guard.py +0 -0
  103. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agent/loop_policy.py +0 -0
  104. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agent/network_policy.py +0 -0
  105. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agent/output_handler.py +0 -0
  106. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agent/parallel_compare.py +0 -0
  107. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agent/peer_agents.py +0 -0
  108. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agent/plan_mode.py +0 -0
  109. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agent/reminders.py +0 -0
  110. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agent/rubric.py +0 -0
  111. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agent/session_manager.py +0 -0
  112. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agent/structured_output.py +0 -0
  113. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agent/summarization.py +0 -0
  114. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agent/system_prompts.py +0 -0
  115. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agent/terminal_output_limits.py +0 -0
  116. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agent/text_tool_calls.py +0 -0
  117. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agent/tool_args.py +0 -0
  118. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agent/tool_tracking.py +0 -0
  119. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agent/utility_model.py +0 -0
  120. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agent_output.py +0 -0
  121. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agent_stream.py +0 -0
  122. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/__init__.py +0 -0
  123. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/acp_registry.py +0 -0
  124. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/client.py +0 -0
  125. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/agentpool.phil65.github.io.toml +0 -0
  126. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/ampcode.com.toml +0 -0
  127. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/augmentcode.com.toml +0 -0
  128. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/autodev.github.io.toml +0 -0
  129. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/blackbox.ai.toml +0 -0
  130. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/bub.dev.toml +0 -0
  131. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/cagent.dev.toml +0 -0
  132. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/claude.com.toml +0 -0
  133. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/cline.bot.toml +0 -0
  134. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/codeassistant.dev.toml +0 -0
  135. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/codebuddy.tencent.com.toml +0 -0
  136. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/codex.openai.com.toml +0 -0
  137. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/copilot.github.com.toml +0 -0
  138. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/cortex.snowflake.com.toml +0 -0
  139. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/crow-ai.dev.toml +0 -0
  140. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/cursor.com.toml +0 -0
  141. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/deepagents.langchain.com.toml +0 -0
  142. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/devin.ai.toml +0 -0
  143. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/dirac.run.toml +0 -0
  144. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/factory.ai.toml +0 -0
  145. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/fastagent.ai.toml +0 -0
  146. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/fount.dev.toml +0 -0
  147. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/geminicli.com.toml +0 -0
  148. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/glm.z.ai.toml +0 -0
  149. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/goose.block.xyz.toml +0 -0
  150. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/harnlang.com.toml +0 -0
  151. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/hermes-agent.nousresearch.com.toml +0 -0
  152. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/junie.jetbrains.com.toml +0 -0
  153. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/kilo.ai.toml +0 -0
  154. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/kimi.moonshot.cn.toml +0 -0
  155. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/kiro.dev.toml +0 -0
  156. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/llmlingagent.dev.toml +0 -0
  157. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/minioncode.dev.toml +0 -0
  158. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/mistral-vibe.mistral.ai.toml +0 -0
  159. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/openclaw.ai.toml +0 -0
  160. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/opencode.ai.toml +0 -0
  161. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/openhands.dev.toml +0 -0
  162. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/pi.dev.toml +0 -0
  163. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/poolside.ai.toml +0 -0
  164. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/primeintellect.ai.toml +0 -0
  165. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/qoder.com.toml +0 -0
  166. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/qwenlm.github.io.toml +0 -0
  167. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/sigit.dev.toml +0 -0
  168. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/stakpak.dev.toml +0 -0
  169. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/stdiobus.dev.toml +0 -0
  170. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/vtcode.dev.toml +0 -0
  171. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/x.ai.toml +0 -0
  172. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/discovery.py +0 -0
  173. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/free_models.py +0 -0
  174. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/install_commands.py +0 -0
  175. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/messaging.py +0 -0
  176. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/official_acp.py +0 -0
  177. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/persona.py +0 -0
  178. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/registry.py +0 -0
  179. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/schema.py +0 -0
  180. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/unified.py +0 -0
  181. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/__init__.py +0 -0
  182. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/async_utils.py +0 -0
  183. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/capabilities.py +0 -0
  184. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/css.py +0 -0
  185. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/harness_picker.py +0 -0
  186. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/inputs.py +0 -0
  187. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/__init__.py +0 -0
  188. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/actions_misc.py +0 -0
  189. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/build_harness.py +0 -0
  190. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/clickable_commands.py +0 -0
  191. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/codex.py +0 -0
  192. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/completion.py +0 -0
  193. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/events.py +0 -0
  194. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/explore.py +0 -0
  195. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/factory.py +0 -0
  196. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/feedback.py +0 -0
  197. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/formatting.py +0 -0
  198. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/helper_clipboard.py +0 -0
  199. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/helper_completion_helpers.py +0 -0
  200. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/helper_diff_review.py +0 -0
  201. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/helper_exit_lifecycle.py +0 -0
  202. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/helper_file_view.py +0 -0
  203. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/helper_interaction_mode.py +0 -0
  204. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/helper_mcp_attach.py +0 -0
  205. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/helper_message_queue.py +0 -0
  206. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/helper_permissions.py +0 -0
  207. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/helper_recipes_skills.py +0 -0
  208. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/helper_share.py +0 -0
  209. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/helper_startup.py +0 -0
  210. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/helper_todos_plan.py +0 -0
  211. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/helper_vim.py +0 -0
  212. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/helper_wizard.py +0 -0
  213. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/huggingface.py +0 -0
  214. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/local_models.py +0 -0
  215. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/mcp.py +0 -0
  216. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/pipy_commands.py +0 -0
  217. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/sidebar.py +0 -0
  218. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/slash_commands.py +0 -0
  219. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/switchboard.py +0 -0
  220. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/tour.py +0 -0
  221. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/models.py +0 -0
  222. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/navigation.py +0 -0
  223. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/progress.py +0 -0
  224. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/prompt_stack.py +0 -0
  225. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/recipes.py +0 -0
  226. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/session_state.py +0 -0
  227. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/suggester.py +0 -0
  228. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/theme_bridge.py +0 -0
  229. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/widgets.py +0 -0
  230. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app_enhanced.py +0 -0
  231. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app_main.py +0 -0
  232. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/approval.py +0 -0
  233. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/atomic.py +0 -0
  234. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/auth/__init__.py +0 -0
  235. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/benchmarks.py +0 -0
  236. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/channels/__init__.py +0 -0
  237. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/channels/config.py +0 -0
  238. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/channels/discord.py +0 -0
  239. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/channels/service.py +0 -0
  240. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/channels/slack.py +0 -0
  241. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/channels/telegram.py +0 -0
  242. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/claude.py +0 -0
  243. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/codex.py +0 -0
  244. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/__init__.py +0 -0
  245. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/a2a.py +0 -0
  246. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/acp.py +0 -0
  247. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/agents.py +0 -0
  248. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/auth.py +0 -0
  249. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/benchmark.py +0 -0
  250. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/config.py +0 -0
  251. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/connect.py +0 -0
  252. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/daemon.py +0 -0
  253. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/factory.py +0 -0
  254. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/harness/__init__.py +0 -0
  255. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/harness/_group.py +0 -0
  256. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/harness/_helpers.py +0 -0
  257. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/harness/bench.py +0 -0
  258. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/harness/candidates.py +0 -0
  259. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/harness/evaluation.py +0 -0
  260. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/harness/evidence.py +0 -0
  261. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/harness/inbox.py +0 -0
  262. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/harness/lifecycle.py +0 -0
  263. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/harness/logbook.py +0 -0
  264. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/harness/observability.py +0 -0
  265. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/harness/optimization.py +0 -0
  266. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/harness/promotion.py +0 -0
  267. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/harness/protocol.py +0 -0
  268. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/harness/registry.py +0 -0
  269. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/harness/replay.py +0 -0
  270. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/harness/run_history.py +0 -0
  271. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/harness/worker.py +0 -0
  272. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/local.py +0 -0
  273. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/memory.py +0 -0
  274. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/models.py +0 -0
  275. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/plugins.py +0 -0
  276. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/policy.py +0 -0
  277. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/profiles.py +0 -0
  278. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/providers.py +0 -0
  279. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/runtime.py +0 -0
  280. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/sandbox.py +0 -0
  281. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/serve.py +0 -0
  282. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/sessions.py +0 -0
  283. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/share.py +0 -0
  284. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/skillopt.py +0 -0
  285. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/skills.py +0 -0
  286. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/tools.py +0 -0
  287. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/trust.py +0 -0
  288. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/update.py +0 -0
  289. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/work.py +0 -0
  290. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/config/__init__.py +0 -0
  291. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/config/loader.py +0 -0
  292. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/config/schema.py +0 -0
  293. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/core/__init__.py +0 -0
  294. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/danger.py +0 -0
  295. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/data/eval_fixtures/ci-dynamic-root-cause.log +0 -0
  296. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/data/eval_fixtures/ci-root-cause.log +0 -0
  297. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/data/eval_packs/local_dynamic_workflow_smoke.yaml +0 -0
  298. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/data/eval_packs/local_recursive_smoke.yaml +0 -0
  299. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/data/superqode-template.yaml +0 -0
  300. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/design_system.py +0 -0
  301. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/dialogs/__init__.py +0 -0
  302. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/dialogs/base.py +0 -0
  303. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/dialogs/model.py +0 -0
  304. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/dialogs/provider.py +0 -0
  305. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/dialogs/runtime.py +0 -0
  306. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/diff_view.py +0 -0
  307. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/enterprise.py +0 -0
  308. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/evaluation/__init__.py +0 -0
  309. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/evaluation/adapters.py +0 -0
  310. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/evaluation/behaviors.py +0 -0
  311. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/evaluation/engine.py +0 -0
  312. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/evaluation/scenarios.py +0 -0
  313. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/execution/__init__.py +0 -0
  314. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/execution/linter.py +0 -0
  315. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/execution/modes.py +0 -0
  316. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/execution/resolver.py +0 -0
  317. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/execution/runner.py +0 -0
  318. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/extensions.py +0 -0
  319. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/file_explorer.py +0 -0
  320. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/file_viewer.py +0 -0
  321. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/flash.py +0 -0
  322. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/governance.py +0 -0
  323. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/__init__.py +0 -0
  324. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/accelerator.py +0 -0
  325. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/agent_importer.py +0 -0
  326. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/approval_memory.py +0 -0
  327. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/backends/__init__.py +0 -0
  328. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/backends/base.py +0 -0
  329. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/backends/deepagents.py +0 -0
  330. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/backends/managed.py +0 -0
  331. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/backends/pipy.py +0 -0
  332. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/backends/pydanticai.py +0 -0
  333. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/backends/registry.py +0 -0
  334. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/backends/rlm_code.py +0 -0
  335. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/backends/runtime.py +0 -0
  336. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/backends/tau.py +0 -0
  337. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/bench.py +0 -0
  338. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/catalog.py +0 -0
  339. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/compiler.py +0 -0
  340. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/conformance.py +0 -0
  341. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/context_handles.py +0 -0
  342. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/diagnostics.py +0 -0
  343. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/discovery.py +0 -0
  344. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/eval.py +0 -0
  345. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/events.py +0 -0
  346. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/explain.py +0 -0
  347. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/hooks.py +0 -0
  348. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/kernel.py +0 -0
  349. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/loader.py +0 -0
  350. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/mcp_bridge.py +0 -0
  351. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/model_policy.py +0 -0
  352. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/model_routes.py +0 -0
  353. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/observability.py +0 -0
  354. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/omni.py +0 -0
  355. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/omnigent_importer.py +0 -0
  356. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/optimize.py +0 -0
  357. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/output.py +0 -0
  358. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/permissions.py +0 -0
  359. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/pipy_adapter.py +0 -0
  360. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/pipy_extensions.py +0 -0
  361. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/promotion.py +0 -0
  362. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/protocol.py +0 -0
  363. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/protocol_adapters.py +0 -0
  364. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/protocol_controller.py +0 -0
  365. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/registry.py +0 -0
  366. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/rlm_code_adapter.py +0 -0
  367. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/sandbox.py +0 -0
  368. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/self_improve.py +0 -0
  369. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/spec.py +0 -0
  370. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/store.py +0 -0
  371. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/tau_adapter.py +0 -0
  372. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/tau_management.py +0 -0
  373. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/templates.py +0 -0
  374. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/testing.py +0 -0
  375. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/wizard.py +0 -0
  376. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/workflow.py +0 -0
  377. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/workflow_presets.py +0 -0
  378. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/headless.py +0 -0
  379. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/history.py +0 -0
  380. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/local/__init__.py +0 -0
  381. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/local/airplane.py +0 -0
  382. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/local/bench.py +0 -0
  383. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/local/build.py +0 -0
  384. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/local/code_index.py +0 -0
  385. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/local/data/model-packs/devstral.yaml +0 -0
  386. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/local/data/model-packs/ds4.yaml +0 -0
  387. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/local/data/model-packs/gemma4.yaml +0 -0
  388. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/local/data/model-packs/glm.yaml +0 -0
  389. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/local/data/model-packs/gpt-oss.yaml +0 -0
  390. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/local/data/model-packs/kimi.yaml +0 -0
  391. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/local/data/model-packs/laguna.yaml +0 -0
  392. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/local/data/model-packs/minimax.yaml +0 -0
  393. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/local/data/model-packs/qwen-coder.yaml +0 -0
  394. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/local/data/model-packs/qwen3.yaml +0 -0
  395. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/local/data/stack_matrix.yaml +0 -0
  396. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/local/doctor.py +0 -0
  397. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/local/engines.py +0 -0
  398. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/local/guardrails.py +0 -0
  399. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/local/hardware.py +0 -0
  400. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/local/inventory.py +0 -0
  401. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/local/labs.py +0 -0
  402. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/local/laguna.py +0 -0
  403. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/local/matrix.py +0 -0
  404. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/local/migrate.py +0 -0
  405. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/local/optimize.py +0 -0
  406. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/local/packs.py +0 -0
  407. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/local/repo.py +0 -0
  408. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/local/servers.py +0 -0
  409. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/local/setup.py +0 -0
  410. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/local/smoke.py +0 -0
  411. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/logging/__init__.py +0 -0
  412. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/logging/adapters.py +0 -0
  413. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/logging/formatter.py +0 -0
  414. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/logging/integration.py +0 -0
  415. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/logging/sinks.py +0 -0
  416. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/logging/unified_log.py +0 -0
  417. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/lsp/__init__.py +0 -0
  418. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/lsp/client.py +0 -0
  419. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/main.py +0 -0
  420. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/mcp/__init__.py +0 -0
  421. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/mcp/auth_storage.py +0 -0
  422. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/mcp/client.py +0 -0
  423. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/mcp/config.py +0 -0
  424. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/mcp/elicitation.py +0 -0
  425. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/mcp/harness_server.py +0 -0
  426. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/mcp/hf_auth.py +0 -0
  427. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/mcp/integration.py +0 -0
  428. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/mcp/oauth.py +0 -0
  429. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/mcp/oauth_callback.py +0 -0
  430. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/mcp/sampling.py +0 -0
  431. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/mcp/search.py +0 -0
  432. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/mcp/types.py +0 -0
  433. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/memory/__init__.py +0 -0
  434. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/memory/config.py +0 -0
  435. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/memory/providers.py +0 -0
  436. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/memory/types.py +0 -0
  437. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/notifications.py +0 -0
  438. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/permissions/__init__.py +0 -0
  439. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/permissions/rules.py +0 -0
  440. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/__init__.py +0 -0
  441. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/ai/__init__.py +0 -0
  442. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/ai/fake.py +0 -0
  443. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/ai/gateway.py +0 -0
  444. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/ai/models.py +0 -0
  445. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/ai/transform.py +0 -0
  446. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/coding_session.py +0 -0
  447. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/compaction.py +0 -0
  448. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/config.py +0 -0
  449. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/event_stream.py +0 -0
  450. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/events.py +0 -0
  451. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/harness.py +0 -0
  452. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/harness_events.py +0 -0
  453. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/loop.py +0 -0
  454. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/messages.py +0 -0
  455. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/permissions.py +0 -0
  456. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/prompt_templates.py +0 -0
  457. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/provider_events.py +0 -0
  458. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/resources.py +0 -0
  459. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/session/__init__.py +0 -0
  460. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/session/codec.py +0 -0
  461. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/session/entries.py +0 -0
  462. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/session/jsonl.py +0 -0
  463. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/session/memory.py +0 -0
  464. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/session/repository.py +0 -0
  465. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/session/session.py +0 -0
  466. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/session/storage.py +0 -0
  467. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/signals.py +0 -0
  468. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/skills.py +0 -0
  469. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/stream.py +0 -0
  470. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/system_prompt.py +0 -0
  471. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/tools/__init__.py +0 -0
  472. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/tools/base.py +0 -0
  473. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/tools/edit_diff.py +0 -0
  474. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/tools/files.py +0 -0
  475. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/tools/paths.py +0 -0
  476. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/tools/registry.py +0 -0
  477. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/tools/search.py +0 -0
  478. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/tools/shell.py +0 -0
  479. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/tools/truncate.py +0 -0
  480. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/types.py +0 -0
  481. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/validation.py +0 -0
  482. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/plan.py +0 -0
  483. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/platform_locks.py +0 -0
  484. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/plugins.py +0 -0
  485. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/project_trust.py +0 -0
  486. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/__init__.py +0 -0
  487. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/_builtin_profiles.py +0 -0
  488. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/acp_free_models.py +0 -0
  489. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/acp_models.py +0 -0
  490. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/acp_registry.py +0 -0
  491. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/apple_fm.py +0 -0
  492. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/catalog.py +0 -0
  493. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/copilot_auth.py +0 -0
  494. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/credentials.py +0 -0
  495. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/dynamic.py +0 -0
  496. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/env_introspect.py +0 -0
  497. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/free_inference.py +0 -0
  498. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/gateway/__init__.py +0 -0
  499. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/gateway/base.py +0 -0
  500. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/gateway/litellm_gateway.py +0 -0
  501. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/gateway/openresponses_gateway.py +0 -0
  502. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/gateway/synthetic.py +0 -0
  503. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/grok_cli_auth.py +0 -0
  504. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/health.py +0 -0
  505. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/huggingface/__init__.py +0 -0
  506. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/huggingface/convert.py +0 -0
  507. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/huggingface/downloader.py +0 -0
  508. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/huggingface/endpoints.py +0 -0
  509. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/huggingface/fetch.py +0 -0
  510. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/huggingface/hub.py +0 -0
  511. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/huggingface/inference.py +0 -0
  512. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/huggingface/transformers_runner.py +0 -0
  513. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/live_models.py +0 -0
  514. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/local/__init__.py +0 -0
  515. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/local/_mlx_worker.py +0 -0
  516. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/local/base.py +0 -0
  517. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/local/context_probe.py +0 -0
  518. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/local/discovery.py +0 -0
  519. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/local/ds4.py +0 -0
  520. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/local/lmstudio.py +0 -0
  521. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/local/mlx.py +0 -0
  522. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/local/mlx_engine.py +0 -0
  523. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/local/mlx_tools.py +0 -0
  524. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/local/ollama.py +0 -0
  525. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/local/sglang.py +0 -0
  526. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/local/smoke.py +0 -0
  527. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/local/tgi.py +0 -0
  528. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/local/tool_support.py +0 -0
  529. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/local/vllm.py +0 -0
  530. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/manager.py +0 -0
  531. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/model_specs.py +0 -0
  532. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/models.py +0 -0
  533. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/models_dev.py +0 -0
  534. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/opencode_models.py +0 -0
  535. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/openresponses/__init__.py +0 -0
  536. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/openresponses/converters/__init__.py +0 -0
  537. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/openresponses/converters/messages.py +0 -0
  538. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/openresponses/converters/tools.py +0 -0
  539. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/openresponses/schema/__init__.py +0 -0
  540. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/openresponses/schema/models.py +0 -0
  541. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/openresponses/streaming/__init__.py +0 -0
  542. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/openresponses/streaming/parser.py +0 -0
  543. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/openresponses/tools/__init__.py +0 -0
  544. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/openresponses/tools/apply_patch.py +0 -0
  545. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/openresponses/tools/code_interpreter.py +0 -0
  546. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/openresponses/tools/file_search.py +0 -0
  547. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/openresponses/tools/mcp_adapter.py +0 -0
  548. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/profiles.py +0 -0
  549. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/recommendations.py +0 -0
  550. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/registry.py +0 -0
  551. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/subscription_env.py +0 -0
  552. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/usage.py +0 -0
  553. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pure_mode.py +0 -0
  554. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/py.typed +0 -0
  555. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/rendering/__init__.py +0 -0
  556. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/rendering/html_export.py +0 -0
  557. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/rendering/markdown.py +0 -0
  558. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/rendering/transcript_export.py +0 -0
  559. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/runtime/__init__.py +0 -0
  560. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/runtime/adk.py +0 -0
  561. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/runtime/antigravity_cli.py +0 -0
  562. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/runtime/antigravity_managed.py +0 -0
  563. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/runtime/antigravity_sdk.py +0 -0
  564. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/runtime/antigravity_status.py +0 -0
  565. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/runtime/base.py +0 -0
  566. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/runtime/builtin.py +0 -0
  567. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/runtime/claude_agent_sdk.py +0 -0
  568. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/runtime/codex_sdk.py +0 -0
  569. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/runtime/copilot_sdk.py +0 -0
  570. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/runtime/devin_cli.py +0 -0
  571. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/runtime/devin_status.py +0 -0
  572. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/runtime/errors.py +0 -0
  573. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/runtime/openai_agents.py +0 -0
  574. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/runtime/openai_sandbox.py +0 -0
  575. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/runtime/openai_session.py +0 -0
  576. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/runtime/pydanticai.py +0 -0
  577. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/runtime/registry.py +0 -0
  578. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/runtime/tool_bridge.py +0 -0
  579. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/runtime/tool_bridge_openai.py +0 -0
  580. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/runtime/tool_bridge_pydanticai.py +0 -0
  581. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/runtime/vendor_cli.py +0 -0
  582. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/safety/__init__.py +0 -0
  583. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/safety/sandbox.py +0 -0
  584. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/safety/warnings.py +0 -0
  585. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/sandbox/__init__.py +0 -0
  586. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/sandbox/backends.py +0 -0
  587. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/sandbox/execution.py +0 -0
  588. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/sandbox/local_sandbox.py +0 -0
  589. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/search_registry.py +0 -0
  590. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/server/__init__.py +0 -0
  591. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/server/api.py +0 -0
  592. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/server/web.py +0 -0
  593. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/session/__init__.py +0 -0
  594. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/session/factory.py +0 -0
  595. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/session/persistence.py +0 -0
  596. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/session/share_artifacts.py +0 -0
  597. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/session/sharing.py +0 -0
  598. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/session/switchboard.py +0 -0
  599. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/session.py +0 -0
  600. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/sidebar.py +0 -0
  601. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/skillopt.py +0 -0
  602. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/skills.py +0 -0
  603. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/stream_view.py +0 -0
  604. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/styles/__init__.py +0 -0
  605. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tool_call.py +0 -0
  606. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/__init__.py +0 -0
  607. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/agent_tools.py +0 -0
  608. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/apply_patch.py +0 -0
  609. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/base.py +0 -0
  610. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/batch_tool.py +0 -0
  611. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/compact_tool.py +0 -0
  612. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/context_handle.py +0 -0
  613. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/context_tools.py +0 -0
  614. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/core_tools.py +0 -0
  615. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/diagnostics.py +0 -0
  616. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/diff_utils.py +0 -0
  617. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/display.py +0 -0
  618. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/dynamic_workflow.py +0 -0
  619. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/edit_tools.py +0 -0
  620. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/enhanced_base.py +0 -0
  621. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/env_policy.py +0 -0
  622. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/file_tools.py +0 -0
  623. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/file_tracking.py +0 -0
  624. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/governed.py +0 -0
  625. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/harness_agent_session.py +0 -0
  626. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/image_tools.py +0 -0
  627. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/lsp_tools.py +0 -0
  628. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/mcp_tools.py +0 -0
  629. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/monty_tool.py +0 -0
  630. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/network_tools.py +0 -0
  631. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/output_spill.py +0 -0
  632. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/peer_agent_tools.py +0 -0
  633. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/permissions.py +0 -0
  634. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/post_edit.py +0 -0
  635. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/question_tool.py +0 -0
  636. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/request_permissions_tool.py +0 -0
  637. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/search_tools.py +0 -0
  638. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/semantic_search.py +0 -0
  639. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/shell_session.py +0 -0
  640. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/shell_tools.py +0 -0
  641. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/skill_tools.py +0 -0
  642. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/spawn_harness.py +0 -0
  643. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/todo_tools.py +0 -0
  644. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/tool_search.py +0 -0
  645. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/validation.py +0 -0
  646. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/web_tools.py +0 -0
  647. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tui_integration.py +0 -0
  648. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tui_widgets/__init__.py +0 -0
  649. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tui_widgets/widgets/__init__.py +0 -0
  650. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tui_widgets/widgets/progress.py +0 -0
  651. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tui_widgets/widgets/tool_display.py +0 -0
  652. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/undo_manager.py +0 -0
  653. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/utils/__init__.py +0 -0
  654. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/utils/error_handling.py +0 -0
  655. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/utils/fuzzy.py +0 -0
  656. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/__init__.py +0 -0
  657. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/agent_store.py +0 -0
  658. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/agent_switcher.py +0 -0
  659. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/animation_manager.py +0 -0
  660. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/code_context.py +0 -0
  661. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/command_palette.py +0 -0
  662. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/connection_status.py +0 -0
  663. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/conversation_history.py +0 -0
  664. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/diff_indicator.py +0 -0
  665. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/enhanced_status_bar.py +0 -0
  666. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/enhanced_toast.py +0 -0
  667. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/file_browser.py +0 -0
  668. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/file_reference.py +0 -0
  669. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/leader_key.py +0 -0
  670. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/mode_switcher.py +0 -0
  671. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/model_picker.py +0 -0
  672. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/permission_preview.py +0 -0
  673. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/prompt.py +0 -0
  674. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/provider_connect.py +0 -0
  675. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/pty_shell.py +0 -0
  676. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/resizable_sidebar.py +0 -0
  677. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/response_changes.py +0 -0
  678. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/response_display.py +0 -0
  679. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/rewind_overlay.py +0 -0
  680. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/rich_tool_display.py +0 -0
  681. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/sidebar_panels.py +0 -0
  682. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/slash_commands.py +0 -0
  683. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/slash_complete.py +0 -0
  684. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/split_view.py +0 -0
  685. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/status_bar.py +0 -0
  686. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/superqode_display.py +0 -0
  687. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/theme_picker.py +0 -0
  688. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/thinking.py +0 -0
  689. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/thinking_display.py +0 -0
  690. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/throbber.py +0 -0
  691. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/toast.py +0 -0
  692. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/unified_output.py +0 -0
  693. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/workorders/__init__.py +0 -0
  694. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/workorders/cockpit.py +0 -0
  695. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/workorders/integration.py +0 -0
  696. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/workorders/models.py +0 -0
  697. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/workorders/runner.py +0 -0
  698. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/workorders/store.py +0 -0
  699. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/workorders/usage.py +0 -0
  700. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/workorders/worker.py +0 -0
  701. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/workspace/__init__.py +0 -0
  702. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/workspace/artifacts.py +0 -0
  703. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/workspace/change_summary.py +0 -0
  704. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/workspace/coordinator.py +0 -0
  705. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/workspace/diff_tracker.py +0 -0
  706. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/workspace/git_guard.py +0 -0
  707. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/workspace/git_snapshot.py +0 -0
  708. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/workspace/manager.py +0 -0
  709. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/workspace/snapshot.py +0 -0
  710. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/workspace/watcher.py +0 -0
  711. {superqode-0.2.76 → superqode-0.2.78}/src/superqode/workspace/worktree.py +0 -0
  712. {superqode-0.2.76 → superqode-0.2.78}/src/superqode.egg-info/SOURCES.txt +0 -0
  713. {superqode-0.2.76 → superqode-0.2.78}/src/superqode.egg-info/dependency_links.txt +0 -0
  714. {superqode-0.2.76 → superqode-0.2.78}/src/superqode.egg-info/entry_points.txt +0 -0
  715. {superqode-0.2.76 → superqode-0.2.78}/src/superqode.egg-info/requires.txt +0 -0
  716. {superqode-0.2.76 → superqode-0.2.78}/src/superqode.egg-info/top_level.txt +0 -0
  717. {superqode-0.2.76 → superqode-0.2.78}/tests/test_030_candidate.py +0 -0
  718. {superqode-0.2.76 → superqode-0.2.78}/tests/test_a2a_bridge.py +0 -0
  719. {superqode-0.2.76 → superqode-0.2.78}/tests/test_acp_agent_dispatch.py +0 -0
  720. {superqode-0.2.76 → superqode-0.2.78}/tests/test_acp_client.py +0 -0
  721. {superqode-0.2.76 → superqode-0.2.78}/tests/test_acp_free_models.py +0 -0
  722. {superqode-0.2.76 → superqode-0.2.78}/tests/test_acp_parent_tool_linking.py +0 -0
  723. {superqode-0.2.76 → superqode-0.2.78}/tests/test_acp_permission_store.py +0 -0
  724. {superqode-0.2.76 → superqode-0.2.78}/tests/test_acp_registry.py +0 -0
  725. {superqode-0.2.76 → superqode-0.2.78}/tests/test_acp_render.py +0 -0
  726. {superqode-0.2.76 → superqode-0.2.78}/tests/test_acp_server.py +0 -0
  727. {superqode-0.2.76 → superqode-0.2.78}/tests/test_acp_session_store.py +0 -0
  728. {superqode-0.2.76 → superqode-0.2.78}/tests/test_acp_slash.py +0 -0
  729. {superqode-0.2.76 → superqode-0.2.78}/tests/test_adaptive_compaction.py +0 -0
  730. {superqode-0.2.76 → superqode-0.2.78}/tests/test_agent_importer.py +0 -0
  731. {superqode-0.2.76 → superqode-0.2.78}/tests/test_agent_install_commands.py +0 -0
  732. {superqode-0.2.76 → superqode-0.2.78}/tests/test_agent_loop_harness.py +0 -0
  733. {superqode-0.2.76 → superqode-0.2.78}/tests/test_agent_memory.py +0 -0
  734. {superqode-0.2.76 → superqode-0.2.78}/tests/test_agents_md_compat.py +0 -0
  735. {superqode-0.2.76 → superqode-0.2.78}/tests/test_agy_tui_commands.py +0 -0
  736. {superqode-0.2.76 → superqode-0.2.78}/tests/test_app_main_contract.py +0 -0
  737. {superqode-0.2.76 → superqode-0.2.78}/tests/test_apply_patch.py +0 -0
  738. {superqode-0.2.76 → superqode-0.2.78}/tests/test_auth.py +0 -0
  739. {superqode-0.2.76 → superqode-0.2.78}/tests/test_bash_spill.py +0 -0
  740. {superqode-0.2.76 → superqode-0.2.78}/tests/test_benchmarks.py +0 -0
  741. {superqode-0.2.76 → superqode-0.2.78}/tests/test_catalog_freshness.py +0 -0
  742. {superqode-0.2.76 → superqode-0.2.78}/tests/test_change_summary.py +0 -0
  743. {superqode-0.2.76 → superqode-0.2.78}/tests/test_channels.py +0 -0
  744. {superqode-0.2.76 → superqode-0.2.78}/tests/test_cli_commands.py +0 -0
  745. {superqode-0.2.76 → superqode-0.2.78}/tests/test_cli_connect.py +0 -0
  746. {superqode-0.2.76 → superqode-0.2.78}/tests/test_clickable_commands.py +0 -0
  747. {superqode-0.2.76 → superqode-0.2.78}/tests/test_command_safety.py +0 -0
  748. {superqode-0.2.76 → superqode-0.2.78}/tests/test_commands_runtime.py +0 -0
  749. {superqode-0.2.76 → superqode-0.2.78}/tests/test_compaction.py +0 -0
  750. {superqode-0.2.76 → superqode-0.2.78}/tests/test_config_loader.py +0 -0
  751. {superqode-0.2.76 → superqode-0.2.78}/tests/test_config_runtime.py +0 -0
  752. {superqode-0.2.76 → superqode-0.2.78}/tests/test_connect_setup.py +0 -0
  753. {superqode-0.2.76 → superqode-0.2.78}/tests/test_context_handles.py +0 -0
  754. {superqode-0.2.76 → superqode-0.2.78}/tests/test_context_probe.py +0 -0
  755. {superqode-0.2.76 → superqode-0.2.78}/tests/test_context_remaining.py +0 -0
  756. {superqode-0.2.76 → superqode-0.2.78}/tests/test_copilot_login_ux.py +0 -0
  757. {superqode-0.2.76 → superqode-0.2.78}/tests/test_copilot_tui_commands.py +0 -0
  758. {superqode-0.2.76 → superqode-0.2.78}/tests/test_create_skill_tool.py +0 -0
  759. {superqode-0.2.76 → superqode-0.2.78}/tests/test_deferred_tools.py +0 -0
  760. {superqode-0.2.76 → superqode-0.2.78}/tests/test_design_system_contrast.py +0 -0
  761. {superqode-0.2.76 → superqode-0.2.78}/tests/test_developer_workflow_docs.py +0 -0
  762. {superqode-0.2.76 → superqode-0.2.78}/tests/test_ds4_local_client.py +0 -0
  763. {superqode-0.2.76 → superqode-0.2.78}/tests/test_dynamic_workflow_tool.py +0 -0
  764. {superqode-0.2.76 → superqode-0.2.78}/tests/test_edit_line_number_strip.py +0 -0
  765. {superqode-0.2.76 → superqode-0.2.78}/tests/test_env_introspect.py +0 -0
  766. {superqode-0.2.76 → superqode-0.2.78}/tests/test_execution_resolver.py +0 -0
  767. {superqode-0.2.76 → superqode-0.2.78}/tests/test_extensions.py +0 -0
  768. {superqode-0.2.76 → superqode-0.2.78}/tests/test_final_parity_wave.py +0 -0
  769. {superqode-0.2.76 → superqode-0.2.78}/tests/test_free_models.py +0 -0
  770. {superqode-0.2.76 → superqode-0.2.78}/tests/test_governance.py +0 -0
  771. {superqode-0.2.76 → superqode-0.2.78}/tests/test_grok_cli_auth.py +0 -0
  772. {superqode-0.2.76 → superqode-0.2.78}/tests/test_harness_agent_session.py +0 -0
  773. {superqode-0.2.76 → superqode-0.2.78}/tests/test_harness_backends.py +0 -0
  774. {superqode-0.2.76 → superqode-0.2.78}/tests/test_harness_bench.py +0 -0
  775. {superqode-0.2.76 → superqode-0.2.78}/tests/test_harness_catalog.py +0 -0
  776. {superqode-0.2.76 → superqode-0.2.78}/tests/test_harness_eval_splits.py +0 -0
  777. {superqode-0.2.76 → superqode-0.2.78}/tests/test_harness_examples.py +0 -0
  778. {superqode-0.2.76 → superqode-0.2.78}/tests/test_harness_explain.py +0 -0
  779. {superqode-0.2.76 → superqode-0.2.78}/tests/test_harness_hooks.py +0 -0
  780. {superqode-0.2.76 → superqode-0.2.78}/tests/test_harness_kernel.py +0 -0
  781. {superqode-0.2.76 → superqode-0.2.78}/tests/test_harness_mcp_server.py +0 -0
  782. {superqode-0.2.76 → superqode-0.2.78}/tests/test_harness_model_policy.py +0 -0
  783. {superqode-0.2.76 → superqode-0.2.78}/tests/test_harness_observability.py +0 -0
  784. {superqode-0.2.76 → superqode-0.2.78}/tests/test_harness_omni.py +0 -0
  785. {superqode-0.2.76 → superqode-0.2.78}/tests/test_harness_output.py +0 -0
  786. {superqode-0.2.76 → superqode-0.2.78}/tests/test_harness_permissions.py +0 -0
  787. {superqode-0.2.76 → superqode-0.2.78}/tests/test_harness_promotion.py +0 -0
  788. {superqode-0.2.76 → superqode-0.2.78}/tests/test_harness_protocol.py +0 -0
  789. {superqode-0.2.76 → superqode-0.2.78}/tests/test_harness_sandbox.py +0 -0
  790. {superqode-0.2.76 → superqode-0.2.78}/tests/test_harness_seesaw_dimensions.py +0 -0
  791. {superqode-0.2.76 → superqode-0.2.78}/tests/test_harness_self_improve.py +0 -0
  792. {superqode-0.2.76 → superqode-0.2.78}/tests/test_harness_spec.py +0 -0
  793. {superqode-0.2.76 → superqode-0.2.78}/tests/test_harness_store.py +0 -0
  794. {superqode-0.2.76 → superqode-0.2.78}/tests/test_harness_usage.py +0 -0
  795. {superqode-0.2.76 → superqode-0.2.78}/tests/test_harness_wizard.py +0 -0
  796. {superqode-0.2.76 → superqode-0.2.78}/tests/test_harness_workflow.py +0 -0
  797. {superqode-0.2.76 → superqode-0.2.78}/tests/test_headless.py +0 -0
  798. {superqode-0.2.76 → superqode-0.2.78}/tests/test_hf_fetch.py +0 -0
  799. {superqode-0.2.76 → superqode-0.2.78}/tests/test_hooks.py +0 -0
  800. {superqode-0.2.76 → superqode-0.2.78}/tests/test_install_script.py +0 -0
  801. {superqode-0.2.76 → superqode-0.2.78}/tests/test_integration_docs.py +0 -0
  802. {superqode-0.2.76 → superqode-0.2.78}/tests/test_kimi_k3_provider.py +0 -0
  803. {superqode-0.2.76 → superqode-0.2.78}/tests/test_kimi_k3_routes.py +0 -0
  804. {superqode-0.2.76 → superqode-0.2.78}/tests/test_linter_runner.py +0 -0
  805. {superqode-0.2.76 → superqode-0.2.78}/tests/test_litellm_gateway.py +0 -0
  806. {superqode-0.2.76 → superqode-0.2.78}/tests/test_live_acp_registry.py +0 -0
  807. {superqode-0.2.76 → superqode-0.2.78}/tests/test_live_models.py +0 -0
  808. {superqode-0.2.76 → superqode-0.2.78}/tests/test_local_airplane.py +0 -0
  809. {superqode-0.2.76 → superqode-0.2.78}/tests/test_local_build.py +0 -0
  810. {superqode-0.2.76 → superqode-0.2.78}/tests/test_local_code_index.py +0 -0
  811. {superqode-0.2.76 → superqode-0.2.78}/tests/test_local_labs.py +0 -0
  812. {superqode-0.2.76 → superqode-0.2.78}/tests/test_local_migrate.py +0 -0
  813. {superqode-0.2.76 → superqode-0.2.78}/tests/test_local_model_optimizations.py +0 -0
  814. {superqode-0.2.76 → superqode-0.2.78}/tests/test_local_packs.py +0 -0
  815. {superqode-0.2.76 → superqode-0.2.78}/tests/test_local_sandbox.py +0 -0
  816. {superqode-0.2.76 → superqode-0.2.78}/tests/test_local_search.py +0 -0
  817. {superqode-0.2.76 → superqode-0.2.78}/tests/test_local_servers.py +0 -0
  818. {superqode-0.2.76 → superqode-0.2.78}/tests/test_local_setup.py +0 -0
  819. {superqode-0.2.76 → superqode-0.2.78}/tests/test_local_smoke.py +0 -0
  820. {superqode-0.2.76 → superqode-0.2.78}/tests/test_local_stack.py +0 -0
  821. {superqode-0.2.76 → superqode-0.2.78}/tests/test_local_tool_support.py +0 -0
  822. {superqode-0.2.76 → superqode-0.2.78}/tests/test_login_api.py +0 -0
  823. {superqode-0.2.76 → superqode-0.2.78}/tests/test_loop_guard.py +0 -0
  824. {superqode-0.2.76 → superqode-0.2.78}/tests/test_managed_harness_backend.py +0 -0
  825. {superqode-0.2.76 → superqode-0.2.78}/tests/test_markdown_render.py +0 -0
  826. {superqode-0.2.76 → superqode-0.2.78}/tests/test_mcp.py +0 -0
  827. {superqode-0.2.76 → superqode-0.2.78}/tests/test_mcp_example_server.py +0 -0
  828. {superqode-0.2.76 → superqode-0.2.78}/tests/test_mcp_integration.py +0 -0
  829. {superqode-0.2.76 → superqode-0.2.78}/tests/test_mcp_live.py +0 -0
  830. {superqode-0.2.76 → superqode-0.2.78}/tests/test_mcp_oauth_generalized.py +0 -0
  831. {superqode-0.2.76 → superqode-0.2.78}/tests/test_mcp_tools_runtime.py +0 -0
  832. {superqode-0.2.76 → superqode-0.2.78}/tests/test_mcp_two_way.py +0 -0
  833. {superqode-0.2.76 → superqode-0.2.78}/tests/test_memory_recall.py +0 -0
  834. {superqode-0.2.76 → superqode-0.2.78}/tests/test_mlx_tools.py +0 -0
  835. {superqode-0.2.76 → superqode-0.2.78}/tests/test_model_profiles.py +0 -0
  836. {superqode-0.2.76 → superqode-0.2.78}/tests/test_model_specs.py +0 -0
  837. {superqode-0.2.76 → superqode-0.2.78}/tests/test_models_dev.py +0 -0
  838. {superqode-0.2.76 → superqode-0.2.78}/tests/test_monty_tool.py +0 -0
  839. {superqode-0.2.76 → superqode-0.2.78}/tests/test_navigation_history.py +0 -0
  840. {superqode-0.2.76 → superqode-0.2.78}/tests/test_network_policy.py +0 -0
  841. {superqode-0.2.76 → superqode-0.2.78}/tests/test_ollama_client.py +0 -0
  842. {superqode-0.2.76 → superqode-0.2.78}/tests/test_omnigent_agent_session_smoke.py +0 -0
  843. {superqode-0.2.76 → superqode-0.2.78}/tests/test_omnigent_importer.py +0 -0
  844. {superqode-0.2.76 → superqode-0.2.78}/tests/test_openai_session.py +0 -0
  845. {superqode-0.2.76 → superqode-0.2.78}/tests/test_output_spill.py +0 -0
  846. {superqode-0.2.76 → superqode-0.2.78}/tests/test_parallel_compare.py +0 -0
  847. {superqode-0.2.76 → superqode-0.2.78}/tests/test_peer_agents.py +0 -0
  848. {superqode-0.2.76 → superqode-0.2.78}/tests/test_plugin_hook_wiring.py +0 -0
  849. {superqode-0.2.76 → superqode-0.2.78}/tests/test_plugins.py +0 -0
  850. {superqode-0.2.76 → superqode-0.2.78}/tests/test_policies_and_turndiff.py +0 -0
  851. {superqode-0.2.76 → superqode-0.2.78}/tests/test_post_edit_verify.py +0 -0
  852. {superqode-0.2.76 → superqode-0.2.78}/tests/test_progressive_discovery.py +0 -0
  853. {superqode-0.2.76 → superqode-0.2.78}/tests/test_progressive_reveals.py +0 -0
  854. {superqode-0.2.76 → superqode-0.2.78}/tests/test_project_trust.py +0 -0
  855. {superqode-0.2.76 → superqode-0.2.78}/tests/test_prompt_stack.py +0 -0
  856. {superqode-0.2.76 → superqode-0.2.78}/tests/test_provider_catalog.py +0 -0
  857. {superqode-0.2.76 → superqode-0.2.78}/tests/test_provider_dynamic.py +0 -0
  858. {superqode-0.2.76 → superqode-0.2.78}/tests/test_provider_models.py +0 -0
  859. {superqode-0.2.76 → superqode-0.2.78}/tests/test_provider_recommendations.py +0 -0
  860. {superqode-0.2.76 → superqode-0.2.78}/tests/test_pure_mode_sessions.py +0 -0
  861. {superqode-0.2.76 → superqode-0.2.78}/tests/test_qm_deployment_layer.py +0 -0
  862. {superqode-0.2.76 → superqode-0.2.78}/tests/test_rate_limit_retry.py +0 -0
  863. {superqode-0.2.76 → superqode-0.2.78}/tests/test_read_tool_limits.py +0 -0
  864. {superqode-0.2.76 → superqode-0.2.78}/tests/test_reasoning_and_budget.py +0 -0
  865. {superqode-0.2.76 → superqode-0.2.78}/tests/test_recursive_eval_packs.py +0 -0
  866. {superqode-0.2.76 → superqode-0.2.78}/tests/test_release_metadata.py +0 -0
  867. {superqode-0.2.76 → superqode-0.2.78}/tests/test_rlm_code_integration.py +0 -0
  868. {superqode-0.2.76 → superqode-0.2.78}/tests/test_runtime_adk.py +0 -0
  869. {superqode-0.2.76 → superqode-0.2.78}/tests/test_runtime_antigravity_cli.py +0 -0
  870. {superqode-0.2.76 → superqode-0.2.78}/tests/test_runtime_antigravity_managed.py +0 -0
  871. {superqode-0.2.76 → superqode-0.2.78}/tests/test_runtime_antigravity_sdk.py +0 -0
  872. {superqode-0.2.76 → superqode-0.2.78}/tests/test_runtime_builtin.py +0 -0
  873. {superqode-0.2.76 → superqode-0.2.78}/tests/test_runtime_claude_agent_sdk.py +0 -0
  874. {superqode-0.2.76 → superqode-0.2.78}/tests/test_runtime_codex_sdk.py +0 -0
  875. {superqode-0.2.76 → superqode-0.2.78}/tests/test_runtime_copilot_sdk.py +0 -0
  876. {superqode-0.2.76 → superqode-0.2.78}/tests/test_runtime_devin_cli.py +0 -0
  877. {superqode-0.2.76 → superqode-0.2.78}/tests/test_runtime_dialog.py +0 -0
  878. {superqode-0.2.76 → superqode-0.2.78}/tests/test_runtime_openai_agents.py +0 -0
  879. {superqode-0.2.76 → superqode-0.2.78}/tests/test_runtime_openai_events.py +0 -0
  880. {superqode-0.2.76 → superqode-0.2.78}/tests/test_runtime_openai_hitl.py +0 -0
  881. {superqode-0.2.76 → superqode-0.2.78}/tests/test_runtime_openai_sandbox.py +0 -0
  882. {superqode-0.2.76 → superqode-0.2.78}/tests/test_runtime_protocol.py +0 -0
  883. {superqode-0.2.76 → superqode-0.2.78}/tests/test_runtime_pydanticai.py +0 -0
  884. {superqode-0.2.76 → superqode-0.2.78}/tests/test_sandbox_backends.py +0 -0
  885. {superqode-0.2.76 → superqode-0.2.78}/tests/test_sandbox_execution.py +0 -0
  886. {superqode-0.2.76 → superqode-0.2.78}/tests/test_search_roots.py +0 -0
  887. {superqode-0.2.76 → superqode-0.2.78}/tests/test_semantic_search.py +0 -0
  888. {superqode-0.2.76 → superqode-0.2.78}/tests/test_session_switchboard.py +0 -0
  889. {superqode-0.2.76 → superqode-0.2.78}/tests/test_shell_session.py +0 -0
  890. {superqode-0.2.76 → superqode-0.2.78}/tests/test_simple_login.py +0 -0
  891. {superqode-0.2.76 → superqode-0.2.78}/tests/test_simple_query_fastpath.py +0 -0
  892. {superqode-0.2.76 → superqode-0.2.78}/tests/test_skillopt.py +0 -0
  893. {superqode-0.2.76 → superqode-0.2.78}/tests/test_slash_runtime.py +0 -0
  894. {superqode-0.2.76 → superqode-0.2.78}/tests/test_spawn_harness_tool.py +0 -0
  895. {superqode-0.2.76 → superqode-0.2.78}/tests/test_status_bar_layout.py +0 -0
  896. {superqode-0.2.76 → superqode-0.2.78}/tests/test_steering_continue_reminders.py +0 -0
  897. {superqode-0.2.76 → superqode-0.2.78}/tests/test_subscription_billing_policy.py +0 -0
  898. {superqode-0.2.76 → superqode-0.2.78}/tests/test_subscription_login.py +0 -0
  899. {superqode-0.2.76 → superqode-0.2.78}/tests/test_synthetic_gateways.py +0 -0
  900. {superqode-0.2.76 → superqode-0.2.78}/tests/test_tau_harness_adapter.py +0 -0
  901. {superqode-0.2.76 → superqode-0.2.78}/tests/test_terminal_output_limits.py +0 -0
  902. {superqode-0.2.76 → superqode-0.2.78}/tests/test_theme_contrast.py +0 -0
  903. {superqode-0.2.76 → superqode-0.2.78}/tests/test_theme_picker.py +0 -0
  904. {superqode-0.2.76 → superqode-0.2.78}/tests/test_theme_repaint.py +0 -0
  905. {superqode-0.2.76 → superqode-0.2.78}/tests/test_todo_tools.py +0 -0
  906. {superqode-0.2.76 → superqode-0.2.78}/tests/test_tool_args_repair.py +0 -0
  907. {superqode-0.2.76 → superqode-0.2.78}/tests/test_tool_batch_safety.py +0 -0
  908. {superqode-0.2.76 → superqode-0.2.78}/tests/test_tool_bridge.py +0 -0
  909. {superqode-0.2.76 → superqode-0.2.78}/tests/test_tool_bridge_openai.py +0 -0
  910. {superqode-0.2.76 → superqode-0.2.78}/tests/test_tool_call_repair.py +0 -0
  911. {superqode-0.2.76 → superqode-0.2.78}/tests/test_tool_output_pruning.py +0 -0
  912. {superqode-0.2.76 → superqode-0.2.78}/tests/test_tool_tracking.py +0 -0
  913. {superqode-0.2.76 → superqode-0.2.78}/tests/test_tools.py +0 -0
  914. {superqode-0.2.76 → superqode-0.2.78}/tests/test_tui_change_summary.py +0 -0
  915. {superqode-0.2.76 → superqode-0.2.78}/tests/test_tui_chat_mode.py +0 -0
  916. {superqode-0.2.76 → superqode-0.2.78}/tests/test_tui_diagnostics.py +0 -0
  917. {superqode-0.2.76 → superqode-0.2.78}/tests/test_tui_exit.py +0 -0
  918. {superqode-0.2.76 → superqode-0.2.78}/tests/test_tui_feedback.py +0 -0
  919. {superqode-0.2.76 → superqode-0.2.78}/tests/test_tui_llamacpp_connect.py +0 -0
  920. {superqode-0.2.76 → superqode-0.2.78}/tests/test_tui_markdown_cleanup.py +0 -0
  921. {superqode-0.2.76 → superqode-0.2.78}/tests/test_tui_mlx_connect.py +0 -0
  922. {superqode-0.2.76 → superqode-0.2.78}/tests/test_tui_mounted.py +0 -0
  923. {superqode-0.2.76 → superqode-0.2.78}/tests/test_tui_onboarding.py +0 -0
  924. {superqode-0.2.76 → superqode-0.2.78}/tests/test_tui_smoke.py +0 -0
  925. {superqode-0.2.76 → superqode-0.2.78}/tests/test_tui_tool_display.py +0 -0
  926. {superqode-0.2.76 → superqode-0.2.78}/tests/test_update_command.py +0 -0
  927. {superqode-0.2.76 → superqode-0.2.78}/tests/test_vendor_cli_runtime.py +0 -0
  928. {superqode-0.2.76 → superqode-0.2.78}/tests/test_version.py +0 -0
  929. {superqode-0.2.76 → superqode-0.2.78}/tests/test_view_image.py +0 -0
  930. {superqode-0.2.76 → superqode-0.2.78}/tests/test_web_server_auth.py +0 -0
  931. {superqode-0.2.76 → superqode-0.2.78}/tests/test_workorders.py +0 -0
  932. {superqode-0.2.76 → superqode-0.2.78}/tests/test_workspace.py +0 -0
  933. {superqode-0.2.76 → superqode-0.2.78}/tests/test_zai_provider.py +0 -0
@@ -7,6 +7,64 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.2.78] - 2026-08-07
11
+
12
+ ### Fixed
13
+
14
+ - The vendor model picker keeps the highlighted row on screen and accepts a
15
+ click anywhere on the row. Both were fine for a vendor with a handful of
16
+ models and broke on a longer catalog.
17
+ - ACP sessions report the connected agent as the active harness in the status
18
+ bar instead of the native profile.
19
+
20
+ ### Added
21
+
22
+ - `:prime local` registers the local model servers SuperQode can see with Prime
23
+ Agent, leaving providers it did not discover untouched.
24
+ - `:prime login` hands the terminal to Prime Agent for its own sign-in.
25
+ - `:prime models` opens the model picker, and `:prime model <provider/id>` sets
26
+ one directly.
27
+
28
+ ## [0.2.77] - 2026-08-07
29
+
30
+ Fixes the Prime Agent connection shipped in 0.2.76. Connecting without first
31
+ choosing a model launched the agent with a model literally named `auto`, which
32
+ sent the session to a provider the user had never selected and failed on a
33
+ missing key. Prime Agent also now appears in the Subscriptions group of
34
+ `:connect`, because what its login buys is a model on a plan you already pay
35
+ for.
36
+
37
+ ### Fixed
38
+
39
+ - Prime Agent connects when no model has been chosen. `auto` is SuperQode's
40
+ internal marker for "no model selected", and the Prime route forwarded it as
41
+ a real model id, so every default connection ran
42
+ `prime-agent --mode acp --model auto` and reported "No API key found" for
43
+ whichever provider Prime resolved that against. The marker now resolves to
44
+ unset in `split_selector`, so a bare `:prime connect` starts Prime on its own
45
+ default and a pinned selection is still honored. `default` and `none` are
46
+ treated the same way, and a provider with an unset model keeps the provider.
47
+
48
+ ### Added
49
+
50
+ - Prime Agent is listed under `:connect` in Subscriptions alongside Codex,
51
+ Cursor, Muse Code and Grok. It reaches the same ACP route as `:prime connect`,
52
+ and readiness detects the binary together with any credential, whether that is
53
+ Prime's own auth file, a provider key in the environment, or a local provider
54
+ in `models.json`.
55
+ - Documentation states that this login cannot be run from SuperQode. Prime Agent
56
+ has no `login` subcommand and exposes `/login` only inside its own interactive
57
+ terminal, so the flow is to run `prime-agent`, sign in there, and return.
58
+ SuperQode then detects the stored credential.
59
+
60
+ ### Notes
61
+
62
+ - Prime Agent is deliberately excluded from the subscription key-stripping
63
+ policy. That policy exists for vendors like Muse Code, where an environment
64
+ key silently overrides an account session. Prime Agent's auth file takes
65
+ priority over environment variables, so there is no billing diversion to
66
+ prevent, and stripping keys would break its documented environment-key route.
67
+
10
68
  ## [0.2.76] - 2026-08-07
11
69
 
12
70
  Prime Intellect's Prime Agent is a supported coding agent. It connects over ACP
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: superqode
3
- Version: 0.2.76
3
+ Version: 0.2.78
4
4
  Summary: Agent Engineering for your code factory
5
5
  Author-email: Shashi Jagtap <info@super-agentic.ai>
6
6
  Maintainer-email: Shashi Jagtap <info@super-agentic.ai>
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "superqode"
3
- version = "0.2.76"
3
+ version = "0.2.78"
4
4
  description = "Agent Engineering for your code factory"
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__ = "0.2.76"
41
+ __version__ = "0.2.78"
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
@@ -397,7 +397,7 @@ COMMANDS = [
397
397
  ":prime help",
398
398
  ":prime connect",
399
399
  ":prime models",
400
- ":prime model",
400
+ ":prime local",
401
401
  ":prime depth",
402
402
  ":prime goal",
403
403
  ":prime autonomous",
@@ -1941,7 +1941,10 @@ class AgentRunMixin:
1941
1941
  from superqode.providers import prime_agent as prime
1942
1942
 
1943
1943
  opts = self._prime_opts()
1944
- selector = (model or "").strip() or opts.model
1944
+ requested = (model or "").strip()
1945
+ if requested.lower() in {"auto", "default", "none"}:
1946
+ requested = ""
1947
+ selector = requested or opts.model
1945
1948
  command = prime.acp_command(selector, options=opts)
1946
1949
  acp_extra_env = opts.env()
1947
1950
  model_display = f"prime/{selector}" if selector else "prime/default"
@@ -3211,6 +3211,8 @@ class CommandImplMixin:
3211
3211
  self._prime_connect(rest, log)
3212
3212
  else:
3213
3213
  self._show_prime_model_picker(log)
3214
+ elif sub in ("local", "sync"):
3215
+ self._prime_local_cmd(log)
3214
3216
  elif sub == "depth":
3215
3217
  self._prime_depth_cmd(rest, log)
3216
3218
  elif sub == "goal":
@@ -3230,7 +3232,7 @@ class CommandImplMixin:
3230
3232
  elif sub == "update":
3231
3233
  self._prime_update(log)
3232
3234
  elif sub in ("login", "auth"):
3233
- self._show_prime_login(log)
3235
+ self._prime_login_cmd(log)
3234
3236
  elif sub in ("help", "?"):
3235
3237
  self._show_prime_help(log)
3236
3238
  else:
@@ -3311,6 +3313,84 @@ class CommandImplMixin:
3311
3313
  if pinned:
3312
3314
  log.add_info(f"Prime Agent launch: {', '.join(pinned)}")
3313
3315
 
3316
+ def _prime_login_cmd(self, log) -> None:
3317
+ """Hand the terminal to Prime Agent so its own ``/login`` can run.
3318
+
3319
+ Prime exposes no login subcommand and no authentication call over ACP
3320
+ or RPC, so SuperQode cannot drive the OAuth itself. Suspending for the
3321
+ vendor's own terminal is as close as its surface allows, and it keeps
3322
+ the user inside SuperQode rather than sending them elsewhere.
3323
+ """
3324
+ from superqode.providers import prime_agent as prime
3325
+
3326
+ if not prime.is_installed():
3327
+ log.add_error("Prime Agent is not installed.")
3328
+ log.add_info(f" Install: {prime.INSTALL_HINT}")
3329
+ return
3330
+
3331
+ started = self._begin_subscription_login(
3332
+ "prime-agent",
3333
+ log,
3334
+ on_success=lambda: self._show_prime_status(log),
3335
+ reason=(
3336
+ "Prime Agent needs a provider before it can call a model. "
3337
+ "Prime has no login subcommand, so SuperQode hands over the "
3338
+ "terminal and its full session opens. Run /login, then QUIT "
3339
+ "Prime with /quit or Ctrl+C: SuperQode resumes only when Prime "
3340
+ "exits."
3341
+ ),
3342
+ )
3343
+ if not started:
3344
+ log.add_info("Prime Agent already has a credential.")
3345
+ self._show_prime_status(log)
3346
+
3347
+ def _prime_local_cmd(self, log) -> None:
3348
+ """Register the local model servers SuperQode can see with Prime Agent."""
3349
+ from superqode.providers import prime_agent as prime
3350
+
3351
+ if not prime.is_installed():
3352
+ log.add_error("Prime Agent is not installed.")
3353
+ log.add_info(f" Install: {prime.INSTALL_HINT}")
3354
+ return
3355
+ self.run_worker(self._prime_local_async(log), exclusive=False)
3356
+
3357
+ async def _prime_local_async(self, log) -> None:
3358
+ """Scan for local servers, then merge them into Prime's models.json."""
3359
+ from superqode.providers import prime_agent as prime
3360
+ from superqode.providers.local.discovery import quick_scan
3361
+
3362
+ log.add_info("Scanning for local model servers...")
3363
+ try:
3364
+ found = await quick_scan()
3365
+ except Exception as exc: # noqa: BLE001 - discovery is best-effort
3366
+ log.add_error(f"Local discovery failed: {exc}")
3367
+ return
3368
+
3369
+ discovered: dict[str, tuple[str, list[str]]] = {}
3370
+ for provider in found.values():
3371
+ name = prime.local_provider_name(getattr(provider, "provider_type", None))
3372
+ models = [prime.local_model_id(m) for m in (getattr(provider, "models", None) or [])]
3373
+ if not name or not models:
3374
+ continue
3375
+ host = str(getattr(provider, "host", "") or "").rstrip("/")
3376
+ discovered[name] = (f"{host}/v1", models)
3377
+
3378
+ if not discovered:
3379
+ log.add_error("No local model servers found.")
3380
+ log.add_info(" Start one (for example `ollama serve`) and run :prime local again.")
3381
+ return
3382
+
3383
+ providers, models, path = await asyncio.to_thread(prime.merge_local_models, discovered)
3384
+ if not models:
3385
+ log.add_error("Found local servers but no chat models to register.")
3386
+ return
3387
+ log.add_success(f"Registered {models} local model(s) from {providers} provider(s)")
3388
+ for name, (base_url, ids) in sorted(discovered.items()):
3389
+ usable = [m for m in ids if prime.is_chat_model(m)]
3390
+ log.add_info(f" {name}: {len(usable)} model(s) at {base_url}")
3391
+ log.add_info(f" Written to {path}")
3392
+ log.add_info(" Run :prime models to pick one.")
3393
+
3314
3394
  def _prime_depth_cmd(self, rest: str, log) -> None:
3315
3395
  """Set Prime's recursion depth for the next launch."""
3316
3396
  raw = (rest or "").strip()
@@ -416,6 +416,23 @@ class ConnectMixin:
416
416
  reason="A local Grok subscription login is required.",
417
417
  )
418
418
  return
419
+ # Prime Agent has no login subcommand, so the handoff runs the
420
+ # binary bare and the user signs in with its own `/login`.
421
+ if getattr(profile, "id", "") == "prime-agent":
422
+ from superqode.providers import prime_agent as prime
423
+
424
+ if prime.is_installed():
425
+ self._begin_subscription_login(
426
+ "prime-agent",
427
+ log,
428
+ on_success=lambda: self._connect_acp_cmd("prime-agent", log),
429
+ reason=(
430
+ "Prime Agent needs a provider before it can call a model. "
431
+ "SuperQode will hand over the terminal; run /login there, "
432
+ "then quit."
433
+ ),
434
+ )
435
+ return
419
436
  log.add_info(f"{profile.label} needs setup: {profile.unavailable_hint}")
420
437
  return
421
438
  if conn == "copilot":
@@ -2696,6 +2713,27 @@ class ConnectMixin:
2696
2713
  self._auto_select_codex_model(model_hint, agent, log)
2697
2714
  else:
2698
2715
  self._show_codex_models_selection(agent, log)
2716
+ elif self.current_agent in ("prime-agent", "prime"):
2717
+ # Prime fixes its model at launch, so the selection lives in
2718
+ # the pinned launch options rather than in the ACP session.
2719
+ # The generic branch below reads a "model" key the catalog
2720
+ # entry does not have, which left the badge empty and made a
2721
+ # picked model look like it had not been applied.
2722
+ hint = (model_hint or "").strip()
2723
+ if hint and hint.lower() not in {"auto", "default", "none"}:
2724
+ self._prime_set_opts(model=hint)
2725
+ opts = self._prime_opts()
2726
+ self.current_model = opts.model
2727
+ self.current_provider = "prime"
2728
+ self._awaiting_model_selection = False
2729
+
2730
+ badge = self.query_one("#mode-badge", ModeBadge)
2731
+ badge.agent = self.current_agent
2732
+ badge.mode = ""
2733
+ badge.role = ""
2734
+ badge.model = self.current_model or "Prime default"
2735
+ badge.provider = self.current_provider
2736
+ badge.execution_mode = "acp"
2699
2737
  elif self.current_agent == "grok":
2700
2738
  # Grok Build owns the subscription and model catalog. Keep
2701
2739
  # the default unset so its signed-in account decides; an
@@ -943,9 +943,11 @@ class DialogsMixin:
943
943
  t.append(" :prime connect [model] ", style=THEME["cyan"])
944
944
  t.append("connect Prime Agent over ACP\n", style=THEME["muted"])
945
945
  t.append(" :prime models [search] ", style=THEME["cyan"])
946
- t.append("list the model catalog\n", style=THEME["muted"])
947
- t.append(" :prime model [name] ", style=THEME["cyan"])
948
- t.append("pick a model (picker) or set provider/model\n", style=THEME["muted"])
946
+ t.append("pick a model, optionally filtered\n", style=THEME["muted"])
947
+ t.append(" :prime model <provider/id> ", style=THEME["cyan"])
948
+ t.append("set a model directly, without the picker\n", style=THEME["muted"])
949
+ t.append(" :prime local ", style=THEME["cyan"])
950
+ t.append("register local model servers with Prime\n", style=THEME["muted"])
949
951
  t.append(" :prime depth [n] ", style=THEME["cyan"])
950
952
  t.append("recursion depth via RLM_MAX_DEPTH\n", style=THEME["muted"])
951
953
  t.append(" :prime goal [text] ", style=THEME["cyan"])
@@ -143,9 +143,16 @@ class HelpersMixin(
143
143
  try:
144
144
  from superqode.app.widgets import ColorfulStatusBar
145
145
 
146
- pure = getattr(self, "_pure_mode", None)
147
146
  harness = ""
148
- if pure is not None:
147
+ # An ACP agent owns its own loop, tools and prompt. Falling through
148
+ # to the native profile below labelled every vendor session "Core"
149
+ # in the status bar while the connection card correctly said the
150
+ # vendor owned it.
151
+ if getattr(self, "current_mode", "") == "agent":
152
+ harness = str(getattr(self, "current_agent", "") or "")
153
+
154
+ pure = getattr(self, "_pure_mode", None)
155
+ if not harness and pure is not None:
149
156
  runtime_name = str(getattr(pure, "runtime_name", "") or "")
150
157
  connected = bool(getattr(getattr(pure, "session", None), "connected", False))
151
158
  if connected and runtime_name in getattr(
@@ -952,6 +952,13 @@ class ModelCatalogMixin:
952
952
  status.update_byok_status()
953
953
  status.active_runtime = "acp"
954
954
  status.active_model = model or ""
955
+ # The agent owns its loop, tools and prompt, so it is the active
956
+ # harness. Leaving this field alone kept the startup value, which
957
+ # showed "h core" for every ACP session while the connection card
958
+ # correctly named the vendor.
959
+ agent = str(getattr(self, "current_agent", "") or "").strip()
960
+ if agent:
961
+ status.active_harness = agent
955
962
  except Exception: # noqa: BLE001
956
963
  pass
957
964
 
@@ -1025,61 +1032,22 @@ class ModelCatalogMixin:
1025
1032
  self._show_provider_models("grok-cli", log, use_picker=False)
1026
1033
 
1027
1034
  def _show_prime_models(self, log, search: str = "") -> None:
1028
- """Discover Prime Agent models off the Textual event loop."""
1029
- self.run_worker(self._show_prime_models_async(log, search), exclusive=False)
1035
+ """``:prime models`` opens the selectable picker, like the other agents."""
1036
+ self._show_prime_model_picker(log, search)
1030
1037
 
1031
- async def _show_prime_models_async(self, log, search: str = "") -> None:
1032
- """List the models the installed Prime Agent reports for its logins."""
1033
- from superqode.providers import prime_agent as prime
1034
-
1035
- if not prime.is_installed():
1036
- t = Text()
1037
- t.append("\n Prime Agent is not installed\n\n", style=f"bold {THEME['warning']}")
1038
- t.append(" Install: ", style=THEME["muted"])
1039
- t.append(f"{prime.INSTALL_HINT}\n", style=THEME["cyan"])
1040
- log.write_feedback(t)
1041
- return
1042
-
1043
- models = await asyncio.to_thread(prime.list_models, search)
1044
-
1045
- t = Text()
1046
- heading = f"\n Prime Agent models{f' matching {search!r}' if search else ''}\n\n"
1047
- t.append(heading, style=f"bold {THEME['text']}")
1048
- if not models:
1049
- t.append(" No models available.\n\n", style=THEME["warning"])
1050
- t.append(" Prime owns its own credentials. Log in first:\n", style=THEME["muted"])
1051
- t.append(" prime-agent\n /login\n", style=THEME["cyan"])
1052
- log.write_feedback(t)
1053
- return
1054
-
1055
- current = self._prime_opts().model
1056
- last_provider = ""
1057
- for info in models:
1058
- if info.provider != last_provider:
1059
- t.append(f"\n {info.provider}\n", style=THEME["muted"])
1060
- last_provider = info.provider
1061
- selected = info.id == current
1062
- t.append(" ▸ " if selected else " ", style=THEME["success"])
1063
- t.append(f"{info.model:28s}", style=THEME["cyan"])
1064
- t.append(f"{info.context:>6s} ", style=THEME["muted"])
1065
- traits = ", ".join(
1066
- [n for n, on in (("thinking", info.thinking), ("images", info.images)) if on]
1067
- )
1068
- t.append(f"{traits}\n", style=THEME["dim"])
1069
-
1070
- t.append("\n Source: ", style=THEME["muted"])
1071
- t.append("`prime-agent model list`\n", style=THEME["text"])
1072
- t.append(" Select with ", style=THEME["muted"])
1073
- t.append(":prime model", style=THEME["cyan"])
1074
- t.append(" (picker) or ", style=THEME["muted"])
1075
- t.append(":prime model <provider/model>\n", style=THEME["cyan"])
1076
- log.write_feedback(t)
1077
-
1078
- def _show_prime_model_picker(self, log) -> None:
1038
+ def _show_prime_model_picker(self, log, search: str = "") -> None:
1079
1039
  """Interactive picker over Prime's catalog; Enter connects."""
1080
- self.run_worker(self._show_prime_model_picker_async(log), exclusive=False)
1040
+ self.run_worker(self._show_prime_model_picker_async(log, search), exclusive=False)
1081
1041
 
1082
- async def _show_prime_model_picker_async(self, log) -> None:
1042
+ def _prime_model_label(self, info) -> str:
1043
+ """One picker row: provider, model, context, and what it supports."""
1044
+ traits = ", ".join(
1045
+ [name for name, on in (("thinking", info.thinking), ("images", info.images)) if on]
1046
+ )
1047
+ detail = f"{info.context:>6s}" + (f" {traits}" if traits else "")
1048
+ return f"{info.provider:16s} {info.model:30s} {detail}"
1049
+
1050
+ async def _show_prime_model_picker_async(self, log, search: str = "") -> None:
1083
1051
  """Probe the catalog off-thread, then open the vendor picker."""
1084
1052
  from superqode.providers import prime_agent as prime
1085
1053
 
@@ -1088,21 +1056,27 @@ class ModelCatalogMixin:
1088
1056
  log.add_info(f" Install: {prime.INSTALL_HINT}")
1089
1057
  return
1090
1058
 
1091
- models = await asyncio.to_thread(prime.list_models)
1059
+ models = await asyncio.to_thread(prime.list_models, search)
1060
+ if not models and search:
1061
+ log.add_info(f"No Prime Agent model matches {search!r}. Showing the full catalog.")
1062
+ models = await asyncio.to_thread(prime.list_models, "")
1092
1063
  if not models:
1093
1064
  log.add_error("Prime Agent reported no models.")
1094
1065
  log.add_info(" Log in first: run `prime-agent`, then `/login`.")
1066
+ log.add_info(" Local models need a provider in ~/.prime/agent/models.json.")
1095
1067
  return
1096
1068
 
1097
- entries = [(info.id, f"{info.id:44s} {info.context}") for info in models]
1098
- self._show_vendor_model_picker(
1069
+ entries = [(info.id, self._prime_model_label(info)) for info in models]
1070
+ opened = self._show_vendor_model_picker(
1099
1071
  log,
1100
- title="Select Prime Agent Model",
1072
+ title=f"Select Prime Agent Model{f' ({search})' if search else ''}",
1101
1073
  entries=entries,
1102
1074
  on_choose=lambda chosen: self._prime_connect(chosen, log),
1103
1075
  current=self._prime_opts().model,
1104
- retry_hint="Run :prime model to choose again.",
1076
+ retry_hint="Run :prime models to choose again.",
1105
1077
  )
1078
+ if not opened:
1079
+ log.add_error("No Prime Agent models to choose from.")
1106
1080
 
1107
1081
  def _claude_model_cmd(self, model: str, log) -> None:
1108
1082
  from superqode.runtime.claude_agent_sdk import CLAUDE_MODELS
@@ -684,36 +684,51 @@ class PickerNavigationMixin:
684
684
  )
685
685
 
686
686
  highlighted = self._prompts.index
687
+ # Vendors with a handful of models fit on one screen; a catalog like
688
+ # Prime Agent's does not. Numbers are right-aligned so the rows stay a
689
+ # column, and the highlighted row is scrolled back into view below.
690
+ number_width = len(str(len(entries)))
687
691
  t = Text()
688
692
  t.append("\n ◈ ", style=f"bold {THEME['purple']}")
689
- t.append(f"{title}\n\n", style=f"bold {THEME['text']}")
693
+ t.append(f"{title}", style=f"bold {THEME['text']}")
694
+ t.append(f" {len(entries)} models\n\n", style=THEME["muted"])
690
695
  for index, (model_id, label) in enumerate(entries):
691
696
  num = index + 1
692
- if index == highlighted:
693
- t.append(" ▶ ", style=f"bold {THEME['success']}")
694
- t.append(
695
- f"[{num}] ", style=self._picker_link_style(f"bold {THEME['success']}", num)
696
- )
697
- t.append(label, style=f"bold {THEME['success']}")
698
- else:
699
- t.append(f" [{num}] ", style=self._picker_link_style(THEME["dim"], num))
700
- t.append(label, style=f"bold {THEME['text']}")
697
+ is_highlighted = index == highlighted
698
+ # The whole row is the click target, not just the number. A mouse
699
+ # user aims at the name they are reading.
700
+ style = f"bold {THEME['success']}" if is_highlighted else THEME["dim"]
701
+ link = self._picker_link_style(style, num)
702
+ handle = self._picker_link_style(
703
+ f"bold {THEME['success']}" if is_highlighted else f"bold {THEME['text']}",
704
+ num,
705
+ handle=True,
706
+ )
707
+ t.append(" ", style="")
708
+ self._append_picker_dot(t, num, highlighted=is_highlighted)
709
+ t.append(f"[{num:>{number_width}}] ", style=link)
710
+ t.append(label, style=handle)
701
711
  # Show the id only when it adds information beyond the label.
702
- if model_id and model_id != label:
712
+ if model_id and model_id != label and model_id not in label:
703
713
  t.append(f" {model_id}", style=THEME["muted"])
704
714
  if current and model_id == current:
705
715
  t.append(" ◀ active", style=THEME["muted"])
716
+ if is_highlighted:
717
+ self._append_picker_arrow(t, num)
706
718
  t.append("\n", style="")
707
719
  t.append("\n 💡 ", style=THEME["muted"])
708
720
  t.append("↑↓", style=THEME["cyan"])
709
721
  t.append(" navigate ", style=THEME["dim"])
710
722
  t.append("Enter", style=THEME["cyan"])
711
- t.append(" select • or type a number\n", style=THEME["dim"])
723
+ t.append(" select • click a row • or type a number\n", style=THEME["dim"])
712
724
 
713
725
  log.auto_scroll = False
714
726
  log.clear()
715
727
  log.write(t)
716
728
  log.auto_scroll = True
729
+ # Without this the highlight walks off the bottom of a long catalog and
730
+ # the user cannot see what is selected.
731
+ self._scroll_to_highlighted_item(log, highlighted, len(entries))
717
732
  self.set_timer(0.05, self._ensure_input_focus)
718
733
  return True
719
734
 
@@ -284,7 +284,7 @@ def render_welcome(
284
284
 
285
285
 
286
286
  #: Harness ids whose product name is not simply the id capitalised.
287
- _HARNESS_NAME_OVERRIDES = {"pipy": "PiPy"}
287
+ _HARNESS_NAME_OVERRIDES = {"pipy": "PiPy", "prime-agent": "Prime Agent"}
288
288
 
289
289
 
290
290
  def _harness_display_name(name) -> str:
@@ -269,6 +269,37 @@ def _muse_signed_in() -> bool:
269
269
  return bool(data.get("providers")) if isinstance(data, dict) else False
270
270
 
271
271
 
272
+ def _prime_agent_signed_in() -> bool:
273
+ """A stored Prime Agent credential exists, from its own ``/login``.
274
+
275
+ Prime reads ``~/.prime/agent/auth.json`` for both OAuth subscriptions and
276
+ API keys. Provider names are enough to answer this; the values are not read.
277
+ """
278
+ from superqode.providers import prime_agent
279
+
280
+ if prime_agent.auth_providers():
281
+ return True
282
+ # Prime also accepts provider keys straight from the environment, so a
283
+ # session can be ready with no auth file at all.
284
+ return any(
285
+ _env_key_set(name)
286
+ for name in ("ANTHROPIC_API_KEY", "OPENAI_API_KEY", "GEMINI_API_KEY", "PRIME_API_KEY")
287
+ ) or bool(prime_agent.custom_providers())
288
+
289
+
290
+ def _prime_agent_ready() -> bool:
291
+ """Prime Agent is installed and has some way to reach a model."""
292
+ from superqode.providers import prime_agent
293
+
294
+ return prime_agent.is_installed() and _prime_agent_signed_in()
295
+
296
+
297
+ def _prime_agent_present() -> bool:
298
+ from superqode.providers import prime_agent
299
+
300
+ return prime_agent.is_installed()
301
+
302
+
272
303
  def _muse_cli_ready() -> bool:
273
304
  """Muse Code is installed and holds a credential it can actually use."""
274
305
  if shutil.which("muse") is None:
@@ -672,6 +703,28 @@ _AGENT_PROFILES: List[ConnectionProfile] = [
672
703
  "`curl -fsSL https://dev.meta.ai/install.sh | bash`, then run `muse login`"
673
704
  ),
674
705
  ),
706
+ ConnectionProfile(
707
+ id="prime-agent",
708
+ harness_openness="open",
709
+ model_openness="multi-model",
710
+ transport="ACP",
711
+ label="Prime Agent (RLM)",
712
+ description=(
713
+ "Prime Intellect's RLM coding agent over ACP, on a provider you already "
714
+ "pay for (ChatGPT, Claude, GitHub Copilot) or a local model. Commands: :prime"
715
+ ),
716
+ # The agent itself is free and MIT. What the login buys is the upstream
717
+ # model, so this sits with the vendor accounts rather than with BYOK.
718
+ connector="acp",
719
+ menu=CONNECT_MENU_VENDORS,
720
+ acp_agent="prime-agent",
721
+ detect=_prime_agent_ready,
722
+ product_detect=_prime_agent_present,
723
+ unavailable_hint=(
724
+ "install with `curl -fsSL https://app.primeintellect.ai/prime-agent/install.sh | sh`, "
725
+ "then run `prime-agent` and use its `/login`"
726
+ ),
727
+ ),
675
728
  ConnectionProfile(
676
729
  id="grok",
677
730
  harness_openness="closed",