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.
- superqode/__init__.py +33 -0
- superqode/acp/__init__.py +23 -0
- superqode/acp/client.py +913 -0
- superqode/acp/permission_screen.py +457 -0
- superqode/acp/types.py +480 -0
- superqode/acp_discovery.py +856 -0
- superqode/agent/__init__.py +22 -0
- superqode/agent/edit_strategies.py +334 -0
- superqode/agent/loop.py +892 -0
- superqode/agent/qe_report_templates.py +39 -0
- superqode/agent/system_prompts.py +353 -0
- superqode/agent_output.py +721 -0
- superqode/agent_stream.py +953 -0
- superqode/agents/__init__.py +59 -0
- superqode/agents/acp_registry.py +305 -0
- superqode/agents/client.py +249 -0
- superqode/agents/data/augmentcode.com.toml +51 -0
- superqode/agents/data/cagent.dev.toml +51 -0
- superqode/agents/data/claude.com.toml +60 -0
- superqode/agents/data/codeassistant.dev.toml +51 -0
- superqode/agents/data/codex.openai.com.toml +57 -0
- superqode/agents/data/fastagent.ai.toml +66 -0
- superqode/agents/data/geminicli.com.toml +77 -0
- superqode/agents/data/goose.block.xyz.toml +54 -0
- superqode/agents/data/junie.jetbrains.com.toml +56 -0
- superqode/agents/data/kimi.moonshot.cn.toml +57 -0
- superqode/agents/data/llmlingagent.dev.toml +51 -0
- superqode/agents/data/molt.bot.toml +49 -0
- superqode/agents/data/opencode.ai.toml +60 -0
- superqode/agents/data/stakpak.dev.toml +51 -0
- superqode/agents/data/vtcode.dev.toml +51 -0
- superqode/agents/discovery.py +266 -0
- superqode/agents/messaging.py +160 -0
- superqode/agents/persona.py +166 -0
- superqode/agents/registry.py +421 -0
- superqode/agents/schema.py +72 -0
- superqode/agents/unified.py +367 -0
- superqode/app/__init__.py +111 -0
- superqode/app/constants.py +314 -0
- superqode/app/css.py +366 -0
- superqode/app/models.py +118 -0
- superqode/app/suggester.py +125 -0
- superqode/app/widgets.py +1591 -0
- superqode/app_enhanced.py +399 -0
- superqode/app_main.py +17187 -0
- superqode/approval.py +312 -0
- superqode/atomic.py +296 -0
- superqode/commands/__init__.py +1 -0
- superqode/commands/acp.py +965 -0
- superqode/commands/agents.py +180 -0
- superqode/commands/auth.py +278 -0
- superqode/commands/config.py +374 -0
- superqode/commands/init.py +826 -0
- superqode/commands/providers.py +819 -0
- superqode/commands/qe.py +1145 -0
- superqode/commands/roles.py +380 -0
- superqode/commands/serve.py +172 -0
- superqode/commands/suggestions.py +127 -0
- superqode/commands/superqe.py +460 -0
- superqode/config/__init__.py +51 -0
- superqode/config/loader.py +812 -0
- superqode/config/schema.py +498 -0
- superqode/core/__init__.py +111 -0
- superqode/core/roles.py +281 -0
- superqode/danger.py +386 -0
- superqode/data/superqode-template.yaml +1522 -0
- superqode/design_system.py +1080 -0
- superqode/dialogs/__init__.py +6 -0
- superqode/dialogs/base.py +39 -0
- superqode/dialogs/model.py +130 -0
- superqode/dialogs/provider.py +870 -0
- superqode/diff_view.py +919 -0
- superqode/enterprise.py +21 -0
- superqode/evaluation/__init__.py +25 -0
- superqode/evaluation/adapters.py +93 -0
- superqode/evaluation/behaviors.py +89 -0
- superqode/evaluation/engine.py +209 -0
- superqode/evaluation/scenarios.py +96 -0
- superqode/execution/__init__.py +36 -0
- superqode/execution/linter.py +538 -0
- superqode/execution/modes.py +347 -0
- superqode/execution/resolver.py +283 -0
- superqode/execution/runner.py +642 -0
- superqode/file_explorer.py +811 -0
- superqode/file_viewer.py +471 -0
- superqode/flash.py +183 -0
- superqode/guidance/__init__.py +58 -0
- superqode/guidance/config.py +203 -0
- superqode/guidance/prompts.py +71 -0
- superqode/harness/__init__.py +54 -0
- superqode/harness/accelerator.py +291 -0
- superqode/harness/config.py +319 -0
- superqode/harness/validator.py +147 -0
- superqode/history.py +279 -0
- superqode/integrations/superopt_runner.py +124 -0
- superqode/logging/__init__.py +49 -0
- superqode/logging/adapters.py +219 -0
- superqode/logging/formatter.py +923 -0
- superqode/logging/integration.py +341 -0
- superqode/logging/sinks.py +170 -0
- superqode/logging/unified_log.py +417 -0
- superqode/lsp/__init__.py +26 -0
- superqode/lsp/client.py +544 -0
- superqode/main.py +1069 -0
- superqode/mcp/__init__.py +89 -0
- superqode/mcp/auth_storage.py +380 -0
- superqode/mcp/client.py +1236 -0
- superqode/mcp/config.py +319 -0
- superqode/mcp/integration.py +337 -0
- superqode/mcp/oauth.py +436 -0
- superqode/mcp/oauth_callback.py +385 -0
- superqode/mcp/types.py +290 -0
- superqode/memory/__init__.py +31 -0
- superqode/memory/feedback.py +342 -0
- superqode/memory/store.py +522 -0
- superqode/notifications.py +369 -0
- superqode/optimization/__init__.py +5 -0
- superqode/optimization/config.py +33 -0
- superqode/permissions/__init__.py +25 -0
- superqode/permissions/rules.py +488 -0
- superqode/plan.py +323 -0
- superqode/providers/__init__.py +33 -0
- superqode/providers/gateway/__init__.py +165 -0
- superqode/providers/gateway/base.py +228 -0
- superqode/providers/gateway/litellm_gateway.py +1170 -0
- superqode/providers/gateway/openresponses_gateway.py +436 -0
- superqode/providers/health.py +297 -0
- superqode/providers/huggingface/__init__.py +74 -0
- superqode/providers/huggingface/downloader.py +472 -0
- superqode/providers/huggingface/endpoints.py +442 -0
- superqode/providers/huggingface/hub.py +531 -0
- superqode/providers/huggingface/inference.py +394 -0
- superqode/providers/huggingface/transformers_runner.py +516 -0
- superqode/providers/local/__init__.py +100 -0
- superqode/providers/local/base.py +438 -0
- superqode/providers/local/discovery.py +418 -0
- superqode/providers/local/lmstudio.py +256 -0
- superqode/providers/local/mlx.py +457 -0
- superqode/providers/local/ollama.py +486 -0
- superqode/providers/local/sglang.py +268 -0
- superqode/providers/local/tgi.py +260 -0
- superqode/providers/local/tool_support.py +477 -0
- superqode/providers/local/vllm.py +258 -0
- superqode/providers/manager.py +1338 -0
- superqode/providers/models.py +1016 -0
- superqode/providers/models_dev.py +578 -0
- superqode/providers/openresponses/__init__.py +87 -0
- superqode/providers/openresponses/converters/__init__.py +17 -0
- superqode/providers/openresponses/converters/messages.py +343 -0
- superqode/providers/openresponses/converters/tools.py +268 -0
- superqode/providers/openresponses/schema/__init__.py +56 -0
- superqode/providers/openresponses/schema/models.py +585 -0
- superqode/providers/openresponses/streaming/__init__.py +5 -0
- superqode/providers/openresponses/streaming/parser.py +338 -0
- superqode/providers/openresponses/tools/__init__.py +21 -0
- superqode/providers/openresponses/tools/apply_patch.py +352 -0
- superqode/providers/openresponses/tools/code_interpreter.py +290 -0
- superqode/providers/openresponses/tools/file_search.py +333 -0
- superqode/providers/openresponses/tools/mcp_adapter.py +252 -0
- superqode/providers/registry.py +716 -0
- superqode/providers/usage.py +332 -0
- superqode/pure_mode.py +384 -0
- superqode/qr/__init__.py +23 -0
- superqode/qr/dashboard.py +781 -0
- superqode/qr/generator.py +1018 -0
- superqode/qr/templates.py +135 -0
- superqode/safety/__init__.py +41 -0
- superqode/safety/sandbox.py +413 -0
- superqode/safety/warnings.py +256 -0
- superqode/server/__init__.py +33 -0
- superqode/server/lsp_server.py +775 -0
- superqode/server/web.py +250 -0
- superqode/session/__init__.py +25 -0
- superqode/session/persistence.py +580 -0
- superqode/session/sharing.py +477 -0
- superqode/session.py +475 -0
- superqode/sidebar.py +2991 -0
- superqode/stream_view.py +648 -0
- superqode/styles/__init__.py +3 -0
- superqode/superqe/__init__.py +184 -0
- superqode/superqe/acp_runner.py +1064 -0
- superqode/superqe/constitution/__init__.py +62 -0
- superqode/superqe/constitution/evaluator.py +308 -0
- superqode/superqe/constitution/loader.py +432 -0
- superqode/superqe/constitution/schema.py +250 -0
- superqode/superqe/events.py +591 -0
- superqode/superqe/frameworks/__init__.py +65 -0
- superqode/superqe/frameworks/base.py +234 -0
- superqode/superqe/frameworks/e2e.py +263 -0
- superqode/superqe/frameworks/executor.py +237 -0
- superqode/superqe/frameworks/javascript.py +409 -0
- superqode/superqe/frameworks/python.py +373 -0
- superqode/superqe/frameworks/registry.py +92 -0
- superqode/superqe/mcp_tools/__init__.py +47 -0
- superqode/superqe/mcp_tools/core_tools.py +418 -0
- superqode/superqe/mcp_tools/registry.py +230 -0
- superqode/superqe/mcp_tools/testing_tools.py +167 -0
- superqode/superqe/noise.py +89 -0
- superqode/superqe/orchestrator.py +778 -0
- superqode/superqe/roles.py +609 -0
- superqode/superqe/session.py +713 -0
- superqode/superqe/skills/__init__.py +57 -0
- superqode/superqe/skills/base.py +106 -0
- superqode/superqe/skills/core_skills.py +899 -0
- superqode/superqe/skills/registry.py +90 -0
- superqode/superqe/verifier.py +101 -0
- superqode/superqe_cli.py +76 -0
- superqode/tool_call.py +358 -0
- superqode/tools/__init__.py +93 -0
- superqode/tools/agent_tools.py +496 -0
- superqode/tools/base.py +324 -0
- superqode/tools/batch_tool.py +133 -0
- superqode/tools/diagnostics.py +311 -0
- superqode/tools/edit_tools.py +653 -0
- superqode/tools/enhanced_base.py +515 -0
- superqode/tools/file_tools.py +269 -0
- superqode/tools/file_tracking.py +45 -0
- superqode/tools/lsp_tools.py +610 -0
- superqode/tools/network_tools.py +350 -0
- superqode/tools/permissions.py +400 -0
- superqode/tools/question_tool.py +324 -0
- superqode/tools/search_tools.py +598 -0
- superqode/tools/shell_tools.py +259 -0
- superqode/tools/todo_tools.py +121 -0
- superqode/tools/validation.py +80 -0
- superqode/tools/web_tools.py +639 -0
- superqode/tui.py +1152 -0
- superqode/tui_integration.py +875 -0
- superqode/tui_widgets/__init__.py +27 -0
- superqode/tui_widgets/widgets/__init__.py +18 -0
- superqode/tui_widgets/widgets/progress.py +185 -0
- superqode/tui_widgets/widgets/tool_display.py +188 -0
- superqode/undo_manager.py +574 -0
- superqode/utils/__init__.py +5 -0
- superqode/utils/error_handling.py +323 -0
- superqode/utils/fuzzy.py +257 -0
- superqode/widgets/__init__.py +477 -0
- superqode/widgets/agent_collab.py +390 -0
- superqode/widgets/agent_store.py +936 -0
- superqode/widgets/agent_switcher.py +395 -0
- superqode/widgets/animation_manager.py +284 -0
- superqode/widgets/code_context.py +356 -0
- superqode/widgets/command_palette.py +412 -0
- superqode/widgets/connection_status.py +537 -0
- superqode/widgets/conversation_history.py +470 -0
- superqode/widgets/diff_indicator.py +155 -0
- superqode/widgets/enhanced_status_bar.py +385 -0
- superqode/widgets/enhanced_toast.py +476 -0
- superqode/widgets/file_browser.py +809 -0
- superqode/widgets/file_reference.py +585 -0
- superqode/widgets/issue_timeline.py +340 -0
- superqode/widgets/leader_key.py +264 -0
- superqode/widgets/mode_switcher.py +445 -0
- superqode/widgets/model_picker.py +234 -0
- superqode/widgets/permission_preview.py +1205 -0
- superqode/widgets/prompt.py +358 -0
- superqode/widgets/provider_connect.py +725 -0
- superqode/widgets/pty_shell.py +587 -0
- superqode/widgets/qe_dashboard.py +321 -0
- superqode/widgets/resizable_sidebar.py +377 -0
- superqode/widgets/response_changes.py +218 -0
- superqode/widgets/response_display.py +528 -0
- superqode/widgets/rich_tool_display.py +613 -0
- superqode/widgets/sidebar_panels.py +1180 -0
- superqode/widgets/slash_complete.py +356 -0
- superqode/widgets/split_view.py +612 -0
- superqode/widgets/status_bar.py +273 -0
- superqode/widgets/superqode_display.py +786 -0
- superqode/widgets/thinking_display.py +815 -0
- superqode/widgets/throbber.py +87 -0
- superqode/widgets/toast.py +206 -0
- superqode/widgets/unified_output.py +1073 -0
- superqode/workspace/__init__.py +75 -0
- superqode/workspace/artifacts.py +472 -0
- superqode/workspace/coordinator.py +353 -0
- superqode/workspace/diff_tracker.py +429 -0
- superqode/workspace/git_guard.py +373 -0
- superqode/workspace/git_snapshot.py +526 -0
- superqode/workspace/manager.py +750 -0
- superqode/workspace/snapshot.py +357 -0
- superqode/workspace/watcher.py +535 -0
- superqode/workspace/worktree.py +440 -0
- superqode-0.1.5.dist-info/METADATA +204 -0
- superqode-0.1.5.dist-info/RECORD +288 -0
- superqode-0.1.5.dist-info/WHEEL +5 -0
- superqode-0.1.5.dist-info/entry_points.txt +3 -0
- superqode-0.1.5.dist-info/licenses/LICENSE +648 -0
- 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)"
|