superqode 0.2.76__tar.gz → 0.2.78__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {superqode-0.2.76 → superqode-0.2.78}/CHANGELOG.md +58 -0
- {superqode-0.2.76 → superqode-0.2.78}/PKG-INFO +1 -1
- {superqode-0.2.76 → superqode-0.2.78}/pyproject.toml +1 -1
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/__init__.py +1 -1
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/constants.py +1 -1
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/agent_run.py +4 -1
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/commands_impl.py +81 -1
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/connect.py +38 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/dialogs.py +5 -3
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/helpers.py +9 -2
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/model_catalog.py +31 -57
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/pickers.py +27 -12
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/welcome.py +1 -1
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/connection_profiles.py +53 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/prime_agent.py +92 -1
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/subscription_login.py +36 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode.egg-info/PKG-INFO +1 -1
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_cli_contract.py +4 -1
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_cli_reference_coverage.py +1 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_connect_harness_screen.py +2 -1
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_connection_profiles.py +7 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_prime_agent_provider.py +23 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_prime_command_surface.py +71 -3
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_subscription_login_consent.py +7 -1
- {superqode-0.2.76 → superqode-0.2.78}/LICENSE +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/MANIFEST.in +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/NOTICE +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/README.md +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/examples/README.md +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/examples/a2a/README.md +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/examples/a2a/smoke_client.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/examples/byok-acp-team.yaml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/examples/codex_sdk_quickstart.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/examples/evals/omni-release.yaml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/examples/evals/omni-tiny.yaml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/examples/extensions/README.md +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/examples/extensions/manifest-guard/context.md +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/examples/extensions/manifest-guard/hooks.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/examples/extensions/manifest-guard/tools.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/examples/extensions/packages/README.md +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/examples/extensions/packages/broken-extension/build/lib/superqode_example_broken/__init__.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/examples/extensions/packages/broken-extension/src/superqode_example_broken/__init__.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/examples/extensions/packages/policy-extension/src/superqode_example_policy/__init__.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/examples/extensions/packages/skill-extension/src/superqode_example_skill/SKILL.md +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/examples/extensions/packages/skill-extension/src/superqode_example_skill/__init__.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/examples/extensions/packages/tool-extension/src/superqode_example_tool/__init__.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/examples/extensions/packages/tool-extension-v2/src/superqode_example_tool/__init__.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/examples/extensions/python-package/src/superqode_example_extension/__init__.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/examples/harness-packages/README.md +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/examples/harness-packages/hello-harness/src/superqode_hello_harness/__init__.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/examples/harnesses/coding.yaml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/examples/harnesses/deepagents.yaml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/examples/harnesses/ds4.yaml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/examples/harnesses/gemma4.yaml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/examples/harnesses/google-adk.yaml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/examples/harnesses/local-recursive-dynamic.yaml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/examples/harnesses/mcp-docs.yaml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/examples/harnesses/no-tool.yaml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/examples/harnesses/omni-tiny-local.yaml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/examples/harnesses/omnigent-multi-agent.yaml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/examples/harnesses/openai-agents.yaml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/examples/harnesses/pydanticai.yaml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/examples/harnesses/rlm-code-lid.yaml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/examples/local-models-team.yaml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/examples/mcp/local_docs_server.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/examples/omnigent-multi-agent.agent.yaml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/examples/qm-deployment-layer/README.md +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/examples/qm-deployment-layer/sandbox/skills/superqode-harness/SKILL.md +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/examples/simple-team.yaml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/scripts/check_release_metadata.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/setup.cfg +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/a2a/__init__.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/a2a/client.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/a2a/presets.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/a2a/registry.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/a2a/server.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/a2a/skills.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/a2a/tools.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/a2a/types.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/a2a/workflows.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/acp/__init__.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/acp/client.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/acp/doctor.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/acp/permission_screen.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/acp/permission_store.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/acp/render.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/acp/server.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/acp/session_store.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/acp/slash.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/acp/tool_call_context.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/acp/types.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/acp_discovery.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agent/__init__.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agent/auto_memory.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agent/command_safety.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agent/compaction.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agent/context_manager.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agent/edit_strategies.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agent/exec_policy.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agent/hooks.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agent/loop.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agent/loop_guard.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agent/loop_policy.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agent/network_policy.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agent/output_handler.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agent/parallel_compare.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agent/peer_agents.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agent/plan_mode.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agent/reminders.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agent/rubric.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agent/session_manager.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agent/structured_output.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agent/summarization.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agent/system_prompts.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agent/terminal_output_limits.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agent/text_tool_calls.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agent/tool_args.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agent/tool_tracking.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agent/utility_model.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agent_output.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agent_stream.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/__init__.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/acp_registry.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/client.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/agentpool.phil65.github.io.toml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/ampcode.com.toml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/augmentcode.com.toml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/autodev.github.io.toml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/blackbox.ai.toml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/bub.dev.toml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/cagent.dev.toml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/claude.com.toml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/cline.bot.toml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/codeassistant.dev.toml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/codebuddy.tencent.com.toml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/codex.openai.com.toml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/copilot.github.com.toml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/cortex.snowflake.com.toml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/crow-ai.dev.toml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/cursor.com.toml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/deepagents.langchain.com.toml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/devin.ai.toml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/dirac.run.toml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/factory.ai.toml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/fastagent.ai.toml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/fount.dev.toml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/geminicli.com.toml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/glm.z.ai.toml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/goose.block.xyz.toml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/harnlang.com.toml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/hermes-agent.nousresearch.com.toml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/junie.jetbrains.com.toml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/kilo.ai.toml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/kimi.moonshot.cn.toml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/kiro.dev.toml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/llmlingagent.dev.toml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/minioncode.dev.toml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/mistral-vibe.mistral.ai.toml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/openclaw.ai.toml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/opencode.ai.toml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/openhands.dev.toml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/pi.dev.toml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/poolside.ai.toml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/primeintellect.ai.toml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/qoder.com.toml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/qwenlm.github.io.toml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/sigit.dev.toml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/stakpak.dev.toml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/stdiobus.dev.toml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/vtcode.dev.toml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/data/x.ai.toml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/discovery.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/free_models.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/install_commands.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/messaging.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/official_acp.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/persona.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/registry.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/schema.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/agents/unified.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/__init__.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/async_utils.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/capabilities.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/css.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/harness_picker.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/inputs.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/__init__.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/actions_misc.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/build_harness.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/clickable_commands.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/codex.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/completion.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/events.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/explore.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/factory.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/feedback.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/formatting.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/helper_clipboard.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/helper_completion_helpers.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/helper_diff_review.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/helper_exit_lifecycle.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/helper_file_view.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/helper_interaction_mode.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/helper_mcp_attach.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/helper_message_queue.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/helper_permissions.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/helper_recipes_skills.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/helper_share.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/helper_startup.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/helper_todos_plan.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/helper_vim.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/helper_wizard.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/huggingface.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/local_models.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/mcp.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/pipy_commands.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/sidebar.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/slash_commands.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/switchboard.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/mixins/tour.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/models.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/navigation.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/progress.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/prompt_stack.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/recipes.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/session_state.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/suggester.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/theme_bridge.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app/widgets.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app_enhanced.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/app_main.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/approval.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/atomic.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/auth/__init__.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/benchmarks.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/channels/__init__.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/channels/config.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/channels/discord.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/channels/service.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/channels/slack.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/channels/telegram.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/claude.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/codex.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/__init__.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/a2a.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/acp.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/agents.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/auth.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/benchmark.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/config.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/connect.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/daemon.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/factory.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/harness/__init__.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/harness/_group.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/harness/_helpers.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/harness/bench.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/harness/candidates.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/harness/evaluation.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/harness/evidence.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/harness/inbox.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/harness/lifecycle.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/harness/logbook.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/harness/observability.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/harness/optimization.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/harness/promotion.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/harness/protocol.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/harness/registry.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/harness/replay.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/harness/run_history.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/harness/worker.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/local.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/memory.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/models.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/plugins.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/policy.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/profiles.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/providers.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/runtime.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/sandbox.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/serve.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/sessions.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/share.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/skillopt.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/skills.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/tools.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/trust.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/update.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/commands/work.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/config/__init__.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/config/loader.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/config/schema.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/core/__init__.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/danger.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/data/eval_fixtures/ci-dynamic-root-cause.log +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/data/eval_fixtures/ci-root-cause.log +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/data/eval_packs/local_dynamic_workflow_smoke.yaml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/data/eval_packs/local_recursive_smoke.yaml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/data/superqode-template.yaml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/design_system.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/dialogs/__init__.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/dialogs/base.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/dialogs/model.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/dialogs/provider.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/dialogs/runtime.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/diff_view.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/enterprise.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/evaluation/__init__.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/evaluation/adapters.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/evaluation/behaviors.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/evaluation/engine.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/evaluation/scenarios.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/execution/__init__.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/execution/linter.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/execution/modes.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/execution/resolver.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/execution/runner.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/extensions.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/file_explorer.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/file_viewer.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/flash.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/governance.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/__init__.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/accelerator.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/agent_importer.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/approval_memory.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/backends/__init__.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/backends/base.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/backends/deepagents.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/backends/managed.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/backends/pipy.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/backends/pydanticai.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/backends/registry.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/backends/rlm_code.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/backends/runtime.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/backends/tau.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/bench.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/catalog.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/compiler.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/conformance.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/context_handles.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/diagnostics.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/discovery.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/eval.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/events.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/explain.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/hooks.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/kernel.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/loader.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/mcp_bridge.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/model_policy.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/model_routes.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/observability.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/omni.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/omnigent_importer.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/optimize.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/output.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/permissions.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/pipy_adapter.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/pipy_extensions.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/promotion.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/protocol.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/protocol_adapters.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/protocol_controller.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/registry.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/rlm_code_adapter.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/sandbox.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/self_improve.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/spec.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/store.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/tau_adapter.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/tau_management.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/templates.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/testing.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/wizard.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/workflow.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/harness/workflow_presets.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/headless.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/history.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/local/__init__.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/local/airplane.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/local/bench.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/local/build.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/local/code_index.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/local/data/model-packs/devstral.yaml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/local/data/model-packs/ds4.yaml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/local/data/model-packs/gemma4.yaml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/local/data/model-packs/glm.yaml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/local/data/model-packs/gpt-oss.yaml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/local/data/model-packs/kimi.yaml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/local/data/model-packs/laguna.yaml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/local/data/model-packs/minimax.yaml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/local/data/model-packs/qwen-coder.yaml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/local/data/model-packs/qwen3.yaml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/local/data/stack_matrix.yaml +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/local/doctor.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/local/engines.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/local/guardrails.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/local/hardware.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/local/inventory.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/local/labs.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/local/laguna.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/local/matrix.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/local/migrate.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/local/optimize.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/local/packs.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/local/repo.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/local/servers.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/local/setup.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/local/smoke.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/logging/__init__.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/logging/adapters.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/logging/formatter.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/logging/integration.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/logging/sinks.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/logging/unified_log.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/lsp/__init__.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/lsp/client.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/main.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/mcp/__init__.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/mcp/auth_storage.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/mcp/client.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/mcp/config.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/mcp/elicitation.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/mcp/harness_server.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/mcp/hf_auth.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/mcp/integration.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/mcp/oauth.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/mcp/oauth_callback.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/mcp/sampling.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/mcp/search.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/mcp/types.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/memory/__init__.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/memory/config.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/memory/providers.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/memory/types.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/notifications.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/permissions/__init__.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/permissions/rules.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/__init__.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/ai/__init__.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/ai/fake.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/ai/gateway.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/ai/models.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/ai/transform.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/coding_session.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/compaction.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/config.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/event_stream.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/events.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/harness.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/harness_events.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/loop.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/messages.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/permissions.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/prompt_templates.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/provider_events.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/resources.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/session/__init__.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/session/codec.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/session/entries.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/session/jsonl.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/session/memory.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/session/repository.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/session/session.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/session/storage.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/signals.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/skills.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/stream.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/system_prompt.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/tools/__init__.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/tools/base.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/tools/edit_diff.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/tools/files.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/tools/paths.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/tools/registry.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/tools/search.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/tools/shell.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/tools/truncate.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/types.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pipy/validation.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/plan.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/platform_locks.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/plugins.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/project_trust.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/__init__.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/_builtin_profiles.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/acp_free_models.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/acp_models.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/acp_registry.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/apple_fm.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/catalog.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/copilot_auth.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/credentials.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/dynamic.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/env_introspect.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/free_inference.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/gateway/__init__.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/gateway/base.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/gateway/litellm_gateway.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/gateway/openresponses_gateway.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/gateway/synthetic.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/grok_cli_auth.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/health.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/huggingface/__init__.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/huggingface/convert.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/huggingface/downloader.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/huggingface/endpoints.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/huggingface/fetch.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/huggingface/hub.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/huggingface/inference.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/huggingface/transformers_runner.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/live_models.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/local/__init__.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/local/_mlx_worker.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/local/base.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/local/context_probe.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/local/discovery.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/local/ds4.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/local/lmstudio.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/local/mlx.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/local/mlx_engine.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/local/mlx_tools.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/local/ollama.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/local/sglang.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/local/smoke.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/local/tgi.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/local/tool_support.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/local/vllm.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/manager.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/model_specs.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/models.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/models_dev.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/opencode_models.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/openresponses/__init__.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/openresponses/converters/__init__.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/openresponses/converters/messages.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/openresponses/converters/tools.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/openresponses/schema/__init__.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/openresponses/schema/models.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/openresponses/streaming/__init__.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/openresponses/streaming/parser.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/openresponses/tools/__init__.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/openresponses/tools/apply_patch.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/openresponses/tools/code_interpreter.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/openresponses/tools/file_search.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/openresponses/tools/mcp_adapter.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/profiles.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/recommendations.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/registry.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/subscription_env.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/providers/usage.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/pure_mode.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/py.typed +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/rendering/__init__.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/rendering/html_export.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/rendering/markdown.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/rendering/transcript_export.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/runtime/__init__.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/runtime/adk.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/runtime/antigravity_cli.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/runtime/antigravity_managed.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/runtime/antigravity_sdk.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/runtime/antigravity_status.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/runtime/base.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/runtime/builtin.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/runtime/claude_agent_sdk.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/runtime/codex_sdk.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/runtime/copilot_sdk.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/runtime/devin_cli.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/runtime/devin_status.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/runtime/errors.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/runtime/openai_agents.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/runtime/openai_sandbox.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/runtime/openai_session.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/runtime/pydanticai.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/runtime/registry.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/runtime/tool_bridge.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/runtime/tool_bridge_openai.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/runtime/tool_bridge_pydanticai.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/runtime/vendor_cli.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/safety/__init__.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/safety/sandbox.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/safety/warnings.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/sandbox/__init__.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/sandbox/backends.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/sandbox/execution.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/sandbox/local_sandbox.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/search_registry.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/server/__init__.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/server/api.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/server/web.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/session/__init__.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/session/factory.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/session/persistence.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/session/share_artifacts.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/session/sharing.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/session/switchboard.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/session.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/sidebar.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/skillopt.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/skills.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/stream_view.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/styles/__init__.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tool_call.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/__init__.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/agent_tools.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/apply_patch.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/base.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/batch_tool.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/compact_tool.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/context_handle.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/context_tools.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/core_tools.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/diagnostics.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/diff_utils.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/display.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/dynamic_workflow.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/edit_tools.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/enhanced_base.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/env_policy.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/file_tools.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/file_tracking.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/governed.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/harness_agent_session.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/image_tools.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/lsp_tools.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/mcp_tools.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/monty_tool.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/network_tools.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/output_spill.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/peer_agent_tools.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/permissions.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/post_edit.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/question_tool.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/request_permissions_tool.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/search_tools.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/semantic_search.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/shell_session.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/shell_tools.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/skill_tools.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/spawn_harness.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/todo_tools.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/tool_search.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/validation.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tools/web_tools.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tui_integration.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tui_widgets/__init__.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tui_widgets/widgets/__init__.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tui_widgets/widgets/progress.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/tui_widgets/widgets/tool_display.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/undo_manager.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/utils/__init__.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/utils/error_handling.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/utils/fuzzy.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/__init__.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/agent_store.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/agent_switcher.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/animation_manager.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/code_context.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/command_palette.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/connection_status.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/conversation_history.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/diff_indicator.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/enhanced_status_bar.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/enhanced_toast.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/file_browser.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/file_reference.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/leader_key.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/mode_switcher.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/model_picker.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/permission_preview.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/prompt.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/provider_connect.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/pty_shell.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/resizable_sidebar.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/response_changes.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/response_display.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/rewind_overlay.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/rich_tool_display.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/sidebar_panels.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/slash_commands.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/slash_complete.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/split_view.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/status_bar.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/superqode_display.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/theme_picker.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/thinking.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/thinking_display.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/throbber.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/toast.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/widgets/unified_output.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/workorders/__init__.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/workorders/cockpit.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/workorders/integration.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/workorders/models.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/workorders/runner.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/workorders/store.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/workorders/usage.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/workorders/worker.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/workspace/__init__.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/workspace/artifacts.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/workspace/change_summary.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/workspace/coordinator.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/workspace/diff_tracker.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/workspace/git_guard.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/workspace/git_snapshot.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/workspace/manager.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/workspace/snapshot.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/workspace/watcher.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode/workspace/worktree.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode.egg-info/SOURCES.txt +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode.egg-info/dependency_links.txt +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode.egg-info/entry_points.txt +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode.egg-info/requires.txt +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/src/superqode.egg-info/top_level.txt +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_030_candidate.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_a2a_bridge.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_acp_agent_dispatch.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_acp_client.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_acp_free_models.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_acp_parent_tool_linking.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_acp_permission_store.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_acp_registry.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_acp_render.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_acp_server.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_acp_session_store.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_acp_slash.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_adaptive_compaction.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_agent_importer.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_agent_install_commands.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_agent_loop_harness.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_agent_memory.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_agents_md_compat.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_agy_tui_commands.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_app_main_contract.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_apply_patch.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_auth.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_bash_spill.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_benchmarks.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_catalog_freshness.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_change_summary.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_channels.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_cli_commands.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_cli_connect.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_clickable_commands.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_command_safety.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_commands_runtime.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_compaction.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_config_loader.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_config_runtime.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_connect_setup.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_context_handles.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_context_probe.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_context_remaining.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_copilot_login_ux.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_copilot_tui_commands.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_create_skill_tool.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_deferred_tools.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_design_system_contrast.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_developer_workflow_docs.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_ds4_local_client.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_dynamic_workflow_tool.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_edit_line_number_strip.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_env_introspect.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_execution_resolver.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_extensions.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_final_parity_wave.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_free_models.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_governance.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_grok_cli_auth.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_harness_agent_session.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_harness_backends.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_harness_bench.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_harness_catalog.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_harness_eval_splits.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_harness_examples.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_harness_explain.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_harness_hooks.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_harness_kernel.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_harness_mcp_server.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_harness_model_policy.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_harness_observability.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_harness_omni.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_harness_output.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_harness_permissions.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_harness_promotion.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_harness_protocol.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_harness_sandbox.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_harness_seesaw_dimensions.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_harness_self_improve.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_harness_spec.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_harness_store.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_harness_usage.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_harness_wizard.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_harness_workflow.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_headless.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_hf_fetch.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_hooks.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_install_script.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_integration_docs.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_kimi_k3_provider.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_kimi_k3_routes.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_linter_runner.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_litellm_gateway.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_live_acp_registry.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_live_models.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_local_airplane.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_local_build.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_local_code_index.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_local_labs.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_local_migrate.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_local_model_optimizations.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_local_packs.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_local_sandbox.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_local_search.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_local_servers.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_local_setup.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_local_smoke.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_local_stack.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_local_tool_support.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_login_api.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_loop_guard.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_managed_harness_backend.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_markdown_render.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_mcp.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_mcp_example_server.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_mcp_integration.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_mcp_live.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_mcp_oauth_generalized.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_mcp_tools_runtime.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_mcp_two_way.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_memory_recall.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_mlx_tools.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_model_profiles.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_model_specs.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_models_dev.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_monty_tool.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_navigation_history.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_network_policy.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_ollama_client.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_omnigent_agent_session_smoke.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_omnigent_importer.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_openai_session.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_output_spill.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_parallel_compare.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_peer_agents.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_plugin_hook_wiring.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_plugins.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_policies_and_turndiff.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_post_edit_verify.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_progressive_discovery.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_progressive_reveals.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_project_trust.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_prompt_stack.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_provider_catalog.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_provider_dynamic.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_provider_models.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_provider_recommendations.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_pure_mode_sessions.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_qm_deployment_layer.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_rate_limit_retry.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_read_tool_limits.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_reasoning_and_budget.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_recursive_eval_packs.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_release_metadata.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_rlm_code_integration.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_runtime_adk.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_runtime_antigravity_cli.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_runtime_antigravity_managed.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_runtime_antigravity_sdk.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_runtime_builtin.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_runtime_claude_agent_sdk.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_runtime_codex_sdk.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_runtime_copilot_sdk.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_runtime_devin_cli.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_runtime_dialog.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_runtime_openai_agents.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_runtime_openai_events.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_runtime_openai_hitl.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_runtime_openai_sandbox.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_runtime_protocol.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_runtime_pydanticai.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_sandbox_backends.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_sandbox_execution.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_search_roots.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_semantic_search.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_session_switchboard.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_shell_session.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_simple_login.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_simple_query_fastpath.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_skillopt.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_slash_runtime.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_spawn_harness_tool.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_status_bar_layout.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_steering_continue_reminders.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_subscription_billing_policy.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_subscription_login.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_synthetic_gateways.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_tau_harness_adapter.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_terminal_output_limits.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_theme_contrast.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_theme_picker.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_theme_repaint.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_todo_tools.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_tool_args_repair.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_tool_batch_safety.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_tool_bridge.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_tool_bridge_openai.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_tool_call_repair.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_tool_output_pruning.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_tool_tracking.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_tools.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_tui_change_summary.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_tui_chat_mode.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_tui_diagnostics.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_tui_exit.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_tui_feedback.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_tui_llamacpp_connect.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_tui_markdown_cleanup.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_tui_mlx_connect.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_tui_mounted.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_tui_onboarding.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_tui_smoke.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_tui_tool_display.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_update_command.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_vendor_cli_runtime.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_version.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_view_image.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_web_server_auth.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_workorders.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_workspace.py +0 -0
- {superqode-0.2.76 → superqode-0.2.78}/tests/test_zai_provider.py +0 -0
|
@@ -7,6 +7,64 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.2.78] - 2026-08-07
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
|
|
14
|
+
- The vendor model picker keeps the highlighted row on screen and accepts a
|
|
15
|
+
click anywhere on the row. Both were fine for a vendor with a handful of
|
|
16
|
+
models and broke on a longer catalog.
|
|
17
|
+
- ACP sessions report the connected agent as the active harness in the status
|
|
18
|
+
bar instead of the native profile.
|
|
19
|
+
|
|
20
|
+
### Added
|
|
21
|
+
|
|
22
|
+
- `:prime local` registers the local model servers SuperQode can see with Prime
|
|
23
|
+
Agent, leaving providers it did not discover untouched.
|
|
24
|
+
- `:prime login` hands the terminal to Prime Agent for its own sign-in.
|
|
25
|
+
- `:prime models` opens the model picker, and `:prime model <provider/id>` sets
|
|
26
|
+
one directly.
|
|
27
|
+
|
|
28
|
+
## [0.2.77] - 2026-08-07
|
|
29
|
+
|
|
30
|
+
Fixes the Prime Agent connection shipped in 0.2.76. Connecting without first
|
|
31
|
+
choosing a model launched the agent with a model literally named `auto`, which
|
|
32
|
+
sent the session to a provider the user had never selected and failed on a
|
|
33
|
+
missing key. Prime Agent also now appears in the Subscriptions group of
|
|
34
|
+
`:connect`, because what its login buys is a model on a plan you already pay
|
|
35
|
+
for.
|
|
36
|
+
|
|
37
|
+
### Fixed
|
|
38
|
+
|
|
39
|
+
- Prime Agent connects when no model has been chosen. `auto` is SuperQode's
|
|
40
|
+
internal marker for "no model selected", and the Prime route forwarded it as
|
|
41
|
+
a real model id, so every default connection ran
|
|
42
|
+
`prime-agent --mode acp --model auto` and reported "No API key found" for
|
|
43
|
+
whichever provider Prime resolved that against. The marker now resolves to
|
|
44
|
+
unset in `split_selector`, so a bare `:prime connect` starts Prime on its own
|
|
45
|
+
default and a pinned selection is still honored. `default` and `none` are
|
|
46
|
+
treated the same way, and a provider with an unset model keeps the provider.
|
|
47
|
+
|
|
48
|
+
### Added
|
|
49
|
+
|
|
50
|
+
- Prime Agent is listed under `:connect` in Subscriptions alongside Codex,
|
|
51
|
+
Cursor, Muse Code and Grok. It reaches the same ACP route as `:prime connect`,
|
|
52
|
+
and readiness detects the binary together with any credential, whether that is
|
|
53
|
+
Prime's own auth file, a provider key in the environment, or a local provider
|
|
54
|
+
in `models.json`.
|
|
55
|
+
- Documentation states that this login cannot be run from SuperQode. Prime Agent
|
|
56
|
+
has no `login` subcommand and exposes `/login` only inside its own interactive
|
|
57
|
+
terminal, so the flow is to run `prime-agent`, sign in there, and return.
|
|
58
|
+
SuperQode then detects the stored credential.
|
|
59
|
+
|
|
60
|
+
### Notes
|
|
61
|
+
|
|
62
|
+
- Prime Agent is deliberately excluded from the subscription key-stripping
|
|
63
|
+
policy. That policy exists for vendors like Muse Code, where an environment
|
|
64
|
+
key silently overrides an account session. Prime Agent's auth file takes
|
|
65
|
+
priority over environment variables, so there is no billing diversion to
|
|
66
|
+
prevent, and stripping keys would break its documented environment-key route.
|
|
67
|
+
|
|
10
68
|
## [0.2.76] - 2026-08-07
|
|
11
69
|
|
|
12
70
|
Prime Intellect's Prime Agent is a supported coding agent. It connects over ACP
|
|
@@ -1941,7 +1941,10 @@ class AgentRunMixin:
|
|
|
1941
1941
|
from superqode.providers import prime_agent as prime
|
|
1942
1942
|
|
|
1943
1943
|
opts = self._prime_opts()
|
|
1944
|
-
|
|
1944
|
+
requested = (model or "").strip()
|
|
1945
|
+
if requested.lower() in {"auto", "default", "none"}:
|
|
1946
|
+
requested = ""
|
|
1947
|
+
selector = requested or opts.model
|
|
1945
1948
|
command = prime.acp_command(selector, options=opts)
|
|
1946
1949
|
acp_extra_env = opts.env()
|
|
1947
1950
|
model_display = f"prime/{selector}" if selector else "prime/default"
|
|
@@ -3211,6 +3211,8 @@ class CommandImplMixin:
|
|
|
3211
3211
|
self._prime_connect(rest, log)
|
|
3212
3212
|
else:
|
|
3213
3213
|
self._show_prime_model_picker(log)
|
|
3214
|
+
elif sub in ("local", "sync"):
|
|
3215
|
+
self._prime_local_cmd(log)
|
|
3214
3216
|
elif sub == "depth":
|
|
3215
3217
|
self._prime_depth_cmd(rest, log)
|
|
3216
3218
|
elif sub == "goal":
|
|
@@ -3230,7 +3232,7 @@ class CommandImplMixin:
|
|
|
3230
3232
|
elif sub == "update":
|
|
3231
3233
|
self._prime_update(log)
|
|
3232
3234
|
elif sub in ("login", "auth"):
|
|
3233
|
-
self.
|
|
3235
|
+
self._prime_login_cmd(log)
|
|
3234
3236
|
elif sub in ("help", "?"):
|
|
3235
3237
|
self._show_prime_help(log)
|
|
3236
3238
|
else:
|
|
@@ -3311,6 +3313,84 @@ class CommandImplMixin:
|
|
|
3311
3313
|
if pinned:
|
|
3312
3314
|
log.add_info(f"Prime Agent launch: {', '.join(pinned)}")
|
|
3313
3315
|
|
|
3316
|
+
def _prime_login_cmd(self, log) -> None:
|
|
3317
|
+
"""Hand the terminal to Prime Agent so its own ``/login`` can run.
|
|
3318
|
+
|
|
3319
|
+
Prime exposes no login subcommand and no authentication call over ACP
|
|
3320
|
+
or RPC, so SuperQode cannot drive the OAuth itself. Suspending for the
|
|
3321
|
+
vendor's own terminal is as close as its surface allows, and it keeps
|
|
3322
|
+
the user inside SuperQode rather than sending them elsewhere.
|
|
3323
|
+
"""
|
|
3324
|
+
from superqode.providers import prime_agent as prime
|
|
3325
|
+
|
|
3326
|
+
if not prime.is_installed():
|
|
3327
|
+
log.add_error("Prime Agent is not installed.")
|
|
3328
|
+
log.add_info(f" Install: {prime.INSTALL_HINT}")
|
|
3329
|
+
return
|
|
3330
|
+
|
|
3331
|
+
started = self._begin_subscription_login(
|
|
3332
|
+
"prime-agent",
|
|
3333
|
+
log,
|
|
3334
|
+
on_success=lambda: self._show_prime_status(log),
|
|
3335
|
+
reason=(
|
|
3336
|
+
"Prime Agent needs a provider before it can call a model. "
|
|
3337
|
+
"Prime has no login subcommand, so SuperQode hands over the "
|
|
3338
|
+
"terminal and its full session opens. Run /login, then QUIT "
|
|
3339
|
+
"Prime with /quit or Ctrl+C: SuperQode resumes only when Prime "
|
|
3340
|
+
"exits."
|
|
3341
|
+
),
|
|
3342
|
+
)
|
|
3343
|
+
if not started:
|
|
3344
|
+
log.add_info("Prime Agent already has a credential.")
|
|
3345
|
+
self._show_prime_status(log)
|
|
3346
|
+
|
|
3347
|
+
def _prime_local_cmd(self, log) -> None:
|
|
3348
|
+
"""Register the local model servers SuperQode can see with Prime Agent."""
|
|
3349
|
+
from superqode.providers import prime_agent as prime
|
|
3350
|
+
|
|
3351
|
+
if not prime.is_installed():
|
|
3352
|
+
log.add_error("Prime Agent is not installed.")
|
|
3353
|
+
log.add_info(f" Install: {prime.INSTALL_HINT}")
|
|
3354
|
+
return
|
|
3355
|
+
self.run_worker(self._prime_local_async(log), exclusive=False)
|
|
3356
|
+
|
|
3357
|
+
async def _prime_local_async(self, log) -> None:
|
|
3358
|
+
"""Scan for local servers, then merge them into Prime's models.json."""
|
|
3359
|
+
from superqode.providers import prime_agent as prime
|
|
3360
|
+
from superqode.providers.local.discovery import quick_scan
|
|
3361
|
+
|
|
3362
|
+
log.add_info("Scanning for local model servers...")
|
|
3363
|
+
try:
|
|
3364
|
+
found = await quick_scan()
|
|
3365
|
+
except Exception as exc: # noqa: BLE001 - discovery is best-effort
|
|
3366
|
+
log.add_error(f"Local discovery failed: {exc}")
|
|
3367
|
+
return
|
|
3368
|
+
|
|
3369
|
+
discovered: dict[str, tuple[str, list[str]]] = {}
|
|
3370
|
+
for provider in found.values():
|
|
3371
|
+
name = prime.local_provider_name(getattr(provider, "provider_type", None))
|
|
3372
|
+
models = [prime.local_model_id(m) for m in (getattr(provider, "models", None) or [])]
|
|
3373
|
+
if not name or not models:
|
|
3374
|
+
continue
|
|
3375
|
+
host = str(getattr(provider, "host", "") or "").rstrip("/")
|
|
3376
|
+
discovered[name] = (f"{host}/v1", models)
|
|
3377
|
+
|
|
3378
|
+
if not discovered:
|
|
3379
|
+
log.add_error("No local model servers found.")
|
|
3380
|
+
log.add_info(" Start one (for example `ollama serve`) and run :prime local again.")
|
|
3381
|
+
return
|
|
3382
|
+
|
|
3383
|
+
providers, models, path = await asyncio.to_thread(prime.merge_local_models, discovered)
|
|
3384
|
+
if not models:
|
|
3385
|
+
log.add_error("Found local servers but no chat models to register.")
|
|
3386
|
+
return
|
|
3387
|
+
log.add_success(f"Registered {models} local model(s) from {providers} provider(s)")
|
|
3388
|
+
for name, (base_url, ids) in sorted(discovered.items()):
|
|
3389
|
+
usable = [m for m in ids if prime.is_chat_model(m)]
|
|
3390
|
+
log.add_info(f" {name}: {len(usable)} model(s) at {base_url}")
|
|
3391
|
+
log.add_info(f" Written to {path}")
|
|
3392
|
+
log.add_info(" Run :prime models to pick one.")
|
|
3393
|
+
|
|
3314
3394
|
def _prime_depth_cmd(self, rest: str, log) -> None:
|
|
3315
3395
|
"""Set Prime's recursion depth for the next launch."""
|
|
3316
3396
|
raw = (rest or "").strip()
|
|
@@ -416,6 +416,23 @@ class ConnectMixin:
|
|
|
416
416
|
reason="A local Grok subscription login is required.",
|
|
417
417
|
)
|
|
418
418
|
return
|
|
419
|
+
# Prime Agent has no login subcommand, so the handoff runs the
|
|
420
|
+
# binary bare and the user signs in with its own `/login`.
|
|
421
|
+
if getattr(profile, "id", "") == "prime-agent":
|
|
422
|
+
from superqode.providers import prime_agent as prime
|
|
423
|
+
|
|
424
|
+
if prime.is_installed():
|
|
425
|
+
self._begin_subscription_login(
|
|
426
|
+
"prime-agent",
|
|
427
|
+
log,
|
|
428
|
+
on_success=lambda: self._connect_acp_cmd("prime-agent", log),
|
|
429
|
+
reason=(
|
|
430
|
+
"Prime Agent needs a provider before it can call a model. "
|
|
431
|
+
"SuperQode will hand over the terminal; run /login there, "
|
|
432
|
+
"then quit."
|
|
433
|
+
),
|
|
434
|
+
)
|
|
435
|
+
return
|
|
419
436
|
log.add_info(f"{profile.label} needs setup: {profile.unavailable_hint}")
|
|
420
437
|
return
|
|
421
438
|
if conn == "copilot":
|
|
@@ -2696,6 +2713,27 @@ class ConnectMixin:
|
|
|
2696
2713
|
self._auto_select_codex_model(model_hint, agent, log)
|
|
2697
2714
|
else:
|
|
2698
2715
|
self._show_codex_models_selection(agent, log)
|
|
2716
|
+
elif self.current_agent in ("prime-agent", "prime"):
|
|
2717
|
+
# Prime fixes its model at launch, so the selection lives in
|
|
2718
|
+
# the pinned launch options rather than in the ACP session.
|
|
2719
|
+
# The generic branch below reads a "model" key the catalog
|
|
2720
|
+
# entry does not have, which left the badge empty and made a
|
|
2721
|
+
# picked model look like it had not been applied.
|
|
2722
|
+
hint = (model_hint or "").strip()
|
|
2723
|
+
if hint and hint.lower() not in {"auto", "default", "none"}:
|
|
2724
|
+
self._prime_set_opts(model=hint)
|
|
2725
|
+
opts = self._prime_opts()
|
|
2726
|
+
self.current_model = opts.model
|
|
2727
|
+
self.current_provider = "prime"
|
|
2728
|
+
self._awaiting_model_selection = False
|
|
2729
|
+
|
|
2730
|
+
badge = self.query_one("#mode-badge", ModeBadge)
|
|
2731
|
+
badge.agent = self.current_agent
|
|
2732
|
+
badge.mode = ""
|
|
2733
|
+
badge.role = ""
|
|
2734
|
+
badge.model = self.current_model or "Prime default"
|
|
2735
|
+
badge.provider = self.current_provider
|
|
2736
|
+
badge.execution_mode = "acp"
|
|
2699
2737
|
elif self.current_agent == "grok":
|
|
2700
2738
|
# Grok Build owns the subscription and model catalog. Keep
|
|
2701
2739
|
# the default unset so its signed-in account decides; an
|
|
@@ -943,9 +943,11 @@ class DialogsMixin:
|
|
|
943
943
|
t.append(" :prime connect [model] ", style=THEME["cyan"])
|
|
944
944
|
t.append("connect Prime Agent over ACP\n", style=THEME["muted"])
|
|
945
945
|
t.append(" :prime models [search] ", style=THEME["cyan"])
|
|
946
|
-
t.append("
|
|
947
|
-
t.append(" :prime model
|
|
948
|
-
t.append("
|
|
946
|
+
t.append("pick a model, optionally filtered\n", style=THEME["muted"])
|
|
947
|
+
t.append(" :prime model <provider/id> ", style=THEME["cyan"])
|
|
948
|
+
t.append("set a model directly, without the picker\n", style=THEME["muted"])
|
|
949
|
+
t.append(" :prime local ", style=THEME["cyan"])
|
|
950
|
+
t.append("register local model servers with Prime\n", style=THEME["muted"])
|
|
949
951
|
t.append(" :prime depth [n] ", style=THEME["cyan"])
|
|
950
952
|
t.append("recursion depth via RLM_MAX_DEPTH\n", style=THEME["muted"])
|
|
951
953
|
t.append(" :prime goal [text] ", style=THEME["cyan"])
|
|
@@ -143,9 +143,16 @@ class HelpersMixin(
|
|
|
143
143
|
try:
|
|
144
144
|
from superqode.app.widgets import ColorfulStatusBar
|
|
145
145
|
|
|
146
|
-
pure = getattr(self, "_pure_mode", None)
|
|
147
146
|
harness = ""
|
|
148
|
-
|
|
147
|
+
# An ACP agent owns its own loop, tools and prompt. Falling through
|
|
148
|
+
# to the native profile below labelled every vendor session "Core"
|
|
149
|
+
# in the status bar while the connection card correctly said the
|
|
150
|
+
# vendor owned it.
|
|
151
|
+
if getattr(self, "current_mode", "") == "agent":
|
|
152
|
+
harness = str(getattr(self, "current_agent", "") or "")
|
|
153
|
+
|
|
154
|
+
pure = getattr(self, "_pure_mode", None)
|
|
155
|
+
if not harness and pure is not None:
|
|
149
156
|
runtime_name = str(getattr(pure, "runtime_name", "") or "")
|
|
150
157
|
connected = bool(getattr(getattr(pure, "session", None), "connected", False))
|
|
151
158
|
if connected and runtime_name in getattr(
|
|
@@ -952,6 +952,13 @@ class ModelCatalogMixin:
|
|
|
952
952
|
status.update_byok_status()
|
|
953
953
|
status.active_runtime = "acp"
|
|
954
954
|
status.active_model = model or ""
|
|
955
|
+
# The agent owns its loop, tools and prompt, so it is the active
|
|
956
|
+
# harness. Leaving this field alone kept the startup value, which
|
|
957
|
+
# showed "h core" for every ACP session while the connection card
|
|
958
|
+
# correctly named the vendor.
|
|
959
|
+
agent = str(getattr(self, "current_agent", "") or "").strip()
|
|
960
|
+
if agent:
|
|
961
|
+
status.active_harness = agent
|
|
955
962
|
except Exception: # noqa: BLE001
|
|
956
963
|
pass
|
|
957
964
|
|
|
@@ -1025,61 +1032,22 @@ class ModelCatalogMixin:
|
|
|
1025
1032
|
self._show_provider_models("grok-cli", log, use_picker=False)
|
|
1026
1033
|
|
|
1027
1034
|
def _show_prime_models(self, log, search: str = "") -> None:
|
|
1028
|
-
"""
|
|
1029
|
-
self.
|
|
1035
|
+
"""``:prime models`` opens the selectable picker, like the other agents."""
|
|
1036
|
+
self._show_prime_model_picker(log, search)
|
|
1030
1037
|
|
|
1031
|
-
|
|
1032
|
-
"""List the models the installed Prime Agent reports for its logins."""
|
|
1033
|
-
from superqode.providers import prime_agent as prime
|
|
1034
|
-
|
|
1035
|
-
if not prime.is_installed():
|
|
1036
|
-
t = Text()
|
|
1037
|
-
t.append("\n Prime Agent is not installed\n\n", style=f"bold {THEME['warning']}")
|
|
1038
|
-
t.append(" Install: ", style=THEME["muted"])
|
|
1039
|
-
t.append(f"{prime.INSTALL_HINT}\n", style=THEME["cyan"])
|
|
1040
|
-
log.write_feedback(t)
|
|
1041
|
-
return
|
|
1042
|
-
|
|
1043
|
-
models = await asyncio.to_thread(prime.list_models, search)
|
|
1044
|
-
|
|
1045
|
-
t = Text()
|
|
1046
|
-
heading = f"\n Prime Agent models{f' matching {search!r}' if search else ''}\n\n"
|
|
1047
|
-
t.append(heading, style=f"bold {THEME['text']}")
|
|
1048
|
-
if not models:
|
|
1049
|
-
t.append(" No models available.\n\n", style=THEME["warning"])
|
|
1050
|
-
t.append(" Prime owns its own credentials. Log in first:\n", style=THEME["muted"])
|
|
1051
|
-
t.append(" prime-agent\n /login\n", style=THEME["cyan"])
|
|
1052
|
-
log.write_feedback(t)
|
|
1053
|
-
return
|
|
1054
|
-
|
|
1055
|
-
current = self._prime_opts().model
|
|
1056
|
-
last_provider = ""
|
|
1057
|
-
for info in models:
|
|
1058
|
-
if info.provider != last_provider:
|
|
1059
|
-
t.append(f"\n {info.provider}\n", style=THEME["muted"])
|
|
1060
|
-
last_provider = info.provider
|
|
1061
|
-
selected = info.id == current
|
|
1062
|
-
t.append(" ▸ " if selected else " ", style=THEME["success"])
|
|
1063
|
-
t.append(f"{info.model:28s}", style=THEME["cyan"])
|
|
1064
|
-
t.append(f"{info.context:>6s} ", style=THEME["muted"])
|
|
1065
|
-
traits = ", ".join(
|
|
1066
|
-
[n for n, on in (("thinking", info.thinking), ("images", info.images)) if on]
|
|
1067
|
-
)
|
|
1068
|
-
t.append(f"{traits}\n", style=THEME["dim"])
|
|
1069
|
-
|
|
1070
|
-
t.append("\n Source: ", style=THEME["muted"])
|
|
1071
|
-
t.append("`prime-agent model list`\n", style=THEME["text"])
|
|
1072
|
-
t.append(" Select with ", style=THEME["muted"])
|
|
1073
|
-
t.append(":prime model", style=THEME["cyan"])
|
|
1074
|
-
t.append(" (picker) or ", style=THEME["muted"])
|
|
1075
|
-
t.append(":prime model <provider/model>\n", style=THEME["cyan"])
|
|
1076
|
-
log.write_feedback(t)
|
|
1077
|
-
|
|
1078
|
-
def _show_prime_model_picker(self, log) -> None:
|
|
1038
|
+
def _show_prime_model_picker(self, log, search: str = "") -> None:
|
|
1079
1039
|
"""Interactive picker over Prime's catalog; Enter connects."""
|
|
1080
|
-
self.run_worker(self._show_prime_model_picker_async(log), exclusive=False)
|
|
1040
|
+
self.run_worker(self._show_prime_model_picker_async(log, search), exclusive=False)
|
|
1081
1041
|
|
|
1082
|
-
|
|
1042
|
+
def _prime_model_label(self, info) -> str:
|
|
1043
|
+
"""One picker row: provider, model, context, and what it supports."""
|
|
1044
|
+
traits = ", ".join(
|
|
1045
|
+
[name for name, on in (("thinking", info.thinking), ("images", info.images)) if on]
|
|
1046
|
+
)
|
|
1047
|
+
detail = f"{info.context:>6s}" + (f" {traits}" if traits else "")
|
|
1048
|
+
return f"{info.provider:16s} {info.model:30s} {detail}"
|
|
1049
|
+
|
|
1050
|
+
async def _show_prime_model_picker_async(self, log, search: str = "") -> None:
|
|
1083
1051
|
"""Probe the catalog off-thread, then open the vendor picker."""
|
|
1084
1052
|
from superqode.providers import prime_agent as prime
|
|
1085
1053
|
|
|
@@ -1088,21 +1056,27 @@ class ModelCatalogMixin:
|
|
|
1088
1056
|
log.add_info(f" Install: {prime.INSTALL_HINT}")
|
|
1089
1057
|
return
|
|
1090
1058
|
|
|
1091
|
-
models = await asyncio.to_thread(prime.list_models)
|
|
1059
|
+
models = await asyncio.to_thread(prime.list_models, search)
|
|
1060
|
+
if not models and search:
|
|
1061
|
+
log.add_info(f"No Prime Agent model matches {search!r}. Showing the full catalog.")
|
|
1062
|
+
models = await asyncio.to_thread(prime.list_models, "")
|
|
1092
1063
|
if not models:
|
|
1093
1064
|
log.add_error("Prime Agent reported no models.")
|
|
1094
1065
|
log.add_info(" Log in first: run `prime-agent`, then `/login`.")
|
|
1066
|
+
log.add_info(" Local models need a provider in ~/.prime/agent/models.json.")
|
|
1095
1067
|
return
|
|
1096
1068
|
|
|
1097
|
-
entries = [(info.id,
|
|
1098
|
-
self._show_vendor_model_picker(
|
|
1069
|
+
entries = [(info.id, self._prime_model_label(info)) for info in models]
|
|
1070
|
+
opened = self._show_vendor_model_picker(
|
|
1099
1071
|
log,
|
|
1100
|
-
title="Select Prime Agent Model",
|
|
1072
|
+
title=f"Select Prime Agent Model{f' ({search})' if search else ''}",
|
|
1101
1073
|
entries=entries,
|
|
1102
1074
|
on_choose=lambda chosen: self._prime_connect(chosen, log),
|
|
1103
1075
|
current=self._prime_opts().model,
|
|
1104
|
-
retry_hint="Run :prime
|
|
1076
|
+
retry_hint="Run :prime models to choose again.",
|
|
1105
1077
|
)
|
|
1078
|
+
if not opened:
|
|
1079
|
+
log.add_error("No Prime Agent models to choose from.")
|
|
1106
1080
|
|
|
1107
1081
|
def _claude_model_cmd(self, model: str, log) -> None:
|
|
1108
1082
|
from superqode.runtime.claude_agent_sdk import CLAUDE_MODELS
|
|
@@ -684,36 +684,51 @@ class PickerNavigationMixin:
|
|
|
684
684
|
)
|
|
685
685
|
|
|
686
686
|
highlighted = self._prompts.index
|
|
687
|
+
# Vendors with a handful of models fit on one screen; a catalog like
|
|
688
|
+
# Prime Agent's does not. Numbers are right-aligned so the rows stay a
|
|
689
|
+
# column, and the highlighted row is scrolled back into view below.
|
|
690
|
+
number_width = len(str(len(entries)))
|
|
687
691
|
t = Text()
|
|
688
692
|
t.append("\n ◈ ", style=f"bold {THEME['purple']}")
|
|
689
|
-
t.append(f"{title}
|
|
693
|
+
t.append(f"{title}", style=f"bold {THEME['text']}")
|
|
694
|
+
t.append(f" {len(entries)} models\n\n", style=THEME["muted"])
|
|
690
695
|
for index, (model_id, label) in enumerate(entries):
|
|
691
696
|
num = index + 1
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
697
|
+
is_highlighted = index == highlighted
|
|
698
|
+
# The whole row is the click target, not just the number. A mouse
|
|
699
|
+
# user aims at the name they are reading.
|
|
700
|
+
style = f"bold {THEME['success']}" if is_highlighted else THEME["dim"]
|
|
701
|
+
link = self._picker_link_style(style, num)
|
|
702
|
+
handle = self._picker_link_style(
|
|
703
|
+
f"bold {THEME['success']}" if is_highlighted else f"bold {THEME['text']}",
|
|
704
|
+
num,
|
|
705
|
+
handle=True,
|
|
706
|
+
)
|
|
707
|
+
t.append(" ", style="")
|
|
708
|
+
self._append_picker_dot(t, num, highlighted=is_highlighted)
|
|
709
|
+
t.append(f"[{num:>{number_width}}] ", style=link)
|
|
710
|
+
t.append(label, style=handle)
|
|
701
711
|
# Show the id only when it adds information beyond the label.
|
|
702
|
-
if model_id and model_id != label:
|
|
712
|
+
if model_id and model_id != label and model_id not in label:
|
|
703
713
|
t.append(f" {model_id}", style=THEME["muted"])
|
|
704
714
|
if current and model_id == current:
|
|
705
715
|
t.append(" ◀ active", style=THEME["muted"])
|
|
716
|
+
if is_highlighted:
|
|
717
|
+
self._append_picker_arrow(t, num)
|
|
706
718
|
t.append("\n", style="")
|
|
707
719
|
t.append("\n 💡 ", style=THEME["muted"])
|
|
708
720
|
t.append("↑↓", style=THEME["cyan"])
|
|
709
721
|
t.append(" navigate ", style=THEME["dim"])
|
|
710
722
|
t.append("Enter", style=THEME["cyan"])
|
|
711
|
-
t.append(" select • or type a number\n", style=THEME["dim"])
|
|
723
|
+
t.append(" select • click a row • or type a number\n", style=THEME["dim"])
|
|
712
724
|
|
|
713
725
|
log.auto_scroll = False
|
|
714
726
|
log.clear()
|
|
715
727
|
log.write(t)
|
|
716
728
|
log.auto_scroll = True
|
|
729
|
+
# Without this the highlight walks off the bottom of a long catalog and
|
|
730
|
+
# the user cannot see what is selected.
|
|
731
|
+
self._scroll_to_highlighted_item(log, highlighted, len(entries))
|
|
717
732
|
self.set_timer(0.05, self._ensure_input_focus)
|
|
718
733
|
return True
|
|
719
734
|
|
|
@@ -284,7 +284,7 @@ def render_welcome(
|
|
|
284
284
|
|
|
285
285
|
|
|
286
286
|
#: Harness ids whose product name is not simply the id capitalised.
|
|
287
|
-
_HARNESS_NAME_OVERRIDES = {"pipy": "PiPy"}
|
|
287
|
+
_HARNESS_NAME_OVERRIDES = {"pipy": "PiPy", "prime-agent": "Prime Agent"}
|
|
288
288
|
|
|
289
289
|
|
|
290
290
|
def _harness_display_name(name) -> str:
|
|
@@ -269,6 +269,37 @@ def _muse_signed_in() -> bool:
|
|
|
269
269
|
return bool(data.get("providers")) if isinstance(data, dict) else False
|
|
270
270
|
|
|
271
271
|
|
|
272
|
+
def _prime_agent_signed_in() -> bool:
|
|
273
|
+
"""A stored Prime Agent credential exists, from its own ``/login``.
|
|
274
|
+
|
|
275
|
+
Prime reads ``~/.prime/agent/auth.json`` for both OAuth subscriptions and
|
|
276
|
+
API keys. Provider names are enough to answer this; the values are not read.
|
|
277
|
+
"""
|
|
278
|
+
from superqode.providers import prime_agent
|
|
279
|
+
|
|
280
|
+
if prime_agent.auth_providers():
|
|
281
|
+
return True
|
|
282
|
+
# Prime also accepts provider keys straight from the environment, so a
|
|
283
|
+
# session can be ready with no auth file at all.
|
|
284
|
+
return any(
|
|
285
|
+
_env_key_set(name)
|
|
286
|
+
for name in ("ANTHROPIC_API_KEY", "OPENAI_API_KEY", "GEMINI_API_KEY", "PRIME_API_KEY")
|
|
287
|
+
) or bool(prime_agent.custom_providers())
|
|
288
|
+
|
|
289
|
+
|
|
290
|
+
def _prime_agent_ready() -> bool:
|
|
291
|
+
"""Prime Agent is installed and has some way to reach a model."""
|
|
292
|
+
from superqode.providers import prime_agent
|
|
293
|
+
|
|
294
|
+
return prime_agent.is_installed() and _prime_agent_signed_in()
|
|
295
|
+
|
|
296
|
+
|
|
297
|
+
def _prime_agent_present() -> bool:
|
|
298
|
+
from superqode.providers import prime_agent
|
|
299
|
+
|
|
300
|
+
return prime_agent.is_installed()
|
|
301
|
+
|
|
302
|
+
|
|
272
303
|
def _muse_cli_ready() -> bool:
|
|
273
304
|
"""Muse Code is installed and holds a credential it can actually use."""
|
|
274
305
|
if shutil.which("muse") is None:
|
|
@@ -672,6 +703,28 @@ _AGENT_PROFILES: List[ConnectionProfile] = [
|
|
|
672
703
|
"`curl -fsSL https://dev.meta.ai/install.sh | bash`, then run `muse login`"
|
|
673
704
|
),
|
|
674
705
|
),
|
|
706
|
+
ConnectionProfile(
|
|
707
|
+
id="prime-agent",
|
|
708
|
+
harness_openness="open",
|
|
709
|
+
model_openness="multi-model",
|
|
710
|
+
transport="ACP",
|
|
711
|
+
label="Prime Agent (RLM)",
|
|
712
|
+
description=(
|
|
713
|
+
"Prime Intellect's RLM coding agent over ACP, on a provider you already "
|
|
714
|
+
"pay for (ChatGPT, Claude, GitHub Copilot) or a local model. Commands: :prime"
|
|
715
|
+
),
|
|
716
|
+
# The agent itself is free and MIT. What the login buys is the upstream
|
|
717
|
+
# model, so this sits with the vendor accounts rather than with BYOK.
|
|
718
|
+
connector="acp",
|
|
719
|
+
menu=CONNECT_MENU_VENDORS,
|
|
720
|
+
acp_agent="prime-agent",
|
|
721
|
+
detect=_prime_agent_ready,
|
|
722
|
+
product_detect=_prime_agent_present,
|
|
723
|
+
unavailable_hint=(
|
|
724
|
+
"install with `curl -fsSL https://app.primeintellect.ai/prime-agent/install.sh | sh`, "
|
|
725
|
+
"then run `prime-agent` and use its `/login`"
|
|
726
|
+
),
|
|
727
|
+
),
|
|
675
728
|
ConnectionProfile(
|
|
676
729
|
id="grok",
|
|
677
730
|
harness_openness="closed",
|