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.
- {superqode-0.2.8 → superqode-0.2.9}/CHANGELOG.md +18 -0
- {superqode-0.2.8/src/superqode.egg-info → superqode-0.2.9}/PKG-INFO +2 -1
- {superqode-0.2.8 → superqode-0.2.9}/README.md +1 -0
- {superqode-0.2.8 → superqode-0.2.9}/pyproject.toml +1 -1
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/__init__.py +1 -1
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/acp_discovery.py +48 -0
- superqode-0.2.9/src/superqode/agents/data/x.ai.toml +81 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/app/constants.py +7 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/app/suggester.py +11 -8
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/app_main.py +219 -11
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/commands/acp.py +0 -1
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/main.py +1 -1
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/connection_profiles.py +16 -1
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/gateway/litellm_gateway.py +15 -5
- superqode-0.2.9/src/superqode/providers/grok_cli_auth.py +135 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/manager.py +5 -4
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/models.py +157 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/registry.py +42 -9
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/slash_complete.py +21 -8
- {superqode-0.2.8 → superqode-0.2.9/src/superqode.egg-info}/PKG-INFO +2 -1
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode.egg-info/SOURCES.txt +3 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_acp_registry.py +33 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_cli_connect.py +7 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_connection_profiles.py +42 -3
- superqode-0.2.9/tests/test_grok_cli_auth.py +255 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_live_models.py +9 -0
- superqode-0.2.9/tests/test_provider_models.py +213 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_slash_runtime.py +2 -1
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_tui_smoke.py +23 -4
- superqode-0.2.8/tests/test_provider_models.py +0 -124
- {superqode-0.2.8 → superqode-0.2.9}/LICENSE +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/MANIFEST.in +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/examples/README.md +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/examples/byok-acp-team.yaml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/examples/harnesses/coding.yaml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/examples/harnesses/deepagents.yaml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/examples/harnesses/ds4.yaml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/examples/harnesses/gemma4.yaml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/examples/harnesses/google-adk.yaml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/examples/harnesses/local-recursive-dynamic.yaml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/examples/harnesses/no-tool.yaml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/examples/harnesses/omnigent-multi-agent.yaml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/examples/harnesses/openai-agents.yaml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/examples/harnesses/pydanticai.yaml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/examples/local-models-team.yaml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/examples/omnigent-multi-agent.agent.yaml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/examples/simple-team.yaml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/setup.cfg +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/a2a/__init__.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/a2a/client.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/a2a/presets.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/a2a/registry.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/a2a/server.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/a2a/skills.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/a2a/tools.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/a2a/types.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/a2a/workflows.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/acp/__init__.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/acp/client.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/acp/doctor.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/acp/permission_screen.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/acp/permission_store.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/acp/render.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/acp/server.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/acp/session_store.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/acp/slash.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/acp/tool_call_context.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/acp/types.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agent/__init__.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agent/auto_memory.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agent/command_safety.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agent/compaction.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agent/context_manager.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agent/edit_strategies.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agent/exec_policy.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agent/hooks.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agent/loop.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agent/loop_guard.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agent/network_policy.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agent/output_handler.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agent/parallel_compare.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agent/peer_agents.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agent/plan_mode.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agent/reminders.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agent/rubric.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agent/session_manager.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agent/structured_output.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agent/summarization.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agent/system_prompts.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agent/terminal_output_limits.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agent/text_tool_calls.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agent/tool_args.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agent/tool_tracking.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agent/utility_model.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agent_output.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agent_stream.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/__init__.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/acp_registry.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/client.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/agentpool.phil65.github.io.toml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/ampcode.com.toml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/augmentcode.com.toml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/autodev.github.io.toml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/blackbox.ai.toml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/bub.dev.toml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/cagent.dev.toml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/claude.com.toml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/cline.bot.toml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/codeassistant.dev.toml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/codex.openai.com.toml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/copilot.github.com.toml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/crow-ai.dev.toml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/cursor.com.toml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/factory.ai.toml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/fastagent.ai.toml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/fount.dev.toml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/geminicli.com.toml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/goose.block.xyz.toml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/hermes-agent.nousresearch.com.toml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/junie.jetbrains.com.toml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/kimi.moonshot.cn.toml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/kiro.dev.toml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/llmlingagent.dev.toml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/minioncode.dev.toml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/mistral-vibe.mistral.ai.toml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/openclaw.ai.toml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/opencode.ai.toml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/openhands.dev.toml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/pi.dev.toml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/poolside.ai.toml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/qoder.com.toml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/qwenlm.github.io.toml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/sigit.dev.toml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/stakpak.dev.toml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/stdiobus.dev.toml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/data/vtcode.dev.toml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/discovery.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/free_models.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/messaging.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/official_acp.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/persona.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/registry.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/schema.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/agents/unified.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/app/__init__.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/app/css.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/app/models.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/app/theme_bridge.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/app/widgets.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/app_enhanced.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/approval.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/atomic.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/auth/__init__.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/benchmarks.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/channels/__init__.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/channels/config.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/channels/discord.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/channels/service.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/channels/slack.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/channels/telegram.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/claude.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/codex.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/commands/__init__.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/commands/a2a.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/commands/agents.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/commands/auth.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/commands/config.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/commands/daemon.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/commands/local.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/commands/providers.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/commands/runtime.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/commands/serve.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/commands/sessions.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/config/__init__.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/config/loader.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/config/schema.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/core/__init__.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/danger.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/data/eval_fixtures/ci-dynamic-root-cause.log +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/data/eval_fixtures/ci-root-cause.log +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/data/eval_packs/local_dynamic_workflow_smoke.yaml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/data/eval_packs/local_recursive_smoke.yaml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/data/superqode-template.yaml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/design_system.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/dialogs/__init__.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/dialogs/base.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/dialogs/model.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/dialogs/provider.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/dialogs/runtime.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/diff_view.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/enterprise.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/evaluation/__init__.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/evaluation/adapters.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/evaluation/behaviors.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/evaluation/engine.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/evaluation/scenarios.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/execution/__init__.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/execution/linter.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/execution/modes.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/execution/resolver.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/execution/runner.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/file_explorer.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/file_viewer.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/flash.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/__init__.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/accelerator.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/agent_importer.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/approval_memory.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/backends/__init__.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/backends/base.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/backends/deepagents.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/backends/managed.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/backends/pydanticai.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/backends/registry.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/backends/runtime.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/compiler.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/context_handles.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/diagnostics.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/eval.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/events.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/explain.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/hooks.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/kernel.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/loader.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/mcp_bridge.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/model_policy.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/observability.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/omnigent_importer.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/optimize.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/output.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/permissions.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/registry.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/sandbox.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/self_improve.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/spec.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/store.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/templates.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/testing.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/wizard.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/workflow.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/harness/workflow_presets.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/headless.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/history.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/local/__init__.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/local/airplane.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/local/bench.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/local/build.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/local/code_index.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/local/data/model-packs/devstral.yaml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/local/data/model-packs/ds4.yaml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/local/data/model-packs/gemma4.yaml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/local/data/model-packs/glm.yaml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/local/data/model-packs/gpt-oss.yaml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/local/data/model-packs/minimax.yaml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/local/data/model-packs/qwen-coder.yaml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/local/data/model-packs/qwen3.yaml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/local/data/stack_matrix.yaml +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/local/doctor.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/local/engines.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/local/guardrails.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/local/hardware.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/local/inventory.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/local/labs.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/local/matrix.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/local/migrate.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/local/optimize.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/local/packs.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/local/repo.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/local/servers.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/local/setup.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/local/smoke.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/logging/__init__.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/logging/adapters.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/logging/formatter.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/logging/integration.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/logging/sinks.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/logging/unified_log.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/lsp/__init__.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/lsp/client.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/mcp/__init__.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/mcp/auth_storage.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/mcp/client.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/mcp/config.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/mcp/elicitation.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/mcp/harness_server.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/mcp/hf_auth.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/mcp/integration.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/mcp/oauth.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/mcp/oauth_callback.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/mcp/sampling.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/mcp/search.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/mcp/types.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/memory/__init__.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/memory/config.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/memory/providers.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/memory/types.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/notifications.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/permissions/__init__.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/permissions/rules.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/plan.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/plugins.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/project_trust.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/__init__.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/_builtin_profiles.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/acp_free_models.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/acp_models.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/acp_registry.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/apple_fm.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/catalog.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/credentials.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/dynamic.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/env_introspect.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/free_inference.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/gateway/__init__.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/gateway/base.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/gateway/openresponses_gateway.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/gateway/synthetic.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/health.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/huggingface/__init__.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/huggingface/convert.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/huggingface/downloader.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/huggingface/endpoints.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/huggingface/fetch.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/huggingface/hub.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/huggingface/inference.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/huggingface/transformers_runner.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/live_models.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/local/__init__.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/local/_mlx_worker.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/local/base.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/local/context_probe.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/local/discovery.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/local/ds4.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/local/lmstudio.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/local/mlx.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/local/mlx_engine.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/local/mlx_tools.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/local/ollama.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/local/sglang.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/local/smoke.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/local/tgi.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/local/tool_support.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/local/vllm.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/model_specs.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/models_dev.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/opencode_models.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/openresponses/__init__.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/openresponses/converters/__init__.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/openresponses/converters/messages.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/openresponses/converters/tools.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/openresponses/schema/__init__.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/openresponses/schema/models.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/openresponses/streaming/__init__.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/openresponses/streaming/parser.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/openresponses/tools/__init__.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/openresponses/tools/apply_patch.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/openresponses/tools/code_interpreter.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/openresponses/tools/file_search.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/openresponses/tools/mcp_adapter.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/profiles.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/recommendations.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/providers/usage.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/pure_mode.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/py.typed +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/rendering/__init__.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/rendering/html_export.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/rendering/markdown.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/rendering/transcript_export.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/runtime/__init__.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/runtime/adk.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/runtime/base.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/runtime/builtin.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/runtime/claude_agent_sdk.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/runtime/codex_sdk.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/runtime/errors.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/runtime/openai_agents.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/runtime/openai_sandbox.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/runtime/openai_session.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/runtime/pydanticai.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/runtime/registry.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/runtime/tool_bridge.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/runtime/tool_bridge_openai.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/runtime/tool_bridge_pydanticai.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/safety/__init__.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/safety/sandbox.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/safety/warnings.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/sandbox/__init__.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/sandbox/backends.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/sandbox/execution.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/sandbox/local_sandbox.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/search_registry.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/server/__init__.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/server/api.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/server/web.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/session/__init__.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/session/factory.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/session/persistence.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/session/share_artifacts.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/session/sharing.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/session/switchboard.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/session.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/sidebar.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/skillopt.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/skills.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/stream_view.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/styles/__init__.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tool_call.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/__init__.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/agent_tools.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/apply_patch.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/base.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/batch_tool.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/compact_tool.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/context_handle.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/context_tools.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/diagnostics.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/diff_utils.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/display.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/dynamic_workflow.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/edit_tools.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/enhanced_base.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/env_policy.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/file_tools.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/file_tracking.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/harness_agent_session.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/image_tools.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/lsp_tools.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/mcp_tools.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/monty_tool.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/network_tools.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/output_spill.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/peer_agent_tools.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/permissions.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/post_edit.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/question_tool.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/request_permissions_tool.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/search_tools.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/semantic_search.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/shell_session.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/shell_tools.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/skill_tools.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/spawn_harness.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/todo_tools.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/tool_search.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/validation.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tools/web_tools.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tui_integration.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tui_widgets/__init__.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tui_widgets/widgets/__init__.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tui_widgets/widgets/progress.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/tui_widgets/widgets/tool_display.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/undo_manager.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/utils/__init__.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/utils/error_handling.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/utils/fuzzy.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/__init__.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/agent_store.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/agent_switcher.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/animation_manager.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/code_context.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/command_palette.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/connection_status.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/conversation_history.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/diff_indicator.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/enhanced_status_bar.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/enhanced_toast.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/file_browser.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/file_reference.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/leader_key.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/mode_switcher.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/model_picker.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/permission_preview.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/prompt.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/provider_connect.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/pty_shell.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/resizable_sidebar.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/response_changes.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/response_display.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/rewind_overlay.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/rich_tool_display.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/sidebar_panels.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/slash_commands.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/split_view.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/status_bar.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/superqode_display.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/theme_picker.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/thinking.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/thinking_display.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/throbber.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/toast.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/widgets/unified_output.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/workspace/__init__.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/workspace/artifacts.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/workspace/change_summary.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/workspace/coordinator.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/workspace/diff_tracker.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/workspace/git_guard.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/workspace/git_snapshot.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/workspace/manager.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/workspace/snapshot.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/workspace/watcher.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode/workspace/worktree.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode.egg-info/dependency_links.txt +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode.egg-info/entry_points.txt +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode.egg-info/requires.txt +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/src/superqode.egg-info/top_level.txt +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_acp_client.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_acp_free_models.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_acp_parent_tool_linking.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_acp_permission_store.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_acp_render.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_acp_server.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_acp_session_store.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_acp_slash.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_adaptive_compaction.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_agent_importer.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_agent_loop_harness.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_agent_memory.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_agents_md_compat.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_apply_patch.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_auth.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_bash_spill.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_benchmarks.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_change_summary.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_channels.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_cli_commands.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_cli_reference_coverage.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_command_safety.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_commands_runtime.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_compaction.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_config_loader.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_config_runtime.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_connect_setup.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_context_handles.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_context_probe.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_context_remaining.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_create_skill_tool.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_deferred_tools.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_developer_workflow_docs.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_ds4_local_client.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_dynamic_workflow_tool.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_edit_line_number_strip.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_env_introspect.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_execution_resolver.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_final_parity_wave.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_free_models.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_harness_agent_session.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_harness_backends.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_harness_eval_splits.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_harness_examples.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_harness_explain.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_harness_hooks.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_harness_kernel.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_harness_mcp_server.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_harness_model_policy.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_harness_observability.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_harness_output.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_harness_permissions.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_harness_sandbox.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_harness_seesaw_dimensions.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_harness_self_improve.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_harness_spec.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_harness_store.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_harness_usage.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_harness_wizard.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_harness_workflow.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_headless.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_hf_fetch.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_hooks.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_linter_runner.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_litellm_gateway.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_local_airplane.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_local_build.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_local_code_index.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_local_labs.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_local_migrate.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_local_model_optimizations.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_local_packs.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_local_sandbox.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_local_search.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_local_servers.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_local_setup.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_local_smoke.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_local_stack.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_local_tool_support.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_login_api.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_loop_guard.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_managed_harness_backend.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_markdown_render.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_mcp.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_mcp_integration.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_mcp_live.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_mcp_oauth_generalized.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_mcp_tools_runtime.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_mcp_two_way.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_memory_recall.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_mlx_tools.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_model_profiles.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_model_specs.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_monty_tool.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_network_policy.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_ollama_client.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_omnigent_agent_session_smoke.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_omnigent_importer.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_openai_session.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_output_spill.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_parallel_compare.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_peer_agents.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_plugin_hook_wiring.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_plugins.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_policies_and_turndiff.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_post_edit_verify.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_project_trust.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_provider_catalog.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_provider_dynamic.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_provider_recommendations.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_pure_mode_sessions.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_rate_limit_retry.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_read_tool_limits.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_reasoning_and_budget.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_recursive_eval_packs.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_runtime_adk.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_runtime_builtin.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_runtime_claude_agent_sdk.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_runtime_codex_sdk.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_runtime_dialog.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_runtime_openai_agents.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_runtime_openai_events.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_runtime_openai_hitl.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_runtime_openai_sandbox.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_runtime_protocol.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_runtime_pydanticai.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_sandbox_backends.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_sandbox_execution.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_search_roots.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_semantic_search.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_session_switchboard.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_shell_session.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_simple_login.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_simple_query_fastpath.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_skillopt.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_spawn_harness_tool.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_steering_continue_reminders.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_synthetic_gateways.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_terminal_output_limits.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_theme_picker.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_todo_tools.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_tool_args_repair.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_tool_batch_safety.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_tool_bridge.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_tool_bridge_openai.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_tool_call_repair.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_tool_output_pruning.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_tool_tracking.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_tools.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_tui_change_summary.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_tui_chat_mode.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_tui_exit.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_tui_llamacpp_connect.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_tui_markdown_cleanup.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_tui_mlx_connect.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_tui_mounted.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_tui_tool_display.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_version.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_view_image.py +0 -0
- {superqode-0.2.8 → superqode-0.2.9}/tests/test_web_server_auth.py +0 -0
- {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.
|
|
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
|
|
@@ -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
|
|
75
|
-
":connect
|
|
76
|
-
":
|
|
77
|
-
":
|
|
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
|
|
84
|
-
":connect
|
|
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
|
|
92
|
-
":connect
|
|
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
|
|
7856
|
-
":connect
|
|
7857
|
-
":
|
|
7858
|
-
":
|
|
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
|
|
7865
|
-
":connect
|
|
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
|
|
7873
|
-
":connect
|
|
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
|
)
|