superqode 0.2.1__tar.gz → 0.2.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {superqode-0.2.1 → superqode-0.2.2}/CHANGELOG.md +4 -0
- {superqode-0.2.1/src/superqode.egg-info → superqode-0.2.2}/PKG-INFO +1 -1
- {superqode-0.2.1 → superqode-0.2.2}/pyproject.toml +1 -1
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/__init__.py +1 -1
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/app_main.py +14 -1
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/pure_mode.py +63 -6
- {superqode-0.2.1 → superqode-0.2.2/src/superqode.egg-info}/PKG-INFO +1 -1
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_harness_kernel.py +97 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_tui_smoke.py +44 -0
- {superqode-0.2.1 → superqode-0.2.2}/LICENSE +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/MANIFEST.in +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/README.md +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/examples/README.md +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/examples/byok-acp-team.yaml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/examples/harnesses/coding.yaml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/examples/harnesses/deepagents.yaml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/examples/harnesses/ds4.yaml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/examples/harnesses/gemma4.yaml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/examples/harnesses/google-adk.yaml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/examples/harnesses/local-recursive-dynamic.yaml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/examples/harnesses/no-tool.yaml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/examples/harnesses/omnigent-multi-agent.yaml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/examples/harnesses/openai-agents.yaml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/examples/harnesses/pydanticai.yaml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/examples/local-models-team.yaml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/examples/omnigent-multi-agent.agent.yaml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/examples/simple-team.yaml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/setup.cfg +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/a2a/__init__.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/a2a/client.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/a2a/presets.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/a2a/registry.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/a2a/server.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/a2a/skills.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/a2a/tools.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/a2a/types.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/a2a/workflows.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/acp/__init__.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/acp/client.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/acp/doctor.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/acp/permission_screen.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/acp/permission_store.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/acp/render.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/acp/session_store.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/acp/slash.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/acp/tool_call_context.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/acp/types.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/acp_discovery.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agent/__init__.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agent/auto_memory.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agent/command_safety.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agent/compaction.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agent/context_manager.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agent/edit_strategies.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agent/exec_policy.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agent/hooks.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agent/loop.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agent/loop_guard.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agent/network_policy.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agent/output_handler.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agent/parallel_compare.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agent/peer_agents.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agent/plan_mode.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agent/reminders.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agent/rubric.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agent/session_manager.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agent/structured_output.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agent/summarization.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agent/system_prompts.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agent/terminal_output_limits.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agent/text_tool_calls.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agent/tool_args.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agent/tool_tracking.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agent/utility_model.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agent_output.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agent_stream.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agents/__init__.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agents/acp_registry.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agents/client.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agents/data/agentpool.phil65.github.io.toml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agents/data/ampcode.com.toml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agents/data/augmentcode.com.toml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agents/data/autodev.github.io.toml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agents/data/blackbox.ai.toml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agents/data/bub.dev.toml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agents/data/cagent.dev.toml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agents/data/claude.com.toml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agents/data/cline.bot.toml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agents/data/codeassistant.dev.toml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agents/data/codex.openai.com.toml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agents/data/copilot.github.com.toml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agents/data/crow-ai.dev.toml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agents/data/cursor.com.toml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agents/data/factory.ai.toml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agents/data/fastagent.ai.toml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agents/data/fount.dev.toml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agents/data/geminicli.com.toml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agents/data/goose.block.xyz.toml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agents/data/hermes-agent.nousresearch.com.toml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agents/data/junie.jetbrains.com.toml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agents/data/kimi.moonshot.cn.toml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agents/data/kiro.dev.toml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agents/data/llmlingagent.dev.toml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agents/data/minioncode.dev.toml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agents/data/mistral-vibe.mistral.ai.toml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agents/data/openclaw.ai.toml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agents/data/opencode.ai.toml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agents/data/openhands.dev.toml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agents/data/pi.dev.toml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agents/data/poolside.ai.toml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agents/data/qoder.com.toml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agents/data/qwenlm.github.io.toml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agents/data/sigit.dev.toml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agents/data/stakpak.dev.toml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agents/data/stdiobus.dev.toml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agents/data/vtcode.dev.toml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agents/discovery.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agents/free_models.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agents/messaging.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agents/official_acp.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agents/persona.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agents/registry.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agents/schema.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/agents/unified.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/app/__init__.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/app/constants.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/app/css.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/app/models.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/app/suggester.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/app/theme_bridge.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/app/widgets.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/app_enhanced.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/approval.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/atomic.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/auth/__init__.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/benchmarks.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/channels/__init__.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/channels/config.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/channels/discord.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/channels/service.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/channels/slack.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/channels/telegram.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/claude.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/codex.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/commands/__init__.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/commands/a2a.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/commands/acp.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/commands/agents.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/commands/auth.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/commands/config.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/commands/daemon.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/commands/local.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/commands/providers.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/commands/runtime.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/commands/serve.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/commands/sessions.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/config/__init__.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/config/loader.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/config/schema.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/core/__init__.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/danger.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/data/eval_fixtures/ci-dynamic-root-cause.log +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/data/eval_fixtures/ci-root-cause.log +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/data/eval_packs/local_dynamic_workflow_smoke.yaml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/data/eval_packs/local_recursive_smoke.yaml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/data/superqode-template.yaml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/design_system.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/dialogs/__init__.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/dialogs/base.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/dialogs/model.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/dialogs/provider.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/dialogs/runtime.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/diff_view.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/enterprise.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/evaluation/__init__.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/evaluation/adapters.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/evaluation/behaviors.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/evaluation/engine.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/evaluation/scenarios.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/execution/__init__.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/execution/linter.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/execution/modes.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/execution/resolver.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/execution/runner.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/file_explorer.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/file_viewer.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/flash.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/harness/__init__.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/harness/accelerator.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/harness/agent_importer.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/harness/approval_memory.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/harness/backends/__init__.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/harness/backends/base.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/harness/backends/deepagents.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/harness/backends/managed.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/harness/backends/pydanticai.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/harness/backends/registry.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/harness/backends/runtime.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/harness/compiler.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/harness/context_handles.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/harness/diagnostics.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/harness/eval.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/harness/events.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/harness/explain.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/harness/hooks.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/harness/kernel.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/harness/loader.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/harness/mcp_bridge.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/harness/model_policy.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/harness/observability.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/harness/omnigent_importer.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/harness/optimize.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/harness/output.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/harness/permissions.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/harness/registry.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/harness/sandbox.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/harness/spec.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/harness/store.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/harness/templates.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/harness/testing.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/harness/wizard.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/harness/workflow.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/harness/workflow_presets.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/headless.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/history.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/local/__init__.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/local/airplane.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/local/bench.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/local/build.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/local/code_index.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/local/data/model-packs/devstral.yaml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/local/data/model-packs/ds4.yaml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/local/data/model-packs/gemma4.yaml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/local/data/model-packs/glm.yaml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/local/data/model-packs/gpt-oss.yaml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/local/data/model-packs/minimax.yaml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/local/data/model-packs/qwen-coder.yaml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/local/data/model-packs/qwen3.yaml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/local/data/stack_matrix.yaml +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/local/doctor.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/local/engines.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/local/guardrails.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/local/hardware.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/local/inventory.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/local/labs.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/local/matrix.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/local/migrate.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/local/optimize.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/local/packs.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/local/repo.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/local/servers.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/local/setup.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/local/smoke.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/logging/__init__.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/logging/adapters.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/logging/formatter.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/logging/integration.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/logging/sinks.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/logging/unified_log.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/lsp/__init__.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/lsp/client.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/main.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/mcp/__init__.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/mcp/auth_storage.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/mcp/client.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/mcp/config.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/mcp/elicitation.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/mcp/harness_server.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/mcp/hf_auth.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/mcp/integration.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/mcp/oauth.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/mcp/oauth_callback.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/mcp/sampling.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/mcp/search.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/mcp/types.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/memory/__init__.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/memory/config.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/memory/providers.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/memory/types.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/notifications.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/permissions/__init__.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/permissions/rules.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/plan.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/plugins.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/project_trust.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/__init__.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/_builtin_profiles.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/acp_free_models.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/acp_models.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/acp_registry.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/apple_fm.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/catalog.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/connection_profiles.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/credentials.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/dynamic.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/env_introspect.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/free_inference.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/gateway/__init__.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/gateway/base.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/gateway/litellm_gateway.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/gateway/openresponses_gateway.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/gateway/synthetic.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/health.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/huggingface/__init__.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/huggingface/convert.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/huggingface/downloader.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/huggingface/endpoints.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/huggingface/fetch.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/huggingface/hub.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/huggingface/inference.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/huggingface/transformers_runner.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/live_models.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/local/__init__.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/local/_mlx_worker.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/local/base.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/local/context_probe.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/local/discovery.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/local/ds4.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/local/lmstudio.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/local/mlx.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/local/mlx_engine.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/local/mlx_tools.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/local/ollama.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/local/sglang.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/local/smoke.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/local/tgi.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/local/tool_support.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/local/vllm.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/manager.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/model_specs.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/models.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/models_dev.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/opencode_models.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/openresponses/__init__.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/openresponses/converters/__init__.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/openresponses/converters/messages.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/openresponses/converters/tools.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/openresponses/schema/__init__.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/openresponses/schema/models.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/openresponses/streaming/__init__.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/openresponses/streaming/parser.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/openresponses/tools/__init__.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/openresponses/tools/apply_patch.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/openresponses/tools/code_interpreter.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/openresponses/tools/file_search.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/openresponses/tools/mcp_adapter.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/profiles.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/recommendations.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/registry.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/providers/usage.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/py.typed +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/rendering/__init__.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/rendering/html_export.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/rendering/markdown.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/rendering/transcript_export.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/runtime/__init__.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/runtime/adk.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/runtime/base.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/runtime/builtin.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/runtime/claude_agent_sdk.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/runtime/codex_sdk.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/runtime/errors.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/runtime/openai_agents.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/runtime/openai_sandbox.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/runtime/openai_session.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/runtime/pydanticai.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/runtime/registry.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/runtime/tool_bridge.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/runtime/tool_bridge_openai.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/runtime/tool_bridge_pydanticai.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/safety/__init__.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/safety/sandbox.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/safety/warnings.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/sandbox/__init__.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/sandbox/backends.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/sandbox/execution.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/sandbox/local_sandbox.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/search_registry.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/server/__init__.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/server/api.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/server/web.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/session/__init__.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/session/factory.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/session/persistence.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/session/share_artifacts.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/session/sharing.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/session/switchboard.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/session.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/sidebar.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/skillopt.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/skills.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/stream_view.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/styles/__init__.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/tool_call.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/tools/__init__.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/tools/agent_tools.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/tools/apply_patch.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/tools/base.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/tools/batch_tool.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/tools/compact_tool.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/tools/context_handle.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/tools/context_tools.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/tools/diagnostics.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/tools/diff_utils.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/tools/display.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/tools/dynamic_workflow.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/tools/edit_tools.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/tools/enhanced_base.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/tools/env_policy.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/tools/file_tools.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/tools/file_tracking.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/tools/harness_agent_session.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/tools/image_tools.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/tools/lsp_tools.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/tools/mcp_tools.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/tools/monty_tool.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/tools/network_tools.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/tools/output_spill.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/tools/peer_agent_tools.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/tools/permissions.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/tools/post_edit.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/tools/question_tool.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/tools/request_permissions_tool.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/tools/search_tools.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/tools/semantic_search.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/tools/shell_session.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/tools/shell_tools.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/tools/skill_tools.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/tools/spawn_harness.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/tools/todo_tools.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/tools/tool_search.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/tools/validation.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/tools/web_tools.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/tui_integration.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/tui_widgets/__init__.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/tui_widgets/widgets/__init__.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/tui_widgets/widgets/progress.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/tui_widgets/widgets/tool_display.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/undo_manager.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/utils/__init__.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/utils/error_handling.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/utils/fuzzy.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/widgets/__init__.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/widgets/agent_store.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/widgets/agent_switcher.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/widgets/animation_manager.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/widgets/code_context.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/widgets/command_palette.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/widgets/connection_status.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/widgets/conversation_history.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/widgets/diff_indicator.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/widgets/enhanced_status_bar.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/widgets/enhanced_toast.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/widgets/file_browser.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/widgets/file_reference.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/widgets/leader_key.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/widgets/mode_switcher.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/widgets/model_picker.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/widgets/permission_preview.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/widgets/prompt.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/widgets/provider_connect.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/widgets/pty_shell.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/widgets/resizable_sidebar.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/widgets/response_changes.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/widgets/response_display.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/widgets/rewind_overlay.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/widgets/rich_tool_display.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/widgets/sidebar_panels.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/widgets/slash_commands.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/widgets/slash_complete.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/widgets/split_view.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/widgets/status_bar.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/widgets/superqode_display.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/widgets/theme_picker.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/widgets/thinking.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/widgets/thinking_display.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/widgets/throbber.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/widgets/toast.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/widgets/unified_output.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/workspace/__init__.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/workspace/artifacts.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/workspace/change_summary.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/workspace/coordinator.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/workspace/diff_tracker.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/workspace/git_guard.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/workspace/git_snapshot.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/workspace/manager.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/workspace/snapshot.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/workspace/watcher.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode/workspace/worktree.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode.egg-info/SOURCES.txt +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode.egg-info/dependency_links.txt +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode.egg-info/entry_points.txt +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode.egg-info/requires.txt +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/src/superqode.egg-info/top_level.txt +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_acp_client.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_acp_free_models.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_acp_parent_tool_linking.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_acp_permission_store.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_acp_registry.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_acp_render.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_acp_session_store.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_acp_slash.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_adaptive_compaction.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_agent_importer.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_agent_loop_harness.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_agent_memory.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_agents_md_compat.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_apply_patch.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_auth.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_bash_spill.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_benchmarks.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_change_summary.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_channels.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_cli_commands.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_cli_connect.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_cli_reference_coverage.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_command_safety.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_commands_runtime.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_compaction.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_config_loader.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_config_runtime.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_connect_setup.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_connection_profiles.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_context_handles.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_context_probe.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_context_remaining.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_create_skill_tool.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_deferred_tools.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_developer_workflow_docs.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_ds4_local_client.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_dynamic_workflow_tool.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_edit_line_number_strip.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_env_introspect.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_execution_resolver.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_final_parity_wave.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_free_models.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_harness_agent_session.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_harness_backends.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_harness_examples.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_harness_explain.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_harness_hooks.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_harness_mcp_server.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_harness_model_policy.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_harness_observability.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_harness_output.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_harness_permissions.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_harness_sandbox.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_harness_seesaw_dimensions.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_harness_spec.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_harness_store.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_harness_wizard.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_harness_workflow.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_headless.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_hf_fetch.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_hooks.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_linter_runner.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_litellm_gateway.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_live_models.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_local_airplane.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_local_build.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_local_code_index.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_local_labs.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_local_migrate.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_local_model_optimizations.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_local_packs.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_local_sandbox.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_local_search.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_local_servers.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_local_setup.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_local_smoke.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_local_stack.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_local_tool_support.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_login_api.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_loop_guard.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_managed_harness_backend.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_markdown_render.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_mcp.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_mcp_integration.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_mcp_live.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_mcp_oauth_generalized.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_mcp_tools_runtime.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_mcp_two_way.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_memory_recall.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_mlx_tools.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_model_profiles.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_model_specs.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_monty_tool.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_network_policy.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_ollama_client.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_omnigent_agent_session_smoke.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_omnigent_importer.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_openai_session.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_output_spill.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_parallel_compare.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_peer_agents.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_plugin_hook_wiring.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_plugins.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_policies_and_turndiff.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_post_edit_verify.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_project_trust.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_provider_catalog.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_provider_dynamic.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_provider_models.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_provider_recommendations.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_pure_mode_sessions.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_rate_limit_retry.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_read_tool_limits.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_reasoning_and_budget.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_recursive_eval_packs.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_runtime_adk.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_runtime_builtin.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_runtime_claude_agent_sdk.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_runtime_codex_sdk.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_runtime_dialog.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_runtime_openai_agents.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_runtime_openai_events.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_runtime_openai_hitl.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_runtime_openai_sandbox.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_runtime_protocol.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_runtime_pydanticai.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_sandbox_backends.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_sandbox_execution.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_search_roots.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_semantic_search.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_session_switchboard.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_shell_session.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_simple_login.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_simple_query_fastpath.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_skillopt.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_slash_runtime.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_spawn_harness_tool.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_steering_continue_reminders.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_synthetic_gateways.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_terminal_output_limits.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_theme_picker.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_todo_tools.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_tool_args_repair.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_tool_batch_safety.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_tool_bridge.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_tool_bridge_openai.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_tool_call_repair.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_tool_output_pruning.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_tool_tracking.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_tools.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_tui_change_summary.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_tui_chat_mode.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_tui_exit.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_tui_llamacpp_connect.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_tui_markdown_cleanup.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_tui_mlx_connect.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_tui_mounted.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_tui_tool_display.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_version.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_view_image.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_web_server_auth.py +0 -0
- {superqode-0.2.1 → superqode-0.2.2}/tests/test_workspace.py +0 -0
|
@@ -17,6 +17,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
17
17
|
### Fixed
|
|
18
18
|
|
|
19
19
|
- **Smoke script source checkout support** - Made the Omnigent agent-session smoke script import SuperQode reliably when run directly from a checkout.
|
|
20
|
+
- **Harness model routing** - Made `model_policy.primary` override the active TUI connection for harness runs and added a clear local-provider warning when an MLX-tagged model is routed through Ollama.
|
|
21
|
+
- **Harness wizard defaults** - Made Enter-through defaults in the TUI wizard create a runnable Qwen local harness with an explicit `ollama/qwen3-coder` model policy.
|
|
22
|
+
- **Harness wizard loading** - Fixed the final “Load this harness now?” step so loaded harnesses remain visible after reconnect/disconnect state changes, and stale `SUPERQODE_HARNESS` paths no longer crash Pure Mode startup.
|
|
23
|
+
- **Harness streaming** - Forwarded builtin harness `model_delta` events through Pure Mode so TUI harness runs no longer report `chunks=0` when the model did stream content.
|
|
20
24
|
|
|
21
25
|
### Changed
|
|
22
26
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: superqode
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.2
|
|
4
4
|
Summary: SuperQode: harness engineering framework for coding agents, optimized for local and open models
|
|
5
5
|
Author-email: Shashi Jagtap <info@super-agentic.ai>
|
|
6
6
|
Maintainer-email: Shashi Jagtap <info@super-agentic.ai>
|
|
@@ -12042,7 +12042,11 @@ class SuperQodeApp(App):
|
|
|
12042
12042
|
answers["name"] = raw
|
|
12043
12043
|
self._harness_wizard_next(state, "starter")
|
|
12044
12044
|
elif step == "starter":
|
|
12045
|
-
starter = self._harness_wizard_choice(
|
|
12045
|
+
starter = self._harness_wizard_choice(
|
|
12046
|
+
raw,
|
|
12047
|
+
[key for key, _ in self._wizard_starters()],
|
|
12048
|
+
default=str(answers.get("starter") or "qwen-coding"),
|
|
12049
|
+
)
|
|
12046
12050
|
if starter is None:
|
|
12047
12051
|
log.add_error("Choose a starter by number or name.")
|
|
12048
12052
|
self._render_harness_wizard_step(log)
|
|
@@ -14849,6 +14853,15 @@ class SuperQodeApp(App):
|
|
|
14849
14853
|
|
|
14850
14854
|
provider = self._pure_mode.session.provider
|
|
14851
14855
|
model = self._pure_mode.session.model
|
|
14856
|
+
if getattr(self._pure_mode, "harness_enabled", False) and hasattr(
|
|
14857
|
+
self._pure_mode, "_resolve_harness_route"
|
|
14858
|
+
):
|
|
14859
|
+
try:
|
|
14860
|
+
provider, model = self._pure_mode._resolve_harness_route()
|
|
14861
|
+
except Exception:
|
|
14862
|
+
# Let the run path raise the user-facing error with full context.
|
|
14863
|
+
provider = self._pure_mode.session.provider
|
|
14864
|
+
model = self._pure_mode.session.model
|
|
14852
14865
|
plan_mode_for_run = bool(getattr(self, "_active_plan_mode_for_current_message", False))
|
|
14853
14866
|
if plan_mode_for_run:
|
|
14854
14867
|
text = (
|
|
@@ -22,7 +22,11 @@ from .agent.system_prompts import SystemPromptLevel
|
|
|
22
22
|
from .agent.session_manager import SessionManager, SessionMetadata
|
|
23
23
|
from .tools.base import ToolRegistry, ToolResult
|
|
24
24
|
from .providers.gateway.litellm_gateway import LiteLLMGateway
|
|
25
|
-
from .providers.model_specs import
|
|
25
|
+
from .providers.model_specs import (
|
|
26
|
+
normalize_model_for_provider,
|
|
27
|
+
normalize_provider_id,
|
|
28
|
+
split_provider_model_ref,
|
|
29
|
+
)
|
|
26
30
|
from .providers.registry import PROVIDERS, ProviderTier, ProviderCategory
|
|
27
31
|
from .runtime import AgentRuntime, create_runtime, resolve_runtime_name
|
|
28
32
|
|
|
@@ -87,6 +91,8 @@ class PureMode:
|
|
|
87
91
|
path = os.getenv("SUPERQODE_HARNESS", "").strip()
|
|
88
92
|
if not path:
|
|
89
93
|
return
|
|
94
|
+
if not Path(path).expanduser().exists():
|
|
95
|
+
return
|
|
90
96
|
self.load_harness(path)
|
|
91
97
|
|
|
92
98
|
def load_harness(self, path: str | Path):
|
|
@@ -99,6 +105,7 @@ class PureMode:
|
|
|
99
105
|
self._harness_kernel = None
|
|
100
106
|
self._harness_session = None
|
|
101
107
|
self._harness_session_id = ""
|
|
108
|
+
self._sync_harness_session_fields()
|
|
102
109
|
return self._harness_spec
|
|
103
110
|
|
|
104
111
|
def set_harness(self, spec, *, path: str | Path | None = None) -> None:
|
|
@@ -108,6 +115,7 @@ class PureMode:
|
|
|
108
115
|
self._harness_kernel = None
|
|
109
116
|
self._harness_session = None
|
|
110
117
|
self._harness_session_id = ""
|
|
118
|
+
self._sync_harness_session_fields()
|
|
111
119
|
|
|
112
120
|
def clear_harness(self) -> None:
|
|
113
121
|
"""Return to direct runtime mode."""
|
|
@@ -116,11 +124,57 @@ class PureMode:
|
|
|
116
124
|
self._harness_kernel = None
|
|
117
125
|
self._harness_session = None
|
|
118
126
|
self._harness_session_id = ""
|
|
127
|
+
self.session.harness_name = ""
|
|
128
|
+
self.session.harness_path = ""
|
|
129
|
+
self.session.harness_flavor = ""
|
|
130
|
+
self.session.harness_runtime = ""
|
|
131
|
+
|
|
132
|
+
def _sync_harness_session_fields(self) -> None:
|
|
133
|
+
"""Mirror the loaded HarnessSpec into user-visible session status."""
|
|
134
|
+
if self._harness_spec is None:
|
|
135
|
+
self.session.harness_name = ""
|
|
136
|
+
self.session.harness_path = ""
|
|
137
|
+
self.session.harness_flavor = ""
|
|
138
|
+
self.session.harness_runtime = ""
|
|
139
|
+
return
|
|
140
|
+
self.session.harness_name = self._harness_spec.name
|
|
141
|
+
self.session.harness_path = self._harness_path
|
|
142
|
+
self.session.harness_flavor = self._harness_spec.flavor.value
|
|
143
|
+
self.session.harness_runtime = self._harness_spec.runtime.backend
|
|
119
144
|
|
|
120
145
|
@property
|
|
121
146
|
def harness_enabled(self) -> bool:
|
|
122
147
|
return self._harness_spec is not None
|
|
123
148
|
|
|
149
|
+
def _resolve_harness_route(self) -> tuple[str, str]:
|
|
150
|
+
"""Return the provider/model the active harness should run against."""
|
|
151
|
+
provider = self.session.provider
|
|
152
|
+
model = self.session.model
|
|
153
|
+
if self._harness_spec is None:
|
|
154
|
+
return provider, model
|
|
155
|
+
|
|
156
|
+
primary = str(getattr(self._harness_spec.model_policy, "primary", "") or "").strip()
|
|
157
|
+
configured_provider = str(
|
|
158
|
+
getattr(self._harness_spec.model_policy, "config", {}).get("provider") or ""
|
|
159
|
+
).strip()
|
|
160
|
+
if primary:
|
|
161
|
+
parsed = split_provider_model_ref(primary, default_provider=configured_provider)
|
|
162
|
+
provider = normalize_provider_id(parsed.provider or configured_provider or provider)
|
|
163
|
+
model = normalize_model_for_provider(provider, parsed.model or primary)
|
|
164
|
+
|
|
165
|
+
self._validate_harness_route(provider, model)
|
|
166
|
+
return provider, model
|
|
167
|
+
|
|
168
|
+
@staticmethod
|
|
169
|
+
def _validate_harness_route(provider: str, model: str) -> None:
|
|
170
|
+
"""Catch common local provider/model mismatches before streaming."""
|
|
171
|
+
if provider == "ollama" and model.lower().endswith("-mlx"):
|
|
172
|
+
raise RuntimeError(
|
|
173
|
+
"The active harness is trying to run an MLX-tagged model through Ollama: "
|
|
174
|
+
f"ollama/{model}. Use the exact Ollama model tag from `ollama list`, or set "
|
|
175
|
+
"`model_policy.primary: mlx/<model>` and connect with the MLX provider."
|
|
176
|
+
)
|
|
177
|
+
|
|
124
178
|
def get_providers_for_picker(self) -> List[Dict[str, Any]]:
|
|
125
179
|
"""Get providers formatted for the TUI picker."""
|
|
126
180
|
providers = []
|
|
@@ -271,6 +325,7 @@ class PureMode:
|
|
|
271
325
|
self._harness_kernel = None
|
|
272
326
|
self._harness_session = None
|
|
273
327
|
self._harness_session_id = ""
|
|
328
|
+
self._sync_harness_session_fields()
|
|
274
329
|
|
|
275
330
|
def set_system_level(self, level: SystemPromptLevel):
|
|
276
331
|
"""Change the system prompt level."""
|
|
@@ -282,11 +337,12 @@ class PureMode:
|
|
|
282
337
|
async def run(self, prompt: str, plan_mode: Optional[bool] = None) -> AgentResponse:
|
|
283
338
|
"""Run a task in Pure Mode."""
|
|
284
339
|
if self._harness_spec is not None:
|
|
340
|
+
provider, model = self._resolve_harness_route()
|
|
285
341
|
session = await self._ensure_harness_session()
|
|
286
342
|
result = await session.prompt(
|
|
287
343
|
prompt,
|
|
288
|
-
provider=
|
|
289
|
-
model=
|
|
344
|
+
provider=provider,
|
|
345
|
+
model=model,
|
|
290
346
|
working_directory=self.session.working_directory,
|
|
291
347
|
runtime=self._harness_spec.runtime.backend,
|
|
292
348
|
)
|
|
@@ -336,15 +392,16 @@ class PureMode:
|
|
|
336
392
|
async def run_streaming(self, prompt: str, plan_mode: Optional[bool] = None):
|
|
337
393
|
"""Run a task with streaming output."""
|
|
338
394
|
if self._harness_spec is not None:
|
|
395
|
+
provider, model = self._resolve_harness_route()
|
|
339
396
|
session = await self._ensure_harness_session()
|
|
340
397
|
async for event in session.stream(
|
|
341
398
|
prompt,
|
|
342
|
-
provider=
|
|
343
|
-
model=
|
|
399
|
+
provider=provider,
|
|
400
|
+
model=model,
|
|
344
401
|
working_directory=self.session.working_directory,
|
|
345
402
|
runtime=self._harness_spec.runtime.backend,
|
|
346
403
|
):
|
|
347
|
-
if event.type
|
|
404
|
+
if event.type not in {"delta", "model_delta"}:
|
|
348
405
|
continue
|
|
349
406
|
chunk = str(event.data.get("text", ""))
|
|
350
407
|
if self.on_stream_chunk:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: superqode
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.2
|
|
4
4
|
Summary: SuperQode: harness engineering framework for coding agents, optimized for local and open models
|
|
5
5
|
Author-email: Shashi Jagtap <info@super-agentic.ai>
|
|
6
6
|
Maintainer-email: Shashi Jagtap <info@super-agentic.ai>
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"""Tests for the minimal v2 HarnessKernel."""
|
|
2
2
|
|
|
3
|
+
from dataclasses import replace
|
|
3
4
|
from pathlib import Path
|
|
4
5
|
|
|
5
6
|
from pydantic import BaseModel
|
|
@@ -10,6 +11,7 @@ from superqode.harness import (
|
|
|
10
11
|
FileHarnessStore,
|
|
11
12
|
HarnessBackendResult,
|
|
12
13
|
HarnessFlavor,
|
|
14
|
+
ModelPolicySpec,
|
|
13
15
|
get_harness_template,
|
|
14
16
|
init_harness,
|
|
15
17
|
)
|
|
@@ -151,6 +153,16 @@ class FakeApprovalBackend(FakeBackend):
|
|
|
151
153
|
)
|
|
152
154
|
|
|
153
155
|
|
|
156
|
+
class FakeModelDeltaBackend:
|
|
157
|
+
async def stream(self, request):
|
|
158
|
+
from superqode.harness import HarnessEvent
|
|
159
|
+
|
|
160
|
+
yield HarnessEvent(type="model_request", data={"runtime": "fake"})
|
|
161
|
+
yield HarnessEvent(type="model_delta", data={"text": "hello"})
|
|
162
|
+
yield HarnessEvent(type="model_delta", data={"text": "-streamed"})
|
|
163
|
+
yield HarnessEvent(type="end", data={"runtime": "fake"})
|
|
164
|
+
|
|
165
|
+
|
|
154
166
|
@pytest.mark.asyncio
|
|
155
167
|
async def test_no_tool_kernel_runs_with_empty_registry(monkeypatch, tmp_path: Path):
|
|
156
168
|
backend = FakeBackend()
|
|
@@ -308,6 +320,91 @@ async def test_pure_mode_can_stream_through_harness_spec(monkeypatch, tmp_path:
|
|
|
308
320
|
assert status["harness"]["name"] == spec.name
|
|
309
321
|
|
|
310
322
|
|
|
323
|
+
@pytest.mark.asyncio
|
|
324
|
+
async def test_pure_mode_harness_primary_overrides_active_connection(monkeypatch, tmp_path: Path):
|
|
325
|
+
from superqode.pure_mode import PureMode
|
|
326
|
+
|
|
327
|
+
created = {}
|
|
328
|
+
|
|
329
|
+
def fake_create_runtime(name, **kwargs):
|
|
330
|
+
created["config"] = kwargs["config"]
|
|
331
|
+
return FakeRuntime(**kwargs)
|
|
332
|
+
|
|
333
|
+
monkeypatch.setattr("superqode.harness.backends.runtime.create_runtime", fake_create_runtime)
|
|
334
|
+
spec = replace(
|
|
335
|
+
get_harness_template("no-tool"),
|
|
336
|
+
model_policy=ModelPolicySpec(primary="mlx/qwen3.6:35b-mlx"),
|
|
337
|
+
)
|
|
338
|
+
pure = PureMode()
|
|
339
|
+
pure.set_harness(spec)
|
|
340
|
+
assert pure.connect("ollama", "qwen3.6:35b-a3b", working_directory=tmp_path)
|
|
341
|
+
|
|
342
|
+
chunks = [chunk async for chunk in pure.run_streaming("hello")]
|
|
343
|
+
|
|
344
|
+
assert "".join(chunks) == "hello-streamed"
|
|
345
|
+
assert created["config"].provider == "mlx"
|
|
346
|
+
assert created["config"].model == "qwen3.6:35b-mlx"
|
|
347
|
+
|
|
348
|
+
|
|
349
|
+
def test_pure_mode_harness_warns_for_ollama_mlx_model(tmp_path: Path):
|
|
350
|
+
from superqode.pure_mode import PureMode
|
|
351
|
+
|
|
352
|
+
pure = PureMode()
|
|
353
|
+
pure.set_harness(get_harness_template("no-tool"))
|
|
354
|
+
assert pure.connect("ollama", "qwen3.6:35b-mlx", working_directory=tmp_path)
|
|
355
|
+
|
|
356
|
+
with pytest.raises(RuntimeError, match="MLX-tagged model through Ollama"):
|
|
357
|
+
pure._resolve_harness_route()
|
|
358
|
+
|
|
359
|
+
|
|
360
|
+
def test_pure_mode_set_harness_updates_visible_status(tmp_path: Path):
|
|
361
|
+
from superqode.pure_mode import PureMode
|
|
362
|
+
|
|
363
|
+
spec = get_harness_template("qwen-coding")
|
|
364
|
+
pure = PureMode()
|
|
365
|
+
pure.set_harness(spec, path=tmp_path / "harness.yaml")
|
|
366
|
+
|
|
367
|
+
status = pure.get_status()["harness"]
|
|
368
|
+
assert status["enabled"] is True
|
|
369
|
+
assert status["name"] == "qwen-coding"
|
|
370
|
+
assert status["path"].endswith("harness.yaml")
|
|
371
|
+
assert status["flavor"] == "coding"
|
|
372
|
+
assert status["runtime"] == "builtin"
|
|
373
|
+
|
|
374
|
+
|
|
375
|
+
def test_pure_mode_disconnect_preserves_loaded_harness_status(tmp_path: Path):
|
|
376
|
+
from superqode.pure_mode import PureMode
|
|
377
|
+
|
|
378
|
+
spec = get_harness_template("qwen-coding")
|
|
379
|
+
pure = PureMode()
|
|
380
|
+
pure.set_harness(spec, path=tmp_path / "harness.yaml")
|
|
381
|
+
assert pure.connect("ollama", "qwen3-coder", working_directory=tmp_path)
|
|
382
|
+
|
|
383
|
+
pure.disconnect()
|
|
384
|
+
|
|
385
|
+
status = pure.get_status()["harness"]
|
|
386
|
+
assert status["enabled"] is True
|
|
387
|
+
assert status["name"] == "qwen-coding"
|
|
388
|
+
assert status["path"].endswith("harness.yaml")
|
|
389
|
+
|
|
390
|
+
|
|
391
|
+
@pytest.mark.asyncio
|
|
392
|
+
async def test_pure_mode_harness_stream_forwards_model_delta_events(monkeypatch, tmp_path: Path):
|
|
393
|
+
from superqode.pure_mode import PureMode
|
|
394
|
+
|
|
395
|
+
monkeypatch.setattr(
|
|
396
|
+
"superqode.harness.kernel.create_harness_backend",
|
|
397
|
+
lambda name: FakeModelDeltaBackend(),
|
|
398
|
+
)
|
|
399
|
+
pure = PureMode()
|
|
400
|
+
pure.set_harness(get_harness_template("qwen-coding"), path=tmp_path / "harness.yaml")
|
|
401
|
+
assert pure.connect("ollama", "qwen3-coder", working_directory=tmp_path)
|
|
402
|
+
|
|
403
|
+
chunks = [chunk async for chunk in pure.run_streaming("hello")]
|
|
404
|
+
|
|
405
|
+
assert chunks == ["hello", "-streamed"]
|
|
406
|
+
|
|
407
|
+
|
|
311
408
|
@pytest.mark.asyncio
|
|
312
409
|
async def test_pure_mode_resumes_harness_approval(monkeypatch, tmp_path: Path):
|
|
313
410
|
from superqode.pure_mode import PureMode
|
|
@@ -1213,6 +1213,50 @@ def test_tui_harness_wizard_guided_steps_write_and_load_spec(tmp_path, monkeypat
|
|
|
1213
1213
|
assert app._pure_mode.harness_enabled
|
|
1214
1214
|
|
|
1215
1215
|
|
|
1216
|
+
def test_tui_harness_wizard_enter_defaults_create_runnable_spec(tmp_path, monkeypatch):
|
|
1217
|
+
monkeypatch.chdir(tmp_path)
|
|
1218
|
+
app = make_app()
|
|
1219
|
+
log = FakeLog()
|
|
1220
|
+
app._show_command_output = lambda target_log, content, clear_log=True: target_log.write(content)
|
|
1221
|
+
|
|
1222
|
+
app._harness_cmd("wizard", log)
|
|
1223
|
+
for _ in range(10):
|
|
1224
|
+
app._handle_harness_wizard_input("", log)
|
|
1225
|
+
|
|
1226
|
+
spec = load_harness_spec(tmp_path / "harness.yaml")
|
|
1227
|
+
assert spec.name == "my-harness"
|
|
1228
|
+
assert spec.metadata["template"] == "qwen-coding"
|
|
1229
|
+
assert spec.model_policy.primary == "ollama/qwen3-coder"
|
|
1230
|
+
assert spec.model_policy.pack == "qwen-coder"
|
|
1231
|
+
assert app._awaiting_harness_wizard is False
|
|
1232
|
+
assert app._pure_mode is not None
|
|
1233
|
+
assert app._pure_mode.harness_enabled
|
|
1234
|
+
|
|
1235
|
+
|
|
1236
|
+
def test_tui_harness_wizard_final_yes_loads_and_exits(tmp_path, monkeypatch):
|
|
1237
|
+
monkeypatch.chdir(tmp_path)
|
|
1238
|
+
app = make_app()
|
|
1239
|
+
log = FakeLog()
|
|
1240
|
+
app._show_command_output = lambda target_log, content, clear_log=True: target_log.write(content)
|
|
1241
|
+
|
|
1242
|
+
app._harness_cmd("wizard", log)
|
|
1243
|
+
for _ in range(9):
|
|
1244
|
+
app._handle_harness_wizard_input("", log)
|
|
1245
|
+
assert "Load this harness now" in render_plain(log.items[-1])
|
|
1246
|
+
|
|
1247
|
+
app._handle_harness_wizard_input("yes", log)
|
|
1248
|
+
|
|
1249
|
+
assert app._awaiting_harness_wizard is False
|
|
1250
|
+
assert app._harness_wizard_state is None
|
|
1251
|
+
assert app._pure_mode is not None
|
|
1252
|
+
status = app._pure_mode.get_status()["harness"]
|
|
1253
|
+
assert status["enabled"] is True
|
|
1254
|
+
assert status["name"] == "my-harness"
|
|
1255
|
+
assert status["path"].endswith("harness.yaml")
|
|
1256
|
+
rendered = "\n".join(render_plain(item) if not isinstance(item, str) else item for item in log.items)
|
|
1257
|
+
assert "Loaded harness my-harness" in rendered
|
|
1258
|
+
|
|
1259
|
+
|
|
1216
1260
|
def test_tui_help_surfaces_developer_workflows():
|
|
1217
1261
|
app = make_app()
|
|
1218
1262
|
log = FakeLog()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{superqode-0.2.1 → superqode-0.2.2}/src/superqode/agents/data/agentpool.phil65.github.io.toml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{superqode-0.2.1 → superqode-0.2.2}/src/superqode/agents/data/hermes-agent.nousresearch.com.toml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|