superqode 0.1.5__py3-none-any.whl

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 (288) hide show
  1. superqode/__init__.py +33 -0
  2. superqode/acp/__init__.py +23 -0
  3. superqode/acp/client.py +913 -0
  4. superqode/acp/permission_screen.py +457 -0
  5. superqode/acp/types.py +480 -0
  6. superqode/acp_discovery.py +856 -0
  7. superqode/agent/__init__.py +22 -0
  8. superqode/agent/edit_strategies.py +334 -0
  9. superqode/agent/loop.py +892 -0
  10. superqode/agent/qe_report_templates.py +39 -0
  11. superqode/agent/system_prompts.py +353 -0
  12. superqode/agent_output.py +721 -0
  13. superqode/agent_stream.py +953 -0
  14. superqode/agents/__init__.py +59 -0
  15. superqode/agents/acp_registry.py +305 -0
  16. superqode/agents/client.py +249 -0
  17. superqode/agents/data/augmentcode.com.toml +51 -0
  18. superqode/agents/data/cagent.dev.toml +51 -0
  19. superqode/agents/data/claude.com.toml +60 -0
  20. superqode/agents/data/codeassistant.dev.toml +51 -0
  21. superqode/agents/data/codex.openai.com.toml +57 -0
  22. superqode/agents/data/fastagent.ai.toml +66 -0
  23. superqode/agents/data/geminicli.com.toml +77 -0
  24. superqode/agents/data/goose.block.xyz.toml +54 -0
  25. superqode/agents/data/junie.jetbrains.com.toml +56 -0
  26. superqode/agents/data/kimi.moonshot.cn.toml +57 -0
  27. superqode/agents/data/llmlingagent.dev.toml +51 -0
  28. superqode/agents/data/molt.bot.toml +49 -0
  29. superqode/agents/data/opencode.ai.toml +60 -0
  30. superqode/agents/data/stakpak.dev.toml +51 -0
  31. superqode/agents/data/vtcode.dev.toml +51 -0
  32. superqode/agents/discovery.py +266 -0
  33. superqode/agents/messaging.py +160 -0
  34. superqode/agents/persona.py +166 -0
  35. superqode/agents/registry.py +421 -0
  36. superqode/agents/schema.py +72 -0
  37. superqode/agents/unified.py +367 -0
  38. superqode/app/__init__.py +111 -0
  39. superqode/app/constants.py +314 -0
  40. superqode/app/css.py +366 -0
  41. superqode/app/models.py +118 -0
  42. superqode/app/suggester.py +125 -0
  43. superqode/app/widgets.py +1591 -0
  44. superqode/app_enhanced.py +399 -0
  45. superqode/app_main.py +17187 -0
  46. superqode/approval.py +312 -0
  47. superqode/atomic.py +296 -0
  48. superqode/commands/__init__.py +1 -0
  49. superqode/commands/acp.py +965 -0
  50. superqode/commands/agents.py +180 -0
  51. superqode/commands/auth.py +278 -0
  52. superqode/commands/config.py +374 -0
  53. superqode/commands/init.py +826 -0
  54. superqode/commands/providers.py +819 -0
  55. superqode/commands/qe.py +1145 -0
  56. superqode/commands/roles.py +380 -0
  57. superqode/commands/serve.py +172 -0
  58. superqode/commands/suggestions.py +127 -0
  59. superqode/commands/superqe.py +460 -0
  60. superqode/config/__init__.py +51 -0
  61. superqode/config/loader.py +812 -0
  62. superqode/config/schema.py +498 -0
  63. superqode/core/__init__.py +111 -0
  64. superqode/core/roles.py +281 -0
  65. superqode/danger.py +386 -0
  66. superqode/data/superqode-template.yaml +1522 -0
  67. superqode/design_system.py +1080 -0
  68. superqode/dialogs/__init__.py +6 -0
  69. superqode/dialogs/base.py +39 -0
  70. superqode/dialogs/model.py +130 -0
  71. superqode/dialogs/provider.py +870 -0
  72. superqode/diff_view.py +919 -0
  73. superqode/enterprise.py +21 -0
  74. superqode/evaluation/__init__.py +25 -0
  75. superqode/evaluation/adapters.py +93 -0
  76. superqode/evaluation/behaviors.py +89 -0
  77. superqode/evaluation/engine.py +209 -0
  78. superqode/evaluation/scenarios.py +96 -0
  79. superqode/execution/__init__.py +36 -0
  80. superqode/execution/linter.py +538 -0
  81. superqode/execution/modes.py +347 -0
  82. superqode/execution/resolver.py +283 -0
  83. superqode/execution/runner.py +642 -0
  84. superqode/file_explorer.py +811 -0
  85. superqode/file_viewer.py +471 -0
  86. superqode/flash.py +183 -0
  87. superqode/guidance/__init__.py +58 -0
  88. superqode/guidance/config.py +203 -0
  89. superqode/guidance/prompts.py +71 -0
  90. superqode/harness/__init__.py +54 -0
  91. superqode/harness/accelerator.py +291 -0
  92. superqode/harness/config.py +319 -0
  93. superqode/harness/validator.py +147 -0
  94. superqode/history.py +279 -0
  95. superqode/integrations/superopt_runner.py +124 -0
  96. superqode/logging/__init__.py +49 -0
  97. superqode/logging/adapters.py +219 -0
  98. superqode/logging/formatter.py +923 -0
  99. superqode/logging/integration.py +341 -0
  100. superqode/logging/sinks.py +170 -0
  101. superqode/logging/unified_log.py +417 -0
  102. superqode/lsp/__init__.py +26 -0
  103. superqode/lsp/client.py +544 -0
  104. superqode/main.py +1069 -0
  105. superqode/mcp/__init__.py +89 -0
  106. superqode/mcp/auth_storage.py +380 -0
  107. superqode/mcp/client.py +1236 -0
  108. superqode/mcp/config.py +319 -0
  109. superqode/mcp/integration.py +337 -0
  110. superqode/mcp/oauth.py +436 -0
  111. superqode/mcp/oauth_callback.py +385 -0
  112. superqode/mcp/types.py +290 -0
  113. superqode/memory/__init__.py +31 -0
  114. superqode/memory/feedback.py +342 -0
  115. superqode/memory/store.py +522 -0
  116. superqode/notifications.py +369 -0
  117. superqode/optimization/__init__.py +5 -0
  118. superqode/optimization/config.py +33 -0
  119. superqode/permissions/__init__.py +25 -0
  120. superqode/permissions/rules.py +488 -0
  121. superqode/plan.py +323 -0
  122. superqode/providers/__init__.py +33 -0
  123. superqode/providers/gateway/__init__.py +165 -0
  124. superqode/providers/gateway/base.py +228 -0
  125. superqode/providers/gateway/litellm_gateway.py +1170 -0
  126. superqode/providers/gateway/openresponses_gateway.py +436 -0
  127. superqode/providers/health.py +297 -0
  128. superqode/providers/huggingface/__init__.py +74 -0
  129. superqode/providers/huggingface/downloader.py +472 -0
  130. superqode/providers/huggingface/endpoints.py +442 -0
  131. superqode/providers/huggingface/hub.py +531 -0
  132. superqode/providers/huggingface/inference.py +394 -0
  133. superqode/providers/huggingface/transformers_runner.py +516 -0
  134. superqode/providers/local/__init__.py +100 -0
  135. superqode/providers/local/base.py +438 -0
  136. superqode/providers/local/discovery.py +418 -0
  137. superqode/providers/local/lmstudio.py +256 -0
  138. superqode/providers/local/mlx.py +457 -0
  139. superqode/providers/local/ollama.py +486 -0
  140. superqode/providers/local/sglang.py +268 -0
  141. superqode/providers/local/tgi.py +260 -0
  142. superqode/providers/local/tool_support.py +477 -0
  143. superqode/providers/local/vllm.py +258 -0
  144. superqode/providers/manager.py +1338 -0
  145. superqode/providers/models.py +1016 -0
  146. superqode/providers/models_dev.py +578 -0
  147. superqode/providers/openresponses/__init__.py +87 -0
  148. superqode/providers/openresponses/converters/__init__.py +17 -0
  149. superqode/providers/openresponses/converters/messages.py +343 -0
  150. superqode/providers/openresponses/converters/tools.py +268 -0
  151. superqode/providers/openresponses/schema/__init__.py +56 -0
  152. superqode/providers/openresponses/schema/models.py +585 -0
  153. superqode/providers/openresponses/streaming/__init__.py +5 -0
  154. superqode/providers/openresponses/streaming/parser.py +338 -0
  155. superqode/providers/openresponses/tools/__init__.py +21 -0
  156. superqode/providers/openresponses/tools/apply_patch.py +352 -0
  157. superqode/providers/openresponses/tools/code_interpreter.py +290 -0
  158. superqode/providers/openresponses/tools/file_search.py +333 -0
  159. superqode/providers/openresponses/tools/mcp_adapter.py +252 -0
  160. superqode/providers/registry.py +716 -0
  161. superqode/providers/usage.py +332 -0
  162. superqode/pure_mode.py +384 -0
  163. superqode/qr/__init__.py +23 -0
  164. superqode/qr/dashboard.py +781 -0
  165. superqode/qr/generator.py +1018 -0
  166. superqode/qr/templates.py +135 -0
  167. superqode/safety/__init__.py +41 -0
  168. superqode/safety/sandbox.py +413 -0
  169. superqode/safety/warnings.py +256 -0
  170. superqode/server/__init__.py +33 -0
  171. superqode/server/lsp_server.py +775 -0
  172. superqode/server/web.py +250 -0
  173. superqode/session/__init__.py +25 -0
  174. superqode/session/persistence.py +580 -0
  175. superqode/session/sharing.py +477 -0
  176. superqode/session.py +475 -0
  177. superqode/sidebar.py +2991 -0
  178. superqode/stream_view.py +648 -0
  179. superqode/styles/__init__.py +3 -0
  180. superqode/superqe/__init__.py +184 -0
  181. superqode/superqe/acp_runner.py +1064 -0
  182. superqode/superqe/constitution/__init__.py +62 -0
  183. superqode/superqe/constitution/evaluator.py +308 -0
  184. superqode/superqe/constitution/loader.py +432 -0
  185. superqode/superqe/constitution/schema.py +250 -0
  186. superqode/superqe/events.py +591 -0
  187. superqode/superqe/frameworks/__init__.py +65 -0
  188. superqode/superqe/frameworks/base.py +234 -0
  189. superqode/superqe/frameworks/e2e.py +263 -0
  190. superqode/superqe/frameworks/executor.py +237 -0
  191. superqode/superqe/frameworks/javascript.py +409 -0
  192. superqode/superqe/frameworks/python.py +373 -0
  193. superqode/superqe/frameworks/registry.py +92 -0
  194. superqode/superqe/mcp_tools/__init__.py +47 -0
  195. superqode/superqe/mcp_tools/core_tools.py +418 -0
  196. superqode/superqe/mcp_tools/registry.py +230 -0
  197. superqode/superqe/mcp_tools/testing_tools.py +167 -0
  198. superqode/superqe/noise.py +89 -0
  199. superqode/superqe/orchestrator.py +778 -0
  200. superqode/superqe/roles.py +609 -0
  201. superqode/superqe/session.py +713 -0
  202. superqode/superqe/skills/__init__.py +57 -0
  203. superqode/superqe/skills/base.py +106 -0
  204. superqode/superqe/skills/core_skills.py +899 -0
  205. superqode/superqe/skills/registry.py +90 -0
  206. superqode/superqe/verifier.py +101 -0
  207. superqode/superqe_cli.py +76 -0
  208. superqode/tool_call.py +358 -0
  209. superqode/tools/__init__.py +93 -0
  210. superqode/tools/agent_tools.py +496 -0
  211. superqode/tools/base.py +324 -0
  212. superqode/tools/batch_tool.py +133 -0
  213. superqode/tools/diagnostics.py +311 -0
  214. superqode/tools/edit_tools.py +653 -0
  215. superqode/tools/enhanced_base.py +515 -0
  216. superqode/tools/file_tools.py +269 -0
  217. superqode/tools/file_tracking.py +45 -0
  218. superqode/tools/lsp_tools.py +610 -0
  219. superqode/tools/network_tools.py +350 -0
  220. superqode/tools/permissions.py +400 -0
  221. superqode/tools/question_tool.py +324 -0
  222. superqode/tools/search_tools.py +598 -0
  223. superqode/tools/shell_tools.py +259 -0
  224. superqode/tools/todo_tools.py +121 -0
  225. superqode/tools/validation.py +80 -0
  226. superqode/tools/web_tools.py +639 -0
  227. superqode/tui.py +1152 -0
  228. superqode/tui_integration.py +875 -0
  229. superqode/tui_widgets/__init__.py +27 -0
  230. superqode/tui_widgets/widgets/__init__.py +18 -0
  231. superqode/tui_widgets/widgets/progress.py +185 -0
  232. superqode/tui_widgets/widgets/tool_display.py +188 -0
  233. superqode/undo_manager.py +574 -0
  234. superqode/utils/__init__.py +5 -0
  235. superqode/utils/error_handling.py +323 -0
  236. superqode/utils/fuzzy.py +257 -0
  237. superqode/widgets/__init__.py +477 -0
  238. superqode/widgets/agent_collab.py +390 -0
  239. superqode/widgets/agent_store.py +936 -0
  240. superqode/widgets/agent_switcher.py +395 -0
  241. superqode/widgets/animation_manager.py +284 -0
  242. superqode/widgets/code_context.py +356 -0
  243. superqode/widgets/command_palette.py +412 -0
  244. superqode/widgets/connection_status.py +537 -0
  245. superqode/widgets/conversation_history.py +470 -0
  246. superqode/widgets/diff_indicator.py +155 -0
  247. superqode/widgets/enhanced_status_bar.py +385 -0
  248. superqode/widgets/enhanced_toast.py +476 -0
  249. superqode/widgets/file_browser.py +809 -0
  250. superqode/widgets/file_reference.py +585 -0
  251. superqode/widgets/issue_timeline.py +340 -0
  252. superqode/widgets/leader_key.py +264 -0
  253. superqode/widgets/mode_switcher.py +445 -0
  254. superqode/widgets/model_picker.py +234 -0
  255. superqode/widgets/permission_preview.py +1205 -0
  256. superqode/widgets/prompt.py +358 -0
  257. superqode/widgets/provider_connect.py +725 -0
  258. superqode/widgets/pty_shell.py +587 -0
  259. superqode/widgets/qe_dashboard.py +321 -0
  260. superqode/widgets/resizable_sidebar.py +377 -0
  261. superqode/widgets/response_changes.py +218 -0
  262. superqode/widgets/response_display.py +528 -0
  263. superqode/widgets/rich_tool_display.py +613 -0
  264. superqode/widgets/sidebar_panels.py +1180 -0
  265. superqode/widgets/slash_complete.py +356 -0
  266. superqode/widgets/split_view.py +612 -0
  267. superqode/widgets/status_bar.py +273 -0
  268. superqode/widgets/superqode_display.py +786 -0
  269. superqode/widgets/thinking_display.py +815 -0
  270. superqode/widgets/throbber.py +87 -0
  271. superqode/widgets/toast.py +206 -0
  272. superqode/widgets/unified_output.py +1073 -0
  273. superqode/workspace/__init__.py +75 -0
  274. superqode/workspace/artifacts.py +472 -0
  275. superqode/workspace/coordinator.py +353 -0
  276. superqode/workspace/diff_tracker.py +429 -0
  277. superqode/workspace/git_guard.py +373 -0
  278. superqode/workspace/git_snapshot.py +526 -0
  279. superqode/workspace/manager.py +750 -0
  280. superqode/workspace/snapshot.py +357 -0
  281. superqode/workspace/watcher.py +535 -0
  282. superqode/workspace/worktree.py +440 -0
  283. superqode-0.1.5.dist-info/METADATA +204 -0
  284. superqode-0.1.5.dist-info/RECORD +288 -0
  285. superqode-0.1.5.dist-info/WHEEL +5 -0
  286. superqode-0.1.5.dist-info/entry_points.txt +3 -0
  287. superqode-0.1.5.dist-info/licenses/LICENSE +648 -0
  288. superqode-0.1.5.dist-info/top_level.txt +1 -0
@@ -0,0 +1,59 @@
1
+ """ACP agents package for SuperQode."""
2
+
3
+ from typing import TYPE_CHECKING
4
+
5
+ from .discovery import AgentReadError, get_agent_by_identity, get_agent_by_short_name, read_agents
6
+ from .schema import Agent, AgentProtocol, AgentType, Command, OS, Tag
7
+ from .registry import (
8
+ AGENTS,
9
+ AgentDef,
10
+ AgentProtocol as AgentProtocolNew,
11
+ AgentStatus,
12
+ get_agent,
13
+ get_supported_agents,
14
+ get_acp_agents,
15
+ get_external_agents,
16
+ get_all_agent_ids,
17
+ is_agent_available,
18
+ )
19
+
20
+ if TYPE_CHECKING:
21
+ from .client import ACPAgentManager, SuperQodeACPClient
22
+
23
+
24
+ def __getattr__(name):
25
+ if name in ("ACPAgentManager", "SuperQodeACPClient"):
26
+ from .client import ACPAgentManager, SuperQodeACPClient
27
+
28
+ return locals()[name]
29
+ raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
30
+
31
+
32
+ __all__ = [
33
+ # Client
34
+ "ACPAgentManager",
35
+ "SuperQodeACPClient",
36
+ # Discovery
37
+ "AgentReadError",
38
+ "get_agent_by_identity",
39
+ "get_agent_by_short_name",
40
+ "read_agents",
41
+ # Schema (legacy)
42
+ "Agent",
43
+ "AgentProtocol",
44
+ "AgentType",
45
+ "Command",
46
+ "OS",
47
+ "Tag",
48
+ # New Registry
49
+ "AGENTS",
50
+ "AgentDef",
51
+ "AgentProtocolNew",
52
+ "AgentStatus",
53
+ "get_agent",
54
+ "get_supported_agents",
55
+ "get_acp_agents",
56
+ "get_external_agents",
57
+ "get_all_agent_ids",
58
+ "is_agent_available",
59
+ ]
@@ -0,0 +1,305 @@
1
+ """Curated list of 14 official ACP agents.
2
+
3
+ This registry contains metadata for all official ACP-compatible agents.
4
+ These are the agents that implement the Agent Client Protocol.
5
+ """
6
+
7
+ from typing import TypedDict, Literal
8
+
9
+ AgentStatus = Literal["available", "coming-soon", "deprecated"]
10
+
11
+
12
+ class AgentMetadata(TypedDict):
13
+ """Metadata for an ACP agent."""
14
+
15
+ identity: str
16
+ name: str
17
+ short_name: str
18
+ url: str
19
+ author_name: str
20
+ author_url: str
21
+ description: str
22
+ run_command: str
23
+ status: AgentStatus
24
+ installation_command: str
25
+ installation_instructions: str
26
+ requirements: list[str]
27
+
28
+
29
+ # 14 Official ACP Agents
30
+ ACP_AGENTS_REGISTRY: dict[str, AgentMetadata] = {
31
+ # =========================================================================
32
+ # 1. Gemini CLI - Google's Reference ACP Implementation
33
+ # =========================================================================
34
+ "geminicli.com": {
35
+ "identity": "geminicli.com",
36
+ "name": "Gemini CLI",
37
+ "short_name": "gemini",
38
+ "url": "https://github.com/google-gemini/gemini-cli",
39
+ "author_name": "Google",
40
+ "author_url": "https://google.com",
41
+ "description": "Google's reference ACP implementation. Query and edit large codebases, generate apps from images or PDFs.",
42
+ "run_command": "gemini --experimental-acp",
43
+ "status": "available",
44
+ "installation_command": "npm install -g @anthropic-ai/gemini-cli",
45
+ "installation_instructions": "Install Gemini CLI via npm. Set GEMINI_API_KEY or GOOGLE_API_KEY.",
46
+ "requirements": ["node", "npm", "GEMINI_API_KEY or GOOGLE_API_KEY"],
47
+ },
48
+ # =========================================================================
49
+ # 2. Claude Code - Anthropic's Claude via Zed SDK Adapter
50
+ # =========================================================================
51
+ "claude.com": {
52
+ "identity": "claude.com",
53
+ "name": "Claude Code",
54
+ "short_name": "claude",
55
+ "url": "https://claude.ai/code",
56
+ "author_name": "Anthropic",
57
+ "author_url": "https://www.anthropic.com/",
58
+ "description": "Anthropic's official CLI coding agent. Unleash Claude's raw power directly in your terminal.",
59
+ "run_command": "claude --acp",
60
+ "status": "available",
61
+ "installation_command": "npm install -g @anthropic-ai/claude-code",
62
+ "installation_instructions": "Install Claude Code CLI. Requires ANTHROPIC_API_KEY.",
63
+ "requirements": ["node", "npm", "ANTHROPIC_API_KEY"],
64
+ },
65
+ # =========================================================================
66
+ # 3. Codex - OpenAI's Code Generation Agent
67
+ # =========================================================================
68
+ "codex.openai.com": {
69
+ "identity": "codex.openai.com",
70
+ "name": "Codex",
71
+ "short_name": "codex",
72
+ "url": "https://github.com/openai/codex",
73
+ "author_name": "OpenAI",
74
+ "author_url": "https://openai.com",
75
+ "description": "OpenAI's code generation agent with streaming terminal output and ACP adapter.",
76
+ "run_command": "codex --acp",
77
+ "status": "available",
78
+ "installation_command": "npm install -g @openai/codex",
79
+ "installation_instructions": "Install Codex via npm. Requires OPENAI_API_KEY.",
80
+ "requirements": ["node", "npm", "OPENAI_API_KEY"],
81
+ },
82
+ # =========================================================================
83
+ # 4. JetBrains Junie - JetBrains AI Agent
84
+ # =========================================================================
85
+ "junie.jetbrains.com": {
86
+ "identity": "junie.jetbrains.com",
87
+ "name": "JetBrains Junie",
88
+ "short_name": "junie",
89
+ "url": "https://www.jetbrains.com/junie/",
90
+ "author_name": "JetBrains",
91
+ "author_url": "https://www.jetbrains.com/",
92
+ "description": "JetBrains' AI agent with ACP support across their entire IDE ecosystem.",
93
+ "run_command": "junie --acp",
94
+ "status": "available",
95
+ "installation_command": "npm install -g @jetbrains/junie",
96
+ "installation_instructions": "Install Junie via npm. Works with JetBrains account.",
97
+ "requirements": ["node", "npm", "JetBrains account (optional)"],
98
+ },
99
+ # =========================================================================
100
+ # 5. Goose - Square's Open-Source Agent
101
+ # =========================================================================
102
+ "goose.block.xyz": {
103
+ "identity": "goose.block.xyz",
104
+ "name": "Goose",
105
+ "short_name": "goose",
106
+ "url": "https://github.com/block/goose",
107
+ "author_name": "Block",
108
+ "author_url": "https://block.xyz/",
109
+ "description": "Block's developer agent that automates engineering tasks. Extensible with MCP.",
110
+ "run_command": "goose mcp",
111
+ "status": "available",
112
+ "installation_command": "pipx install goose-ai",
113
+ "installation_instructions": "Install Goose via pipx. Configure providers via goose configure.",
114
+ "requirements": ["python3.10+", "pipx"],
115
+ },
116
+ # =========================================================================
117
+ # 6. Kimi CLI - Moonshot AI's Agent
118
+ # =========================================================================
119
+ "kimi.moonshot.cn": {
120
+ "identity": "kimi.moonshot.cn",
121
+ "name": "Kimi CLI",
122
+ "short_name": "kimi",
123
+ "url": "https://github.com/anthropics/kimi-cli",
124
+ "author_name": "Moonshot AI",
125
+ "author_url": "https://moonshot.cn/",
126
+ "description": "CLI AI agent implementing ACP with support for various development workflows.",
127
+ "run_command": "kimi --acp",
128
+ "status": "available",
129
+ "installation_command": "npm install -g kimi-cli",
130
+ "installation_instructions": "Install Kimi CLI via npm. Set MOONSHOT_API_KEY.",
131
+ "requirements": ["node", "npm", "MOONSHOT_API_KEY"],
132
+ },
133
+ # =========================================================================
134
+ # 7. OpenCode - Open-Source Coding Agent
135
+ # =========================================================================
136
+ "opencode.ai": {
137
+ "identity": "opencode.ai",
138
+ "name": "OpenCode",
139
+ "short_name": "opencode",
140
+ "url": "https://opencode.ai/",
141
+ "author_name": "SST",
142
+ "author_url": "https://sst.dev/",
143
+ "description": "Open-source AI coding agent built for the terminal with native ACP support.",
144
+ "run_command": "opencode acp",
145
+ "status": "available",
146
+ "installation_command": "npm install -g opencode-ai",
147
+ "installation_instructions": "Install OpenCode via npm. Supports 75+ LLM providers.",
148
+ "requirements": ["node", "npm"],
149
+ },
150
+ # =========================================================================
151
+ # 8. Stakpak - ACP-Compatible Code Assistance
152
+ # =========================================================================
153
+ "stakpak.dev": {
154
+ "identity": "stakpak.dev",
155
+ "name": "Stakpak",
156
+ "short_name": "stakpak",
157
+ "url": "https://github.com/stakpak/stakpak",
158
+ "author_name": "Stakpak",
159
+ "author_url": "https://stakpak.dev",
160
+ "description": "An ACP-compatible agent focused on comprehensive code assistance and collaboration.",
161
+ "run_command": "stakpak --acp",
162
+ "status": "available",
163
+ "installation_command": "pip install stakpak",
164
+ "installation_instructions": "Install Stakpak via pip.",
165
+ "requirements": ["python3", "pip"],
166
+ },
167
+ # =========================================================================
168
+ # 9. VT Code - Versatile Coding Agent
169
+ # =========================================================================
170
+ "vtcode.dev": {
171
+ "identity": "vtcode.dev",
172
+ "name": "VT Code",
173
+ "short_name": "vtcode",
174
+ "url": "https://github.com/anthropics/vtcode",
175
+ "author_name": "VT Code",
176
+ "author_url": "https://vtcode.dev",
177
+ "description": "A versatile coding agent implementing ACP for seamless development environment integration.",
178
+ "run_command": "vtcode --acp",
179
+ "status": "available",
180
+ "installation_command": "npm install -g vtcode",
181
+ "installation_instructions": "Install VT Code via npm.",
182
+ "requirements": ["node", "npm"],
183
+ },
184
+ # =========================================================================
185
+ # 10. Augment Code (Auggie) - Agentic Code Capabilities
186
+ # =========================================================================
187
+ "augmentcode.com": {
188
+ "identity": "augmentcode.com",
189
+ "name": "Augment Code",
190
+ "short_name": "auggie",
191
+ "url": "https://augmentcode.com/",
192
+ "author_name": "Augment",
193
+ "author_url": "https://augmentcode.com/",
194
+ "description": "AI-powered coding agent with deep codebase understanding and ACP support.",
195
+ "run_command": "auggie --acp",
196
+ "status": "available",
197
+ "installation_command": "npm install -g @anthropic-ai/auggie",
198
+ "installation_instructions": "Install Auggie via npm. Sign up at augmentcode.com.",
199
+ "requirements": ["node", "npm", "Augment account"],
200
+ },
201
+ # =========================================================================
202
+ # 11. Code Assistant - AI Coding Assistant in Rust
203
+ # =========================================================================
204
+ "codeassistant.dev": {
205
+ "identity": "codeassistant.dev",
206
+ "name": "Code Assistant",
207
+ "short_name": "code-assistant",
208
+ "url": "https://github.com/anthropics/code-assistant",
209
+ "author_name": "Code Assistant",
210
+ "author_url": "https://codeassistant.dev",
211
+ "description": "An AI coding assistant built in Rust for autonomous code analysis and modification.",
212
+ "run_command": "code-assistant --acp",
213
+ "status": "available",
214
+ "installation_command": "cargo install code-assistant",
215
+ "installation_instructions": "Install Code Assistant via Cargo.",
216
+ "requirements": ["rust", "cargo"],
217
+ },
218
+ # =========================================================================
219
+ # 12. cagent - Multi-Agent Runtime
220
+ # =========================================================================
221
+ "cagent.dev": {
222
+ "identity": "cagent.dev",
223
+ "name": "cagent",
224
+ "short_name": "cagent",
225
+ "url": "https://github.com/anthropics/cagent",
226
+ "author_name": "cagent",
227
+ "author_url": "https://cagent.dev",
228
+ "description": "A powerful, customizable multi-agent runtime that orchestrates AI agents.",
229
+ "run_command": "cagent --acp",
230
+ "status": "available",
231
+ "installation_command": "pip install cagent",
232
+ "installation_instructions": "Install cagent via pip.",
233
+ "requirements": ["python3", "pip"],
234
+ },
235
+ # =========================================================================
236
+ # 13. fast-agent - Sophisticated Agent Workflows
237
+ # =========================================================================
238
+ "fastagent.ai": {
239
+ "identity": "fastagent.ai",
240
+ "name": "fast-agent",
241
+ "short_name": "fast-agent",
242
+ "url": "https://github.com/evalstate/fast-agent",
243
+ "author_name": "fast-agent",
244
+ "author_url": "https://github.com/evalstate",
245
+ "description": "Create and interact with sophisticated Agents and Workflows in minutes. MCP native.",
246
+ "run_command": "fast-agent --acp",
247
+ "status": "available",
248
+ "installation_command": "uv tool install fast-agent-mcp",
249
+ "installation_instructions": "Install fast-agent via uv. Native MCP support.",
250
+ "requirements": ["python3.10+", "uv"],
251
+ },
252
+ # =========================================================================
253
+ # 14. LLMling-Agent - LLM-Powered Agent Framework
254
+ # =========================================================================
255
+ "llmlingagent.dev": {
256
+ "identity": "llmlingagent.dev",
257
+ "name": "LLMling-Agent",
258
+ "short_name": "llmling-agent",
259
+ "url": "https://github.com/phil65/llmling-agent",
260
+ "author_name": "LLMling",
261
+ "author_url": "https://github.com/phil65",
262
+ "description": "A framework for creating and managing LLM-powered agents with structured interactions.",
263
+ "run_command": "llmling-agent --acp",
264
+ "status": "available",
265
+ "installation_command": "pip install llmling-agent",
266
+ "installation_instructions": "Install LLMling-Agent via pip.",
267
+ "requirements": ["python3", "pip"],
268
+ },
269
+ }
270
+
271
+
272
+ def get_all_registry_agents() -> dict[str, AgentMetadata]:
273
+ """Get all agents from the registry.
274
+
275
+ Returns:
276
+ Dictionary mapping agent identity to metadata.
277
+ """
278
+ return ACP_AGENTS_REGISTRY.copy()
279
+
280
+
281
+ def get_registry_agent(identity: str) -> AgentMetadata | None:
282
+ """Get a specific agent from the registry.
283
+
284
+ Args:
285
+ identity: Agent identity to look up.
286
+
287
+ Returns:
288
+ Agent metadata if found, None otherwise.
289
+ """
290
+ return ACP_AGENTS_REGISTRY.get(identity)
291
+
292
+
293
+ def get_registry_agent_by_short_name(short_name: str) -> AgentMetadata | None:
294
+ """Get a registry agent by short name.
295
+
296
+ Args:
297
+ short_name: Agent short name to look up.
298
+
299
+ Returns:
300
+ Agent metadata if found, None otherwise.
301
+ """
302
+ for agent in ACP_AGENTS_REGISTRY.values():
303
+ if agent["short_name"].lower() == short_name.lower():
304
+ return agent
305
+ return None
@@ -0,0 +1,249 @@
1
+ """ACP client implementation for SuperQode."""
2
+
3
+ import asyncio
4
+ import logging
5
+ import os
6
+ import sys
7
+ import pathlib
8
+ from pathlib import Path
9
+ from typing import Any
10
+
11
+ # Ensure CWD exists before importing acp (which imports logfire that resolves CWD)
12
+ # This prevents FileNotFoundError when CWD doesn't exist
13
+ try:
14
+ cwd = os.getcwd()
15
+ if not pathlib.Path(cwd).exists():
16
+ # Change to home directory if CWD doesn't exist
17
+ os.chdir(os.path.expanduser("~"))
18
+ except (OSError, FileNotFoundError):
19
+ # If getcwd() fails, change to home directory
20
+ try:
21
+ os.chdir(os.path.expanduser("~"))
22
+ except Exception:
23
+ pass # Last resort - let it fail naturally
24
+
25
+ # Now safe to import acp
26
+ from acp import (
27
+ PROTOCOL_VERSION,
28
+ Client,
29
+ RequestError,
30
+ connect_to_agent,
31
+ text_block,
32
+ )
33
+ from acp.core import ClientSideConnection
34
+ from acp.schema import (
35
+ AgentMessageChunk,
36
+ AgentPlanUpdate,
37
+ AgentThoughtChunk,
38
+ AudioContentBlock,
39
+ AvailableCommandsUpdate,
40
+ ClientCapabilities,
41
+ CreateTerminalResponse,
42
+ CurrentModeUpdate,
43
+ EmbeddedResourceContentBlock,
44
+ EnvVariable,
45
+ ImageContentBlock,
46
+ Implementation,
47
+ KillTerminalCommandResponse,
48
+ PermissionOption,
49
+ ReadTextFileResponse,
50
+ ReleaseTerminalResponse,
51
+ RequestPermissionResponse,
52
+ ResourceContentBlock,
53
+ TerminalOutputResponse,
54
+ ToolCall,
55
+ ToolCallProgress,
56
+ ToolCallStart,
57
+ UserMessageChunk,
58
+ WaitForTerminalExitResponse,
59
+ WriteTextFileResponse,
60
+ )
61
+
62
+
63
+ class SuperQodeACPClient(Client):
64
+ """ACP client implementation for SuperQode."""
65
+
66
+ def __init__(self):
67
+ self.message_queue: asyncio.Queue = asyncio.Queue()
68
+ self.current_session_id: str | None = None
69
+
70
+ async def request_permission(
71
+ self, options: list[PermissionOption], session_id: str, tool_call: ToolCall, **kwargs: Any
72
+ ) -> RequestPermissionResponse:
73
+ """Handle permission requests from agent."""
74
+ # For now, auto-approve all permissions
75
+ # In the future, this could show a UI for user approval
76
+ return RequestPermissionResponse(
77
+ permission="approved", message="Auto-approved by SuperQode"
78
+ )
79
+
80
+ async def write_text_file(
81
+ self, content: str, path: str, session_id: str, **kwargs: Any
82
+ ) -> WriteTextFileResponse:
83
+ """Handle file write requests."""
84
+ try:
85
+ Path(path).parent.mkdir(parents=True, exist_ok=True)
86
+ with open(path, "w", encoding="utf-8") as f:
87
+ f.write(content)
88
+ return WriteTextFileResponse(success=True)
89
+ except Exception as e:
90
+ return WriteTextFileResponse(success=False, message=str(e))
91
+
92
+ async def read_text_file(
93
+ self,
94
+ path: str,
95
+ session_id: str,
96
+ limit: int | None = None,
97
+ line: int | None = None,
98
+ **kwargs: Any,
99
+ ) -> ReadTextFileResponse:
100
+ """Handle file read requests."""
101
+ try:
102
+ with open(path, "r", encoding="utf-8") as f:
103
+ content = f.read()
104
+ return ReadTextFileResponse(success=True, content=content)
105
+ except Exception as e:
106
+ return ReadTextFileResponse(success=False, message=str(e))
107
+
108
+ async def create_terminal(
109
+ self,
110
+ command: str,
111
+ session_id: str,
112
+ args: list[str] | None = None,
113
+ cwd: str | None = None,
114
+ env: list[EnvVariable] | None = None,
115
+ output_byte_limit: int | None = None,
116
+ **kwargs: Any,
117
+ ) -> CreateTerminalResponse:
118
+ """Handle terminal creation requests."""
119
+ raise RequestError.method_not_found("terminal/create")
120
+
121
+ async def kill_terminal(
122
+ self, session_id: str, signal: int | None = None, **kwargs: Any
123
+ ) -> KillTerminalCommandResponse:
124
+ """Handle terminal kill requests."""
125
+ raise RequestError.method_not_found("terminal/kill")
126
+
127
+ async def release_terminal(self, session_id: str, **kwargs: Any) -> ReleaseTerminalResponse:
128
+ """Handle terminal release requests."""
129
+ raise RequestError.method_not_found("terminal/release")
130
+
131
+ async def wait_for_terminal_exit(
132
+ self, session_id: str, **kwargs: Any
133
+ ) -> WaitForTerminalExitResponse:
134
+ """Handle terminal wait requests."""
135
+ raise RequestError.method_not_found("terminal/wait")
136
+
137
+ async def on_connect(self, conn: Any) -> None:
138
+ """Handle agent connection."""
139
+ logging.info(f"Connected to agent: {conn}")
140
+ self.current_session_id = getattr(conn, "session_id", None)
141
+
142
+ async def on_disconnect(self, conn: Any) -> None:
143
+ """Handle agent disconnection."""
144
+ logging.info(f"Disconnected from agent: {conn}")
145
+ self.current_session_id = None
146
+
147
+
148
+ class ACPAgentManager:
149
+ """Manages ACP agent connections."""
150
+
151
+ def __init__(self):
152
+ self.client: SuperQodeACPClient | None = None
153
+ self.connection: ClientSideConnection | None = None
154
+ self._response_queue: asyncio.Queue = asyncio.Queue()
155
+
156
+ async def connect_to_agent(self, command: str, cwd: str | None = None) -> bool:
157
+ """Connect to an ACP agent.
158
+
159
+ Args:
160
+ command: The command to run the agent
161
+ cwd: Working directory for the connection
162
+
163
+ Returns:
164
+ True if connection successful, False otherwise
165
+ """
166
+ try:
167
+ # Parse command
168
+ import shlex
169
+
170
+ cmd_parts = shlex.split(command)
171
+ program = cmd_parts[0]
172
+ args = cmd_parts[1:] if len(cmd_parts) > 1 else []
173
+
174
+ # Check if the program exists
175
+ program_path = Path(program)
176
+ if program_path.exists():
177
+ # If it's a Python script, run it with python
178
+ if program_path.suffix == ".py":
179
+ program = sys.executable
180
+ args = [str(program_path)] + args
181
+ else:
182
+ program = program
183
+ args = args
184
+
185
+ # Create subprocess
186
+ proc = await asyncio.create_subprocess_exec(
187
+ program,
188
+ *args,
189
+ stdin=asyncio.subprocess.PIPE,
190
+ stdout=asyncio.subprocess.PIPE,
191
+ cwd=cwd or os.getcwd(),
192
+ )
193
+
194
+ if proc.stdin is None or proc.stdout is None:
195
+ logging.error("Agent process does not expose stdio pipes")
196
+ return False
197
+
198
+ # Connect to the agent
199
+ self.connection = connect_to_agent(self.client, proc.stdin, proc.stdout)
200
+
201
+ # Initialize the connection
202
+ await self.connection.initialize(
203
+ protocol_version=PROTOCOL_VERSION,
204
+ client_capabilities=ClientCapabilities(),
205
+ client_info=Implementation(
206
+ name="SuperQode", title="SuperQode ACP Client", version="0.1.0"
207
+ ),
208
+ )
209
+
210
+ return True
211
+
212
+ except Exception as e:
213
+ logging.error(f"Failed to connect to agent: {e}")
214
+ return False
215
+
216
+ async def disconnect(self) -> None:
217
+ """Disconnect from the current agent."""
218
+ if self.connection:
219
+ await self.connection.close()
220
+ self.connection = None
221
+ if self.client:
222
+ del self.client
223
+ self.client = None
224
+
225
+ async def send_message(self, message: str) -> None:
226
+ """Send a message to the agent."""
227
+ if not self.connection:
228
+ raise RuntimeError("Not connected to an agent")
229
+
230
+ # Create text block
231
+ text_content = text_block(text=message)
232
+ chunk = UserMessageChunk(role="user", content=[text_content])
233
+
234
+ await self.connection.send(chunk)
235
+
236
+ async def receive_messages(self) -> list:
237
+ """Receive all pending messages from the agent."""
238
+ messages = []
239
+ while not self.client.message_queue.empty():
240
+ try:
241
+ msg = self.client.message_queue.get_nowait()
242
+ messages.append(msg)
243
+ except asyncio.QueueEmpty:
244
+ break
245
+ return messages
246
+
247
+ async def is_connected(self) -> bool:
248
+ """Check if currently connected to an agent."""
249
+ return self.connection is not None
@@ -0,0 +1,51 @@
1
+ # Schema defined in agent_schema.py
2
+ # https://github.com/augmentcode/auggie
3
+ identity = "augmentcode.com"
4
+ name = "Auggie (Augment Code)"
5
+ short_name = "auggie"
6
+ url = "https://www.augmentcode.com/product/CLI"
7
+ protocol = "acp"
8
+ author_name = "Augment Code"
9
+ author_url = "https://www.augmentcode.com/"
10
+ publisher_name = "SuperQode Team"
11
+ publisher_url = "https://github.com/your-org/superqode"
12
+ type = "coding"
13
+ description = "An AI agent that brings Augment Code's power to the terminal with ACP support for Zed, Neovim, and Emacs."
14
+ tags = ["augment", "code-analysis", "multi-editor"]
15
+ run_command."*" = "auggie --acp"
16
+
17
+ help = '''
18
+ # Auggie (Augment Code)
19
+
20
+ *The agentic CLI that goes where your code does*
21
+
22
+ ## Features
23
+
24
+ - **Agent Client Protocol (ACP) Support**: Use Auggie in Zed, Neovim, Emacs, and other ACP-compatible editors
25
+ - **Autonomous Code Analysis**: Intelligently explore codebases and build working memory
26
+ - **Multi-Editor Integration**: Seamlessly integrates with your favorite development environment
27
+
28
+ ## Installation
29
+
30
+ Install Auggie CLI (requires Node 22+):
31
+ ```bash
32
+ npm install -g @augmentcode/auggie
33
+ ```
34
+
35
+ After installation, login to your Augment Code account:
36
+ ```bash
37
+ auggie login
38
+ ```
39
+
40
+ ---
41
+
42
+ **Documentation**: https://docs.augmentcode.com/cli/setup-auggie/install-auggie-cli
43
+ '''
44
+
45
+ [actions."*".install]
46
+ command = "npm install -g @augmentcode/auggie"
47
+ description = "Install Auggie CLI (requires Node 22+)"
48
+
49
+ [actions."*".login]
50
+ command = "auggie login"
51
+ description = "Login to Auggie (run after installation)"