superqode 0.2.3__tar.gz → 0.2.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (659) hide show
  1. {superqode-0.2.3 → superqode-0.2.4}/CHANGELOG.md +12 -0
  2. {superqode-0.2.3/src/superqode.egg-info → superqode-0.2.4}/PKG-INFO +1 -1
  3. {superqode-0.2.3 → superqode-0.2.4}/pyproject.toml +1 -1
  4. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/__init__.py +1 -1
  5. superqode-0.2.4/src/superqode/acp/server.py +510 -0
  6. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/app_main.py +14 -2
  7. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/commands/serve.py +36 -1
  8. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/widgets/slash_complete.py +9 -3
  9. {superqode-0.2.3 → superqode-0.2.4/src/superqode.egg-info}/PKG-INFO +1 -1
  10. {superqode-0.2.3 → superqode-0.2.4}/src/superqode.egg-info/SOURCES.txt +2 -0
  11. superqode-0.2.4/tests/test_acp_server.py +297 -0
  12. {superqode-0.2.3 → superqode-0.2.4}/tests/test_tui_smoke.py +13 -9
  13. {superqode-0.2.3 → superqode-0.2.4}/LICENSE +0 -0
  14. {superqode-0.2.3 → superqode-0.2.4}/MANIFEST.in +0 -0
  15. {superqode-0.2.3 → superqode-0.2.4}/README.md +0 -0
  16. {superqode-0.2.3 → superqode-0.2.4}/examples/README.md +0 -0
  17. {superqode-0.2.3 → superqode-0.2.4}/examples/byok-acp-team.yaml +0 -0
  18. {superqode-0.2.3 → superqode-0.2.4}/examples/harnesses/coding.yaml +0 -0
  19. {superqode-0.2.3 → superqode-0.2.4}/examples/harnesses/deepagents.yaml +0 -0
  20. {superqode-0.2.3 → superqode-0.2.4}/examples/harnesses/ds4.yaml +0 -0
  21. {superqode-0.2.3 → superqode-0.2.4}/examples/harnesses/gemma4.yaml +0 -0
  22. {superqode-0.2.3 → superqode-0.2.4}/examples/harnesses/google-adk.yaml +0 -0
  23. {superqode-0.2.3 → superqode-0.2.4}/examples/harnesses/local-recursive-dynamic.yaml +0 -0
  24. {superqode-0.2.3 → superqode-0.2.4}/examples/harnesses/no-tool.yaml +0 -0
  25. {superqode-0.2.3 → superqode-0.2.4}/examples/harnesses/omnigent-multi-agent.yaml +0 -0
  26. {superqode-0.2.3 → superqode-0.2.4}/examples/harnesses/openai-agents.yaml +0 -0
  27. {superqode-0.2.3 → superqode-0.2.4}/examples/harnesses/pydanticai.yaml +0 -0
  28. {superqode-0.2.3 → superqode-0.2.4}/examples/local-models-team.yaml +0 -0
  29. {superqode-0.2.3 → superqode-0.2.4}/examples/omnigent-multi-agent.agent.yaml +0 -0
  30. {superqode-0.2.3 → superqode-0.2.4}/examples/simple-team.yaml +0 -0
  31. {superqode-0.2.3 → superqode-0.2.4}/setup.cfg +0 -0
  32. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/a2a/__init__.py +0 -0
  33. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/a2a/client.py +0 -0
  34. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/a2a/presets.py +0 -0
  35. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/a2a/registry.py +0 -0
  36. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/a2a/server.py +0 -0
  37. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/a2a/skills.py +0 -0
  38. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/a2a/tools.py +0 -0
  39. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/a2a/types.py +0 -0
  40. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/a2a/workflows.py +0 -0
  41. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/acp/__init__.py +0 -0
  42. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/acp/client.py +0 -0
  43. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/acp/doctor.py +0 -0
  44. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/acp/permission_screen.py +0 -0
  45. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/acp/permission_store.py +0 -0
  46. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/acp/render.py +0 -0
  47. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/acp/session_store.py +0 -0
  48. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/acp/slash.py +0 -0
  49. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/acp/tool_call_context.py +0 -0
  50. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/acp/types.py +0 -0
  51. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/acp_discovery.py +0 -0
  52. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agent/__init__.py +0 -0
  53. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agent/auto_memory.py +0 -0
  54. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agent/command_safety.py +0 -0
  55. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agent/compaction.py +0 -0
  56. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agent/context_manager.py +0 -0
  57. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agent/edit_strategies.py +0 -0
  58. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agent/exec_policy.py +0 -0
  59. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agent/hooks.py +0 -0
  60. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agent/loop.py +0 -0
  61. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agent/loop_guard.py +0 -0
  62. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agent/network_policy.py +0 -0
  63. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agent/output_handler.py +0 -0
  64. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agent/parallel_compare.py +0 -0
  65. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agent/peer_agents.py +0 -0
  66. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agent/plan_mode.py +0 -0
  67. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agent/reminders.py +0 -0
  68. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agent/rubric.py +0 -0
  69. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agent/session_manager.py +0 -0
  70. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agent/structured_output.py +0 -0
  71. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agent/summarization.py +0 -0
  72. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agent/system_prompts.py +0 -0
  73. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agent/terminal_output_limits.py +0 -0
  74. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agent/text_tool_calls.py +0 -0
  75. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agent/tool_args.py +0 -0
  76. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agent/tool_tracking.py +0 -0
  77. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agent/utility_model.py +0 -0
  78. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agent_output.py +0 -0
  79. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agent_stream.py +0 -0
  80. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agents/__init__.py +0 -0
  81. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agents/acp_registry.py +0 -0
  82. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agents/client.py +0 -0
  83. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agents/data/agentpool.phil65.github.io.toml +0 -0
  84. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agents/data/ampcode.com.toml +0 -0
  85. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agents/data/augmentcode.com.toml +0 -0
  86. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agents/data/autodev.github.io.toml +0 -0
  87. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agents/data/blackbox.ai.toml +0 -0
  88. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agents/data/bub.dev.toml +0 -0
  89. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agents/data/cagent.dev.toml +0 -0
  90. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agents/data/claude.com.toml +0 -0
  91. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agents/data/cline.bot.toml +0 -0
  92. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agents/data/codeassistant.dev.toml +0 -0
  93. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agents/data/codex.openai.com.toml +0 -0
  94. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agents/data/copilot.github.com.toml +0 -0
  95. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agents/data/crow-ai.dev.toml +0 -0
  96. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agents/data/cursor.com.toml +0 -0
  97. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agents/data/factory.ai.toml +0 -0
  98. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agents/data/fastagent.ai.toml +0 -0
  99. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agents/data/fount.dev.toml +0 -0
  100. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agents/data/geminicli.com.toml +0 -0
  101. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agents/data/goose.block.xyz.toml +0 -0
  102. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agents/data/hermes-agent.nousresearch.com.toml +0 -0
  103. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agents/data/junie.jetbrains.com.toml +0 -0
  104. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agents/data/kimi.moonshot.cn.toml +0 -0
  105. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agents/data/kiro.dev.toml +0 -0
  106. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agents/data/llmlingagent.dev.toml +0 -0
  107. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agents/data/minioncode.dev.toml +0 -0
  108. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agents/data/mistral-vibe.mistral.ai.toml +0 -0
  109. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agents/data/openclaw.ai.toml +0 -0
  110. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agents/data/opencode.ai.toml +0 -0
  111. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agents/data/openhands.dev.toml +0 -0
  112. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agents/data/pi.dev.toml +0 -0
  113. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agents/data/poolside.ai.toml +0 -0
  114. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agents/data/qoder.com.toml +0 -0
  115. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agents/data/qwenlm.github.io.toml +0 -0
  116. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agents/data/sigit.dev.toml +0 -0
  117. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agents/data/stakpak.dev.toml +0 -0
  118. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agents/data/stdiobus.dev.toml +0 -0
  119. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agents/data/vtcode.dev.toml +0 -0
  120. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agents/discovery.py +0 -0
  121. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agents/free_models.py +0 -0
  122. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agents/messaging.py +0 -0
  123. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agents/official_acp.py +0 -0
  124. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agents/persona.py +0 -0
  125. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agents/registry.py +0 -0
  126. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agents/schema.py +0 -0
  127. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/agents/unified.py +0 -0
  128. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/app/__init__.py +0 -0
  129. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/app/constants.py +0 -0
  130. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/app/css.py +0 -0
  131. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/app/models.py +0 -0
  132. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/app/suggester.py +0 -0
  133. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/app/theme_bridge.py +0 -0
  134. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/app/widgets.py +0 -0
  135. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/app_enhanced.py +0 -0
  136. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/approval.py +0 -0
  137. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/atomic.py +0 -0
  138. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/auth/__init__.py +0 -0
  139. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/benchmarks.py +0 -0
  140. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/channels/__init__.py +0 -0
  141. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/channels/config.py +0 -0
  142. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/channels/discord.py +0 -0
  143. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/channels/service.py +0 -0
  144. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/channels/slack.py +0 -0
  145. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/channels/telegram.py +0 -0
  146. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/claude.py +0 -0
  147. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/codex.py +0 -0
  148. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/commands/__init__.py +0 -0
  149. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/commands/a2a.py +0 -0
  150. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/commands/acp.py +0 -0
  151. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/commands/agents.py +0 -0
  152. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/commands/auth.py +0 -0
  153. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/commands/config.py +0 -0
  154. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/commands/daemon.py +0 -0
  155. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/commands/local.py +0 -0
  156. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/commands/providers.py +0 -0
  157. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/commands/runtime.py +0 -0
  158. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/commands/sessions.py +0 -0
  159. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/config/__init__.py +0 -0
  160. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/config/loader.py +0 -0
  161. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/config/schema.py +0 -0
  162. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/core/__init__.py +0 -0
  163. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/danger.py +0 -0
  164. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/data/eval_fixtures/ci-dynamic-root-cause.log +0 -0
  165. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/data/eval_fixtures/ci-root-cause.log +0 -0
  166. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/data/eval_packs/local_dynamic_workflow_smoke.yaml +0 -0
  167. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/data/eval_packs/local_recursive_smoke.yaml +0 -0
  168. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/data/superqode-template.yaml +0 -0
  169. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/design_system.py +0 -0
  170. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/dialogs/__init__.py +0 -0
  171. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/dialogs/base.py +0 -0
  172. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/dialogs/model.py +0 -0
  173. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/dialogs/provider.py +0 -0
  174. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/dialogs/runtime.py +0 -0
  175. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/diff_view.py +0 -0
  176. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/enterprise.py +0 -0
  177. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/evaluation/__init__.py +0 -0
  178. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/evaluation/adapters.py +0 -0
  179. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/evaluation/behaviors.py +0 -0
  180. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/evaluation/engine.py +0 -0
  181. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/evaluation/scenarios.py +0 -0
  182. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/execution/__init__.py +0 -0
  183. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/execution/linter.py +0 -0
  184. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/execution/modes.py +0 -0
  185. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/execution/resolver.py +0 -0
  186. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/execution/runner.py +0 -0
  187. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/file_explorer.py +0 -0
  188. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/file_viewer.py +0 -0
  189. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/flash.py +0 -0
  190. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/harness/__init__.py +0 -0
  191. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/harness/accelerator.py +0 -0
  192. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/harness/agent_importer.py +0 -0
  193. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/harness/approval_memory.py +0 -0
  194. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/harness/backends/__init__.py +0 -0
  195. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/harness/backends/base.py +0 -0
  196. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/harness/backends/deepagents.py +0 -0
  197. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/harness/backends/managed.py +0 -0
  198. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/harness/backends/pydanticai.py +0 -0
  199. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/harness/backends/registry.py +0 -0
  200. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/harness/backends/runtime.py +0 -0
  201. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/harness/compiler.py +0 -0
  202. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/harness/context_handles.py +0 -0
  203. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/harness/diagnostics.py +0 -0
  204. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/harness/eval.py +0 -0
  205. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/harness/events.py +0 -0
  206. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/harness/explain.py +0 -0
  207. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/harness/hooks.py +0 -0
  208. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/harness/kernel.py +0 -0
  209. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/harness/loader.py +0 -0
  210. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/harness/mcp_bridge.py +0 -0
  211. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/harness/model_policy.py +0 -0
  212. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/harness/observability.py +0 -0
  213. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/harness/omnigent_importer.py +0 -0
  214. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/harness/optimize.py +0 -0
  215. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/harness/output.py +0 -0
  216. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/harness/permissions.py +0 -0
  217. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/harness/registry.py +0 -0
  218. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/harness/sandbox.py +0 -0
  219. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/harness/spec.py +0 -0
  220. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/harness/store.py +0 -0
  221. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/harness/templates.py +0 -0
  222. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/harness/testing.py +0 -0
  223. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/harness/wizard.py +0 -0
  224. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/harness/workflow.py +0 -0
  225. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/harness/workflow_presets.py +0 -0
  226. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/headless.py +0 -0
  227. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/history.py +0 -0
  228. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/local/__init__.py +0 -0
  229. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/local/airplane.py +0 -0
  230. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/local/bench.py +0 -0
  231. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/local/build.py +0 -0
  232. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/local/code_index.py +0 -0
  233. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/local/data/model-packs/devstral.yaml +0 -0
  234. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/local/data/model-packs/ds4.yaml +0 -0
  235. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/local/data/model-packs/gemma4.yaml +0 -0
  236. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/local/data/model-packs/glm.yaml +0 -0
  237. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/local/data/model-packs/gpt-oss.yaml +0 -0
  238. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/local/data/model-packs/minimax.yaml +0 -0
  239. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/local/data/model-packs/qwen-coder.yaml +0 -0
  240. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/local/data/model-packs/qwen3.yaml +0 -0
  241. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/local/data/stack_matrix.yaml +0 -0
  242. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/local/doctor.py +0 -0
  243. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/local/engines.py +0 -0
  244. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/local/guardrails.py +0 -0
  245. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/local/hardware.py +0 -0
  246. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/local/inventory.py +0 -0
  247. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/local/labs.py +0 -0
  248. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/local/matrix.py +0 -0
  249. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/local/migrate.py +0 -0
  250. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/local/optimize.py +0 -0
  251. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/local/packs.py +0 -0
  252. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/local/repo.py +0 -0
  253. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/local/servers.py +0 -0
  254. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/local/setup.py +0 -0
  255. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/local/smoke.py +0 -0
  256. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/logging/__init__.py +0 -0
  257. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/logging/adapters.py +0 -0
  258. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/logging/formatter.py +0 -0
  259. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/logging/integration.py +0 -0
  260. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/logging/sinks.py +0 -0
  261. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/logging/unified_log.py +0 -0
  262. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/lsp/__init__.py +0 -0
  263. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/lsp/client.py +0 -0
  264. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/main.py +0 -0
  265. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/mcp/__init__.py +0 -0
  266. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/mcp/auth_storage.py +0 -0
  267. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/mcp/client.py +0 -0
  268. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/mcp/config.py +0 -0
  269. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/mcp/elicitation.py +0 -0
  270. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/mcp/harness_server.py +0 -0
  271. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/mcp/hf_auth.py +0 -0
  272. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/mcp/integration.py +0 -0
  273. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/mcp/oauth.py +0 -0
  274. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/mcp/oauth_callback.py +0 -0
  275. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/mcp/sampling.py +0 -0
  276. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/mcp/search.py +0 -0
  277. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/mcp/types.py +0 -0
  278. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/memory/__init__.py +0 -0
  279. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/memory/config.py +0 -0
  280. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/memory/providers.py +0 -0
  281. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/memory/types.py +0 -0
  282. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/notifications.py +0 -0
  283. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/permissions/__init__.py +0 -0
  284. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/permissions/rules.py +0 -0
  285. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/plan.py +0 -0
  286. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/plugins.py +0 -0
  287. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/project_trust.py +0 -0
  288. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/__init__.py +0 -0
  289. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/_builtin_profiles.py +0 -0
  290. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/acp_free_models.py +0 -0
  291. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/acp_models.py +0 -0
  292. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/acp_registry.py +0 -0
  293. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/apple_fm.py +0 -0
  294. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/catalog.py +0 -0
  295. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/connection_profiles.py +0 -0
  296. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/credentials.py +0 -0
  297. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/dynamic.py +0 -0
  298. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/env_introspect.py +0 -0
  299. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/free_inference.py +0 -0
  300. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/gateway/__init__.py +0 -0
  301. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/gateway/base.py +0 -0
  302. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/gateway/litellm_gateway.py +0 -0
  303. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/gateway/openresponses_gateway.py +0 -0
  304. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/gateway/synthetic.py +0 -0
  305. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/health.py +0 -0
  306. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/huggingface/__init__.py +0 -0
  307. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/huggingface/convert.py +0 -0
  308. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/huggingface/downloader.py +0 -0
  309. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/huggingface/endpoints.py +0 -0
  310. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/huggingface/fetch.py +0 -0
  311. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/huggingface/hub.py +0 -0
  312. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/huggingface/inference.py +0 -0
  313. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/huggingface/transformers_runner.py +0 -0
  314. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/live_models.py +0 -0
  315. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/local/__init__.py +0 -0
  316. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/local/_mlx_worker.py +0 -0
  317. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/local/base.py +0 -0
  318. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/local/context_probe.py +0 -0
  319. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/local/discovery.py +0 -0
  320. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/local/ds4.py +0 -0
  321. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/local/lmstudio.py +0 -0
  322. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/local/mlx.py +0 -0
  323. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/local/mlx_engine.py +0 -0
  324. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/local/mlx_tools.py +0 -0
  325. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/local/ollama.py +0 -0
  326. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/local/sglang.py +0 -0
  327. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/local/smoke.py +0 -0
  328. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/local/tgi.py +0 -0
  329. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/local/tool_support.py +0 -0
  330. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/local/vllm.py +0 -0
  331. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/manager.py +0 -0
  332. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/model_specs.py +0 -0
  333. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/models.py +0 -0
  334. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/models_dev.py +0 -0
  335. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/opencode_models.py +0 -0
  336. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/openresponses/__init__.py +0 -0
  337. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/openresponses/converters/__init__.py +0 -0
  338. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/openresponses/converters/messages.py +0 -0
  339. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/openresponses/converters/tools.py +0 -0
  340. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/openresponses/schema/__init__.py +0 -0
  341. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/openresponses/schema/models.py +0 -0
  342. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/openresponses/streaming/__init__.py +0 -0
  343. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/openresponses/streaming/parser.py +0 -0
  344. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/openresponses/tools/__init__.py +0 -0
  345. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/openresponses/tools/apply_patch.py +0 -0
  346. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/openresponses/tools/code_interpreter.py +0 -0
  347. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/openresponses/tools/file_search.py +0 -0
  348. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/openresponses/tools/mcp_adapter.py +0 -0
  349. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/profiles.py +0 -0
  350. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/recommendations.py +0 -0
  351. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/registry.py +0 -0
  352. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/providers/usage.py +0 -0
  353. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/pure_mode.py +0 -0
  354. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/py.typed +0 -0
  355. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/rendering/__init__.py +0 -0
  356. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/rendering/html_export.py +0 -0
  357. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/rendering/markdown.py +0 -0
  358. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/rendering/transcript_export.py +0 -0
  359. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/runtime/__init__.py +0 -0
  360. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/runtime/adk.py +0 -0
  361. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/runtime/base.py +0 -0
  362. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/runtime/builtin.py +0 -0
  363. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/runtime/claude_agent_sdk.py +0 -0
  364. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/runtime/codex_sdk.py +0 -0
  365. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/runtime/errors.py +0 -0
  366. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/runtime/openai_agents.py +0 -0
  367. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/runtime/openai_sandbox.py +0 -0
  368. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/runtime/openai_session.py +0 -0
  369. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/runtime/pydanticai.py +0 -0
  370. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/runtime/registry.py +0 -0
  371. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/runtime/tool_bridge.py +0 -0
  372. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/runtime/tool_bridge_openai.py +0 -0
  373. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/runtime/tool_bridge_pydanticai.py +0 -0
  374. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/safety/__init__.py +0 -0
  375. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/safety/sandbox.py +0 -0
  376. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/safety/warnings.py +0 -0
  377. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/sandbox/__init__.py +0 -0
  378. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/sandbox/backends.py +0 -0
  379. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/sandbox/execution.py +0 -0
  380. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/sandbox/local_sandbox.py +0 -0
  381. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/search_registry.py +0 -0
  382. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/server/__init__.py +0 -0
  383. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/server/api.py +0 -0
  384. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/server/web.py +0 -0
  385. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/session/__init__.py +0 -0
  386. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/session/factory.py +0 -0
  387. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/session/persistence.py +0 -0
  388. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/session/share_artifacts.py +0 -0
  389. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/session/sharing.py +0 -0
  390. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/session/switchboard.py +0 -0
  391. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/session.py +0 -0
  392. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/sidebar.py +0 -0
  393. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/skillopt.py +0 -0
  394. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/skills.py +0 -0
  395. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/stream_view.py +0 -0
  396. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/styles/__init__.py +0 -0
  397. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/tool_call.py +0 -0
  398. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/tools/__init__.py +0 -0
  399. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/tools/agent_tools.py +0 -0
  400. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/tools/apply_patch.py +0 -0
  401. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/tools/base.py +0 -0
  402. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/tools/batch_tool.py +0 -0
  403. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/tools/compact_tool.py +0 -0
  404. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/tools/context_handle.py +0 -0
  405. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/tools/context_tools.py +0 -0
  406. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/tools/diagnostics.py +0 -0
  407. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/tools/diff_utils.py +0 -0
  408. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/tools/display.py +0 -0
  409. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/tools/dynamic_workflow.py +0 -0
  410. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/tools/edit_tools.py +0 -0
  411. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/tools/enhanced_base.py +0 -0
  412. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/tools/env_policy.py +0 -0
  413. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/tools/file_tools.py +0 -0
  414. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/tools/file_tracking.py +0 -0
  415. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/tools/harness_agent_session.py +0 -0
  416. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/tools/image_tools.py +0 -0
  417. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/tools/lsp_tools.py +0 -0
  418. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/tools/mcp_tools.py +0 -0
  419. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/tools/monty_tool.py +0 -0
  420. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/tools/network_tools.py +0 -0
  421. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/tools/output_spill.py +0 -0
  422. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/tools/peer_agent_tools.py +0 -0
  423. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/tools/permissions.py +0 -0
  424. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/tools/post_edit.py +0 -0
  425. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/tools/question_tool.py +0 -0
  426. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/tools/request_permissions_tool.py +0 -0
  427. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/tools/search_tools.py +0 -0
  428. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/tools/semantic_search.py +0 -0
  429. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/tools/shell_session.py +0 -0
  430. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/tools/shell_tools.py +0 -0
  431. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/tools/skill_tools.py +0 -0
  432. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/tools/spawn_harness.py +0 -0
  433. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/tools/todo_tools.py +0 -0
  434. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/tools/tool_search.py +0 -0
  435. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/tools/validation.py +0 -0
  436. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/tools/web_tools.py +0 -0
  437. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/tui_integration.py +0 -0
  438. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/tui_widgets/__init__.py +0 -0
  439. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/tui_widgets/widgets/__init__.py +0 -0
  440. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/tui_widgets/widgets/progress.py +0 -0
  441. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/tui_widgets/widgets/tool_display.py +0 -0
  442. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/undo_manager.py +0 -0
  443. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/utils/__init__.py +0 -0
  444. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/utils/error_handling.py +0 -0
  445. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/utils/fuzzy.py +0 -0
  446. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/widgets/__init__.py +0 -0
  447. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/widgets/agent_store.py +0 -0
  448. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/widgets/agent_switcher.py +0 -0
  449. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/widgets/animation_manager.py +0 -0
  450. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/widgets/code_context.py +0 -0
  451. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/widgets/command_palette.py +0 -0
  452. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/widgets/connection_status.py +0 -0
  453. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/widgets/conversation_history.py +0 -0
  454. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/widgets/diff_indicator.py +0 -0
  455. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/widgets/enhanced_status_bar.py +0 -0
  456. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/widgets/enhanced_toast.py +0 -0
  457. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/widgets/file_browser.py +0 -0
  458. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/widgets/file_reference.py +0 -0
  459. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/widgets/leader_key.py +0 -0
  460. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/widgets/mode_switcher.py +0 -0
  461. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/widgets/model_picker.py +0 -0
  462. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/widgets/permission_preview.py +0 -0
  463. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/widgets/prompt.py +0 -0
  464. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/widgets/provider_connect.py +0 -0
  465. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/widgets/pty_shell.py +0 -0
  466. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/widgets/resizable_sidebar.py +0 -0
  467. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/widgets/response_changes.py +0 -0
  468. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/widgets/response_display.py +0 -0
  469. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/widgets/rewind_overlay.py +0 -0
  470. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/widgets/rich_tool_display.py +0 -0
  471. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/widgets/sidebar_panels.py +0 -0
  472. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/widgets/slash_commands.py +0 -0
  473. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/widgets/split_view.py +0 -0
  474. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/widgets/status_bar.py +0 -0
  475. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/widgets/superqode_display.py +0 -0
  476. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/widgets/theme_picker.py +0 -0
  477. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/widgets/thinking.py +0 -0
  478. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/widgets/thinking_display.py +0 -0
  479. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/widgets/throbber.py +0 -0
  480. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/widgets/toast.py +0 -0
  481. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/widgets/unified_output.py +0 -0
  482. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/workspace/__init__.py +0 -0
  483. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/workspace/artifacts.py +0 -0
  484. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/workspace/change_summary.py +0 -0
  485. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/workspace/coordinator.py +0 -0
  486. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/workspace/diff_tracker.py +0 -0
  487. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/workspace/git_guard.py +0 -0
  488. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/workspace/git_snapshot.py +0 -0
  489. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/workspace/manager.py +0 -0
  490. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/workspace/snapshot.py +0 -0
  491. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/workspace/watcher.py +0 -0
  492. {superqode-0.2.3 → superqode-0.2.4}/src/superqode/workspace/worktree.py +0 -0
  493. {superqode-0.2.3 → superqode-0.2.4}/src/superqode.egg-info/dependency_links.txt +0 -0
  494. {superqode-0.2.3 → superqode-0.2.4}/src/superqode.egg-info/entry_points.txt +0 -0
  495. {superqode-0.2.3 → superqode-0.2.4}/src/superqode.egg-info/requires.txt +0 -0
  496. {superqode-0.2.3 → superqode-0.2.4}/src/superqode.egg-info/top_level.txt +0 -0
  497. {superqode-0.2.3 → superqode-0.2.4}/tests/test_acp_client.py +0 -0
  498. {superqode-0.2.3 → superqode-0.2.4}/tests/test_acp_free_models.py +0 -0
  499. {superqode-0.2.3 → superqode-0.2.4}/tests/test_acp_parent_tool_linking.py +0 -0
  500. {superqode-0.2.3 → superqode-0.2.4}/tests/test_acp_permission_store.py +0 -0
  501. {superqode-0.2.3 → superqode-0.2.4}/tests/test_acp_registry.py +0 -0
  502. {superqode-0.2.3 → superqode-0.2.4}/tests/test_acp_render.py +0 -0
  503. {superqode-0.2.3 → superqode-0.2.4}/tests/test_acp_session_store.py +0 -0
  504. {superqode-0.2.3 → superqode-0.2.4}/tests/test_acp_slash.py +0 -0
  505. {superqode-0.2.3 → superqode-0.2.4}/tests/test_adaptive_compaction.py +0 -0
  506. {superqode-0.2.3 → superqode-0.2.4}/tests/test_agent_importer.py +0 -0
  507. {superqode-0.2.3 → superqode-0.2.4}/tests/test_agent_loop_harness.py +0 -0
  508. {superqode-0.2.3 → superqode-0.2.4}/tests/test_agent_memory.py +0 -0
  509. {superqode-0.2.3 → superqode-0.2.4}/tests/test_agents_md_compat.py +0 -0
  510. {superqode-0.2.3 → superqode-0.2.4}/tests/test_apply_patch.py +0 -0
  511. {superqode-0.2.3 → superqode-0.2.4}/tests/test_auth.py +0 -0
  512. {superqode-0.2.3 → superqode-0.2.4}/tests/test_bash_spill.py +0 -0
  513. {superqode-0.2.3 → superqode-0.2.4}/tests/test_benchmarks.py +0 -0
  514. {superqode-0.2.3 → superqode-0.2.4}/tests/test_change_summary.py +0 -0
  515. {superqode-0.2.3 → superqode-0.2.4}/tests/test_channels.py +0 -0
  516. {superqode-0.2.3 → superqode-0.2.4}/tests/test_cli_commands.py +0 -0
  517. {superqode-0.2.3 → superqode-0.2.4}/tests/test_cli_connect.py +0 -0
  518. {superqode-0.2.3 → superqode-0.2.4}/tests/test_cli_reference_coverage.py +0 -0
  519. {superqode-0.2.3 → superqode-0.2.4}/tests/test_command_safety.py +0 -0
  520. {superqode-0.2.3 → superqode-0.2.4}/tests/test_commands_runtime.py +0 -0
  521. {superqode-0.2.3 → superqode-0.2.4}/tests/test_compaction.py +0 -0
  522. {superqode-0.2.3 → superqode-0.2.4}/tests/test_config_loader.py +0 -0
  523. {superqode-0.2.3 → superqode-0.2.4}/tests/test_config_runtime.py +0 -0
  524. {superqode-0.2.3 → superqode-0.2.4}/tests/test_connect_setup.py +0 -0
  525. {superqode-0.2.3 → superqode-0.2.4}/tests/test_connection_profiles.py +0 -0
  526. {superqode-0.2.3 → superqode-0.2.4}/tests/test_context_handles.py +0 -0
  527. {superqode-0.2.3 → superqode-0.2.4}/tests/test_context_probe.py +0 -0
  528. {superqode-0.2.3 → superqode-0.2.4}/tests/test_context_remaining.py +0 -0
  529. {superqode-0.2.3 → superqode-0.2.4}/tests/test_create_skill_tool.py +0 -0
  530. {superqode-0.2.3 → superqode-0.2.4}/tests/test_deferred_tools.py +0 -0
  531. {superqode-0.2.3 → superqode-0.2.4}/tests/test_developer_workflow_docs.py +0 -0
  532. {superqode-0.2.3 → superqode-0.2.4}/tests/test_ds4_local_client.py +0 -0
  533. {superqode-0.2.3 → superqode-0.2.4}/tests/test_dynamic_workflow_tool.py +0 -0
  534. {superqode-0.2.3 → superqode-0.2.4}/tests/test_edit_line_number_strip.py +0 -0
  535. {superqode-0.2.3 → superqode-0.2.4}/tests/test_env_introspect.py +0 -0
  536. {superqode-0.2.3 → superqode-0.2.4}/tests/test_execution_resolver.py +0 -0
  537. {superqode-0.2.3 → superqode-0.2.4}/tests/test_final_parity_wave.py +0 -0
  538. {superqode-0.2.3 → superqode-0.2.4}/tests/test_free_models.py +0 -0
  539. {superqode-0.2.3 → superqode-0.2.4}/tests/test_harness_agent_session.py +0 -0
  540. {superqode-0.2.3 → superqode-0.2.4}/tests/test_harness_backends.py +0 -0
  541. {superqode-0.2.3 → superqode-0.2.4}/tests/test_harness_examples.py +0 -0
  542. {superqode-0.2.3 → superqode-0.2.4}/tests/test_harness_explain.py +0 -0
  543. {superqode-0.2.3 → superqode-0.2.4}/tests/test_harness_hooks.py +0 -0
  544. {superqode-0.2.3 → superqode-0.2.4}/tests/test_harness_kernel.py +0 -0
  545. {superqode-0.2.3 → superqode-0.2.4}/tests/test_harness_mcp_server.py +0 -0
  546. {superqode-0.2.3 → superqode-0.2.4}/tests/test_harness_model_policy.py +0 -0
  547. {superqode-0.2.3 → superqode-0.2.4}/tests/test_harness_observability.py +0 -0
  548. {superqode-0.2.3 → superqode-0.2.4}/tests/test_harness_output.py +0 -0
  549. {superqode-0.2.3 → superqode-0.2.4}/tests/test_harness_permissions.py +0 -0
  550. {superqode-0.2.3 → superqode-0.2.4}/tests/test_harness_sandbox.py +0 -0
  551. {superqode-0.2.3 → superqode-0.2.4}/tests/test_harness_seesaw_dimensions.py +0 -0
  552. {superqode-0.2.3 → superqode-0.2.4}/tests/test_harness_spec.py +0 -0
  553. {superqode-0.2.3 → superqode-0.2.4}/tests/test_harness_store.py +0 -0
  554. {superqode-0.2.3 → superqode-0.2.4}/tests/test_harness_wizard.py +0 -0
  555. {superqode-0.2.3 → superqode-0.2.4}/tests/test_harness_workflow.py +0 -0
  556. {superqode-0.2.3 → superqode-0.2.4}/tests/test_headless.py +0 -0
  557. {superqode-0.2.3 → superqode-0.2.4}/tests/test_hf_fetch.py +0 -0
  558. {superqode-0.2.3 → superqode-0.2.4}/tests/test_hooks.py +0 -0
  559. {superqode-0.2.3 → superqode-0.2.4}/tests/test_linter_runner.py +0 -0
  560. {superqode-0.2.3 → superqode-0.2.4}/tests/test_litellm_gateway.py +0 -0
  561. {superqode-0.2.3 → superqode-0.2.4}/tests/test_live_models.py +0 -0
  562. {superqode-0.2.3 → superqode-0.2.4}/tests/test_local_airplane.py +0 -0
  563. {superqode-0.2.3 → superqode-0.2.4}/tests/test_local_build.py +0 -0
  564. {superqode-0.2.3 → superqode-0.2.4}/tests/test_local_code_index.py +0 -0
  565. {superqode-0.2.3 → superqode-0.2.4}/tests/test_local_labs.py +0 -0
  566. {superqode-0.2.3 → superqode-0.2.4}/tests/test_local_migrate.py +0 -0
  567. {superqode-0.2.3 → superqode-0.2.4}/tests/test_local_model_optimizations.py +0 -0
  568. {superqode-0.2.3 → superqode-0.2.4}/tests/test_local_packs.py +0 -0
  569. {superqode-0.2.3 → superqode-0.2.4}/tests/test_local_sandbox.py +0 -0
  570. {superqode-0.2.3 → superqode-0.2.4}/tests/test_local_search.py +0 -0
  571. {superqode-0.2.3 → superqode-0.2.4}/tests/test_local_servers.py +0 -0
  572. {superqode-0.2.3 → superqode-0.2.4}/tests/test_local_setup.py +0 -0
  573. {superqode-0.2.3 → superqode-0.2.4}/tests/test_local_smoke.py +0 -0
  574. {superqode-0.2.3 → superqode-0.2.4}/tests/test_local_stack.py +0 -0
  575. {superqode-0.2.3 → superqode-0.2.4}/tests/test_local_tool_support.py +0 -0
  576. {superqode-0.2.3 → superqode-0.2.4}/tests/test_login_api.py +0 -0
  577. {superqode-0.2.3 → superqode-0.2.4}/tests/test_loop_guard.py +0 -0
  578. {superqode-0.2.3 → superqode-0.2.4}/tests/test_managed_harness_backend.py +0 -0
  579. {superqode-0.2.3 → superqode-0.2.4}/tests/test_markdown_render.py +0 -0
  580. {superqode-0.2.3 → superqode-0.2.4}/tests/test_mcp.py +0 -0
  581. {superqode-0.2.3 → superqode-0.2.4}/tests/test_mcp_integration.py +0 -0
  582. {superqode-0.2.3 → superqode-0.2.4}/tests/test_mcp_live.py +0 -0
  583. {superqode-0.2.3 → superqode-0.2.4}/tests/test_mcp_oauth_generalized.py +0 -0
  584. {superqode-0.2.3 → superqode-0.2.4}/tests/test_mcp_tools_runtime.py +0 -0
  585. {superqode-0.2.3 → superqode-0.2.4}/tests/test_mcp_two_way.py +0 -0
  586. {superqode-0.2.3 → superqode-0.2.4}/tests/test_memory_recall.py +0 -0
  587. {superqode-0.2.3 → superqode-0.2.4}/tests/test_mlx_tools.py +0 -0
  588. {superqode-0.2.3 → superqode-0.2.4}/tests/test_model_profiles.py +0 -0
  589. {superqode-0.2.3 → superqode-0.2.4}/tests/test_model_specs.py +0 -0
  590. {superqode-0.2.3 → superqode-0.2.4}/tests/test_monty_tool.py +0 -0
  591. {superqode-0.2.3 → superqode-0.2.4}/tests/test_network_policy.py +0 -0
  592. {superqode-0.2.3 → superqode-0.2.4}/tests/test_ollama_client.py +0 -0
  593. {superqode-0.2.3 → superqode-0.2.4}/tests/test_omnigent_agent_session_smoke.py +0 -0
  594. {superqode-0.2.3 → superqode-0.2.4}/tests/test_omnigent_importer.py +0 -0
  595. {superqode-0.2.3 → superqode-0.2.4}/tests/test_openai_session.py +0 -0
  596. {superqode-0.2.3 → superqode-0.2.4}/tests/test_output_spill.py +0 -0
  597. {superqode-0.2.3 → superqode-0.2.4}/tests/test_parallel_compare.py +0 -0
  598. {superqode-0.2.3 → superqode-0.2.4}/tests/test_peer_agents.py +0 -0
  599. {superqode-0.2.3 → superqode-0.2.4}/tests/test_plugin_hook_wiring.py +0 -0
  600. {superqode-0.2.3 → superqode-0.2.4}/tests/test_plugins.py +0 -0
  601. {superqode-0.2.3 → superqode-0.2.4}/tests/test_policies_and_turndiff.py +0 -0
  602. {superqode-0.2.3 → superqode-0.2.4}/tests/test_post_edit_verify.py +0 -0
  603. {superqode-0.2.3 → superqode-0.2.4}/tests/test_project_trust.py +0 -0
  604. {superqode-0.2.3 → superqode-0.2.4}/tests/test_provider_catalog.py +0 -0
  605. {superqode-0.2.3 → superqode-0.2.4}/tests/test_provider_dynamic.py +0 -0
  606. {superqode-0.2.3 → superqode-0.2.4}/tests/test_provider_models.py +0 -0
  607. {superqode-0.2.3 → superqode-0.2.4}/tests/test_provider_recommendations.py +0 -0
  608. {superqode-0.2.3 → superqode-0.2.4}/tests/test_pure_mode_sessions.py +0 -0
  609. {superqode-0.2.3 → superqode-0.2.4}/tests/test_rate_limit_retry.py +0 -0
  610. {superqode-0.2.3 → superqode-0.2.4}/tests/test_read_tool_limits.py +0 -0
  611. {superqode-0.2.3 → superqode-0.2.4}/tests/test_reasoning_and_budget.py +0 -0
  612. {superqode-0.2.3 → superqode-0.2.4}/tests/test_recursive_eval_packs.py +0 -0
  613. {superqode-0.2.3 → superqode-0.2.4}/tests/test_runtime_adk.py +0 -0
  614. {superqode-0.2.3 → superqode-0.2.4}/tests/test_runtime_builtin.py +0 -0
  615. {superqode-0.2.3 → superqode-0.2.4}/tests/test_runtime_claude_agent_sdk.py +0 -0
  616. {superqode-0.2.3 → superqode-0.2.4}/tests/test_runtime_codex_sdk.py +0 -0
  617. {superqode-0.2.3 → superqode-0.2.4}/tests/test_runtime_dialog.py +0 -0
  618. {superqode-0.2.3 → superqode-0.2.4}/tests/test_runtime_openai_agents.py +0 -0
  619. {superqode-0.2.3 → superqode-0.2.4}/tests/test_runtime_openai_events.py +0 -0
  620. {superqode-0.2.3 → superqode-0.2.4}/tests/test_runtime_openai_hitl.py +0 -0
  621. {superqode-0.2.3 → superqode-0.2.4}/tests/test_runtime_openai_sandbox.py +0 -0
  622. {superqode-0.2.3 → superqode-0.2.4}/tests/test_runtime_protocol.py +0 -0
  623. {superqode-0.2.3 → superqode-0.2.4}/tests/test_runtime_pydanticai.py +0 -0
  624. {superqode-0.2.3 → superqode-0.2.4}/tests/test_sandbox_backends.py +0 -0
  625. {superqode-0.2.3 → superqode-0.2.4}/tests/test_sandbox_execution.py +0 -0
  626. {superqode-0.2.3 → superqode-0.2.4}/tests/test_search_roots.py +0 -0
  627. {superqode-0.2.3 → superqode-0.2.4}/tests/test_semantic_search.py +0 -0
  628. {superqode-0.2.3 → superqode-0.2.4}/tests/test_session_switchboard.py +0 -0
  629. {superqode-0.2.3 → superqode-0.2.4}/tests/test_shell_session.py +0 -0
  630. {superqode-0.2.3 → superqode-0.2.4}/tests/test_simple_login.py +0 -0
  631. {superqode-0.2.3 → superqode-0.2.4}/tests/test_simple_query_fastpath.py +0 -0
  632. {superqode-0.2.3 → superqode-0.2.4}/tests/test_skillopt.py +0 -0
  633. {superqode-0.2.3 → superqode-0.2.4}/tests/test_slash_runtime.py +0 -0
  634. {superqode-0.2.3 → superqode-0.2.4}/tests/test_spawn_harness_tool.py +0 -0
  635. {superqode-0.2.3 → superqode-0.2.4}/tests/test_steering_continue_reminders.py +0 -0
  636. {superqode-0.2.3 → superqode-0.2.4}/tests/test_synthetic_gateways.py +0 -0
  637. {superqode-0.2.3 → superqode-0.2.4}/tests/test_terminal_output_limits.py +0 -0
  638. {superqode-0.2.3 → superqode-0.2.4}/tests/test_theme_picker.py +0 -0
  639. {superqode-0.2.3 → superqode-0.2.4}/tests/test_todo_tools.py +0 -0
  640. {superqode-0.2.3 → superqode-0.2.4}/tests/test_tool_args_repair.py +0 -0
  641. {superqode-0.2.3 → superqode-0.2.4}/tests/test_tool_batch_safety.py +0 -0
  642. {superqode-0.2.3 → superqode-0.2.4}/tests/test_tool_bridge.py +0 -0
  643. {superqode-0.2.3 → superqode-0.2.4}/tests/test_tool_bridge_openai.py +0 -0
  644. {superqode-0.2.3 → superqode-0.2.4}/tests/test_tool_call_repair.py +0 -0
  645. {superqode-0.2.3 → superqode-0.2.4}/tests/test_tool_output_pruning.py +0 -0
  646. {superqode-0.2.3 → superqode-0.2.4}/tests/test_tool_tracking.py +0 -0
  647. {superqode-0.2.3 → superqode-0.2.4}/tests/test_tools.py +0 -0
  648. {superqode-0.2.3 → superqode-0.2.4}/tests/test_tui_change_summary.py +0 -0
  649. {superqode-0.2.3 → superqode-0.2.4}/tests/test_tui_chat_mode.py +0 -0
  650. {superqode-0.2.3 → superqode-0.2.4}/tests/test_tui_exit.py +0 -0
  651. {superqode-0.2.3 → superqode-0.2.4}/tests/test_tui_llamacpp_connect.py +0 -0
  652. {superqode-0.2.3 → superqode-0.2.4}/tests/test_tui_markdown_cleanup.py +0 -0
  653. {superqode-0.2.3 → superqode-0.2.4}/tests/test_tui_mlx_connect.py +0 -0
  654. {superqode-0.2.3 → superqode-0.2.4}/tests/test_tui_mounted.py +0 -0
  655. {superqode-0.2.3 → superqode-0.2.4}/tests/test_tui_tool_display.py +0 -0
  656. {superqode-0.2.3 → superqode-0.2.4}/tests/test_version.py +0 -0
  657. {superqode-0.2.3 → superqode-0.2.4}/tests/test_view_image.py +0 -0
  658. {superqode-0.2.3 → superqode-0.2.4}/tests/test_web_server_auth.py +0 -0
  659. {superqode-0.2.3 → superqode-0.2.4}/tests/test_workspace.py +0 -0
@@ -7,6 +7,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.2.4] - 2026-07-04
11
+
12
+ ### Added
13
+
14
+ - **ACP agent server** - `superqode serve acp` runs SuperQode as an Agent Client Protocol agent over stdio, so ACP clients such as Zed, JetBrains IDEs, and Neovim can drive SuperQode as their coding agent. Each session resolves a HarnessSpec from `--spec`, the session directory's `superqode.local.yaml` / `harness.yaml`, the conventional harness directories, or the built-in coding template; provider/model resolve from flags, `SUPERQODE_ACP_PROVIDER` / `SUPERQODE_ACP_MODEL`, or the spec's `model_policy.primary`. Prompt turns stream harness model deltas, thinking, and tool calls as ACP session updates, harness tool approvals are relayed as ACP permission requests (allow once / always / reject), and `session/cancel` stops the running turn. The initialize response advertises a terminal auth method that runs `superqode local init --repo .` as the setup experience, as required for ACP registry listing.
15
+ - **ACP registry submission assets** - Added `install/acp-registry/superqode/` with the `agent.json` manifest (uvx distribution), monochrome 16×16 icon matching the SuperQode logo, and registry README, ready to copy into a fork of `agentclientprotocol/registry`.
16
+ - **Scalable brand logo** - Added `assets/superqode-logo.svg`, a compact vector version of the SuperQode logo with the brand gradient, for docs, README, and website use.
17
+
18
+ ### Changed
19
+
20
+ - **Release metadata** - Bumped the package version and runtime `__version__` to `0.2.4`.
21
+
10
22
  ## [0.2.3] - 2026-06-24
11
23
 
12
24
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: superqode
3
- Version: 0.2.3
3
+ Version: 0.2.4
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,6 +1,6 @@
1
1
  [project]
2
2
  name = "superqode"
3
- version = "0.2.3"
3
+ version = "0.2.4"
4
4
  description = "SuperQode: harness engineering framework for coding agents, optimized for local and open models"
5
5
  readme = "README.md"
6
6
  license = "Apache-2.0"
@@ -30,4 +30,4 @@ __all__ = [
30
30
  "sidebar",
31
31
  ]
32
32
 
33
- __version__ = "0.2.3"
33
+ __version__ = "0.2.4"
@@ -0,0 +1,510 @@
1
+ """
2
+ Run SuperQode as an ACP agent (the agent side of the Agent Client Protocol).
3
+
4
+ Complements the client in ``acp/client.py``: any ACP client — Zed, JetBrains
5
+ IDEs, Neovim, Devin Desktop — can drive SuperQode as its coding agent over
6
+ stdio JSON-RPC. The agent loop is a HarnessSpec, resolved per session: an
7
+ explicit ``--spec``, the session directory's ``superqode.local.yaml`` or
8
+ ``harness.yaml``, a spec discovered under the conventional harness dirs, or
9
+ the built-in coding template.
10
+
11
+ Run it::
12
+
13
+ superqode serve acp # stdio, auto-discovered spec
14
+ superqode serve acp --spec harness.yaml # pin one HarnessSpec
15
+
16
+ Provider/model resolution order: explicit flags → ``SUPERQODE_ACP_PROVIDER``
17
+ / ``SUPERQODE_ACP_MODEL`` env → the spec's ``model_policy.primary``.
18
+ """
19
+
20
+ from __future__ import annotations
21
+
22
+ import asyncio
23
+ import contextlib
24
+ import os
25
+ from dataclasses import dataclass, field
26
+ from pathlib import Path
27
+ from typing import Any
28
+
29
+ from acp import (
30
+ PROTOCOL_VERSION,
31
+ InitializeResponse,
32
+ NewSessionResponse,
33
+ PromptResponse,
34
+ run_agent,
35
+ start_tool_call,
36
+ text_block,
37
+ tool_content,
38
+ update_agent_message_text,
39
+ update_agent_thought_text,
40
+ update_tool_call,
41
+ )
42
+ from acp.exceptions import RequestError
43
+ from acp.schema import (
44
+ AgentCapabilities,
45
+ Implementation,
46
+ PermissionOption,
47
+ PromptCapabilities,
48
+ TerminalAuthMethod,
49
+ ToolCallUpdate,
50
+ )
51
+
52
+ # Conventional spec files looked up in the session working directory, in order.
53
+ SESSION_SPEC_FILENAMES = ("superqode.local.yaml", "harness.yaml")
54
+
55
+ # Cap tool output relayed to the client; full output stays in the harness store.
56
+ _TOOL_OUTPUT_LIMIT = 2000
57
+
58
+ _STREAM_DONE = object()
59
+
60
+
61
+ def _tool_kind(name: str) -> str:
62
+ """Map a SuperQode tool name onto an ACP ToolKind."""
63
+ lowered = (name or "").lower()
64
+ exact = {
65
+ "read_file": "read",
66
+ "ls": "read",
67
+ "list_dir": "read",
68
+ "get_context_remaining": "read",
69
+ "edit_file": "edit",
70
+ "write_file": "edit",
71
+ "patch": "edit",
72
+ "grep": "search",
73
+ "glob": "search",
74
+ "repo_search": "search",
75
+ "semantic_search": "search",
76
+ "bash": "execute",
77
+ "shell": "execute",
78
+ "web_fetch": "fetch",
79
+ }
80
+ if lowered in exact:
81
+ return exact[lowered]
82
+ for fragment, kind in (
83
+ ("read", "read"),
84
+ ("edit", "edit"),
85
+ ("write", "edit"),
86
+ ("patch", "edit"),
87
+ ("grep", "search"),
88
+ ("search", "search"),
89
+ ("glob", "search"),
90
+ ("find", "search"),
91
+ ("bash", "execute"),
92
+ ("shell", "execute"),
93
+ ("command", "execute"),
94
+ ("fetch", "fetch"),
95
+ ):
96
+ if fragment in lowered:
97
+ return kind
98
+ return "other"
99
+
100
+
101
+ def _prompt_to_text(blocks: list[Any] | None) -> str:
102
+ """Flatten ACP prompt content blocks into one harness prompt string."""
103
+ parts: list[str] = []
104
+ for block in blocks or []:
105
+ block_type = getattr(block, "type", "")
106
+ if block_type == "text":
107
+ parts.append(getattr(block, "text", "") or "")
108
+ elif block_type == "resource":
109
+ resource = getattr(block, "resource", None)
110
+ text = getattr(resource, "text", None)
111
+ if text:
112
+ uri = getattr(resource, "uri", "") or ""
113
+ parts.append(f'<context uri="{uri}">\n{text}\n</context>')
114
+ elif block_type == "resource_link":
115
+ uri = getattr(block, "uri", "") or ""
116
+ name = getattr(block, "name", "") or ""
117
+ parts.append(f"[resource: {name or uri}]")
118
+ return "\n\n".join(part for part in parts if part).strip()
119
+
120
+
121
+ def _clip(text: Any, limit: int = _TOOL_OUTPUT_LIMIT) -> str:
122
+ rendered = str(text or "")
123
+ if len(rendered) <= limit:
124
+ return rendered
125
+ return rendered[:limit] + f"\n… (truncated, {len(rendered)} chars total)"
126
+
127
+
128
+ class _ToolCallTracker:
129
+ """Assign stable ACP tool_call ids to sequential harness tool events."""
130
+
131
+ def __init__(self) -> None:
132
+ self._counter = 0
133
+ self._open: dict[str, list[str]] = {}
134
+
135
+ def start(self, name: str) -> str:
136
+ self._counter += 1
137
+ call_id = f"tc-{self._counter}-{name or 'tool'}"
138
+ self._open.setdefault(name, []).append(call_id)
139
+ return call_id
140
+
141
+ def finish(self, name: str) -> str | None:
142
+ stack = self._open.get(name)
143
+ if stack:
144
+ return stack.pop(0)
145
+ return None
146
+
147
+
148
+ def discover_session_spec(cwd: Path, harness_dir: Path | None = None) -> Path | None:
149
+ """Find the HarnessSpec that should drive an ACP session rooted at ``cwd``."""
150
+ if harness_dir is not None:
151
+ directory = Path(harness_dir).expanduser()
152
+ if directory.is_dir():
153
+ for path in sorted([*directory.glob("*.yaml"), *directory.glob("*.yml")]):
154
+ return path
155
+ for name in SESSION_SPEC_FILENAMES:
156
+ candidate = cwd / name
157
+ if candidate.is_file():
158
+ return candidate
159
+ from superqode.mcp.harness_server import DEFAULT_HARNESS_DIRS
160
+
161
+ for dirname in DEFAULT_HARNESS_DIRS:
162
+ directory = cwd / dirname
163
+ if not directory.is_dir():
164
+ continue
165
+ for path in sorted([*directory.glob("*.yaml"), *directory.glob("*.yml")]):
166
+ return path
167
+ return None
168
+
169
+
170
+ def resolve_provider_model(spec: Any, provider: str = "", model: str = "") -> tuple[str, str]:
171
+ """Resolve provider/model: explicit args → ACP env vars → model_policy.primary."""
172
+ from superqode.providers.model_specs import (
173
+ normalize_model_for_provider,
174
+ normalize_provider_id,
175
+ split_provider_model_ref,
176
+ )
177
+
178
+ provider = provider or os.environ.get("SUPERQODE_ACP_PROVIDER", "").strip()
179
+ model = model or os.environ.get("SUPERQODE_ACP_MODEL", "").strip()
180
+ provider = normalize_provider_id(provider)
181
+ if provider:
182
+ model = normalize_model_for_provider(provider, model)
183
+ elif model:
184
+ parsed_model = split_provider_model_ref(model)
185
+ if parsed_model.provider:
186
+ provider, model = parsed_model.provider, parsed_model.model
187
+
188
+ primary = getattr(getattr(spec, "model_policy", None), "primary", None)
189
+ if (not provider or not model) and primary:
190
+ parsed_primary = split_provider_model_ref(str(primary))
191
+ if parsed_primary.provider:
192
+ provider = provider or parsed_primary.provider
193
+ model = model or parsed_primary.model
194
+ else:
195
+ model = model or str(primary)
196
+ return provider, model
197
+
198
+
199
+ @dataclass
200
+ class _AcpSessionState:
201
+ """Live state for one ACP session backed by a HarnessSession."""
202
+
203
+ session: Any
204
+ spec: Any
205
+ provider: str
206
+ model: str
207
+ cwd: Path
208
+ cancel_event: asyncio.Event = field(default_factory=asyncio.Event)
209
+
210
+
211
+ class SuperQodeAcpAgent:
212
+ """ACP agent implementation that runs prompts through a HarnessKernel."""
213
+
214
+ def __init__(
215
+ self,
216
+ *,
217
+ spec_path: Path | None = None,
218
+ harness_dir: Path | None = None,
219
+ provider: str = "",
220
+ model: str = "",
221
+ ) -> None:
222
+ self._spec_path = spec_path
223
+ self._harness_dir = harness_dir
224
+ self._provider = provider
225
+ self._model = model
226
+ self._conn: Any | None = None
227
+ self._sessions: dict[str, _AcpSessionState] = {}
228
+
229
+ # -- connection lifecycle -------------------------------------------------
230
+
231
+ def on_connect(self, conn: Any) -> None:
232
+ self._conn = conn
233
+
234
+ async def initialize(
235
+ self,
236
+ protocol_version: int,
237
+ client_capabilities: Any = None,
238
+ client_info: Any = None,
239
+ **kwargs: Any,
240
+ ) -> InitializeResponse:
241
+ from superqode import __version__
242
+
243
+ return InitializeResponse(
244
+ protocol_version=min(int(protocol_version), PROTOCOL_VERSION),
245
+ agent_capabilities=AgentCapabilities(
246
+ load_session=False,
247
+ prompt_capabilities=PromptCapabilities(
248
+ audio=False, image=False, embedded_context=True
249
+ ),
250
+ ),
251
+ agent_info=Implementation(name="superqode", title="SuperQode", version=__version__),
252
+ auth_methods=[
253
+ TerminalAuthMethod(
254
+ type="terminal",
255
+ id="superqode-setup",
256
+ name="Set up SuperQode",
257
+ description=(
258
+ "Detect local hardware, pick a local model, and generate a "
259
+ "starter harness for this project (superqode local init)."
260
+ ),
261
+ args=["local", "init", "--repo", "."],
262
+ )
263
+ ],
264
+ )
265
+
266
+ async def authenticate(self, method_id: str, **kwargs: Any) -> None:
267
+ # Terminal auth: the client runs `superqode local init --repo .` itself;
268
+ # nothing to complete on the agent side.
269
+ return None
270
+
271
+ # -- sessions ---------------------------------------------------------------
272
+
273
+ async def new_session(
274
+ self,
275
+ cwd: str,
276
+ additional_directories: list[str] | None = None,
277
+ mcp_servers: list[Any] | None = None,
278
+ **kwargs: Any,
279
+ ) -> NewSessionResponse:
280
+ from superqode.harness import FileHarnessStore, init_harness
281
+
282
+ working_dir = Path(cwd).expanduser() if cwd else Path.cwd()
283
+ spec = self._load_spec(working_dir)
284
+ provider, model = resolve_provider_model(spec, self._provider, self._model)
285
+ if not provider or not model:
286
+ raise RequestError.invalid_params(
287
+ {
288
+ "reason": (
289
+ "No provider/model resolved for this session. Set "
290
+ "`model_policy.primary` in the harness spec, or set "
291
+ "SUPERQODE_ACP_PROVIDER / SUPERQODE_ACP_MODEL."
292
+ ),
293
+ "spec": spec.name,
294
+ }
295
+ )
296
+ storage = Path(spec.context.session_storage)
297
+ if not storage.is_absolute():
298
+ storage = working_dir / storage
299
+ kernel = await init_harness(spec, store=FileHarnessStore(storage))
300
+ session = await kernel.session()
301
+ self._sessions[session.session_id] = _AcpSessionState(
302
+ session=session,
303
+ spec=spec,
304
+ provider=provider,
305
+ model=model,
306
+ cwd=working_dir,
307
+ )
308
+ return NewSessionResponse(session_id=session.session_id)
309
+
310
+ async def close_session(self, session_id: str, **kwargs: Any) -> None:
311
+ self._sessions.pop(session_id, None)
312
+ return None
313
+
314
+ async def cancel(self, session_id: str, **kwargs: Any) -> None:
315
+ state = self._sessions.get(session_id)
316
+ if state is not None:
317
+ state.cancel_event.set()
318
+
319
+ # -- prompting ---------------------------------------------------------------
320
+
321
+ async def prompt(
322
+ self,
323
+ prompt: list[Any],
324
+ session_id: str,
325
+ message_id: str | None = None,
326
+ **kwargs: Any,
327
+ ) -> PromptResponse:
328
+ state = self._sessions.get(session_id)
329
+ if state is None:
330
+ raise RequestError.invalid_params({"reason": f"Unknown session: {session_id}"})
331
+ text = _prompt_to_text(prompt)
332
+ if not text:
333
+ return PromptResponse(stop_reason="end_turn")
334
+ state.cancel_event = asyncio.Event()
335
+ tracker = _ToolCallTracker()
336
+ try:
337
+ cancelled = await self._stream_turn(state, text, tracker)
338
+ if not cancelled:
339
+ cancelled = await self._resolve_approvals(state, tracker)
340
+ except asyncio.CancelledError:
341
+ raise
342
+ except Exception as exc:
343
+ await self._send_update(
344
+ session_id,
345
+ update_agent_message_text(f"SuperQode harness run failed: {exc}"),
346
+ )
347
+ return PromptResponse(stop_reason="end_turn")
348
+ return PromptResponse(stop_reason="cancelled" if cancelled else "end_turn")
349
+
350
+ async def _stream_turn(
351
+ self, state: _AcpSessionState, text: str, tracker: _ToolCallTracker
352
+ ) -> bool:
353
+ """Stream one harness turn to the client. Returns True when cancelled."""
354
+ stream = state.session.stream(
355
+ text,
356
+ provider=state.provider,
357
+ model=state.model,
358
+ working_directory=state.cwd,
359
+ sandbox_backend=state.spec.execution_policy.sandbox,
360
+ )
361
+ iterator = stream.__aiter__()
362
+ try:
363
+ while True:
364
+ next_task = asyncio.ensure_future(anext(iterator, _STREAM_DONE))
365
+ cancel_task = asyncio.ensure_future(state.cancel_event.wait())
366
+ done, _ = await asyncio.wait(
367
+ {next_task, cancel_task}, return_when=asyncio.FIRST_COMPLETED
368
+ )
369
+ if next_task not in done:
370
+ next_task.cancel()
371
+ with contextlib.suppress(asyncio.CancelledError):
372
+ await next_task
373
+ return True
374
+ cancel_task.cancel()
375
+ with contextlib.suppress(asyncio.CancelledError):
376
+ await cancel_task
377
+ event = next_task.result()
378
+ if event is _STREAM_DONE:
379
+ return False
380
+ await self._dispatch_event(state, event, tracker)
381
+ finally:
382
+ with contextlib.suppress(Exception):
383
+ await iterator.aclose()
384
+
385
+ async def _dispatch_event(
386
+ self, state: _AcpSessionState, event: Any, tracker: _ToolCallTracker
387
+ ) -> None:
388
+ session_id = state.session.session_id
389
+ data = dict(getattr(event, "data", {}) or {})
390
+ event_type = getattr(event, "type", "")
391
+ if event_type in ("delta", "model_delta"):
392
+ text = data.get("text") or ""
393
+ if text:
394
+ await self._send_update(session_id, update_agent_message_text(text))
395
+ elif event_type == "thinking":
396
+ text = data.get("text") or ""
397
+ if text:
398
+ await self._send_update(session_id, update_agent_thought_text(text))
399
+ elif event_type == "tool_call":
400
+ name = str(data.get("tool_name") or "tool")
401
+ call_id = tracker.start(name)
402
+ await self._send_update(
403
+ session_id,
404
+ start_tool_call(
405
+ call_id,
406
+ name,
407
+ kind=_tool_kind(name),
408
+ status="in_progress",
409
+ raw_input=data.get("arguments"),
410
+ ),
411
+ )
412
+ elif event_type == "tool_result":
413
+ name = str(data.get("tool_name") or "tool")
414
+ call_id = tracker.finish(name)
415
+ if call_id is None:
416
+ return
417
+ success = data.get("success", True)
418
+ output = data.get("output") if success else (data.get("error") or data.get("output"))
419
+ content = []
420
+ if output:
421
+ content.append(tool_content(text_block(_clip(output))))
422
+ await self._send_update(
423
+ session_id,
424
+ update_tool_call(
425
+ call_id,
426
+ status="completed" if success else "failed",
427
+ content=content or None,
428
+ raw_output=output,
429
+ ),
430
+ )
431
+
432
+ async def _resolve_approvals(self, state: _AcpSessionState, tracker: _ToolCallTracker) -> bool:
433
+ """Relay pending harness approvals as ACP permission requests."""
434
+ session = state.session
435
+ while True:
436
+ pending = session.pending_approvals()
437
+ if not pending:
438
+ return False
439
+ if state.cancel_event.is_set() or self._conn is None:
440
+ return True
441
+ item = dict(pending[0])
442
+ tool_name = str(item.get("tool_name") or "tool")
443
+ call_id = str(item.get("tool_call_id") or tracker.start(tool_name))
444
+ response = await self._conn.request_permission(
445
+ options=[
446
+ PermissionOption(option_id="allow_once", name="Allow once", kind="allow_once"),
447
+ PermissionOption(
448
+ option_id="allow_always", name="Always allow", kind="allow_always"
449
+ ),
450
+ PermissionOption(option_id="reject_once", name="Reject", kind="reject_once"),
451
+ ],
452
+ session_id=session.session_id,
453
+ tool_call=ToolCallUpdate(
454
+ tool_call_id=call_id,
455
+ title=tool_name,
456
+ kind=_tool_kind(tool_name),
457
+ status="pending",
458
+ raw_input=item.get("arguments"),
459
+ ),
460
+ )
461
+ outcome = getattr(response, "outcome", None)
462
+ selected = getattr(outcome, "outcome", "") == "selected"
463
+ option_id = getattr(outcome, "option_id", "")
464
+ if selected and option_id in ("allow_once", "allow_always"):
465
+ result = await session.approve_pending(0, always=option_id == "allow_always")
466
+ elif selected:
467
+ result = await session.reject_pending(0)
468
+ else:
469
+ # Client cancelled the permission prompt: reject and stop the turn.
470
+ await session.reject_pending(0, message="Cancelled from the editor")
471
+ return True
472
+ content = getattr(result, "content", "") or ""
473
+ if content:
474
+ await self._send_update(session.session_id, update_agent_message_text(content))
475
+
476
+ # -- helpers ---------------------------------------------------------------
477
+
478
+ def _load_spec(self, cwd: Path) -> Any:
479
+ from superqode.harness import load_harness_spec
480
+ from superqode.harness.templates import coding_template
481
+
482
+ explicit = self._spec_path or os.environ.get("SUPERQODE_ACP_SPEC", "").strip()
483
+ if explicit:
484
+ return load_harness_spec(Path(explicit).expanduser())
485
+ found = discover_session_spec(cwd, self._harness_dir)
486
+ if found is not None:
487
+ return load_harness_spec(found)
488
+ return coding_template()
489
+
490
+ async def _send_update(self, session_id: str, update: Any) -> None:
491
+ if self._conn is None:
492
+ return
493
+ await self._conn.session_update(session_id=session_id, update=update)
494
+
495
+
496
+ async def run_acp_server(
497
+ *,
498
+ spec_path: Path | None = None,
499
+ harness_dir: Path | None = None,
500
+ provider: str = "",
501
+ model: str = "",
502
+ ) -> None:
503
+ """Serve SuperQode as an ACP agent on stdio until the client disconnects."""
504
+ agent = SuperQodeAcpAgent(
505
+ spec_path=spec_path,
506
+ harness_dir=harness_dir,
507
+ provider=provider,
508
+ model=model,
509
+ )
510
+ await run_agent(agent)
@@ -12238,7 +12238,9 @@ class SuperQodeApp(App):
12238
12238
  elif step == "provider":
12239
12239
  t.append(" Step 3/9 Provider\n", style=f"bold {THEME['cyan']}")
12240
12240
  t.append(" Leave blank to keep the template default.\n", style=THEME["muted"])
12241
- t.append(" Examples: ollama, lmstudio, mlx, ds4, openai, anthropic\n", style=THEME["text"])
12241
+ t.append(
12242
+ " Examples: ollama, lmstudio, mlx, ds4, openai, anthropic\n", style=THEME["text"]
12243
+ )
12242
12244
  elif step == "model":
12243
12245
  t.append(" Step 4/9 Model\n", style=f"bold {THEME['cyan']}")
12244
12246
  t.append(" Leave blank to keep the template model.\n", style=THEME["muted"])
@@ -25364,7 +25366,17 @@ class SuperQodeApp(App):
25364
25366
  self._doctor_cmd(subargs, log)
25365
25367
  return
25366
25368
 
25367
- if sub in {"list", "models", "guide", "recommend", "scan-free", "test", "monty", "ds4", "mlx"}:
25369
+ if sub in {
25370
+ "list",
25371
+ "models",
25372
+ "guide",
25373
+ "recommend",
25374
+ "scan-free",
25375
+ "test",
25376
+ "monty",
25377
+ "ds4",
25378
+ "mlx",
25379
+ }:
25368
25380
  self._run_cli_group("providers", args, log, "Providers command")
25369
25381
  return
25370
25382
 
@@ -22,7 +22,7 @@ console = Console()
22
22
  @click.pass_context
23
23
  def serve(ctx: click.Context):
24
24
  """Server commands for IDE and web integration."""
25
- if ctx.invoked_subcommand in {"api", "harness"}:
25
+ if ctx.invoked_subcommand in {"api", "harness", "acp"}:
26
26
  return
27
27
  if not require_enterprise("Server integrations"):
28
28
  raise SystemExit(1)
@@ -110,6 +110,41 @@ def serve_harness(
110
110
  run_server("http" if http else "stdio", host, port, str(harness_dir) if harness_dir else None)
111
111
 
112
112
 
113
+ @serve.command("acp")
114
+ @click.option("--spec", "spec_path", type=click.Path(exists=True, path_type=Path), default=None)
115
+ @click.option(
116
+ "--dir", "harness_dir", type=click.Path(file_okay=False, path_type=Path), default=None
117
+ )
118
+ @click.option("--provider", default="", envvar="SUPERQODE_ACP_PROVIDER")
119
+ @click.option("--model", default="", envvar="SUPERQODE_ACP_MODEL")
120
+ def serve_acp(spec_path: Optional[Path], harness_dir: Optional[Path], provider: str, model: str):
121
+ """Run SuperQode as an ACP agent on stdio (Zed, JetBrains, Neovim, ...).
122
+
123
+ The agent loop is a HarnessSpec: --spec pins one file, otherwise each
124
+ session resolves superqode.local.yaml / harness.yaml in its working
125
+ directory, then the conventional harness dirs, then the coding template.
126
+ """
127
+ import asyncio
128
+
129
+ from superqode.acp.server import run_acp_server
130
+
131
+ if spec_path and harness_dir:
132
+ raise click.ClickException("Pass either --spec or --dir, not both.")
133
+ # stdout carries JSON-RPC, so any human-facing output must go to stderr.
134
+ click.echo("SuperQode ACP agent listening on stdio", err=True)
135
+ try:
136
+ asyncio.run(
137
+ run_acp_server(
138
+ spec_path=spec_path,
139
+ harness_dir=harness_dir,
140
+ provider=provider,
141
+ model=model,
142
+ )
143
+ )
144
+ except KeyboardInterrupt:
145
+ pass
146
+
147
+
113
148
  @serve.command("api")
114
149
  @click.option("--host", default="127.0.0.1", show_default=True)
115
150
  @click.option("--port", default=8766, show_default=True, type=int)
@@ -59,8 +59,12 @@ DEFAULT_COMMANDS: list[SlashCommand] = [
59
59
  SlashCommand(":harness inspect", "Summarize the active HarnessSpec", category="workflow"),
60
60
  SlashCommand("/harness templates", "List HarnessSpec templates", category="workflow"),
61
61
  SlashCommand(":harness templates", "List HarnessSpec templates", category="workflow"),
62
- SlashCommand("/harness wizard", "Create a HarnessSpec from wizard defaults", category="workflow"),
63
- SlashCommand(":harness wizard", "Create a HarnessSpec from wizard defaults", category="workflow"),
62
+ SlashCommand(
63
+ "/harness wizard", "Create a HarnessSpec from wizard defaults", category="workflow"
64
+ ),
65
+ SlashCommand(
66
+ ":harness wizard", "Create a HarnessSpec from wizard defaults", category="workflow"
67
+ ),
64
68
  SlashCommand("/harness init", "Create a HarnessSpec from wizard defaults", category="workflow"),
65
69
  SlashCommand(":harness init", "Create a HarnessSpec from wizard defaults", category="workflow"),
66
70
  SlashCommand("/harness doctor", "Check active or selected harness", category="workflow"),
@@ -87,7 +91,9 @@ DEFAULT_COMMANDS: list[SlashCommand] = [
87
91
  SlashCommand(":harness list-backends", "List HarnessSpec backends", category="workflow"),
88
92
  SlashCommand(":harness registry", "Manage the local harness registry", category="workflow"),
89
93
  SlashCommand(":harness inbox", "Manage queued harness inputs", category="workflow"),
90
- SlashCommand(":harness observability", "Inspect/export harness observability", category="workflow"),
94
+ SlashCommand(
95
+ ":harness observability", "Inspect/export harness observability", category="workflow"
96
+ ),
91
97
  SlashCommand(
92
98
  ":harness optimize", "Optimize a HarnessSpec through metaharness", category="workflow"
93
99
  ),
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: superqode
3
- Version: 0.2.3
3
+ Version: 0.2.4
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>