superqode 0.2.6__tar.gz → 0.2.8__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.6 → superqode-0.2.8}/CHANGELOG.md +24 -0
- {superqode-0.2.6/src/superqode.egg-info → superqode-0.2.8}/PKG-INFO +2 -2
- {superqode-0.2.6 → superqode-0.2.8}/pyproject.toml +5 -2
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/__init__.py +1 -1
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/acp/server.py +109 -13
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agent/loop.py +58 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/app/constants.py +13 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/app_main.py +70 -16
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/harness/__init__.py +32 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/harness/eval.py +186 -3
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/harness/kernel.py +42 -8
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/harness/loader.py +71 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/harness/optimize.py +43 -4
- superqode-0.2.8/src/superqode/harness/self_improve.py +1363 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/harness/spec.py +14 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/main.py +700 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/pure_mode.py +3 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/runtime/codex_sdk.py +53 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/widgets/slash_complete.py +33 -0
- {superqode-0.2.6 → superqode-0.2.8/src/superqode.egg-info}/PKG-INFO +2 -2
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode.egg-info/SOURCES.txt +4 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode.egg-info/requires.txt +1 -1
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_acp_server.py +64 -2
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_cli_commands.py +1 -1
- superqode-0.2.8/tests/test_harness_eval_splits.py +99 -0
- superqode-0.2.8/tests/test_harness_self_improve.py +377 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_harness_spec.py +37 -0
- superqode-0.2.8/tests/test_harness_usage.py +159 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_tui_smoke.py +18 -0
- {superqode-0.2.6 → superqode-0.2.8}/LICENSE +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/MANIFEST.in +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/README.md +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/examples/README.md +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/examples/byok-acp-team.yaml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/examples/harnesses/coding.yaml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/examples/harnesses/deepagents.yaml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/examples/harnesses/ds4.yaml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/examples/harnesses/gemma4.yaml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/examples/harnesses/google-adk.yaml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/examples/harnesses/local-recursive-dynamic.yaml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/examples/harnesses/no-tool.yaml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/examples/harnesses/omnigent-multi-agent.yaml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/examples/harnesses/openai-agents.yaml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/examples/harnesses/pydanticai.yaml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/examples/local-models-team.yaml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/examples/omnigent-multi-agent.agent.yaml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/examples/simple-team.yaml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/setup.cfg +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/a2a/__init__.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/a2a/client.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/a2a/presets.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/a2a/registry.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/a2a/server.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/a2a/skills.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/a2a/tools.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/a2a/types.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/a2a/workflows.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/acp/__init__.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/acp/client.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/acp/doctor.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/acp/permission_screen.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/acp/permission_store.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/acp/render.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/acp/session_store.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/acp/slash.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/acp/tool_call_context.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/acp/types.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/acp_discovery.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agent/__init__.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agent/auto_memory.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agent/command_safety.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agent/compaction.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agent/context_manager.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agent/edit_strategies.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agent/exec_policy.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agent/hooks.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agent/loop_guard.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agent/network_policy.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agent/output_handler.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agent/parallel_compare.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agent/peer_agents.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agent/plan_mode.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agent/reminders.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agent/rubric.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agent/session_manager.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agent/structured_output.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agent/summarization.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agent/system_prompts.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agent/terminal_output_limits.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agent/text_tool_calls.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agent/tool_args.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agent/tool_tracking.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agent/utility_model.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agent_output.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agent_stream.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agents/__init__.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agents/acp_registry.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agents/client.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agents/data/agentpool.phil65.github.io.toml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agents/data/ampcode.com.toml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agents/data/augmentcode.com.toml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agents/data/autodev.github.io.toml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agents/data/blackbox.ai.toml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agents/data/bub.dev.toml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agents/data/cagent.dev.toml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agents/data/claude.com.toml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agents/data/cline.bot.toml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agents/data/codeassistant.dev.toml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agents/data/codex.openai.com.toml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agents/data/copilot.github.com.toml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agents/data/crow-ai.dev.toml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agents/data/cursor.com.toml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agents/data/factory.ai.toml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agents/data/fastagent.ai.toml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agents/data/fount.dev.toml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agents/data/geminicli.com.toml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agents/data/goose.block.xyz.toml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agents/data/hermes-agent.nousresearch.com.toml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agents/data/junie.jetbrains.com.toml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agents/data/kimi.moonshot.cn.toml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agents/data/kiro.dev.toml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agents/data/llmlingagent.dev.toml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agents/data/minioncode.dev.toml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agents/data/mistral-vibe.mistral.ai.toml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agents/data/openclaw.ai.toml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agents/data/opencode.ai.toml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agents/data/openhands.dev.toml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agents/data/pi.dev.toml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agents/data/poolside.ai.toml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agents/data/qoder.com.toml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agents/data/qwenlm.github.io.toml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agents/data/sigit.dev.toml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agents/data/stakpak.dev.toml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agents/data/stdiobus.dev.toml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agents/data/vtcode.dev.toml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agents/discovery.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agents/free_models.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agents/messaging.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agents/official_acp.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agents/persona.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agents/registry.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agents/schema.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/agents/unified.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/app/__init__.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/app/css.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/app/models.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/app/suggester.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/app/theme_bridge.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/app/widgets.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/app_enhanced.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/approval.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/atomic.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/auth/__init__.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/benchmarks.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/channels/__init__.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/channels/config.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/channels/discord.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/channels/service.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/channels/slack.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/channels/telegram.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/claude.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/codex.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/commands/__init__.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/commands/a2a.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/commands/acp.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/commands/agents.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/commands/auth.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/commands/config.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/commands/daemon.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/commands/local.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/commands/providers.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/commands/runtime.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/commands/serve.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/commands/sessions.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/config/__init__.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/config/loader.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/config/schema.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/core/__init__.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/danger.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/data/eval_fixtures/ci-dynamic-root-cause.log +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/data/eval_fixtures/ci-root-cause.log +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/data/eval_packs/local_dynamic_workflow_smoke.yaml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/data/eval_packs/local_recursive_smoke.yaml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/data/superqode-template.yaml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/design_system.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/dialogs/__init__.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/dialogs/base.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/dialogs/model.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/dialogs/provider.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/dialogs/runtime.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/diff_view.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/enterprise.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/evaluation/__init__.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/evaluation/adapters.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/evaluation/behaviors.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/evaluation/engine.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/evaluation/scenarios.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/execution/__init__.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/execution/linter.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/execution/modes.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/execution/resolver.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/execution/runner.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/file_explorer.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/file_viewer.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/flash.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/harness/accelerator.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/harness/agent_importer.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/harness/approval_memory.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/harness/backends/__init__.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/harness/backends/base.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/harness/backends/deepagents.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/harness/backends/managed.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/harness/backends/pydanticai.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/harness/backends/registry.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/harness/backends/runtime.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/harness/compiler.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/harness/context_handles.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/harness/diagnostics.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/harness/events.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/harness/explain.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/harness/hooks.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/harness/mcp_bridge.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/harness/model_policy.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/harness/observability.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/harness/omnigent_importer.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/harness/output.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/harness/permissions.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/harness/registry.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/harness/sandbox.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/harness/store.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/harness/templates.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/harness/testing.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/harness/wizard.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/harness/workflow.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/harness/workflow_presets.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/headless.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/history.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/local/__init__.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/local/airplane.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/local/bench.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/local/build.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/local/code_index.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/local/data/model-packs/devstral.yaml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/local/data/model-packs/ds4.yaml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/local/data/model-packs/gemma4.yaml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/local/data/model-packs/glm.yaml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/local/data/model-packs/gpt-oss.yaml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/local/data/model-packs/minimax.yaml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/local/data/model-packs/qwen-coder.yaml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/local/data/model-packs/qwen3.yaml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/local/data/stack_matrix.yaml +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/local/doctor.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/local/engines.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/local/guardrails.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/local/hardware.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/local/inventory.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/local/labs.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/local/matrix.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/local/migrate.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/local/optimize.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/local/packs.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/local/repo.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/local/servers.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/local/setup.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/local/smoke.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/logging/__init__.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/logging/adapters.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/logging/formatter.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/logging/integration.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/logging/sinks.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/logging/unified_log.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/lsp/__init__.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/lsp/client.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/mcp/__init__.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/mcp/auth_storage.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/mcp/client.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/mcp/config.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/mcp/elicitation.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/mcp/harness_server.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/mcp/hf_auth.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/mcp/integration.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/mcp/oauth.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/mcp/oauth_callback.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/mcp/sampling.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/mcp/search.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/mcp/types.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/memory/__init__.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/memory/config.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/memory/providers.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/memory/types.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/notifications.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/permissions/__init__.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/permissions/rules.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/plan.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/plugins.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/project_trust.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/__init__.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/_builtin_profiles.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/acp_free_models.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/acp_models.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/acp_registry.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/apple_fm.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/catalog.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/connection_profiles.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/credentials.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/dynamic.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/env_introspect.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/free_inference.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/gateway/__init__.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/gateway/base.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/gateway/litellm_gateway.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/gateway/openresponses_gateway.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/gateway/synthetic.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/health.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/huggingface/__init__.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/huggingface/convert.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/huggingface/downloader.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/huggingface/endpoints.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/huggingface/fetch.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/huggingface/hub.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/huggingface/inference.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/huggingface/transformers_runner.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/live_models.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/local/__init__.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/local/_mlx_worker.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/local/base.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/local/context_probe.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/local/discovery.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/local/ds4.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/local/lmstudio.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/local/mlx.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/local/mlx_engine.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/local/mlx_tools.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/local/ollama.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/local/sglang.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/local/smoke.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/local/tgi.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/local/tool_support.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/local/vllm.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/manager.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/model_specs.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/models.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/models_dev.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/opencode_models.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/openresponses/__init__.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/openresponses/converters/__init__.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/openresponses/converters/messages.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/openresponses/converters/tools.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/openresponses/schema/__init__.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/openresponses/schema/models.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/openresponses/streaming/__init__.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/openresponses/streaming/parser.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/openresponses/tools/__init__.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/openresponses/tools/apply_patch.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/openresponses/tools/code_interpreter.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/openresponses/tools/file_search.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/openresponses/tools/mcp_adapter.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/profiles.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/recommendations.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/registry.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/providers/usage.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/py.typed +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/rendering/__init__.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/rendering/html_export.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/rendering/markdown.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/rendering/transcript_export.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/runtime/__init__.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/runtime/adk.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/runtime/base.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/runtime/builtin.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/runtime/claude_agent_sdk.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/runtime/errors.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/runtime/openai_agents.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/runtime/openai_sandbox.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/runtime/openai_session.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/runtime/pydanticai.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/runtime/registry.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/runtime/tool_bridge.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/runtime/tool_bridge_openai.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/runtime/tool_bridge_pydanticai.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/safety/__init__.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/safety/sandbox.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/safety/warnings.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/sandbox/__init__.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/sandbox/backends.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/sandbox/execution.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/sandbox/local_sandbox.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/search_registry.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/server/__init__.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/server/api.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/server/web.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/session/__init__.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/session/factory.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/session/persistence.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/session/share_artifacts.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/session/sharing.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/session/switchboard.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/session.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/sidebar.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/skillopt.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/skills.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/stream_view.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/styles/__init__.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/tool_call.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/tools/__init__.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/tools/agent_tools.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/tools/apply_patch.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/tools/base.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/tools/batch_tool.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/tools/compact_tool.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/tools/context_handle.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/tools/context_tools.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/tools/diagnostics.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/tools/diff_utils.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/tools/display.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/tools/dynamic_workflow.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/tools/edit_tools.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/tools/enhanced_base.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/tools/env_policy.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/tools/file_tools.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/tools/file_tracking.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/tools/harness_agent_session.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/tools/image_tools.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/tools/lsp_tools.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/tools/mcp_tools.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/tools/monty_tool.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/tools/network_tools.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/tools/output_spill.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/tools/peer_agent_tools.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/tools/permissions.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/tools/post_edit.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/tools/question_tool.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/tools/request_permissions_tool.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/tools/search_tools.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/tools/semantic_search.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/tools/shell_session.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/tools/shell_tools.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/tools/skill_tools.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/tools/spawn_harness.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/tools/todo_tools.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/tools/tool_search.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/tools/validation.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/tools/web_tools.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/tui_integration.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/tui_widgets/__init__.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/tui_widgets/widgets/__init__.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/tui_widgets/widgets/progress.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/tui_widgets/widgets/tool_display.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/undo_manager.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/utils/__init__.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/utils/error_handling.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/utils/fuzzy.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/widgets/__init__.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/widgets/agent_store.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/widgets/agent_switcher.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/widgets/animation_manager.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/widgets/code_context.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/widgets/command_palette.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/widgets/connection_status.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/widgets/conversation_history.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/widgets/diff_indicator.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/widgets/enhanced_status_bar.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/widgets/enhanced_toast.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/widgets/file_browser.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/widgets/file_reference.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/widgets/leader_key.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/widgets/mode_switcher.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/widgets/model_picker.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/widgets/permission_preview.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/widgets/prompt.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/widgets/provider_connect.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/widgets/pty_shell.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/widgets/resizable_sidebar.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/widgets/response_changes.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/widgets/response_display.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/widgets/rewind_overlay.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/widgets/rich_tool_display.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/widgets/sidebar_panels.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/widgets/slash_commands.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/widgets/split_view.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/widgets/status_bar.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/widgets/superqode_display.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/widgets/theme_picker.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/widgets/thinking.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/widgets/thinking_display.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/widgets/throbber.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/widgets/toast.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/widgets/unified_output.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/workspace/__init__.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/workspace/artifacts.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/workspace/change_summary.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/workspace/coordinator.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/workspace/diff_tracker.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/workspace/git_guard.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/workspace/git_snapshot.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/workspace/manager.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/workspace/snapshot.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/workspace/watcher.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode/workspace/worktree.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode.egg-info/dependency_links.txt +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode.egg-info/entry_points.txt +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/src/superqode.egg-info/top_level.txt +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_acp_client.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_acp_free_models.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_acp_parent_tool_linking.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_acp_permission_store.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_acp_registry.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_acp_render.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_acp_session_store.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_acp_slash.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_adaptive_compaction.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_agent_importer.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_agent_loop_harness.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_agent_memory.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_agents_md_compat.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_apply_patch.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_auth.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_bash_spill.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_benchmarks.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_change_summary.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_channels.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_cli_connect.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_cli_reference_coverage.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_command_safety.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_commands_runtime.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_compaction.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_config_loader.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_config_runtime.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_connect_setup.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_connection_profiles.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_context_handles.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_context_probe.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_context_remaining.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_create_skill_tool.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_deferred_tools.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_developer_workflow_docs.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_ds4_local_client.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_dynamic_workflow_tool.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_edit_line_number_strip.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_env_introspect.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_execution_resolver.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_final_parity_wave.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_free_models.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_harness_agent_session.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_harness_backends.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_harness_examples.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_harness_explain.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_harness_hooks.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_harness_kernel.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_harness_mcp_server.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_harness_model_policy.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_harness_observability.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_harness_output.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_harness_permissions.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_harness_sandbox.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_harness_seesaw_dimensions.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_harness_store.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_harness_wizard.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_harness_workflow.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_headless.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_hf_fetch.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_hooks.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_linter_runner.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_litellm_gateway.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_live_models.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_local_airplane.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_local_build.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_local_code_index.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_local_labs.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_local_migrate.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_local_model_optimizations.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_local_packs.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_local_sandbox.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_local_search.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_local_servers.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_local_setup.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_local_smoke.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_local_stack.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_local_tool_support.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_login_api.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_loop_guard.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_managed_harness_backend.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_markdown_render.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_mcp.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_mcp_integration.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_mcp_live.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_mcp_oauth_generalized.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_mcp_tools_runtime.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_mcp_two_way.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_memory_recall.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_mlx_tools.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_model_profiles.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_model_specs.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_monty_tool.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_network_policy.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_ollama_client.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_omnigent_agent_session_smoke.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_omnigent_importer.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_openai_session.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_output_spill.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_parallel_compare.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_peer_agents.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_plugin_hook_wiring.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_plugins.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_policies_and_turndiff.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_post_edit_verify.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_project_trust.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_provider_catalog.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_provider_dynamic.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_provider_models.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_provider_recommendations.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_pure_mode_sessions.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_rate_limit_retry.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_read_tool_limits.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_reasoning_and_budget.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_recursive_eval_packs.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_runtime_adk.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_runtime_builtin.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_runtime_claude_agent_sdk.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_runtime_codex_sdk.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_runtime_dialog.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_runtime_openai_agents.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_runtime_openai_events.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_runtime_openai_hitl.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_runtime_openai_sandbox.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_runtime_protocol.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_runtime_pydanticai.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_sandbox_backends.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_sandbox_execution.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_search_roots.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_semantic_search.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_session_switchboard.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_shell_session.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_simple_login.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_simple_query_fastpath.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_skillopt.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_slash_runtime.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_spawn_harness_tool.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_steering_continue_reminders.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_synthetic_gateways.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_terminal_output_limits.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_theme_picker.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_todo_tools.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_tool_args_repair.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_tool_batch_safety.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_tool_bridge.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_tool_bridge_openai.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_tool_call_repair.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_tool_output_pruning.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_tool_tracking.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_tools.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_tui_change_summary.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_tui_chat_mode.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_tui_exit.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_tui_llamacpp_connect.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_tui_markdown_cleanup.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_tui_mlx_connect.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_tui_mounted.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_tui_tool_display.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_version.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_view_image.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_web_server_auth.py +0 -0
- {superqode-0.2.6 → superqode-0.2.8}/tests/test_workspace.py +0 -0
|
@@ -7,6 +7,30 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.2.8] - 2026-07-07
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- **Self-improving harness loop** - Added `harness mine-failures`, `harness logbook`, and `harness improve` workflows for mining failures, maintaining repo-local harness memory, exporting bounded improvement projects, and feeding evidence into candidate generation.
|
|
15
|
+
- **Candidate audit and ledger** - Added `harness audit-candidate` plus `harness candidates list/show/export` to record accepted and rejected harness candidates, detect protected-surface edits, permission widening, weakened checks, duplicate rejected edits, and missing held-out gates.
|
|
16
|
+
- **Held-in / held-out eval splits** - Added split-aware eval tasks and `harness eval --split {all,held-in,held-out}` so candidate improvements can be gated separately from training/proposal tasks.
|
|
17
|
+
- **Harness usage metrics** - Harness runs and eval scorecards now aggregate token, latency, and cost metrics where providers expose them.
|
|
18
|
+
- **Self-improvement docs** - Documented the end-to-end loop, optimization policy fields, candidate audit gates, candidate ledger, and logbook pruning.
|
|
19
|
+
|
|
20
|
+
### Changed
|
|
21
|
+
|
|
22
|
+
- **Release metadata** - Bumped the package version, runtime `__version__`, lockfile package entry, and ACP registry metadata to `0.2.8`.
|
|
23
|
+
|
|
24
|
+
## [0.2.7] - 2026-07-05
|
|
25
|
+
|
|
26
|
+
### Fixed
|
|
27
|
+
|
|
28
|
+
- **Fresh installs with agent-client-protocol 0.11** - `superqode serve acp` failed to start on new installs after the `agent-client-protocol` library released 0.11.0, which removed `session/set_model` and its schema types from the protocol. The ACP server now works on both 0.10 and 0.11, and the dependency is capped at `<0.12` so future protocol changes cannot break released artifacts.
|
|
29
|
+
|
|
30
|
+
### Changed
|
|
31
|
+
|
|
32
|
+
- **Release metadata** - Bumped the package version and runtime `__version__` to `0.2.7`.
|
|
33
|
+
|
|
10
34
|
## [0.2.6] - 2026-07-04
|
|
11
35
|
|
|
12
36
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: superqode
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.8
|
|
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>
|
|
@@ -22,7 +22,7 @@ License-File: LICENSE
|
|
|
22
22
|
Requires-Dist: pyyaml>=6.0.3
|
|
23
23
|
Requires-Dist: click>=8.0.0
|
|
24
24
|
Requires-Dist: litellm>=1.83.14
|
|
25
|
-
Requires-Dist: agent-client-protocol
|
|
25
|
+
Requires-Dist: agent-client-protocol<0.12,>=0.10.0
|
|
26
26
|
Requires-Dist: prompt_toolkit>=3.0.52
|
|
27
27
|
Requires-Dist: rich>=15.0.0
|
|
28
28
|
Requires-Dist: textual>=0.47.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "superqode"
|
|
3
|
-
version = "0.2.
|
|
3
|
+
version = "0.2.8"
|
|
4
4
|
description = "SuperQode: harness engineering framework for coding agents, optimized for local and open models"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
license = "Apache-2.0"
|
|
@@ -25,7 +25,10 @@ dependencies = [
|
|
|
25
25
|
"pyyaml>=6.0.3",
|
|
26
26
|
"click>=8.0.0",
|
|
27
27
|
"litellm>=1.83.14",
|
|
28
|
-
|
|
28
|
+
# Actively evolving protocol library: 0.11 removed session/set_model and its
|
|
29
|
+
# schema types. Code supports 0.10 and 0.11; cap to avoid surprise breakage
|
|
30
|
+
# in released artifacts.
|
|
31
|
+
"agent-client-protocol>=0.10.0,<0.12",
|
|
29
32
|
"prompt_toolkit>=3.0.52",
|
|
30
33
|
"rich>=15.0.0",
|
|
31
34
|
"textual>=0.47.0",
|
|
@@ -31,7 +31,6 @@ from acp import (
|
|
|
31
31
|
InitializeResponse,
|
|
32
32
|
NewSessionResponse,
|
|
33
33
|
PromptResponse,
|
|
34
|
-
SetSessionModelResponse,
|
|
35
34
|
run_agent,
|
|
36
35
|
start_tool_call,
|
|
37
36
|
text_block,
|
|
@@ -47,6 +46,7 @@ from acp.schema import (
|
|
|
47
46
|
PermissionOption,
|
|
48
47
|
PromptCapabilities,
|
|
49
48
|
TerminalAuthMethod,
|
|
49
|
+
ToolCallLocation,
|
|
50
50
|
ToolCallUpdate,
|
|
51
51
|
)
|
|
52
52
|
|
|
@@ -99,6 +99,74 @@ def _tool_kind(name: str) -> str:
|
|
|
99
99
|
return "other"
|
|
100
100
|
|
|
101
101
|
|
|
102
|
+
# Argument keys that carry the tool's target, by role. Cover both snake_case and
|
|
103
|
+
# camelCase spellings since specs and external runtimes disagree on convention.
|
|
104
|
+
_PATH_ARG_KEYS = ("file_path", "filePath", "path", "file", "abs_path", "filename", "target_file")
|
|
105
|
+
_COMMAND_ARG_KEYS = ("command", "cmd", "script")
|
|
106
|
+
_PATTERN_ARG_KEYS = ("pattern", "query", "regex", "search")
|
|
107
|
+
_URL_ARG_KEYS = ("url", "uri")
|
|
108
|
+
|
|
109
|
+
_TITLE_LIMIT = 120
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
def _first_str(args: dict[str, Any], keys: tuple[str, ...]) -> str:
|
|
113
|
+
for key in keys:
|
|
114
|
+
value = args.get(key)
|
|
115
|
+
if isinstance(value, str) and value.strip():
|
|
116
|
+
return value.strip()
|
|
117
|
+
return ""
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
def _clip_title(text: str) -> str:
|
|
121
|
+
text = " ".join(text.split())
|
|
122
|
+
if len(text) <= _TITLE_LIMIT:
|
|
123
|
+
return text
|
|
124
|
+
return text[: _TITLE_LIMIT - 1] + "…"
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
def _tool_title(name: str, arguments: Any) -> str:
|
|
128
|
+
"""Human-readable tool_call title: verb + target, not just the tool name.
|
|
129
|
+
|
|
130
|
+
Editors surface ``title`` directly (Zed, JetBrains) while ``raw_input`` is
|
|
131
|
+
hidden behind an expander, so the file path / command must be in the title.
|
|
132
|
+
"""
|
|
133
|
+
args = arguments if isinstance(arguments, dict) else {}
|
|
134
|
+
kind = _tool_kind(name)
|
|
135
|
+
path = _first_str(args, _PATH_ARG_KEYS)
|
|
136
|
+
if kind == "execute":
|
|
137
|
+
command = _first_str(args, _COMMAND_ARG_KEYS)
|
|
138
|
+
return _clip_title(command) if command else name
|
|
139
|
+
if kind == "read" and path:
|
|
140
|
+
return _clip_title(f"Read {path}")
|
|
141
|
+
if kind == "edit" and path:
|
|
142
|
+
verb = "Write" if "write" in name.lower() or "create" in name.lower() else "Edit"
|
|
143
|
+
return _clip_title(f"{verb} {path}")
|
|
144
|
+
if kind == "search":
|
|
145
|
+
pattern = _first_str(args, _PATTERN_ARG_KEYS)
|
|
146
|
+
if pattern:
|
|
147
|
+
return _clip_title(f"Search {pattern}" + (f" in {path}" if path else ""))
|
|
148
|
+
if kind == "fetch":
|
|
149
|
+
url = _first_str(args, _URL_ARG_KEYS)
|
|
150
|
+
if url:
|
|
151
|
+
return _clip_title(f"Fetch {url}")
|
|
152
|
+
if path:
|
|
153
|
+
return _clip_title(f"{name} {path}")
|
|
154
|
+
return name
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
def _tool_locations(arguments: Any) -> list[ToolCallLocation] | None:
|
|
158
|
+
"""File locations for follow-the-agent UIs, when the arguments name a path."""
|
|
159
|
+
args = arguments if isinstance(arguments, dict) else {}
|
|
160
|
+
path = _first_str(args, _PATH_ARG_KEYS)
|
|
161
|
+
if not path:
|
|
162
|
+
return None
|
|
163
|
+
location = ToolCallLocation(path=path)
|
|
164
|
+
line = args.get("line") or args.get("start_line") or args.get("offset")
|
|
165
|
+
if isinstance(line, int) and line > 0:
|
|
166
|
+
location.line = line
|
|
167
|
+
return [location]
|
|
168
|
+
|
|
169
|
+
|
|
102
170
|
def _prompt_to_text(blocks: list[Any] | None) -> str:
|
|
103
171
|
"""Flatten ACP prompt content blocks into one harness prompt string."""
|
|
104
172
|
parts: list[str] = []
|
|
@@ -324,10 +392,13 @@ class SuperQodeAcpAgent:
|
|
|
324
392
|
self._sessions.pop(session_id, None)
|
|
325
393
|
return None
|
|
326
394
|
|
|
327
|
-
async def set_session_model(
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
395
|
+
async def set_session_model(self, model_id: str, session_id: str, **kwargs: Any) -> None:
|
|
396
|
+
"""Switch the session's model; accepts `provider/model` or bare model ids.
|
|
397
|
+
|
|
398
|
+
Returns None so the handler works across agent-client-protocol versions:
|
|
399
|
+
0.10 accepts None for session/set_model, and 0.11 removed the method from
|
|
400
|
+
the protocol (clients on 0.11 simply never route it here).
|
|
401
|
+
"""
|
|
331
402
|
from superqode.providers.model_specs import split_provider_model_ref
|
|
332
403
|
|
|
333
404
|
state = self._sessions.get(session_id)
|
|
@@ -339,7 +410,7 @@ class SuperQodeAcpAgent:
|
|
|
339
410
|
state.model = parsed.model
|
|
340
411
|
else:
|
|
341
412
|
state.model = str(model_id)
|
|
342
|
-
return
|
|
413
|
+
return None
|
|
343
414
|
|
|
344
415
|
async def cancel(self, session_id: str, **kwargs: Any) -> None:
|
|
345
416
|
state = self._sessions.get(session_id)
|
|
@@ -428,32 +499,55 @@ class SuperQodeAcpAgent:
|
|
|
428
499
|
await self._send_update(session_id, update_agent_thought_text(text))
|
|
429
500
|
elif event_type == "tool_call":
|
|
430
501
|
name = str(data.get("tool_name") or "tool")
|
|
502
|
+
arguments = data.get("arguments")
|
|
431
503
|
call_id = tracker.start(name)
|
|
432
504
|
await self._send_update(
|
|
433
505
|
session_id,
|
|
434
506
|
start_tool_call(
|
|
435
507
|
call_id,
|
|
436
|
-
name,
|
|
508
|
+
_tool_title(name, arguments),
|
|
437
509
|
kind=_tool_kind(name),
|
|
438
510
|
status="in_progress",
|
|
439
|
-
|
|
511
|
+
locations=_tool_locations(arguments),
|
|
512
|
+
raw_input=arguments,
|
|
440
513
|
),
|
|
441
514
|
)
|
|
442
515
|
elif event_type == "tool_result":
|
|
443
516
|
name = str(data.get("tool_name") or "tool")
|
|
444
517
|
call_id = tracker.finish(name)
|
|
445
|
-
if call_id is None:
|
|
446
|
-
return
|
|
447
518
|
success = data.get("success", True)
|
|
448
519
|
output = data.get("output") if success else (data.get("error") or data.get("output"))
|
|
449
520
|
content = []
|
|
450
521
|
if output:
|
|
451
522
|
content.append(tool_content(text_block(_clip(output))))
|
|
523
|
+
status = "completed" if success else "failed"
|
|
524
|
+
if call_id is None:
|
|
525
|
+
# Runtimes like codex-sdk report tools only on completion; synthesize
|
|
526
|
+
# the tool_call rather than dropping the result on the floor.
|
|
527
|
+
arguments = data.get("arguments") or {
|
|
528
|
+
key: data[key] for key in ("command", "path") if data.get(key)
|
|
529
|
+
}
|
|
530
|
+
call_id = tracker.start(name)
|
|
531
|
+
tracker.finish(name)
|
|
532
|
+
await self._send_update(
|
|
533
|
+
session_id,
|
|
534
|
+
start_tool_call(
|
|
535
|
+
call_id,
|
|
536
|
+
_tool_title(name, arguments),
|
|
537
|
+
kind=_tool_kind(name),
|
|
538
|
+
status=status,
|
|
539
|
+
locations=_tool_locations(arguments),
|
|
540
|
+
raw_input=arguments or None,
|
|
541
|
+
content=content or None,
|
|
542
|
+
raw_output=output,
|
|
543
|
+
),
|
|
544
|
+
)
|
|
545
|
+
return
|
|
452
546
|
await self._send_update(
|
|
453
547
|
session_id,
|
|
454
548
|
update_tool_call(
|
|
455
549
|
call_id,
|
|
456
|
-
status=
|
|
550
|
+
status=status,
|
|
457
551
|
content=content or None,
|
|
458
552
|
raw_output=output,
|
|
459
553
|
),
|
|
@@ -470,6 +564,7 @@ class SuperQodeAcpAgent:
|
|
|
470
564
|
return True
|
|
471
565
|
item = dict(pending[0])
|
|
472
566
|
tool_name = str(item.get("tool_name") or "tool")
|
|
567
|
+
arguments = item.get("arguments")
|
|
473
568
|
call_id = str(item.get("tool_call_id") or tracker.start(tool_name))
|
|
474
569
|
response = await self._conn.request_permission(
|
|
475
570
|
options=[
|
|
@@ -482,10 +577,11 @@ class SuperQodeAcpAgent:
|
|
|
482
577
|
session_id=session.session_id,
|
|
483
578
|
tool_call=ToolCallUpdate(
|
|
484
579
|
tool_call_id=call_id,
|
|
485
|
-
title=tool_name,
|
|
580
|
+
title=_tool_title(tool_name, arguments),
|
|
486
581
|
kind=_tool_kind(tool_name),
|
|
487
582
|
status="pending",
|
|
488
|
-
|
|
583
|
+
locations=_tool_locations(arguments),
|
|
584
|
+
raw_input=arguments,
|
|
489
585
|
),
|
|
490
586
|
)
|
|
491
587
|
outcome = getattr(response, "outcome", None)
|
|
@@ -605,6 +605,11 @@ class AgentResponse:
|
|
|
605
605
|
# and any schema-validation errors (empty list means valid).
|
|
606
606
|
structured_output: Optional[Any] = None
|
|
607
607
|
schema_errors: Optional[List[str]] = None
|
|
608
|
+
input_tokens: Optional[int] = None
|
|
609
|
+
output_tokens: Optional[int] = None
|
|
610
|
+
total_tokens: Optional[int] = None
|
|
611
|
+
cost_usd: Optional[float] = None
|
|
612
|
+
cost_currency: Optional[str] = None
|
|
608
613
|
|
|
609
614
|
|
|
610
615
|
class ToolApprovalRequired(RuntimeError):
|
|
@@ -1991,8 +1996,60 @@ class AgentLoop:
|
|
|
1991
1996
|
from .hooks import SESSION_START, STOP, USER_PROMPT_SUBMIT
|
|
1992
1997
|
|
|
1993
1998
|
lifecycle_ctx = self._lifecycle_context()
|
|
1999
|
+
usage_input_tokens = 0
|
|
2000
|
+
usage_output_tokens = 0
|
|
2001
|
+
usage_total_tokens = 0
|
|
2002
|
+
usage_cost = 0.0
|
|
2003
|
+
usage_seen = False
|
|
2004
|
+
cost_seen = False
|
|
2005
|
+
cost_currency = "USD"
|
|
2006
|
+
|
|
2007
|
+
def _record_gateway_usage(gateway_response) -> None:
|
|
2008
|
+
nonlocal usage_input_tokens
|
|
2009
|
+
nonlocal usage_output_tokens
|
|
2010
|
+
nonlocal usage_total_tokens
|
|
2011
|
+
nonlocal usage_cost
|
|
2012
|
+
nonlocal usage_seen
|
|
2013
|
+
nonlocal cost_seen
|
|
2014
|
+
nonlocal cost_currency
|
|
2015
|
+
usage = getattr(gateway_response, "usage", None)
|
|
2016
|
+
if usage is not None:
|
|
2017
|
+
prompt_tokens = int(getattr(usage, "prompt_tokens", 0) or 0)
|
|
2018
|
+
completion_tokens = int(getattr(usage, "completion_tokens", 0) or 0)
|
|
2019
|
+
total_tokens = int(getattr(usage, "total_tokens", 0) or 0)
|
|
2020
|
+
if total_tokens <= 0:
|
|
2021
|
+
total_tokens = prompt_tokens + completion_tokens
|
|
2022
|
+
usage_input_tokens += prompt_tokens
|
|
2023
|
+
usage_output_tokens += completion_tokens
|
|
2024
|
+
usage_total_tokens += total_tokens
|
|
2025
|
+
usage_seen = True
|
|
2026
|
+
cost = getattr(gateway_response, "cost", None)
|
|
2027
|
+
if cost is not None:
|
|
2028
|
+
input_cost = float(getattr(cost, "input_cost", 0.0) or 0.0)
|
|
2029
|
+
output_cost = float(getattr(cost, "output_cost", 0.0) or 0.0)
|
|
2030
|
+
total_cost = float(getattr(cost, "total_cost", 0.0) or 0.0)
|
|
2031
|
+
if total_cost == 0.0 and (input_cost or output_cost):
|
|
2032
|
+
total_cost = input_cost + output_cost
|
|
2033
|
+
usage_cost += total_cost
|
|
2034
|
+
cost_currency = str(getattr(cost, "currency", None) or cost_currency or "USD")
|
|
2035
|
+
cost_seen = True
|
|
1994
2036
|
|
|
1995
2037
|
async def _finish(response: AgentResponse) -> AgentResponse:
|
|
2038
|
+
if usage_seen:
|
|
2039
|
+
response.input_tokens = (
|
|
2040
|
+
usage_input_tokens if response.input_tokens is None else response.input_tokens
|
|
2041
|
+
)
|
|
2042
|
+
response.output_tokens = (
|
|
2043
|
+
usage_output_tokens if response.output_tokens is None else response.output_tokens
|
|
2044
|
+
)
|
|
2045
|
+
response.total_tokens = (
|
|
2046
|
+
usage_total_tokens if response.total_tokens is None else response.total_tokens
|
|
2047
|
+
)
|
|
2048
|
+
if cost_seen:
|
|
2049
|
+
response.cost_usd = usage_cost if response.cost_usd is None else response.cost_usd
|
|
2050
|
+
response.cost_currency = (
|
|
2051
|
+
cost_currency if response.cost_currency is None else response.cost_currency
|
|
2052
|
+
)
|
|
1996
2053
|
self.run_active = False
|
|
1997
2054
|
await self.hooks.fire(STOP, self._lifecycle_context(), response)
|
|
1998
2055
|
# Opt-in automatic memory extraction, off the hot path.
|
|
@@ -2156,6 +2213,7 @@ class AgentLoop:
|
|
|
2156
2213
|
error=str(e),
|
|
2157
2214
|
)
|
|
2158
2215
|
)
|
|
2216
|
+
_record_gateway_usage(response)
|
|
2159
2217
|
await self.hooks.fire(AFTER_LLM_CALL, lifecycle_ctx, response)
|
|
2160
2218
|
|
|
2161
2219
|
# Extract thinking content if available
|
|
@@ -371,6 +371,7 @@ COMMANDS = [
|
|
|
371
371
|
":serve web",
|
|
372
372
|
":serve harness",
|
|
373
373
|
":serve api",
|
|
374
|
+
":serve acp",
|
|
374
375
|
":profiles",
|
|
375
376
|
":profiles list",
|
|
376
377
|
":doctor",
|
|
@@ -587,6 +588,18 @@ COMMANDS = [
|
|
|
587
588
|
":harness observability",
|
|
588
589
|
":harness observability status",
|
|
589
590
|
":harness observability export",
|
|
591
|
+
":harness mine-failures",
|
|
592
|
+
":harness logbook",
|
|
593
|
+
":harness logbook update",
|
|
594
|
+
":harness logbook show",
|
|
595
|
+
":harness logbook export",
|
|
596
|
+
":harness logbook prune",
|
|
597
|
+
":harness audit-candidate",
|
|
598
|
+
":harness candidates",
|
|
599
|
+
":harness candidates list",
|
|
600
|
+
":harness candidates show",
|
|
601
|
+
":harness candidates export",
|
|
602
|
+
":harness improve",
|
|
590
603
|
":harness optimize",
|
|
591
604
|
":harness optimize-inspect",
|
|
592
605
|
":harness optimize-ledger",
|
|
@@ -11703,7 +11703,7 @@ class SuperQodeApp(App):
|
|
|
11703
11703
|
self._show_harness_events(log, subargs)
|
|
11704
11704
|
return
|
|
11705
11705
|
|
|
11706
|
-
if sub in ("optimize", "optimize-inspect", "optimize-ledger"):
|
|
11706
|
+
if sub in ("improve", "optimize", "optimize-inspect", "optimize-ledger"):
|
|
11707
11707
|
try:
|
|
11708
11708
|
tokens = shlex.split(subargs or "")
|
|
11709
11709
|
except ValueError as exc:
|
|
@@ -11714,16 +11714,22 @@ class SuperQodeApp(App):
|
|
|
11714
11714
|
"Usage: :harness optimize --spec <path> --tasks <path> [--export-only]"
|
|
11715
11715
|
)
|
|
11716
11716
|
return
|
|
11717
|
+
if sub == "improve" and not tokens:
|
|
11718
|
+
log.add_info(
|
|
11719
|
+
"Usage: :harness improve --spec <path> --tasks <path> [--from-failures failures.json] [--export-only]"
|
|
11720
|
+
)
|
|
11721
|
+
return
|
|
11717
11722
|
if sub in {"optimize-inspect", "optimize-ledger"} and not tokens:
|
|
11718
11723
|
log.add_info(f"Usage: :harness {sub} <run_dir>")
|
|
11719
11724
|
return
|
|
11720
|
-
self
|
|
11721
|
-
|
|
11722
|
-
)
|
|
11725
|
+
label = "Harness self-improvement" if sub == "improve" else "Harness optimization"
|
|
11726
|
+
self.run_worker(self._superqode_cli_cmd(["harness", sub, *tokens], log, label))
|
|
11723
11727
|
return
|
|
11724
11728
|
|
|
11725
11729
|
cli_backed_harness_subcommands = {
|
|
11730
|
+
"audit-candidate",
|
|
11726
11731
|
"auto-bench",
|
|
11732
|
+
"candidates",
|
|
11727
11733
|
"compile",
|
|
11728
11734
|
"diff",
|
|
11729
11735
|
"drain",
|
|
@@ -11734,6 +11740,8 @@ class SuperQodeApp(App):
|
|
|
11734
11740
|
"import-omnigent",
|
|
11735
11741
|
"inbox",
|
|
11736
11742
|
"list-backends",
|
|
11743
|
+
"logbook",
|
|
11744
|
+
"mine-failures",
|
|
11737
11745
|
"registry",
|
|
11738
11746
|
"run",
|
|
11739
11747
|
"test",
|
|
@@ -11767,7 +11775,7 @@ class SuperQodeApp(App):
|
|
|
11767
11775
|
|
|
11768
11776
|
if not path:
|
|
11769
11777
|
log.add_info(
|
|
11770
|
-
"Usage: :harness <spec.yaml> | :harness wizard [name] --starter <template> --output <path> [--load] | :harness inspect | :harness doctor | :harness graph | :harness replay <run_id> | :harness fork <run_id> | :harness evidence <run_id> | :harness runs | :harness optimize --spec <path> --tasks <path> | :harness optimize-inspect <run_dir> | :harness optimize-ledger <run_dir> | :harness templates | :harness off"
|
|
11778
|
+
"Usage: :harness <spec.yaml> | :harness wizard [name] --starter <template> --output <path> [--load] | :harness inspect | :harness doctor | :harness graph | :harness replay <run_id> | :harness fork <run_id> | :harness evidence <run_id> | :harness runs | :harness mine-failures --eval-result eval.json | :harness audit-candidate --base <path> --candidate <path> | :harness candidates list | :harness improve --spec <path> --tasks <path> | :harness optimize --spec <path> --tasks <path> | :harness optimize-inspect <run_dir> | :harness optimize-ledger <run_dir> | :harness templates | :harness off"
|
|
11771
11779
|
)
|
|
11772
11780
|
return
|
|
11773
11781
|
|
|
@@ -21415,6 +21423,7 @@ class SuperQodeApp(App):
|
|
|
21415
21423
|
"shell": "▸",
|
|
21416
21424
|
"terminal": "▸",
|
|
21417
21425
|
"exec": "▸",
|
|
21426
|
+
"run": "▸",
|
|
21418
21427
|
"search": "⌕",
|
|
21419
21428
|
"grep": "⌕",
|
|
21420
21429
|
"find": "⌕",
|
|
@@ -21449,24 +21458,49 @@ class SuperQodeApp(App):
|
|
|
21449
21458
|
pass
|
|
21450
21459
|
return p
|
|
21451
21460
|
|
|
21461
|
+
def _first_arg(*keys: str) -> str:
|
|
21462
|
+
for key in keys:
|
|
21463
|
+
value = tool_input.get(key)
|
|
21464
|
+
if isinstance(value, str) and value.strip():
|
|
21465
|
+
return value.strip()
|
|
21466
|
+
return ""
|
|
21467
|
+
|
|
21468
|
+
# Cover snake_case and camelCase: harness tools, ACP agents, and the
|
|
21469
|
+
# codex-sdk runtime all spell these keys differently.
|
|
21452
21470
|
file_path = _relpath(
|
|
21453
|
-
|
|
21471
|
+
_first_arg(
|
|
21472
|
+
"filePath", "file_path", "path", "file", "abs_path", "filename", "target_file"
|
|
21473
|
+
)
|
|
21454
21474
|
)
|
|
21455
21475
|
|
|
21456
|
-
|
|
21476
|
+
# Substring matching ("read_file", "Read file", "edit" all count as reads/
|
|
21477
|
+
# edits); exact-name matching left every external agent in the generic branch.
|
|
21478
|
+
def _matches(*fragments: str) -> bool:
|
|
21479
|
+
return any(fragment in tool_lower for fragment in fragments)
|
|
21480
|
+
|
|
21481
|
+
if _matches("read", "write", "edit", "patch", "create") and file_path:
|
|
21457
21482
|
return f"{icon} {file_path}"
|
|
21458
|
-
if
|
|
21459
|
-
cmd =
|
|
21460
|
-
|
|
21461
|
-
|
|
21462
|
-
|
|
21463
|
-
|
|
21464
|
-
|
|
21465
|
-
|
|
21466
|
-
|
|
21483
|
+
if _matches("bash", "shell", "terminal", "exec", "command", "run"):
|
|
21484
|
+
cmd = _first_arg("command", "cmd", "script")
|
|
21485
|
+
if cmd:
|
|
21486
|
+
return f"{icon} {cmd}"
|
|
21487
|
+
if _matches("search", "grep", "find"):
|
|
21488
|
+
query = _first_arg("pattern", "query", "search", "regex")
|
|
21489
|
+
if query:
|
|
21490
|
+
return f"{icon} {query}"
|
|
21491
|
+
if _matches("list", "ls", "glob", "tree"):
|
|
21492
|
+
path = _relpath(_first_arg("path", "directory", "dir_path"))
|
|
21493
|
+
if path:
|
|
21494
|
+
return f"{icon} {path}"
|
|
21467
21495
|
if tool_lower == "todo_write":
|
|
21468
21496
|
todos = tool_input.get("todos", [])
|
|
21469
21497
|
return f"{icon} todo list ({len(todos)} items)"
|
|
21498
|
+
if _matches("fetch", "web", "http"):
|
|
21499
|
+
url = _first_arg("url", "uri")
|
|
21500
|
+
if url:
|
|
21501
|
+
return f"{icon} {url}"
|
|
21502
|
+
if file_path:
|
|
21503
|
+
return f"{icon} {tool_name} {file_path}"
|
|
21470
21504
|
|
|
21471
21505
|
# Generic: show a short hint of the first argument value, not full JSON.
|
|
21472
21506
|
if tool_input:
|
|
@@ -30202,6 +30236,26 @@ class SuperQodeApp(App):
|
|
|
30202
30236
|
"Show run evidence, changes, checks, and result receipt",
|
|
30203
30237
|
),
|
|
30204
30238
|
(":harness events <run_id>", "Show persisted event timeline for a harness run"),
|
|
30239
|
+
(
|
|
30240
|
+
":harness mine-failures --eval-result eval.json",
|
|
30241
|
+
"Mine structured self-improvement failures from harness JSON",
|
|
30242
|
+
),
|
|
30243
|
+
(
|
|
30244
|
+
":harness logbook show",
|
|
30245
|
+
"Show the file-backed self-improvement logbook",
|
|
30246
|
+
),
|
|
30247
|
+
(
|
|
30248
|
+
":harness audit-candidate --base <path> --candidate <path>",
|
|
30249
|
+
"Audit protected surfaces, eval gates, and reward-hacking risk",
|
|
30250
|
+
),
|
|
30251
|
+
(
|
|
30252
|
+
":harness candidates list",
|
|
30253
|
+
"Show accepted and rejected self-improvement candidates",
|
|
30254
|
+
),
|
|
30255
|
+
(
|
|
30256
|
+
":harness improve --spec <path> --tasks <path>",
|
|
30257
|
+
"Improve a HarnessSpec from mined failures and logbook memory",
|
|
30258
|
+
),
|
|
30205
30259
|
(
|
|
30206
30260
|
":harness optimize --spec <path> --tasks <path>",
|
|
30207
30261
|
"Optimize a HarnessSpec through optional metaharness",
|
|
@@ -41,6 +41,7 @@ from .spec import (
|
|
|
41
41
|
HooksSpec,
|
|
42
42
|
ModelPolicySpec,
|
|
43
43
|
ObservabilitySpec,
|
|
44
|
+
OptimizationSpec,
|
|
44
45
|
PermissionRuleSpec,
|
|
45
46
|
RecursionSpec,
|
|
46
47
|
RemoteHarnessSpec,
|
|
@@ -196,6 +197,8 @@ _LAZY_IMPORTS = {
|
|
|
196
197
|
"HARNESS_DIMENSIONS": (".testing", "HARNESS_DIMENSIONS"),
|
|
197
198
|
"dimension_for_category": (".testing", "dimension_for_category"),
|
|
198
199
|
"eval_pack_path": (".eval", "eval_pack_path"),
|
|
200
|
+
"eval_task_split_counts": (".eval", "eval_task_split_counts"),
|
|
201
|
+
"filter_eval_tasks": (".eval", "filter_eval_tasks"),
|
|
199
202
|
"list_eval_packs": (".eval", "list_eval_packs"),
|
|
200
203
|
"load_eval_tasks": (".eval", "load_eval_tasks"),
|
|
201
204
|
"run_harness_eval": (".eval", "run_harness_eval"),
|
|
@@ -212,6 +215,23 @@ _LAZY_IMPORTS = {
|
|
|
212
215
|
"render_optimize_payload": (".optimize", "render_optimize_payload"),
|
|
213
216
|
"render_metaharness_summary": (".optimize", "render_metaharness_summary"),
|
|
214
217
|
"render_metaharness_ledger": (".optimize", "render_metaharness_ledger"),
|
|
218
|
+
"DEFAULT_LOGBOOK_DIR": (".self_improve", "DEFAULT_LOGBOOK_DIR"),
|
|
219
|
+
"DEFAULT_CANDIDATE_LEDGER_PATH": (".self_improve", "DEFAULT_CANDIDATE_LEDGER_PATH"),
|
|
220
|
+
"append_self_improve_evidence": (".self_improve", "append_self_improve_evidence"),
|
|
221
|
+
"audit_harness_candidate": (".self_improve", "audit_harness_candidate"),
|
|
222
|
+
"candidate_ledger_to_markdown": (".self_improve", "candidate_ledger_to_markdown"),
|
|
223
|
+
"logbook_to_markdown": (".self_improve", "logbook_to_markdown"),
|
|
224
|
+
"mine_harness_failures": (".self_improve", "mine_harness_failures"),
|
|
225
|
+
"prune_logbook": (".self_improve", "prune_logbook"),
|
|
226
|
+
"read_candidate_ledger": (".self_improve", "read_candidate_ledger"),
|
|
227
|
+
"read_logbook": (".self_improve", "read_logbook"),
|
|
228
|
+
"record_candidate_audit": (".self_improve", "record_candidate_audit"),
|
|
229
|
+
"render_candidate_audit": (".self_improve", "render_candidate_audit"),
|
|
230
|
+
"render_candidate_ledger": (".self_improve", "render_candidate_ledger"),
|
|
231
|
+
"render_failure_report": (".self_improve", "render_failure_report"),
|
|
232
|
+
"render_logbook": (".self_improve", "render_logbook"),
|
|
233
|
+
"update_logbook_from_failures": (".self_improve", "update_logbook_from_failures"),
|
|
234
|
+
"write_failure_report": (".self_improve", "write_failure_report"),
|
|
215
235
|
}
|
|
216
236
|
|
|
217
237
|
|
|
@@ -240,6 +260,7 @@ __all__ = [
|
|
|
240
260
|
"ModelPolicySpec",
|
|
241
261
|
"PermissionRuleSpec",
|
|
242
262
|
"ObservabilitySpec",
|
|
263
|
+
"OptimizationSpec",
|
|
243
264
|
"RecursionSpec",
|
|
244
265
|
"RemoteHarnessSpec",
|
|
245
266
|
"RuntimeSpec",
|
|
@@ -387,6 +408,8 @@ __all__ = [
|
|
|
387
408
|
"dimension_for_category",
|
|
388
409
|
"harness_eval_regressions",
|
|
389
410
|
"eval_pack_path",
|
|
411
|
+
"eval_task_split_counts",
|
|
412
|
+
"filter_eval_tasks",
|
|
390
413
|
"list_eval_packs",
|
|
391
414
|
"load_eval_tasks",
|
|
392
415
|
"run_harness_eval",
|
|
@@ -402,6 +425,15 @@ __all__ = [
|
|
|
402
425
|
"render_optimize_payload",
|
|
403
426
|
"render_metaharness_summary",
|
|
404
427
|
"render_metaharness_ledger",
|
|
428
|
+
"DEFAULT_LOGBOOK_DIR",
|
|
429
|
+
"append_self_improve_evidence",
|
|
430
|
+
"logbook_to_markdown",
|
|
431
|
+
"mine_harness_failures",
|
|
432
|
+
"read_logbook",
|
|
433
|
+
"render_failure_report",
|
|
434
|
+
"render_logbook",
|
|
435
|
+
"update_logbook_from_failures",
|
|
436
|
+
"write_failure_report",
|
|
405
437
|
"omnigent_agent_to_harness_spec",
|
|
406
438
|
"spec_from_headless_profile",
|
|
407
439
|
# Performance
|