superqode 0.2.8__tar.gz → 0.2.9__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 (667) hide show
  1. {superqode-0.2.8 → superqode-0.2.9}/CHANGELOG.md +18 -0
  2. {superqode-0.2.8/src/superqode.egg-info → superqode-0.2.9}/PKG-INFO +2 -1
  3. {superqode-0.2.8 → superqode-0.2.9}/README.md +1 -0
  4. {superqode-0.2.8 → superqode-0.2.9}/pyproject.toml +1 -1
  5. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/__init__.py +1 -1
  6. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/acp_discovery.py +48 -0
  7. superqode-0.2.9/src/superqode/agents/data/x.ai.toml +81 -0
  8. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/app/constants.py +7 -0
  9. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/app/suggester.py +11 -8
  10. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/app_main.py +219 -11
  11. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/commands/acp.py +0 -1
  12. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/main.py +1 -1
  13. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/connection_profiles.py +16 -1
  14. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/gateway/litellm_gateway.py +15 -5
  15. superqode-0.2.9/src/superqode/providers/grok_cli_auth.py +135 -0
  16. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/manager.py +5 -4
  17. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/models.py +157 -0
  18. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/registry.py +42 -9
  19. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/slash_complete.py +21 -8
  20. {superqode-0.2.8 → superqode-0.2.9/src/superqode.egg-info}/PKG-INFO +2 -1
  21. {superqode-0.2.8 → superqode-0.2.9}/src/superqode.egg-info/SOURCES.txt +3 -0
  22. {superqode-0.2.8 → superqode-0.2.9}/tests/test_acp_registry.py +33 -0
  23. {superqode-0.2.8 → superqode-0.2.9}/tests/test_cli_connect.py +7 -0
  24. {superqode-0.2.8 → superqode-0.2.9}/tests/test_connection_profiles.py +42 -3
  25. superqode-0.2.9/tests/test_grok_cli_auth.py +255 -0
  26. {superqode-0.2.8 → superqode-0.2.9}/tests/test_live_models.py +9 -0
  27. superqode-0.2.9/tests/test_provider_models.py +213 -0
  28. {superqode-0.2.8 → superqode-0.2.9}/tests/test_slash_runtime.py +2 -1
  29. {superqode-0.2.8 → superqode-0.2.9}/tests/test_tui_smoke.py +23 -4
  30. superqode-0.2.8/tests/test_provider_models.py +0 -124
  31. {superqode-0.2.8 → superqode-0.2.9}/LICENSE +0 -0
  32. {superqode-0.2.8 → superqode-0.2.9}/MANIFEST.in +0 -0
  33. {superqode-0.2.8 → superqode-0.2.9}/examples/README.md +0 -0
  34. {superqode-0.2.8 → superqode-0.2.9}/examples/byok-acp-team.yaml +0 -0
  35. {superqode-0.2.8 → superqode-0.2.9}/examples/harnesses/coding.yaml +0 -0
  36. {superqode-0.2.8 → superqode-0.2.9}/examples/harnesses/deepagents.yaml +0 -0
  37. {superqode-0.2.8 → superqode-0.2.9}/examples/harnesses/ds4.yaml +0 -0
  38. {superqode-0.2.8 → superqode-0.2.9}/examples/harnesses/gemma4.yaml +0 -0
  39. {superqode-0.2.8 → superqode-0.2.9}/examples/harnesses/google-adk.yaml +0 -0
  40. {superqode-0.2.8 → superqode-0.2.9}/examples/harnesses/local-recursive-dynamic.yaml +0 -0
  41. {superqode-0.2.8 → superqode-0.2.9}/examples/harnesses/no-tool.yaml +0 -0
  42. {superqode-0.2.8 → superqode-0.2.9}/examples/harnesses/omnigent-multi-agent.yaml +0 -0
  43. {superqode-0.2.8 → superqode-0.2.9}/examples/harnesses/openai-agents.yaml +0 -0
  44. {superqode-0.2.8 → superqode-0.2.9}/examples/harnesses/pydanticai.yaml +0 -0
  45. {superqode-0.2.8 → superqode-0.2.9}/examples/local-models-team.yaml +0 -0
  46. {superqode-0.2.8 → superqode-0.2.9}/examples/omnigent-multi-agent.agent.yaml +0 -0
  47. {superqode-0.2.8 → superqode-0.2.9}/examples/simple-team.yaml +0 -0
  48. {superqode-0.2.8 → superqode-0.2.9}/setup.cfg +0 -0
  49. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/a2a/__init__.py +0 -0
  50. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/a2a/client.py +0 -0
  51. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/a2a/presets.py +0 -0
  52. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/a2a/registry.py +0 -0
  53. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/a2a/server.py +0 -0
  54. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/a2a/skills.py +0 -0
  55. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/a2a/tools.py +0 -0
  56. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/a2a/types.py +0 -0
  57. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/a2a/workflows.py +0 -0
  58. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/acp/__init__.py +0 -0
  59. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/acp/client.py +0 -0
  60. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/acp/doctor.py +0 -0
  61. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/acp/permission_screen.py +0 -0
  62. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/acp/permission_store.py +0 -0
  63. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/acp/render.py +0 -0
  64. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/acp/server.py +0 -0
  65. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/acp/session_store.py +0 -0
  66. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/acp/slash.py +0 -0
  67. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/acp/tool_call_context.py +0 -0
  68. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/acp/types.py +0 -0
  69. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agent/__init__.py +0 -0
  70. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agent/auto_memory.py +0 -0
  71. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agent/command_safety.py +0 -0
  72. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agent/compaction.py +0 -0
  73. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agent/context_manager.py +0 -0
  74. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agent/edit_strategies.py +0 -0
  75. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agent/exec_policy.py +0 -0
  76. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agent/hooks.py +0 -0
  77. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agent/loop.py +0 -0
  78. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agent/loop_guard.py +0 -0
  79. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agent/network_policy.py +0 -0
  80. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agent/output_handler.py +0 -0
  81. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agent/parallel_compare.py +0 -0
  82. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agent/peer_agents.py +0 -0
  83. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agent/plan_mode.py +0 -0
  84. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agent/reminders.py +0 -0
  85. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agent/rubric.py +0 -0
  86. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agent/session_manager.py +0 -0
  87. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agent/structured_output.py +0 -0
  88. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agent/summarization.py +0 -0
  89. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agent/system_prompts.py +0 -0
  90. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agent/terminal_output_limits.py +0 -0
  91. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agent/text_tool_calls.py +0 -0
  92. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agent/tool_args.py +0 -0
  93. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agent/tool_tracking.py +0 -0
  94. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agent/utility_model.py +0 -0
  95. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agent_output.py +0 -0
  96. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agent_stream.py +0 -0
  97. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/__init__.py +0 -0
  98. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/acp_registry.py +0 -0
  99. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/client.py +0 -0
  100. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/agentpool.phil65.github.io.toml +0 -0
  101. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/ampcode.com.toml +0 -0
  102. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/augmentcode.com.toml +0 -0
  103. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/autodev.github.io.toml +0 -0
  104. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/blackbox.ai.toml +0 -0
  105. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/bub.dev.toml +0 -0
  106. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/cagent.dev.toml +0 -0
  107. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/claude.com.toml +0 -0
  108. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/cline.bot.toml +0 -0
  109. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/codeassistant.dev.toml +0 -0
  110. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/codex.openai.com.toml +0 -0
  111. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/copilot.github.com.toml +0 -0
  112. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/crow-ai.dev.toml +0 -0
  113. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/cursor.com.toml +0 -0
  114. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/factory.ai.toml +0 -0
  115. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/fastagent.ai.toml +0 -0
  116. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/fount.dev.toml +0 -0
  117. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/geminicli.com.toml +0 -0
  118. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/goose.block.xyz.toml +0 -0
  119. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/hermes-agent.nousresearch.com.toml +0 -0
  120. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/junie.jetbrains.com.toml +0 -0
  121. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/kimi.moonshot.cn.toml +0 -0
  122. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/kiro.dev.toml +0 -0
  123. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/llmlingagent.dev.toml +0 -0
  124. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/minioncode.dev.toml +0 -0
  125. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/mistral-vibe.mistral.ai.toml +0 -0
  126. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/openclaw.ai.toml +0 -0
  127. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/opencode.ai.toml +0 -0
  128. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/openhands.dev.toml +0 -0
  129. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/pi.dev.toml +0 -0
  130. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/poolside.ai.toml +0 -0
  131. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/qoder.com.toml +0 -0
  132. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/qwenlm.github.io.toml +0 -0
  133. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/sigit.dev.toml +0 -0
  134. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/stakpak.dev.toml +0 -0
  135. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/stdiobus.dev.toml +0 -0
  136. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/vtcode.dev.toml +0 -0
  137. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/discovery.py +0 -0
  138. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/free_models.py +0 -0
  139. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/messaging.py +0 -0
  140. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/official_acp.py +0 -0
  141. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/persona.py +0 -0
  142. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/registry.py +0 -0
  143. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/schema.py +0 -0
  144. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/unified.py +0 -0
  145. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/app/__init__.py +0 -0
  146. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/app/css.py +0 -0
  147. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/app/models.py +0 -0
  148. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/app/theme_bridge.py +0 -0
  149. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/app/widgets.py +0 -0
  150. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/app_enhanced.py +0 -0
  151. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/approval.py +0 -0
  152. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/atomic.py +0 -0
  153. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/auth/__init__.py +0 -0
  154. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/benchmarks.py +0 -0
  155. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/channels/__init__.py +0 -0
  156. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/channels/config.py +0 -0
  157. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/channels/discord.py +0 -0
  158. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/channels/service.py +0 -0
  159. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/channels/slack.py +0 -0
  160. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/channels/telegram.py +0 -0
  161. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/claude.py +0 -0
  162. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/codex.py +0 -0
  163. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/commands/__init__.py +0 -0
  164. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/commands/a2a.py +0 -0
  165. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/commands/agents.py +0 -0
  166. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/commands/auth.py +0 -0
  167. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/commands/config.py +0 -0
  168. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/commands/daemon.py +0 -0
  169. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/commands/local.py +0 -0
  170. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/commands/providers.py +0 -0
  171. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/commands/runtime.py +0 -0
  172. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/commands/serve.py +0 -0
  173. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/commands/sessions.py +0 -0
  174. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/config/__init__.py +0 -0
  175. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/config/loader.py +0 -0
  176. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/config/schema.py +0 -0
  177. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/core/__init__.py +0 -0
  178. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/danger.py +0 -0
  179. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/data/eval_fixtures/ci-dynamic-root-cause.log +0 -0
  180. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/data/eval_fixtures/ci-root-cause.log +0 -0
  181. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/data/eval_packs/local_dynamic_workflow_smoke.yaml +0 -0
  182. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/data/eval_packs/local_recursive_smoke.yaml +0 -0
  183. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/data/superqode-template.yaml +0 -0
  184. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/design_system.py +0 -0
  185. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/dialogs/__init__.py +0 -0
  186. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/dialogs/base.py +0 -0
  187. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/dialogs/model.py +0 -0
  188. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/dialogs/provider.py +0 -0
  189. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/dialogs/runtime.py +0 -0
  190. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/diff_view.py +0 -0
  191. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/enterprise.py +0 -0
  192. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/evaluation/__init__.py +0 -0
  193. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/evaluation/adapters.py +0 -0
  194. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/evaluation/behaviors.py +0 -0
  195. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/evaluation/engine.py +0 -0
  196. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/evaluation/scenarios.py +0 -0
  197. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/execution/__init__.py +0 -0
  198. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/execution/linter.py +0 -0
  199. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/execution/modes.py +0 -0
  200. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/execution/resolver.py +0 -0
  201. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/execution/runner.py +0 -0
  202. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/file_explorer.py +0 -0
  203. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/file_viewer.py +0 -0
  204. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/flash.py +0 -0
  205. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/__init__.py +0 -0
  206. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/accelerator.py +0 -0
  207. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/agent_importer.py +0 -0
  208. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/approval_memory.py +0 -0
  209. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/backends/__init__.py +0 -0
  210. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/backends/base.py +0 -0
  211. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/backends/deepagents.py +0 -0
  212. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/backends/managed.py +0 -0
  213. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/backends/pydanticai.py +0 -0
  214. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/backends/registry.py +0 -0
  215. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/backends/runtime.py +0 -0
  216. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/compiler.py +0 -0
  217. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/context_handles.py +0 -0
  218. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/diagnostics.py +0 -0
  219. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/eval.py +0 -0
  220. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/events.py +0 -0
  221. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/explain.py +0 -0
  222. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/hooks.py +0 -0
  223. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/kernel.py +0 -0
  224. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/loader.py +0 -0
  225. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/mcp_bridge.py +0 -0
  226. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/model_policy.py +0 -0
  227. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/observability.py +0 -0
  228. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/omnigent_importer.py +0 -0
  229. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/optimize.py +0 -0
  230. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/output.py +0 -0
  231. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/permissions.py +0 -0
  232. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/registry.py +0 -0
  233. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/sandbox.py +0 -0
  234. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/self_improve.py +0 -0
  235. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/spec.py +0 -0
  236. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/store.py +0 -0
  237. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/templates.py +0 -0
  238. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/testing.py +0 -0
  239. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/wizard.py +0 -0
  240. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/workflow.py +0 -0
  241. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/workflow_presets.py +0 -0
  242. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/headless.py +0 -0
  243. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/history.py +0 -0
  244. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/local/__init__.py +0 -0
  245. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/local/airplane.py +0 -0
  246. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/local/bench.py +0 -0
  247. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/local/build.py +0 -0
  248. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/local/code_index.py +0 -0
  249. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/local/data/model-packs/devstral.yaml +0 -0
  250. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/local/data/model-packs/ds4.yaml +0 -0
  251. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/local/data/model-packs/gemma4.yaml +0 -0
  252. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/local/data/model-packs/glm.yaml +0 -0
  253. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/local/data/model-packs/gpt-oss.yaml +0 -0
  254. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/local/data/model-packs/minimax.yaml +0 -0
  255. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/local/data/model-packs/qwen-coder.yaml +0 -0
  256. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/local/data/model-packs/qwen3.yaml +0 -0
  257. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/local/data/stack_matrix.yaml +0 -0
  258. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/local/doctor.py +0 -0
  259. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/local/engines.py +0 -0
  260. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/local/guardrails.py +0 -0
  261. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/local/hardware.py +0 -0
  262. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/local/inventory.py +0 -0
  263. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/local/labs.py +0 -0
  264. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/local/matrix.py +0 -0
  265. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/local/migrate.py +0 -0
  266. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/local/optimize.py +0 -0
  267. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/local/packs.py +0 -0
  268. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/local/repo.py +0 -0
  269. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/local/servers.py +0 -0
  270. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/local/setup.py +0 -0
  271. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/local/smoke.py +0 -0
  272. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/logging/__init__.py +0 -0
  273. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/logging/adapters.py +0 -0
  274. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/logging/formatter.py +0 -0
  275. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/logging/integration.py +0 -0
  276. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/logging/sinks.py +0 -0
  277. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/logging/unified_log.py +0 -0
  278. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/lsp/__init__.py +0 -0
  279. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/lsp/client.py +0 -0
  280. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/mcp/__init__.py +0 -0
  281. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/mcp/auth_storage.py +0 -0
  282. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/mcp/client.py +0 -0
  283. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/mcp/config.py +0 -0
  284. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/mcp/elicitation.py +0 -0
  285. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/mcp/harness_server.py +0 -0
  286. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/mcp/hf_auth.py +0 -0
  287. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/mcp/integration.py +0 -0
  288. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/mcp/oauth.py +0 -0
  289. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/mcp/oauth_callback.py +0 -0
  290. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/mcp/sampling.py +0 -0
  291. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/mcp/search.py +0 -0
  292. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/mcp/types.py +0 -0
  293. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/memory/__init__.py +0 -0
  294. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/memory/config.py +0 -0
  295. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/memory/providers.py +0 -0
  296. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/memory/types.py +0 -0
  297. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/notifications.py +0 -0
  298. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/permissions/__init__.py +0 -0
  299. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/permissions/rules.py +0 -0
  300. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/plan.py +0 -0
  301. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/plugins.py +0 -0
  302. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/project_trust.py +0 -0
  303. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/__init__.py +0 -0
  304. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/_builtin_profiles.py +0 -0
  305. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/acp_free_models.py +0 -0
  306. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/acp_models.py +0 -0
  307. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/acp_registry.py +0 -0
  308. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/apple_fm.py +0 -0
  309. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/catalog.py +0 -0
  310. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/credentials.py +0 -0
  311. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/dynamic.py +0 -0
  312. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/env_introspect.py +0 -0
  313. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/free_inference.py +0 -0
  314. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/gateway/__init__.py +0 -0
  315. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/gateway/base.py +0 -0
  316. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/gateway/openresponses_gateway.py +0 -0
  317. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/gateway/synthetic.py +0 -0
  318. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/health.py +0 -0
  319. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/huggingface/__init__.py +0 -0
  320. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/huggingface/convert.py +0 -0
  321. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/huggingface/downloader.py +0 -0
  322. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/huggingface/endpoints.py +0 -0
  323. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/huggingface/fetch.py +0 -0
  324. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/huggingface/hub.py +0 -0
  325. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/huggingface/inference.py +0 -0
  326. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/huggingface/transformers_runner.py +0 -0
  327. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/live_models.py +0 -0
  328. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/local/__init__.py +0 -0
  329. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/local/_mlx_worker.py +0 -0
  330. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/local/base.py +0 -0
  331. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/local/context_probe.py +0 -0
  332. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/local/discovery.py +0 -0
  333. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/local/ds4.py +0 -0
  334. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/local/lmstudio.py +0 -0
  335. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/local/mlx.py +0 -0
  336. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/local/mlx_engine.py +0 -0
  337. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/local/mlx_tools.py +0 -0
  338. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/local/ollama.py +0 -0
  339. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/local/sglang.py +0 -0
  340. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/local/smoke.py +0 -0
  341. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/local/tgi.py +0 -0
  342. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/local/tool_support.py +0 -0
  343. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/local/vllm.py +0 -0
  344. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/model_specs.py +0 -0
  345. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/models_dev.py +0 -0
  346. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/opencode_models.py +0 -0
  347. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/openresponses/__init__.py +0 -0
  348. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/openresponses/converters/__init__.py +0 -0
  349. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/openresponses/converters/messages.py +0 -0
  350. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/openresponses/converters/tools.py +0 -0
  351. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/openresponses/schema/__init__.py +0 -0
  352. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/openresponses/schema/models.py +0 -0
  353. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/openresponses/streaming/__init__.py +0 -0
  354. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/openresponses/streaming/parser.py +0 -0
  355. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/openresponses/tools/__init__.py +0 -0
  356. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/openresponses/tools/apply_patch.py +0 -0
  357. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/openresponses/tools/code_interpreter.py +0 -0
  358. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/openresponses/tools/file_search.py +0 -0
  359. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/openresponses/tools/mcp_adapter.py +0 -0
  360. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/profiles.py +0 -0
  361. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/recommendations.py +0 -0
  362. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/usage.py +0 -0
  363. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/pure_mode.py +0 -0
  364. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/py.typed +0 -0
  365. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/rendering/__init__.py +0 -0
  366. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/rendering/html_export.py +0 -0
  367. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/rendering/markdown.py +0 -0
  368. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/rendering/transcript_export.py +0 -0
  369. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/runtime/__init__.py +0 -0
  370. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/runtime/adk.py +0 -0
  371. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/runtime/base.py +0 -0
  372. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/runtime/builtin.py +0 -0
  373. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/runtime/claude_agent_sdk.py +0 -0
  374. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/runtime/codex_sdk.py +0 -0
  375. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/runtime/errors.py +0 -0
  376. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/runtime/openai_agents.py +0 -0
  377. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/runtime/openai_sandbox.py +0 -0
  378. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/runtime/openai_session.py +0 -0
  379. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/runtime/pydanticai.py +0 -0
  380. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/runtime/registry.py +0 -0
  381. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/runtime/tool_bridge.py +0 -0
  382. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/runtime/tool_bridge_openai.py +0 -0
  383. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/runtime/tool_bridge_pydanticai.py +0 -0
  384. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/safety/__init__.py +0 -0
  385. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/safety/sandbox.py +0 -0
  386. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/safety/warnings.py +0 -0
  387. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/sandbox/__init__.py +0 -0
  388. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/sandbox/backends.py +0 -0
  389. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/sandbox/execution.py +0 -0
  390. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/sandbox/local_sandbox.py +0 -0
  391. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/search_registry.py +0 -0
  392. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/server/__init__.py +0 -0
  393. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/server/api.py +0 -0
  394. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/server/web.py +0 -0
  395. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/session/__init__.py +0 -0
  396. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/session/factory.py +0 -0
  397. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/session/persistence.py +0 -0
  398. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/session/share_artifacts.py +0 -0
  399. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/session/sharing.py +0 -0
  400. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/session/switchboard.py +0 -0
  401. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/session.py +0 -0
  402. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/sidebar.py +0 -0
  403. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/skillopt.py +0 -0
  404. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/skills.py +0 -0
  405. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/stream_view.py +0 -0
  406. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/styles/__init__.py +0 -0
  407. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tool_call.py +0 -0
  408. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/__init__.py +0 -0
  409. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/agent_tools.py +0 -0
  410. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/apply_patch.py +0 -0
  411. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/base.py +0 -0
  412. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/batch_tool.py +0 -0
  413. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/compact_tool.py +0 -0
  414. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/context_handle.py +0 -0
  415. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/context_tools.py +0 -0
  416. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/diagnostics.py +0 -0
  417. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/diff_utils.py +0 -0
  418. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/display.py +0 -0
  419. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/dynamic_workflow.py +0 -0
  420. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/edit_tools.py +0 -0
  421. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/enhanced_base.py +0 -0
  422. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/env_policy.py +0 -0
  423. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/file_tools.py +0 -0
  424. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/file_tracking.py +0 -0
  425. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/harness_agent_session.py +0 -0
  426. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/image_tools.py +0 -0
  427. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/lsp_tools.py +0 -0
  428. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/mcp_tools.py +0 -0
  429. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/monty_tool.py +0 -0
  430. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/network_tools.py +0 -0
  431. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/output_spill.py +0 -0
  432. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/peer_agent_tools.py +0 -0
  433. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/permissions.py +0 -0
  434. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/post_edit.py +0 -0
  435. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/question_tool.py +0 -0
  436. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/request_permissions_tool.py +0 -0
  437. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/search_tools.py +0 -0
  438. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/semantic_search.py +0 -0
  439. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/shell_session.py +0 -0
  440. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/shell_tools.py +0 -0
  441. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/skill_tools.py +0 -0
  442. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/spawn_harness.py +0 -0
  443. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/todo_tools.py +0 -0
  444. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/tool_search.py +0 -0
  445. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/validation.py +0 -0
  446. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/web_tools.py +0 -0
  447. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tui_integration.py +0 -0
  448. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tui_widgets/__init__.py +0 -0
  449. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tui_widgets/widgets/__init__.py +0 -0
  450. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tui_widgets/widgets/progress.py +0 -0
  451. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tui_widgets/widgets/tool_display.py +0 -0
  452. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/undo_manager.py +0 -0
  453. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/utils/__init__.py +0 -0
  454. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/utils/error_handling.py +0 -0
  455. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/utils/fuzzy.py +0 -0
  456. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/__init__.py +0 -0
  457. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/agent_store.py +0 -0
  458. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/agent_switcher.py +0 -0
  459. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/animation_manager.py +0 -0
  460. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/code_context.py +0 -0
  461. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/command_palette.py +0 -0
  462. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/connection_status.py +0 -0
  463. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/conversation_history.py +0 -0
  464. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/diff_indicator.py +0 -0
  465. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/enhanced_status_bar.py +0 -0
  466. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/enhanced_toast.py +0 -0
  467. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/file_browser.py +0 -0
  468. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/file_reference.py +0 -0
  469. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/leader_key.py +0 -0
  470. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/mode_switcher.py +0 -0
  471. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/model_picker.py +0 -0
  472. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/permission_preview.py +0 -0
  473. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/prompt.py +0 -0
  474. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/provider_connect.py +0 -0
  475. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/pty_shell.py +0 -0
  476. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/resizable_sidebar.py +0 -0
  477. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/response_changes.py +0 -0
  478. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/response_display.py +0 -0
  479. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/rewind_overlay.py +0 -0
  480. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/rich_tool_display.py +0 -0
  481. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/sidebar_panels.py +0 -0
  482. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/slash_commands.py +0 -0
  483. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/split_view.py +0 -0
  484. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/status_bar.py +0 -0
  485. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/superqode_display.py +0 -0
  486. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/theme_picker.py +0 -0
  487. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/thinking.py +0 -0
  488. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/thinking_display.py +0 -0
  489. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/throbber.py +0 -0
  490. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/toast.py +0 -0
  491. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/unified_output.py +0 -0
  492. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/workspace/__init__.py +0 -0
  493. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/workspace/artifacts.py +0 -0
  494. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/workspace/change_summary.py +0 -0
  495. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/workspace/coordinator.py +0 -0
  496. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/workspace/diff_tracker.py +0 -0
  497. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/workspace/git_guard.py +0 -0
  498. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/workspace/git_snapshot.py +0 -0
  499. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/workspace/manager.py +0 -0
  500. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/workspace/snapshot.py +0 -0
  501. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/workspace/watcher.py +0 -0
  502. {superqode-0.2.8 → superqode-0.2.9}/src/superqode/workspace/worktree.py +0 -0
  503. {superqode-0.2.8 → superqode-0.2.9}/src/superqode.egg-info/dependency_links.txt +0 -0
  504. {superqode-0.2.8 → superqode-0.2.9}/src/superqode.egg-info/entry_points.txt +0 -0
  505. {superqode-0.2.8 → superqode-0.2.9}/src/superqode.egg-info/requires.txt +0 -0
  506. {superqode-0.2.8 → superqode-0.2.9}/src/superqode.egg-info/top_level.txt +0 -0
  507. {superqode-0.2.8 → superqode-0.2.9}/tests/test_acp_client.py +0 -0
  508. {superqode-0.2.8 → superqode-0.2.9}/tests/test_acp_free_models.py +0 -0
  509. {superqode-0.2.8 → superqode-0.2.9}/tests/test_acp_parent_tool_linking.py +0 -0
  510. {superqode-0.2.8 → superqode-0.2.9}/tests/test_acp_permission_store.py +0 -0
  511. {superqode-0.2.8 → superqode-0.2.9}/tests/test_acp_render.py +0 -0
  512. {superqode-0.2.8 → superqode-0.2.9}/tests/test_acp_server.py +0 -0
  513. {superqode-0.2.8 → superqode-0.2.9}/tests/test_acp_session_store.py +0 -0
  514. {superqode-0.2.8 → superqode-0.2.9}/tests/test_acp_slash.py +0 -0
  515. {superqode-0.2.8 → superqode-0.2.9}/tests/test_adaptive_compaction.py +0 -0
  516. {superqode-0.2.8 → superqode-0.2.9}/tests/test_agent_importer.py +0 -0
  517. {superqode-0.2.8 → superqode-0.2.9}/tests/test_agent_loop_harness.py +0 -0
  518. {superqode-0.2.8 → superqode-0.2.9}/tests/test_agent_memory.py +0 -0
  519. {superqode-0.2.8 → superqode-0.2.9}/tests/test_agents_md_compat.py +0 -0
  520. {superqode-0.2.8 → superqode-0.2.9}/tests/test_apply_patch.py +0 -0
  521. {superqode-0.2.8 → superqode-0.2.9}/tests/test_auth.py +0 -0
  522. {superqode-0.2.8 → superqode-0.2.9}/tests/test_bash_spill.py +0 -0
  523. {superqode-0.2.8 → superqode-0.2.9}/tests/test_benchmarks.py +0 -0
  524. {superqode-0.2.8 → superqode-0.2.9}/tests/test_change_summary.py +0 -0
  525. {superqode-0.2.8 → superqode-0.2.9}/tests/test_channels.py +0 -0
  526. {superqode-0.2.8 → superqode-0.2.9}/tests/test_cli_commands.py +0 -0
  527. {superqode-0.2.8 → superqode-0.2.9}/tests/test_cli_reference_coverage.py +0 -0
  528. {superqode-0.2.8 → superqode-0.2.9}/tests/test_command_safety.py +0 -0
  529. {superqode-0.2.8 → superqode-0.2.9}/tests/test_commands_runtime.py +0 -0
  530. {superqode-0.2.8 → superqode-0.2.9}/tests/test_compaction.py +0 -0
  531. {superqode-0.2.8 → superqode-0.2.9}/tests/test_config_loader.py +0 -0
  532. {superqode-0.2.8 → superqode-0.2.9}/tests/test_config_runtime.py +0 -0
  533. {superqode-0.2.8 → superqode-0.2.9}/tests/test_connect_setup.py +0 -0
  534. {superqode-0.2.8 → superqode-0.2.9}/tests/test_context_handles.py +0 -0
  535. {superqode-0.2.8 → superqode-0.2.9}/tests/test_context_probe.py +0 -0
  536. {superqode-0.2.8 → superqode-0.2.9}/tests/test_context_remaining.py +0 -0
  537. {superqode-0.2.8 → superqode-0.2.9}/tests/test_create_skill_tool.py +0 -0
  538. {superqode-0.2.8 → superqode-0.2.9}/tests/test_deferred_tools.py +0 -0
  539. {superqode-0.2.8 → superqode-0.2.9}/tests/test_developer_workflow_docs.py +0 -0
  540. {superqode-0.2.8 → superqode-0.2.9}/tests/test_ds4_local_client.py +0 -0
  541. {superqode-0.2.8 → superqode-0.2.9}/tests/test_dynamic_workflow_tool.py +0 -0
  542. {superqode-0.2.8 → superqode-0.2.9}/tests/test_edit_line_number_strip.py +0 -0
  543. {superqode-0.2.8 → superqode-0.2.9}/tests/test_env_introspect.py +0 -0
  544. {superqode-0.2.8 → superqode-0.2.9}/tests/test_execution_resolver.py +0 -0
  545. {superqode-0.2.8 → superqode-0.2.9}/tests/test_final_parity_wave.py +0 -0
  546. {superqode-0.2.8 → superqode-0.2.9}/tests/test_free_models.py +0 -0
  547. {superqode-0.2.8 → superqode-0.2.9}/tests/test_harness_agent_session.py +0 -0
  548. {superqode-0.2.8 → superqode-0.2.9}/tests/test_harness_backends.py +0 -0
  549. {superqode-0.2.8 → superqode-0.2.9}/tests/test_harness_eval_splits.py +0 -0
  550. {superqode-0.2.8 → superqode-0.2.9}/tests/test_harness_examples.py +0 -0
  551. {superqode-0.2.8 → superqode-0.2.9}/tests/test_harness_explain.py +0 -0
  552. {superqode-0.2.8 → superqode-0.2.9}/tests/test_harness_hooks.py +0 -0
  553. {superqode-0.2.8 → superqode-0.2.9}/tests/test_harness_kernel.py +0 -0
  554. {superqode-0.2.8 → superqode-0.2.9}/tests/test_harness_mcp_server.py +0 -0
  555. {superqode-0.2.8 → superqode-0.2.9}/tests/test_harness_model_policy.py +0 -0
  556. {superqode-0.2.8 → superqode-0.2.9}/tests/test_harness_observability.py +0 -0
  557. {superqode-0.2.8 → superqode-0.2.9}/tests/test_harness_output.py +0 -0
  558. {superqode-0.2.8 → superqode-0.2.9}/tests/test_harness_permissions.py +0 -0
  559. {superqode-0.2.8 → superqode-0.2.9}/tests/test_harness_sandbox.py +0 -0
  560. {superqode-0.2.8 → superqode-0.2.9}/tests/test_harness_seesaw_dimensions.py +0 -0
  561. {superqode-0.2.8 → superqode-0.2.9}/tests/test_harness_self_improve.py +0 -0
  562. {superqode-0.2.8 → superqode-0.2.9}/tests/test_harness_spec.py +0 -0
  563. {superqode-0.2.8 → superqode-0.2.9}/tests/test_harness_store.py +0 -0
  564. {superqode-0.2.8 → superqode-0.2.9}/tests/test_harness_usage.py +0 -0
  565. {superqode-0.2.8 → superqode-0.2.9}/tests/test_harness_wizard.py +0 -0
  566. {superqode-0.2.8 → superqode-0.2.9}/tests/test_harness_workflow.py +0 -0
  567. {superqode-0.2.8 → superqode-0.2.9}/tests/test_headless.py +0 -0
  568. {superqode-0.2.8 → superqode-0.2.9}/tests/test_hf_fetch.py +0 -0
  569. {superqode-0.2.8 → superqode-0.2.9}/tests/test_hooks.py +0 -0
  570. {superqode-0.2.8 → superqode-0.2.9}/tests/test_linter_runner.py +0 -0
  571. {superqode-0.2.8 → superqode-0.2.9}/tests/test_litellm_gateway.py +0 -0
  572. {superqode-0.2.8 → superqode-0.2.9}/tests/test_local_airplane.py +0 -0
  573. {superqode-0.2.8 → superqode-0.2.9}/tests/test_local_build.py +0 -0
  574. {superqode-0.2.8 → superqode-0.2.9}/tests/test_local_code_index.py +0 -0
  575. {superqode-0.2.8 → superqode-0.2.9}/tests/test_local_labs.py +0 -0
  576. {superqode-0.2.8 → superqode-0.2.9}/tests/test_local_migrate.py +0 -0
  577. {superqode-0.2.8 → superqode-0.2.9}/tests/test_local_model_optimizations.py +0 -0
  578. {superqode-0.2.8 → superqode-0.2.9}/tests/test_local_packs.py +0 -0
  579. {superqode-0.2.8 → superqode-0.2.9}/tests/test_local_sandbox.py +0 -0
  580. {superqode-0.2.8 → superqode-0.2.9}/tests/test_local_search.py +0 -0
  581. {superqode-0.2.8 → superqode-0.2.9}/tests/test_local_servers.py +0 -0
  582. {superqode-0.2.8 → superqode-0.2.9}/tests/test_local_setup.py +0 -0
  583. {superqode-0.2.8 → superqode-0.2.9}/tests/test_local_smoke.py +0 -0
  584. {superqode-0.2.8 → superqode-0.2.9}/tests/test_local_stack.py +0 -0
  585. {superqode-0.2.8 → superqode-0.2.9}/tests/test_local_tool_support.py +0 -0
  586. {superqode-0.2.8 → superqode-0.2.9}/tests/test_login_api.py +0 -0
  587. {superqode-0.2.8 → superqode-0.2.9}/tests/test_loop_guard.py +0 -0
  588. {superqode-0.2.8 → superqode-0.2.9}/tests/test_managed_harness_backend.py +0 -0
  589. {superqode-0.2.8 → superqode-0.2.9}/tests/test_markdown_render.py +0 -0
  590. {superqode-0.2.8 → superqode-0.2.9}/tests/test_mcp.py +0 -0
  591. {superqode-0.2.8 → superqode-0.2.9}/tests/test_mcp_integration.py +0 -0
  592. {superqode-0.2.8 → superqode-0.2.9}/tests/test_mcp_live.py +0 -0
  593. {superqode-0.2.8 → superqode-0.2.9}/tests/test_mcp_oauth_generalized.py +0 -0
  594. {superqode-0.2.8 → superqode-0.2.9}/tests/test_mcp_tools_runtime.py +0 -0
  595. {superqode-0.2.8 → superqode-0.2.9}/tests/test_mcp_two_way.py +0 -0
  596. {superqode-0.2.8 → superqode-0.2.9}/tests/test_memory_recall.py +0 -0
  597. {superqode-0.2.8 → superqode-0.2.9}/tests/test_mlx_tools.py +0 -0
  598. {superqode-0.2.8 → superqode-0.2.9}/tests/test_model_profiles.py +0 -0
  599. {superqode-0.2.8 → superqode-0.2.9}/tests/test_model_specs.py +0 -0
  600. {superqode-0.2.8 → superqode-0.2.9}/tests/test_monty_tool.py +0 -0
  601. {superqode-0.2.8 → superqode-0.2.9}/tests/test_network_policy.py +0 -0
  602. {superqode-0.2.8 → superqode-0.2.9}/tests/test_ollama_client.py +0 -0
  603. {superqode-0.2.8 → superqode-0.2.9}/tests/test_omnigent_agent_session_smoke.py +0 -0
  604. {superqode-0.2.8 → superqode-0.2.9}/tests/test_omnigent_importer.py +0 -0
  605. {superqode-0.2.8 → superqode-0.2.9}/tests/test_openai_session.py +0 -0
  606. {superqode-0.2.8 → superqode-0.2.9}/tests/test_output_spill.py +0 -0
  607. {superqode-0.2.8 → superqode-0.2.9}/tests/test_parallel_compare.py +0 -0
  608. {superqode-0.2.8 → superqode-0.2.9}/tests/test_peer_agents.py +0 -0
  609. {superqode-0.2.8 → superqode-0.2.9}/tests/test_plugin_hook_wiring.py +0 -0
  610. {superqode-0.2.8 → superqode-0.2.9}/tests/test_plugins.py +0 -0
  611. {superqode-0.2.8 → superqode-0.2.9}/tests/test_policies_and_turndiff.py +0 -0
  612. {superqode-0.2.8 → superqode-0.2.9}/tests/test_post_edit_verify.py +0 -0
  613. {superqode-0.2.8 → superqode-0.2.9}/tests/test_project_trust.py +0 -0
  614. {superqode-0.2.8 → superqode-0.2.9}/tests/test_provider_catalog.py +0 -0
  615. {superqode-0.2.8 → superqode-0.2.9}/tests/test_provider_dynamic.py +0 -0
  616. {superqode-0.2.8 → superqode-0.2.9}/tests/test_provider_recommendations.py +0 -0
  617. {superqode-0.2.8 → superqode-0.2.9}/tests/test_pure_mode_sessions.py +0 -0
  618. {superqode-0.2.8 → superqode-0.2.9}/tests/test_rate_limit_retry.py +0 -0
  619. {superqode-0.2.8 → superqode-0.2.9}/tests/test_read_tool_limits.py +0 -0
  620. {superqode-0.2.8 → superqode-0.2.9}/tests/test_reasoning_and_budget.py +0 -0
  621. {superqode-0.2.8 → superqode-0.2.9}/tests/test_recursive_eval_packs.py +0 -0
  622. {superqode-0.2.8 → superqode-0.2.9}/tests/test_runtime_adk.py +0 -0
  623. {superqode-0.2.8 → superqode-0.2.9}/tests/test_runtime_builtin.py +0 -0
  624. {superqode-0.2.8 → superqode-0.2.9}/tests/test_runtime_claude_agent_sdk.py +0 -0
  625. {superqode-0.2.8 → superqode-0.2.9}/tests/test_runtime_codex_sdk.py +0 -0
  626. {superqode-0.2.8 → superqode-0.2.9}/tests/test_runtime_dialog.py +0 -0
  627. {superqode-0.2.8 → superqode-0.2.9}/tests/test_runtime_openai_agents.py +0 -0
  628. {superqode-0.2.8 → superqode-0.2.9}/tests/test_runtime_openai_events.py +0 -0
  629. {superqode-0.2.8 → superqode-0.2.9}/tests/test_runtime_openai_hitl.py +0 -0
  630. {superqode-0.2.8 → superqode-0.2.9}/tests/test_runtime_openai_sandbox.py +0 -0
  631. {superqode-0.2.8 → superqode-0.2.9}/tests/test_runtime_protocol.py +0 -0
  632. {superqode-0.2.8 → superqode-0.2.9}/tests/test_runtime_pydanticai.py +0 -0
  633. {superqode-0.2.8 → superqode-0.2.9}/tests/test_sandbox_backends.py +0 -0
  634. {superqode-0.2.8 → superqode-0.2.9}/tests/test_sandbox_execution.py +0 -0
  635. {superqode-0.2.8 → superqode-0.2.9}/tests/test_search_roots.py +0 -0
  636. {superqode-0.2.8 → superqode-0.2.9}/tests/test_semantic_search.py +0 -0
  637. {superqode-0.2.8 → superqode-0.2.9}/tests/test_session_switchboard.py +0 -0
  638. {superqode-0.2.8 → superqode-0.2.9}/tests/test_shell_session.py +0 -0
  639. {superqode-0.2.8 → superqode-0.2.9}/tests/test_simple_login.py +0 -0
  640. {superqode-0.2.8 → superqode-0.2.9}/tests/test_simple_query_fastpath.py +0 -0
  641. {superqode-0.2.8 → superqode-0.2.9}/tests/test_skillopt.py +0 -0
  642. {superqode-0.2.8 → superqode-0.2.9}/tests/test_spawn_harness_tool.py +0 -0
  643. {superqode-0.2.8 → superqode-0.2.9}/tests/test_steering_continue_reminders.py +0 -0
  644. {superqode-0.2.8 → superqode-0.2.9}/tests/test_synthetic_gateways.py +0 -0
  645. {superqode-0.2.8 → superqode-0.2.9}/tests/test_terminal_output_limits.py +0 -0
  646. {superqode-0.2.8 → superqode-0.2.9}/tests/test_theme_picker.py +0 -0
  647. {superqode-0.2.8 → superqode-0.2.9}/tests/test_todo_tools.py +0 -0
  648. {superqode-0.2.8 → superqode-0.2.9}/tests/test_tool_args_repair.py +0 -0
  649. {superqode-0.2.8 → superqode-0.2.9}/tests/test_tool_batch_safety.py +0 -0
  650. {superqode-0.2.8 → superqode-0.2.9}/tests/test_tool_bridge.py +0 -0
  651. {superqode-0.2.8 → superqode-0.2.9}/tests/test_tool_bridge_openai.py +0 -0
  652. {superqode-0.2.8 → superqode-0.2.9}/tests/test_tool_call_repair.py +0 -0
  653. {superqode-0.2.8 → superqode-0.2.9}/tests/test_tool_output_pruning.py +0 -0
  654. {superqode-0.2.8 → superqode-0.2.9}/tests/test_tool_tracking.py +0 -0
  655. {superqode-0.2.8 → superqode-0.2.9}/tests/test_tools.py +0 -0
  656. {superqode-0.2.8 → superqode-0.2.9}/tests/test_tui_change_summary.py +0 -0
  657. {superqode-0.2.8 → superqode-0.2.9}/tests/test_tui_chat_mode.py +0 -0
  658. {superqode-0.2.8 → superqode-0.2.9}/tests/test_tui_exit.py +0 -0
  659. {superqode-0.2.8 → superqode-0.2.9}/tests/test_tui_llamacpp_connect.py +0 -0
  660. {superqode-0.2.8 → superqode-0.2.9}/tests/test_tui_markdown_cleanup.py +0 -0
  661. {superqode-0.2.8 → superqode-0.2.9}/tests/test_tui_mlx_connect.py +0 -0
  662. {superqode-0.2.8 → superqode-0.2.9}/tests/test_tui_mounted.py +0 -0
  663. {superqode-0.2.8 → superqode-0.2.9}/tests/test_tui_tool_display.py +0 -0
  664. {superqode-0.2.8 → superqode-0.2.9}/tests/test_version.py +0 -0
  665. {superqode-0.2.8 → superqode-0.2.9}/tests/test_view_image.py +0 -0
  666. {superqode-0.2.8 → superqode-0.2.9}/tests/test_web_server_auth.py +0 -0
  667. {superqode-0.2.8 → superqode-0.2.9}/tests/test_workspace.py +0 -0
@@ -7,6 +7,24 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.2.9] - 2026-07-09
11
+
12
+ ### Added
13
+
14
+ - **Grok subscription profile (`:connect grok`)** - New connection profile that runs xAI's official Grok Build coding agent through its native ACP server (`grok agent stdio`) on an eligible SuperGrok/X Premium+ account. Includes agent-registry and discovery entries, a `:grok` command surface (`connect`, `status`, `login`, `help`), completion/suggestion wiring, and docs across the provider, CLI-reference, connection-profiles, and TUI pages.
15
+ - **Opt-in direct API on the Grok subscription (`:grok api`)** - Explicitly imports the local `grok login` session token into SuperQode's 0600 auth store and connects the new `grok-cli` provider against the CLI chat proxy xAI documents (`https://cli-chat-proxy.grok.com/v1`), sending the required `X-XAI-Token-Auth` and `x-grok-model-override` headers. `:grok api off` removes the token; `:grok status` reports token state. The default ACP path still never reads the CLI's credentials.
16
+ - **Grok 4.5 in the xAI BYOK catalog** - Added `grok-4.5` (500K context, reasoning efforts, vision), `grok-4.3` (1M context), and `grok-build-0.1` with current pricing; refreshed registry example models, base URL, and docs links.
17
+ - **`ProviderDef.extra_headers`** - Curated providers can now declare required HTTP headers (with a `{model}` placeholder) applied per-request by the LiteLLM gateway, and can opt into per-request `api_base`/`api_key` routing without env mutation.
18
+
19
+ ### Fixed
20
+
21
+ - **Stale models.dev cache hiding new models** - A months-old on-disk models.dev cache no longer replaces newer curated builtin model lists (it previously hid day-one models like `grok-4.5` and mispriced lookups via fuzzy matching). Live provider lists now only override builtins when they are at least as new by release date.
22
+ - **Retired xAI models removed** - Dropped `grok-3`, `grok-3-mini`, `grok-2`, and `grok-beta` from the BYOK pickers to match xAI's current catalog; video-generation models are now excluded from chat model lists.
23
+
24
+ ### Changed
25
+
26
+ - **Release metadata** - Bumped the package version, runtime `__version__`, lockfile package entry, and ACP registry metadata to `0.2.9`.
27
+
10
28
  ## [0.2.8] - 2026-07-07
11
29
 
12
30
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: superqode
3
- Version: 0.2.8
3
+ Version: 0.2.9
4
4
  Summary: SuperQode: harness engineering framework for coding agents, optimized for local and open models
5
5
  Author-email: Shashi Jagtap <info@super-agentic.ai>
6
6
  Maintainer-email: Shashi Jagtap <info@super-agentic.ai>
@@ -356,6 +356,7 @@ Inside the TUI, start with `:help` and these commands:
356
356
  :connect codex # Codex SDK with local Codex login
357
357
  :connect claude # Claude Code through ACP
358
358
  :connect antigravity # local Antigravity CLI handoff
359
+ :connect grok # Grok Build via the official Grok CLI (subscription)
359
360
  :connect byok # hosted provider/API-key path
360
361
  :connect local # local model provider
361
362
  :tree # saved session branches
@@ -228,6 +228,7 @@ Inside the TUI, start with `:help` and these commands:
228
228
  :connect codex # Codex SDK with local Codex login
229
229
  :connect claude # Claude Code through ACP
230
230
  :connect antigravity # local Antigravity CLI handoff
231
+ :connect grok # Grok Build via the official Grok CLI (subscription)
231
232
  :connect byok # hosted provider/API-key path
232
233
  :connect local # local model provider
233
234
  :tree # saved session branches
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "superqode"
3
- version = "0.2.8"
3
+ version = "0.2.9"
4
4
  description = "SuperQode: harness engineering framework for coding agents, optimized for local and open models"
5
5
  readme = "README.md"
6
6
  license = "Apache-2.0"
@@ -30,4 +30,4 @@ __all__ = [
30
30
  "sidebar",
31
31
  ]
32
32
 
33
- __version__ = "0.2.8"
33
+ __version__ = "0.2.9"
@@ -212,6 +212,21 @@ KNOWN_AGENTS: List[Dict[str, Any]] = [
212
212
  "check_command": ["codex", "--version"],
213
213
  },
214
214
  # =========================================================================
215
+ # Grok Build - xAI's official CLI with native ACP support
216
+ # =========================================================================
217
+ {
218
+ "name": "Grok Build",
219
+ "short_name": "grok",
220
+ "command": ["grok", "agent", "stdio"],
221
+ "icon": "G",
222
+ "color": "#e5e7eb",
223
+ "description": "xAI's official Grok Build coding agent with native ACP support",
224
+ "website": "https://x.ai/cli",
225
+ "requires_api_key": False,
226
+ "api_key_env_vars": ["XAI_API_KEY", "GROK_CODE_XAI_API_KEY"],
227
+ "check_command": ["grok", "--version"],
228
+ },
229
+ # =========================================================================
215
230
  # 4. JetBrains Junie - JetBrains AI Agent
216
231
  # =========================================================================
217
232
  {
@@ -659,6 +674,39 @@ class ACPDiscovery:
659
674
  id="gpt-4o", name="GPT-4o", provider="openai", description="Multimodal GPT"
660
675
  ),
661
676
  ],
677
+ # Grok Build follows the signed-in account's current default. The
678
+ # bare "grok-build" id is the CLI's own default-model alias; the
679
+ # rest are real xAI model ids a user can pin explicitly.
680
+ "grok": [
681
+ AgentModel(
682
+ id="grok-build",
683
+ name="Grok Build (account default)",
684
+ provider="xai",
685
+ description="Official Grok Build default alias, currently Grok 4.5",
686
+ context_window=500000,
687
+ ),
688
+ AgentModel(
689
+ id="grok-4.5",
690
+ name="Grok 4.5",
691
+ provider="xai",
692
+ description="xAI's flagship model for agentic coding and reasoning",
693
+ context_window=500000,
694
+ ),
695
+ AgentModel(
696
+ id="grok-build-0.1",
697
+ name="Grok Build 0.1",
698
+ provider="xai",
699
+ description="Fast coding model tuned for agentic engineering loops",
700
+ context_window=256000,
701
+ ),
702
+ AgentModel(
703
+ id="grok-4.3",
704
+ name="Grok 4.3",
705
+ provider="xai",
706
+ description="1M-context Grok for document-heavy work",
707
+ context_window=1000000,
708
+ ),
709
+ ],
662
710
  # JetBrains Junie
663
711
  "junie": [
664
712
  AgentModel(id="auto", name="Auto", description="Automatic model selection"),
@@ -0,0 +1,81 @@
1
+ # Official Grok CLI agent entry.
2
+ # https://x.ai/cli
3
+
4
+ identity = "x.ai"
5
+ name = "Grok Build"
6
+ short_name = "grok"
7
+ url = "https://x.ai/cli"
8
+ protocol = "acp"
9
+ author_name = "xAI"
10
+ author_url = "https://x.ai"
11
+ publisher_name = "SuperQode"
12
+ publisher_url = "https://github.com/SuperagenticAI/superqode"
13
+ type = "coding"
14
+ description = "xAI's official Grok Build coding agent, connected through its native ACP server."
15
+ tags = ["xai", "grok", "subscription", "byok", "acp"]
16
+ run_command."*" = "grok agent stdio"
17
+ api_key_env_vars = ["XAI_API_KEY", "GROK_CODE_XAI_API_KEY"]
18
+
19
+ help = '''
20
+ # Grok Build
21
+
22
+ Grok Build is xAI's official coding agent. SuperQode starts its native ACP server with:
23
+
24
+ ```bash
25
+ grok agent stdio
26
+ ```
27
+
28
+ ## Install
29
+
30
+ ```bash
31
+ # macOS / Linux / WSL
32
+ curl -fsSL https://x.ai/cli/install.sh | bash
33
+
34
+ # Windows PowerShell
35
+ irm https://x.ai/cli/install.ps1 | iex
36
+ ```
37
+
38
+ ## Subscription login
39
+
40
+ Grok Build is available to eligible SuperGrok and X Premium+ accounts.
41
+ Authenticate the official CLI before connecting:
42
+
43
+ ```bash
44
+ grok login
45
+ ```
46
+
47
+ For an SSH or headless machine, use device authentication:
48
+
49
+ ```bash
50
+ grok login --device-auth
51
+ ```
52
+
53
+ Then connect in SuperQode with `:connect grok` or `superqode --connect grok`.
54
+ The official CLI keeps subscription credentials locally (`~/.grok/auth.json`);
55
+ SuperQode does not copy the token. Eligibility and available models are
56
+ determined by xAI for the signed-in account.
57
+
58
+ ## Models
59
+
60
+ Grok Build defaults to its `grok-build` alias (currently Grok 4.5). Pin a
61
+ specific model from SuperQode with `:grok connect grok-4.5` or
62
+ `:grok connect grok-build-0.1`; the hint is forwarded through ACP.
63
+
64
+ ## Direct API on your subscription (opt-in)
65
+
66
+ `:grok api [model]` imports the local `grok login` session token into
67
+ SuperQode's own auth store and connects the `grok-cli` provider against the
68
+ CLI chat proxy documented by xAI. Remove it anytime with `:grok api off`.
69
+ CLI sessions last about 7 days; re-run `grok login` when they expire.
70
+
71
+ ## BYOK
72
+
73
+ For direct xAI API usage, set `XAI_API_KEY` and connect `xai/grok-4.5` through
74
+ the BYOK provider picker. API usage is billed separately from a consumer
75
+ subscription. The CLI itself also accepts `GROK_CODE_XAI_API_KEY` for
76
+ headless, key-based runs.
77
+ '''
78
+
79
+ [actions."*".install]
80
+ command = "curl -fsSL https://x.ai/cli/install.sh | bash"
81
+ description = "Install the official Grok CLI"
@@ -141,6 +141,7 @@ AGENT_COLORS = {
141
141
  "claude": "#d97706", # Anthropic Orange
142
142
  "claude-code": "#d97706", # Anthropic Orange
143
143
  "codex": "#10b981", # Green
144
+ "grok": "#e5e7eb", # xAI neutral, readable on the dark TUI
144
145
  "junie": "#fe315d", # JetBrains Pink
145
146
  "goose": "#8b5cf6", # Block Purple
146
147
  "kimi": "#5b21b6", # Moonshot Deep Purple
@@ -162,6 +163,7 @@ AGENT_ICONS = {
162
163
  "claude": "🧡", # Orange heart - Anthropic's warm AI
163
164
  "claude-code": "🧡", # Orange heart - Anthropic's warm AI
164
165
  "codex": "📜", # Scroll
166
+ "grok": "G", # Grok Build
165
167
  "junie": "🧠", # Brain - JetBrains intelligence
166
168
  "goose": "🦆", # Duck - Block's Goose
167
169
  "kimi": "🌙", # Moon - Moonshot AI's Kimi
@@ -251,6 +253,7 @@ COMMANDS = [
251
253
  ":connect codex",
252
254
  ":connect claude",
253
255
  ":connect antigravity",
256
+ ":connect grok",
254
257
  ":connect byok",
255
258
  ":connect local",
256
259
  ":connect acp",
@@ -266,6 +269,10 @@ COMMANDS = [
266
269
  ":antigravity migrate",
267
270
  ":antigravity launch",
268
271
  ":agy",
272
+ ":grok",
273
+ ":grok status",
274
+ ":grok login",
275
+ ":grok api",
269
276
  ":exit",
270
277
  ":quit",
271
278
  ":help",
@@ -71,25 +71,28 @@ class CommandSuggester(Suggester):
71
71
  ":connect": 0,
72
72
  ":connect acp": 1,
73
73
  ":connect antigravity": 2,
74
- ":connect byok": 3,
75
- ":connect local": 4,
76
- ":exit": 5,
77
- ":quit": 6,
74
+ ":connect grok": 3,
75
+ ":connect byok": 4,
76
+ ":connect local": 5,
77
+ ":exit": 6,
78
+ ":quit": 7,
78
79
  },
79
80
  ":c": {
80
81
  ":connect": 0,
81
82
  ":connect acp": 1,
82
83
  ":connect antigravity": 2,
83
- ":connect byok": 3,
84
- ":connect local": 4,
84
+ ":connect grok": 3,
85
+ ":connect byok": 4,
86
+ ":connect local": 5,
85
87
  ":clear": 20,
86
88
  },
87
89
  ":co": {
88
90
  ":connect": 0,
89
91
  ":connect acp": 1,
90
92
  ":connect antigravity": 2,
91
- ":connect byok": 3,
92
- ":connect local": 4,
93
+ ":connect grok": 3,
94
+ ":connect byok": 4,
95
+ ":connect local": 5,
93
96
  },
94
97
  ":q": {
95
98
  ":quit": 0,
@@ -5856,6 +5856,8 @@ class SuperQodeApp(App):
5856
5856
  self._codex_cmd(args, log)
5857
5857
  elif c == "claude":
5858
5858
  self._claude_cmd(args, log)
5859
+ elif c in ("grok", "xai-grok"):
5860
+ self._grok_cmd(args, log)
5859
5861
  elif c in ("antigravity", "agy"):
5860
5862
  self._antigravity_cmd(args, log)
5861
5863
  elif c == "approve":
@@ -6027,8 +6029,8 @@ class SuperQodeApp(App):
6027
6029
  log,
6028
6030
  "Connect setup",
6029
6031
  )
6030
- elif subcmd in ("codex", "claude", "antigravity"):
6031
- # Product/runtime connection profiles (Codex, Claude, …).
6032
+ elif subcmd in ("codex", "claude", "antigravity", "grok"):
6033
+ # Product/runtime connection profiles (Codex, Claude, Grok, …).
6032
6034
  from superqode.providers.connection_profiles import get_connection_profile
6033
6035
 
6034
6036
  profile = get_connection_profile(subcmd)
@@ -7806,6 +7808,7 @@ class SuperQodeApp(App):
7806
7808
  ":connect",
7807
7809
  ":connect acp",
7808
7810
  ":connect antigravity",
7811
+ ":connect grok",
7809
7812
  ":connect byok",
7810
7813
  ":connect local",
7811
7814
  ]
@@ -7852,25 +7855,28 @@ class SuperQodeApp(App):
7852
7855
  ":connect": 0,
7853
7856
  ":connect acp": 1,
7854
7857
  ":connect antigravity": 2,
7855
- ":connect byok": 3,
7856
- ":connect local": 4,
7857
- ":exit": 5,
7858
- ":quit": 6,
7858
+ ":connect grok": 3,
7859
+ ":connect byok": 4,
7860
+ ":connect local": 5,
7861
+ ":exit": 6,
7862
+ ":quit": 7,
7859
7863
  },
7860
7864
  ":c": {
7861
7865
  ":connect": 0,
7862
7866
  ":connect acp": 1,
7863
7867
  ":connect antigravity": 2,
7864
- ":connect byok": 3,
7865
- ":connect local": 4,
7868
+ ":connect grok": 3,
7869
+ ":connect byok": 4,
7870
+ ":connect local": 5,
7866
7871
  ":clear": 20,
7867
7872
  },
7868
7873
  ":co": {
7869
7874
  ":connect": 0,
7870
7875
  ":connect acp": 1,
7871
7876
  ":connect antigravity": 2,
7872
- ":connect byok": 3,
7873
- ":connect local": 4,
7877
+ ":connect grok": 3,
7878
+ ":connect byok": 4,
7879
+ ":connect local": 5,
7874
7880
  },
7875
7881
  ":q": {
7876
7882
  ":quit": 0,
@@ -10888,6 +10894,158 @@ class SuperQodeApp(App):
10888
10894
  )
10889
10895
  log.write(t)
10890
10896
 
10897
+ # ---- xAI Grok Build :grok command surface ------------------------------
10898
+ def _grok_cmd(self, args: str, log) -> None:
10899
+ """Handle the official Grok CLI subscription and ACP connection flow."""
10900
+ parts = (args or "").split(maxsplit=1)
10901
+ sub = parts[0].strip().lower() if parts and parts[0].strip() else "connect"
10902
+ rest = parts[1].strip() if len(parts) > 1 else ""
10903
+ if sub in ("connect", "start"):
10904
+ command = "grok" + (f" {rest}" if rest else "")
10905
+ self._connect_acp_cmd(command, log)
10906
+ elif sub == "api":
10907
+ self._grok_api_cmd(rest, log)
10908
+ elif sub in ("status", "doctor"):
10909
+ self._show_grok_status(log)
10910
+ elif sub in ("login", "auth"):
10911
+ self._show_grok_login(log)
10912
+ elif sub in ("help", "?"):
10913
+ self._show_grok_help(log)
10914
+ else:
10915
+ log.add_error(f"Unknown grok command: {sub}")
10916
+ log.add_info("Usage: :grok [connect [model]|api [model|off]|status|login|help]")
10917
+
10918
+ def _grok_api_cmd(self, rest: str, log) -> None:
10919
+ """Opt-in: import the Grok CLI's session token for direct API calls.
10920
+
10921
+ The default `:connect grok` path never touches the CLI's credentials.
10922
+ This command explicitly copies the local `grok login` session token
10923
+ into SuperQode's auth store and connects the `grok-cli` BYOK provider,
10924
+ which targets the CLI chat proxy documented by xAI.
10925
+ """
10926
+ from superqode.providers import grok_cli_auth
10927
+
10928
+ arg = (rest or "").strip()
10929
+ if arg.lower() in ("off", "remove", "logout"):
10930
+ if grok_cli_auth.remove_cli_token():
10931
+ log.add_info("Removed the imported Grok CLI token from SuperQode's auth store.")
10932
+ else:
10933
+ log.add_info("No imported Grok CLI token to remove.")
10934
+ return
10935
+
10936
+ model = arg or "grok-build"
10937
+ for prefix in ("grok-cli/", "xai/", "grok/"):
10938
+ if model.lower().startswith(prefix):
10939
+ model = model[len(prefix) :]
10940
+ break
10941
+
10942
+ auth = grok_cli_auth.import_cli_token()
10943
+ if auth is None:
10944
+ log.add_error("No Grok CLI login found (~/.grok/auth.json).")
10945
+ log.add_info("Run `grok login` first, or use BYOK: :connect byok xai grok-4.5")
10946
+ return
10947
+ if auth.is_expired():
10948
+ grok_cli_auth.remove_cli_token()
10949
+ log.add_error("The Grok CLI session looks expired (CLI sessions last ~7 days).")
10950
+ log.add_info("Run `grok login` again, then re-run :grok api.")
10951
+ return
10952
+
10953
+ log.add_info("Imported the Grok CLI session token (stored in ~/.superqode/auth.json, 0600).")
10954
+ log.add_info(
10955
+ "Direct API calls use the xAI-documented CLI chat proxy on your subscription — "
10956
+ "intended for interactive use. Remove anytime with :grok api off."
10957
+ )
10958
+ self._connect_byok_mode("grok-cli", model, log)
10959
+
10960
+ def _show_grok_status(self, log) -> None:
10961
+ """Show local Grok CLI readiness without reading or displaying credentials."""
10962
+ grok_path = shutil.which("grok")
10963
+ auth_path = Path.home() / ".grok" / "auth.json"
10964
+ has_api_key = bool(os.environ.get("XAI_API_KEY"))
10965
+ t = Text()
10966
+ t.append("\n Grok Build status\n\n", style=f"bold {THEME['text']}")
10967
+ t.append(" Binary ", style=THEME["muted"])
10968
+ t.append(
10969
+ f"{grok_path or 'not found'}\n",
10970
+ style=THEME["success" if grok_path else "warning"],
10971
+ )
10972
+ t.append(" CLI auth ", style=THEME["muted"])
10973
+ t.append(
10974
+ "configured\n" if auth_path.exists() else "not found\n",
10975
+ style=THEME["success" if auth_path.exists() else "dim"],
10976
+ )
10977
+ t.append(" BYOK ", style=THEME["muted"])
10978
+ t.append(
10979
+ "XAI_API_KEY set\n" if has_api_key else "not set\n",
10980
+ style=THEME["success" if has_api_key else "dim"],
10981
+ )
10982
+ try:
10983
+ from superqode.providers.grok_cli_auth import cli_token_status
10984
+
10985
+ token = cli_token_status()
10986
+ except Exception: # noqa: BLE001 - status must never crash
10987
+ token = {}
10988
+ t.append(" API token ", style=THEME["muted"])
10989
+ if token.get("imported") and not token.get("imported_expired"):
10990
+ t.append("imported (:grok api off to remove)\n", style=THEME["success"])
10991
+ elif token.get("imported"):
10992
+ t.append("imported but expired — run `grok login`, then :grok api\n", style=THEME["warning"])
10993
+ elif token.get("cli_login"):
10994
+ t.append("available — run :grok api to use it for direct API calls\n", style=THEME["dim"])
10995
+ else:
10996
+ t.append("not imported\n", style=THEME["dim"])
10997
+ t.append(" Default ", style=THEME["muted"])
10998
+ t.append("Grok Build (currently Grok 4.5)\n", style=THEME["text"])
10999
+ t.append("\n Commands:\n", style=THEME["muted"])
11000
+ t.append(" grok login ", style=THEME["cyan"])
11001
+ t.append("sign in to an eligible X/SuperGrok account\n", style=THEME["muted"])
11002
+ t.append(" grok login --device-auth ", style=THEME["cyan"])
11003
+ t.append("sign in from SSH or a headless host\n", style=THEME["muted"])
11004
+ t.append(" :connect grok ", style=THEME["cyan"])
11005
+ t.append("start Grok Build through ACP\n", style=THEME["muted"])
11006
+ t.append(" :grok api ", style=THEME["cyan"])
11007
+ t.append("reuse the CLI login for direct API calls (opt-in)\n", style=THEME["muted"])
11008
+ log.write(t)
11009
+
11010
+ def _show_grok_login(self, log) -> None:
11011
+ """Give login commands instead of launching an interactive browser flow in the TUI."""
11012
+ t = Text()
11013
+ t.append("\n Grok subscription login\n\n", style=f"bold {THEME['text']}")
11014
+ t.append(" Run in a terminal:\n", style=THEME["muted"])
11015
+ t.append(" grok login\n", style=THEME["cyan"])
11016
+ t.append("\n For SSH or a headless machine:\n", style=THEME["muted"])
11017
+ t.append(" grok login --device-auth\n", style=THEME["cyan"])
11018
+ t.append("\n Then connect with:\n", style=THEME["muted"])
11019
+ t.append(" :connect grok\n", style=THEME["cyan"])
11020
+ t.append(
11021
+ "\n The official CLI stores and refreshes its own credentials locally. "
11022
+ "SuperQode does not copy them.\n",
11023
+ style=THEME["dim"],
11024
+ )
11025
+ log.write(t)
11026
+
11027
+ def _show_grok_help(self, log) -> None:
11028
+ t = Text()
11029
+ t.append("\n Grok in SuperQode\n\n", style=f"bold {THEME['text']}")
11030
+ t.append(" :connect grok ", style=THEME["cyan"])
11031
+ t.append("connect the official Grok Build ACP server\n", style=THEME["muted"])
11032
+ t.append(" :grok connect grok-build ", style=THEME["cyan"])
11033
+ t.append("request the model advertised by the signed-in CLI\n", style=THEME["muted"])
11034
+ t.append(" :grok api [model] ", style=THEME["cyan"])
11035
+ t.append("reuse the local `grok login` session for direct API calls\n", style=THEME["muted"])
11036
+ t.append(" :grok api off ", style=THEME["cyan"])
11037
+ t.append("remove the imported session token\n", style=THEME["muted"])
11038
+ t.append(" :grok status ", style=THEME["cyan"])
11039
+ t.append("check CLI and local auth readiness\n", style=THEME["muted"])
11040
+ t.append(" :grok login ", style=THEME["cyan"])
11041
+ t.append("show browser and device-login commands\n", style=THEME["muted"])
11042
+ t.append(
11043
+ "\n Subscription access and model eligibility are determined by xAI. "
11044
+ "For direct API billing, use BYOK with XAI_API_KEY and xai/grok-4.5.\n",
11045
+ style=THEME["dim"],
11046
+ )
11047
+ log.write(t)
11048
+
10891
11049
  def _claude_runtime_or_connect(self, log):
10892
11050
  pure = getattr(self, "_pure_mode", None)
10893
11051
  runtime = getattr(pure, "_runtime", None) if pure is not None else None
@@ -15612,6 +15770,7 @@ class SuperQodeApp(App):
15612
15770
  "vtcode",
15613
15771
  "auggie",
15614
15772
  "amp",
15773
+ "grok",
15615
15774
  }
15616
15775
  if short_name in acp_agents:
15617
15776
  model_name = self.current_model if self.current_model else "auto"
@@ -15688,6 +15847,7 @@ class SuperQodeApp(App):
15688
15847
  "vtcode",
15689
15848
  "auggie",
15690
15849
  "amp",
15850
+ "grok",
15691
15851
  )
15692
15852
 
15693
15853
  if agent_type in acp_agents:
@@ -16008,7 +16168,7 @@ class SuperQodeApp(App):
16008
16168
  @staticmethod
16009
16169
  def _normalize_acp_model_id(agent_type: str, model: str) -> str | None:
16010
16170
  """Normalize a UI model value before sending it to an ACP agent."""
16011
- if not model or agent_type not in ("codex", "openhands", "opencode"):
16171
+ if not model or agent_type not in ("codex", "grok", "openhands", "opencode"):
16012
16172
  return None
16013
16173
  normalized = model.strip()
16014
16174
  # "auto"/"default" is a UI placeholder meaning "let the agent
@@ -16018,6 +16178,8 @@ class SuperQodeApp(App):
16018
16178
  "default",
16019
16179
  "opencode/auto",
16020
16180
  "opencode/default",
16181
+ "grok/auto",
16182
+ "grok/default",
16021
16183
  ):
16022
16184
  return None
16023
16185
  # OpenCode model ids are provider/model pairs (for example
@@ -16025,6 +16187,14 @@ class SuperQodeApp(App):
16025
16187
  # bare ids; do not rewrite real provider ids.
16026
16188
  if agent_type == "opencode" and "/" not in normalized:
16027
16189
  return f"opencode/{normalized}"
16190
+ # Grok Build expects bare xAI model ids (grok-4.5, grok-build-0.1) or
16191
+ # its own "grok-build" default alias; strip UI/provider prefixes.
16192
+ if agent_type == "grok":
16193
+ for prefix in ("xai/", "grok/"):
16194
+ if normalized.lower().startswith(prefix):
16195
+ normalized = normalized[len(prefix) :]
16196
+ break
16197
+ return normalized or None
16028
16198
  return normalized
16029
16199
 
16030
16200
  def _run_acp_jsonrpc_client(
@@ -16082,6 +16252,14 @@ class SuperQodeApp(App):
16082
16252
  self._call_ui(log.add_info, " export OPENAI_API_KEY=sk-...")
16083
16253
  self._call_ui(log.add_info, " or export CODEX_API_KEY=sk-...")
16084
16254
  return
16255
+ elif agent_type == "grok":
16256
+ command = "grok agent stdio"
16257
+ model_display = f"grok/{model}" if model and model != "auto" else "grok/grok-build"
16258
+ if shutil.which("grok") is None:
16259
+ self._call_ui(self._stop_thinking)
16260
+ self._call_ui(log.add_error, "Grok CLI not found. Install it before connecting.")
16261
+ self._call_ui(log.add_info, " curl -fsSL https://x.ai/cli/install.sh | bash")
16262
+ return
16085
16263
  elif agent_type == "junie":
16086
16264
  command = "junie --acp"
16087
16265
  model_display = f"junie/{model}" if model else "junie/auto"
@@ -16617,6 +16795,11 @@ class SuperQodeApp(App):
16617
16795
  if not ok:
16618
16796
  self._acp_client = None
16619
16797
  self._acp_client_key = None
16798
+ if agent_type == "grok":
16799
+ self._call_ui(
16800
+ log.add_info,
16801
+ "If Grok is not signed in, run `grok login` or `grok login --device-auth`, then retry.",
16802
+ )
16620
16803
  return None, {}
16621
16804
 
16622
16805
  # Store for cancellation cleanup
@@ -28801,6 +28984,8 @@ class SuperQodeApp(App):
28801
28984
  "geminicli": "💎", # Gem (Gemini CLI)
28802
28985
  "codex": "📝", # Memo/code
28803
28986
  "codex.openai.com": "📝", # Memo/code
28987
+ "grok": "G", # Grok Build
28988
+ "x.ai": "G", # Grok Build
28804
28989
  "openclaw": "🦞", # OpenClaw
28805
28990
  "openclaw.ai": "🦞", # OpenClaw
28806
28991
  "goose": "🪿", # Goose
@@ -28832,6 +29017,8 @@ class SuperQodeApp(App):
28832
29017
  "claude.com": 2,
28833
29018
  "codex": 3,
28834
29019
  "codex.openai.com": 3,
29020
+ "grok": 4,
29021
+ "x.ai": 4,
28835
29022
  }
28836
29023
 
28837
29024
  # Sort function: priority agents first, then alphabetically by name
@@ -29011,6 +29198,25 @@ class SuperQodeApp(App):
29011
29198
  self._auto_select_codex_model(model_hint, agent, log)
29012
29199
  else:
29013
29200
  self._show_codex_models_selection(agent, log)
29201
+ elif self.current_agent == "grok":
29202
+ # Grok Build owns the subscription and model catalog. Keep
29203
+ # the default unset so its signed-in account decides; an
29204
+ # explicit model hint is forwarded through ACP.
29205
+ self.current_model = (model_hint or "").strip()
29206
+ self.current_provider = "xai"
29207
+ self._awaiting_model_selection = False
29208
+
29209
+ badge = self.query_one("#mode-badge", ModeBadge)
29210
+ badge.agent = self.current_agent
29211
+ badge.mode = ""
29212
+ badge.role = ""
29213
+ badge.model = self.current_model or "grok-build"
29214
+ badge.provider = self.current_provider
29215
+ badge.execution_mode = "acp"
29216
+
29217
+ log.add_info("Connected to Grok Build via the official Grok CLI ACP server.")
29218
+ if not self.current_model:
29219
+ log.add_info("Using the signed-in account's Grok Build default (currently Grok 4.5).")
29014
29220
  elif self.current_agent == "openhands":
29015
29221
  # For OpenHands, handle model selection
29016
29222
  if model_hint:
@@ -30359,6 +30565,8 @@ class SuperQodeApp(App):
30359
30565
  (":connect antigravity", "Use local Antigravity CLI handoff"),
30360
30566
  (":antigravity status", "Check local agy CLI status"),
30361
30567
  (":antigravity migrate", "Show Gemini CLI migration steps"),
30568
+ (":connect grok", "Use signed-in Grok Build ACP (Grok 4.5 default)"),
30569
+ (":grok status|login", "Check Grok CLI readiness or show login commands"),
30362
30570
  ],
30363
30571
  ),
30364
30572
  (
@@ -442,7 +442,6 @@ def validate_agent_environment(agent: "Agent") -> list[str]:
442
442
  "gemini": ["GOOGLE_API_KEY"],
443
443
  "openai": ["OPENAI_API_KEY"],
444
444
  "kimi": ["MOONSHOT_API_KEY"],
445
- "grok": ["XAI_API_KEY"],
446
445
  }
447
446
 
448
447
  # Check if agent requires specific environment variables
@@ -663,7 +663,7 @@ class SuperQodeGroup(click.Group):
663
663
  default=None,
664
664
  type=click.Choice(connection_profile_ids()),
665
665
  help=(
666
- "Connection source to start with: codex / claude / antigravity / byok / "
666
+ "Connection source to start with: codex / claude / antigravity / grok / byok / "
667
667
  "local / acp. e.g. `--connect codex` to use your Codex subscription."
668
668
  ),
669
669
  )