@scemoon/cdh 1.0.0
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.
- package/ai-dlc-skill/SKILL.md +75 -0
- package/ai-dlc-skill/agents/deliver-agent.md +24 -0
- package/ai-dlc-skill/agents/master.md +44 -0
- package/ai-dlc-skill/agents/plan-agent.md +23 -0
- package/ai-dlc-skill/agents/understand-agent.md +23 -0
- package/ai-dlc-skill/agents/verify-agent.md +27 -0
- package/ai-dlc-skill/architecture/project-structure.md +78 -0
- package/ai-dlc-skill/brownfield/README.md +30 -0
- package/ai-dlc-skill/brownfield/generate-context.sh +64 -0
- package/ai-dlc-skill/brownfield/scripts/deps.sh +27 -0
- package/ai-dlc-skill/brownfield/scripts/discover.sh +34 -0
- package/ai-dlc-skill/brownfield/scripts/extract-api.sh +45 -0
- package/ai-dlc-skill/components/backend.md +34 -0
- package/ai-dlc-skill/components/desktop.md +30 -0
- package/ai-dlc-skill/components/mya.md +29 -0
- package/ai-dlc-skill/components/native.md +30 -0
- package/ai-dlc-skill/components/tta.md +29 -0
- package/ai-dlc-skill/components/web.md +31 -0
- package/ai-dlc-skill/components/wxa.md +29 -0
- package/ai-dlc-skill/contracts/README.md +25 -0
- package/ai-dlc-skill/core/adaptive-flow.md +36 -0
- package/ai-dlc-skill/core/security.md +29 -0
- package/ai-dlc-skill/cross-tool/cline/export.sh +31 -0
- package/ai-dlc-skill/cross-tool/copilot/export.sh +47 -0
- package/ai-dlc-skill/cross-tool/cursor/export.sh +32 -0
- package/ai-dlc-skill/cross-tool/export.sh +22 -0
- package/ai-dlc-skill/cross-tool/onecode/config.yaml.tpl +17 -0
- package/ai-dlc-skill/cross-tool/onecode/export-skills.sh +31 -0
- package/ai-dlc-skill/cross-tool/onecode/export.sh +48 -0
- package/ai-dlc-skill/phases/deliver/entry.md +26 -0
- package/ai-dlc-skill/phases/deliver/lifecycle.md +185 -0
- package/ai-dlc-skill/phases/deliver/prompt.md +40 -0
- package/ai-dlc-skill/phases/deliver/rules.md +61 -0
- package/ai-dlc-skill/phases/plan/entry.md +25 -0
- package/ai-dlc-skill/phases/plan/lifecycle.md +204 -0
- package/ai-dlc-skill/phases/plan/prompt.md +38 -0
- package/ai-dlc-skill/phases/plan/rules.md +25 -0
- package/ai-dlc-skill/phases/understand/entry.md +26 -0
- package/ai-dlc-skill/phases/understand/lifecycle.md +184 -0
- package/ai-dlc-skill/phases/understand/prompt.md +41 -0
- package/ai-dlc-skill/phases/understand/rules.md +37 -0
- package/ai-dlc-skill/phases/verify/entry.md +26 -0
- package/ai-dlc-skill/phases/verify/lifecycle.md +192 -0
- package/ai-dlc-skill/phases/verify/prompt.md +43 -0
- package/ai-dlc-skill/phases/verify/rules.md +73 -0
- package/ai-dlc-skill/practices/bdd.md +91 -0
- package/ai-dlc-skill/practices/sdd.md +84 -0
- package/ai-dlc-skill/practices/tdd.md +95 -0
- package/ai-dlc-skill/providers/README.md +114 -0
- package/ai-dlc-skill/providers/aliyun/deployment.yaml +66 -0
- package/ai-dlc-skill/providers/aliyun/preview.yaml +84 -0
- package/ai-dlc-skill/providers/aliyun/provider.yaml +160 -0
- package/ai-dlc-skill/providers/tcb/deployment.yaml +69 -0
- package/ai-dlc-skill/providers/tcb/preview.yaml +83 -0
- package/ai-dlc-skill/providers/tcb/provider.yaml +172 -0
- package/ai-dlc-skill/requirements.md +140 -0
- package/ai-dlc-skill/skill.yaml +147 -0
- package/ai-dlc-skill/templates/integration/CHANGELOG.md +41 -0
- package/ai-dlc-skill/templates/integration/asyncapi.yaml +43 -0
- package/ai-dlc-skill/templates/integration/contract-diff.md +63 -0
- package/ai-dlc-skill/templates/integration/contract-spec.md +49 -0
- package/ai-dlc-skill/templates/integration/openapi.yaml +18 -0
- package/ai-dlc-skill/templates/integration/runtime-contract.yaml +36 -0
- package/ai-dlc-skill/templates/plan/design.md +49 -0
- package/ai-dlc-skill/templates/plan/task-list.md +32 -0
- package/ai-dlc-skill/templates/project/README.md +127 -0
- package/ai-dlc-skill/templates/project/template.md +119 -0
- package/ai-dlc-skill/templates/understand/feature.feature +23 -0
- package/ai-dlc-skill/templates/understand/intent.md +29 -0
- package/ai-dlc-skill/templates/understand/spec-delta.md +47 -0
- package/ai-dlc-skill/templates/verify/test-unit.py +27 -0
- package/ai-dlc-skill/walkthrough/collect.sh +50 -0
- package/ai-dlc-skill/walkthrough/template.md +54 -0
- package/ai-dlc-skill/workflows/ai-dlc.yaml +110 -0
- package/ai-dlc-skill/workflows/deployment.yaml +199 -0
- package/cdh/__init__.py +0 -0
- package/cdh/__main__.py +4 -0
- package/cdh/__pycache__/__init__.cpython-313.pyc +0 -0
- package/cdh/__pycache__/__init__.cpython-314.pyc +0 -0
- package/cdh/__pycache__/cli.cpython-314.pyc +0 -0
- package/cdh/__pycache__/scaffold.cpython-313.pyc +0 -0
- package/cdh/__pycache__/scaffold.cpython-314.pyc +0 -0
- package/cdh/cli.py +361 -0
- package/cdh/scaffold.py +312 -0
- package/cli.js +2 -0
- package/onecode/__init__.py +1 -0
- package/onecode/__main__.py +4 -0
- package/onecode/__pycache__/__init__.cpython-314.pyc +0 -0
- package/onecode/__pycache__/cli.cpython-314.pyc +0 -0
- package/onecode/__pycache__/commands.cpython-314.pyc +0 -0
- package/onecode/__pycache__/config.cpython-314.pyc +0 -0
- package/onecode/__pycache__/config_screen.cpython-314.pyc +0 -0
- package/onecode/__pycache__/mock_data.cpython-314.pyc +0 -0
- package/onecode/agent/__init__.py +0 -0
- package/onecode/agent/__pycache__/__init__.cpython-314.pyc +0 -0
- package/onecode/agent/__pycache__/cdh_agent_acp.cpython-313.pyc +0 -0
- package/onecode/agent/__pycache__/cdh_agent_acp.cpython-314.pyc +0 -0
- package/onecode/agent/__pycache__/cdh_loader.cpython-314.pyc +0 -0
- package/onecode/agent/__pycache__/context.cpython-314.pyc +0 -0
- package/onecode/agent/__pycache__/engine.cpython-314.pyc +0 -0
- package/onecode/agent/__pycache__/harness_skill.cpython-314.pyc +0 -0
- package/onecode/agent/__pycache__/hooks.cpython-314.pyc +0 -0
- package/onecode/agent/__pycache__/onecode_agent_acp.cpython-314.pyc +0 -0
- package/onecode/agent/__pycache__/permissions.cpython-314.pyc +0 -0
- package/onecode/agent/__pycache__/permissions_store.cpython-314.pyc +0 -0
- package/onecode/agent/__pycache__/session.cpython-314.pyc +0 -0
- package/onecode/agent/agents/__init__.py +29 -0
- package/onecode/agent/agents/__pycache__/__init__.cpython-314.pyc +0 -0
- package/onecode/agent/agents/__pycache__/types.cpython-314.pyc +0 -0
- package/onecode/agent/agents/types.py +662 -0
- package/onecode/agent/attachments.py +113 -0
- package/onecode/agent/cdh_loader.py +262 -0
- package/onecode/agent/context.py +338 -0
- package/onecode/agent/engine.py +1894 -0
- package/onecode/agent/hooks.py +86 -0
- package/onecode/agent/onecode_agent_acp.py +2203 -0
- package/onecode/agent/permissions.py +151 -0
- package/onecode/agent/permissions_store.py +62 -0
- package/onecode/agent/session.py +186 -0
- package/onecode/agent/snapshot.py +145 -0
- package/onecode/agent/tools/__init__.py +17 -0
- package/onecode/agent/tools/__pycache__/__init__.cpython-314.pyc +0 -0
- package/onecode/agent/tools/__pycache__/agent_tools.cpython-314.pyc +0 -0
- package/onecode/agent/tools/__pycache__/apply_patch_tool.cpython-314.pyc +0 -0
- package/onecode/agent/tools/__pycache__/bash_tool.cpython-314.pyc +0 -0
- package/onecode/agent/tools/__pycache__/communication_tools.cpython-314.pyc +0 -0
- package/onecode/agent/tools/__pycache__/config_tool.cpython-314.pyc +0 -0
- package/onecode/agent/tools/__pycache__/cron_tools.cpython-314.pyc +0 -0
- package/onecode/agent/tools/__pycache__/errors.cpython-314.pyc +0 -0
- package/onecode/agent/tools/__pycache__/file_ops.cpython-314.pyc +0 -0
- package/onecode/agent/tools/__pycache__/file_tools.cpython-314.pyc +0 -0
- package/onecode/agent/tools/__pycache__/git_tools.cpython-314.pyc +0 -0
- package/onecode/agent/tools/__pycache__/lsp_tools.cpython-314.pyc +0 -0
- package/onecode/agent/tools/__pycache__/mcp_tools.cpython-314.pyc +0 -0
- package/onecode/agent/tools/__pycache__/permission_handler.cpython-314.pyc +0 -0
- package/onecode/agent/tools/__pycache__/permissions.cpython-314.pyc +0 -0
- package/onecode/agent/tools/__pycache__/protocol.cpython-314.pyc +0 -0
- package/onecode/agent/tools/__pycache__/registry.cpython-314.pyc +0 -0
- package/onecode/agent/tools/__pycache__/sandbox.cpython-314.pyc +0 -0
- package/onecode/agent/tools/__pycache__/schema_validation.cpython-314.pyc +0 -0
- package/onecode/agent/tools/__pycache__/skill_tools.cpython-314.pyc +0 -0
- package/onecode/agent/tools/__pycache__/task_tools.cpython-314.pyc +0 -0
- package/onecode/agent/tools/__pycache__/web_tools.cpython-314.pyc +0 -0
- package/onecode/agent/tools/agent_tools.py +134 -0
- package/onecode/agent/tools/apply_patch_tool.py +144 -0
- package/onecode/agent/tools/bash_tool.py +91 -0
- package/onecode/agent/tools/communication_tools.py +149 -0
- package/onecode/agent/tools/config_tool.py +130 -0
- package/onecode/agent/tools/cron_tools.py +179 -0
- package/onecode/agent/tools/errors.py +17 -0
- package/onecode/agent/tools/file_ops.py +187 -0
- package/onecode/agent/tools/file_tools.py +226 -0
- package/onecode/agent/tools/git_tools.py +88 -0
- package/onecode/agent/tools/lsp_tools.py +404 -0
- package/onecode/agent/tools/mcp_tools.py +129 -0
- package/onecode/agent/tools/permission_handler.py +46 -0
- package/onecode/agent/tools/permissions.py +77 -0
- package/onecode/agent/tools/protocol.py +20 -0
- package/onecode/agent/tools/registry.py +134 -0
- package/onecode/agent/tools/sandbox.py +264 -0
- package/onecode/agent/tools/schema_validation.py +100 -0
- package/onecode/agent/tools/skill_tools.py +52 -0
- package/onecode/agent/tools/task_tools.py +249 -0
- package/onecode/agent/tools/web_tools.py +170 -0
- package/onecode/builtin_skills/git/SKILL.md +64 -0
- package/onecode/builtin_skills/git/skill.yaml +7 -0
- package/onecode/builtin_skills/shell/SKILL.md +58 -0
- package/onecode/builtin_skills/shell/skill.yaml +8 -0
- package/onecode/cli.py +755 -0
- package/onecode/cloud/__init__.py +0 -0
- package/onecode/cloud/base.py +20 -0
- package/onecode/codebase/__init__.py +69 -0
- package/onecode/codebase/__pycache__/__init__.cpython-314.pyc +0 -0
- package/onecode/codebase/__pycache__/chunker.cpython-314.pyc +0 -0
- package/onecode/codebase/__pycache__/config.cpython-314.pyc +0 -0
- package/onecode/codebase/__pycache__/indexer.cpython-314.pyc +0 -0
- package/onecode/codebase/__pycache__/retriever.cpython-314.pyc +0 -0
- package/onecode/codebase/__pycache__/storage.cpython-314.pyc +0 -0
- package/onecode/codebase/__pycache__/tools.cpython-314.pyc +0 -0
- package/onecode/codebase/chunker.py +130 -0
- package/onecode/codebase/indexer.py +136 -0
- package/onecode/codebase/retriever.py +192 -0
- package/onecode/codebase/storage.py +130 -0
- package/onecode/codebase/tools.py +59 -0
- package/onecode/commands.py +276 -0
- package/onecode/config.py +285 -0
- package/onecode/config_screen.py +594 -0
- package/onecode/cron/__init__.py +3 -0
- package/onecode/lsp/__init__.py +3 -0
- package/onecode/mcp/__init__.py +4 -0
- package/onecode/mcp/__pycache__/__init__.cpython-314.pyc +0 -0
- package/onecode/mcp/__pycache__/client.cpython-314.pyc +0 -0
- package/onecode/mcp/__pycache__/manager.cpython-314.pyc +0 -0
- package/onecode/mcp/client.py +193 -0
- package/onecode/mcp/manager.py +191 -0
- package/onecode/memory/__init__.py +95 -0
- package/onecode/memory/__pycache__/__init__.cpython-314.pyc +0 -0
- package/onecode/memory/__pycache__/backend.cpython-314.pyc +0 -0
- package/onecode/memory/__pycache__/offload.cpython-314.pyc +0 -0
- package/onecode/memory/__pycache__/pyramid.cpython-314.pyc +0 -0
- package/onecode/memory/__pycache__/recall.cpython-314.pyc +0 -0
- package/onecode/memory/__pycache__/symbolic.cpython-314.pyc +0 -0
- package/onecode/memory/backend.py +185 -0
- package/onecode/memory/offload.py +114 -0
- package/onecode/memory/pyramid.py +202 -0
- package/onecode/memory/recall.py +168 -0
- package/onecode/memory/symbolic.py +164 -0
- package/onecode/models/__init__.py +4 -0
- package/onecode/models/__pycache__/__init__.cpython-314.pyc +0 -0
- package/onecode/models/__pycache__/errors.cpython-314.pyc +0 -0
- package/onecode/models/__pycache__/messages.cpython-314.pyc +0 -0
- package/onecode/models/__pycache__/provider.cpython-314.pyc +0 -0
- package/onecode/models/__pycache__/registry.cpython-314.pyc +0 -0
- package/onecode/models/errors.py +94 -0
- package/onecode/models/messages.py +662 -0
- package/onecode/models/provider.py +450 -0
- package/onecode/models/providers/__init__.py +17 -0
- package/onecode/models/providers/__pycache__/__init__.cpython-314.pyc +0 -0
- package/onecode/models/providers/__pycache__/anthropic_provider.cpython-314.pyc +0 -0
- package/onecode/models/providers/__pycache__/deepseek_provider.cpython-314.pyc +0 -0
- package/onecode/models/providers/__pycache__/glm_provider.cpython-314.pyc +0 -0
- package/onecode/models/providers/__pycache__/minimax_provider.cpython-314.pyc +0 -0
- package/onecode/models/providers/__pycache__/minimaxi_provider.cpython-314.pyc +0 -0
- package/onecode/models/providers/__pycache__/mock_provider.cpython-314.pyc +0 -0
- package/onecode/models/providers/__pycache__/ollama_provider.cpython-314.pyc +0 -0
- package/onecode/models/providers/__pycache__/openai_provider.cpython-314.pyc +0 -0
- package/onecode/models/providers/anthropic_provider.py +224 -0
- package/onecode/models/providers/deepseek_provider.py +210 -0
- package/onecode/models/providers/glm_provider.py +154 -0
- package/onecode/models/providers/minimax_provider.py +154 -0
- package/onecode/models/providers/minimaxi_provider.py +363 -0
- package/onecode/models/providers/ollama_provider.py +96 -0
- package/onecode/models/providers/openai_provider.py +233 -0
- package/onecode/models/registry.py +212 -0
- package/onecode/server/__init__.py +3 -0
- package/onecode/server/app.py +224 -0
- package/onecode/skills/__init__.py +11 -0
- package/onecode/skills/__pycache__/__init__.cpython-314.pyc +0 -0
- package/onecode/skills/__pycache__/argument_substitution.cpython-314.pyc +0 -0
- package/onecode/skills/__pycache__/create.cpython-314.pyc +0 -0
- package/onecode/skills/__pycache__/frontmatter.cpython-314.pyc +0 -0
- package/onecode/skills/__pycache__/loader.cpython-314.pyc +0 -0
- package/onecode/skills/__pycache__/manager.cpython-314.pyc +0 -0
- package/onecode/skills/__pycache__/model.cpython-314.pyc +0 -0
- package/onecode/skills/argument_substitution.py +39 -0
- package/onecode/skills/create.py +56 -0
- package/onecode/skills/frontmatter.py +33 -0
- package/onecode/skills/loader.py +157 -0
- package/onecode/skills/manager.py +75 -0
- package/onecode/skills/model.py +43 -0
- package/onecode/storage/__init__.py +0 -0
- package/onecode/storage/activity.py +64 -0
- package/onecode/storage/project.py +54 -0
- package/onecode/storage/session.py +113 -0
- package/onecode/tasks/__init__.py +26 -0
- package/onecode/tasks/manager.py +219 -0
- package/onecode/tasks/models.py +240 -0
- package/onecode/trace/__init__.py +0 -0
- package/onecode/trace/tracer.py +174 -0
- package/onecode/utils/__init__.py +0 -0
- package/onecode/utils/helpers.py +20 -0
- package/onecode-cli.js +2 -0
- package/package.json +32 -0
- package/pyproject.toml +60 -0
- package/run.js +86 -0
- package/tui/__init__.py +46 -0
- package/tui/__main__.py +4 -0
- package/tui/__pycache__/__init__.cpython-314.pyc +0 -0
- package/tui/__pycache__/_loop.cpython-314.pyc +0 -0
- package/tui/__pycache__/_path_fuzzy_search.cpython-314.pyc +0 -0
- package/tui/__pycache__/_path_match.cpython-314.pyc +0 -0
- package/tui/__pycache__/agent.cpython-314.pyc +0 -0
- package/tui/__pycache__/agent_schema.cpython-314.pyc +0 -0
- package/tui/__pycache__/agents.cpython-314.pyc +0 -0
- package/tui/__pycache__/answer.cpython-314.pyc +0 -0
- package/tui/__pycache__/app.cpython-314.pyc +0 -0
- package/tui/__pycache__/atomic.cpython-314.pyc +0 -0
- package/tui/__pycache__/complete.cpython-314.pyc +0 -0
- package/tui/__pycache__/constants.cpython-314.pyc +0 -0
- package/tui/__pycache__/conversation_markdown.cpython-314.pyc +0 -0
- package/tui/__pycache__/danger.cpython-314.pyc +0 -0
- package/tui/__pycache__/db.cpython-314.pyc +0 -0
- package/tui/__pycache__/dec.cpython-314.pyc +0 -0
- package/tui/__pycache__/directory.cpython-314.pyc +0 -0
- package/tui/__pycache__/directory_suggester.cpython-314.pyc +0 -0
- package/tui/__pycache__/directory_watcher.cpython-314.pyc +0 -0
- package/tui/__pycache__/format_path.cpython-314.pyc +0 -0
- package/tui/__pycache__/fuzzy.cpython-314.pyc +0 -0
- package/tui/__pycache__/fuzzy_index.cpython-314.pyc +0 -0
- package/tui/__pycache__/history.cpython-314.pyc +0 -0
- package/tui/__pycache__/jsonrpc.cpython-314.pyc +0 -0
- package/tui/__pycache__/menus.cpython-314.pyc +0 -0
- package/tui/__pycache__/message_log.cpython-314.pyc +0 -0
- package/tui/__pycache__/messages.cpython-314.pyc +0 -0
- package/tui/__pycache__/path_complete.cpython-314.pyc +0 -0
- package/tui/__pycache__/path_filter.cpython-314.pyc +0 -0
- package/tui/__pycache__/paths.cpython-314.pyc +0 -0
- package/tui/__pycache__/pill.cpython-314.pyc +0 -0
- package/tui/__pycache__/platform_commands.cpython-314.pyc +0 -0
- package/tui/__pycache__/protocol.cpython-314.pyc +0 -0
- package/tui/__pycache__/session_tracker.cpython-314.pyc +0 -0
- package/tui/__pycache__/settings.cpython-314.pyc +0 -0
- package/tui/__pycache__/settings_schema.cpython-314.pyc +0 -0
- package/tui/__pycache__/shell.cpython-314.pyc +0 -0
- package/tui/__pycache__/shell_read.cpython-314.pyc +0 -0
- package/tui/__pycache__/slash_command.cpython-314.pyc +0 -0
- package/tui/__pycache__/version.cpython-314.pyc +0 -0
- package/tui/_loop.py +86 -0
- package/tui/_path_fuzzy_search.py +48 -0
- package/tui/_path_match.py +141 -0
- package/tui/about.py +95 -0
- package/tui/acp/__pycache__/agent.cpython-314.pyc +0 -0
- package/tui/acp/__pycache__/api.cpython-314.pyc +0 -0
- package/tui/acp/__pycache__/encode_tool_call_id.cpython-314.pyc +0 -0
- package/tui/acp/__pycache__/messages.cpython-314.pyc +0 -0
- package/tui/acp/__pycache__/prompt.cpython-314.pyc +0 -0
- package/tui/acp/__pycache__/protocol.cpython-314.pyc +0 -0
- package/tui/acp/agent.py +886 -0
- package/tui/acp/api.py +55 -0
- package/tui/acp/encode_tool_call_id.py +12 -0
- package/tui/acp/messages.py +190 -0
- package/tui/acp/prompt.py +110 -0
- package/tui/acp/protocol.py +462 -0
- package/tui/agent.py +70 -0
- package/tui/agent_schema.py +76 -0
- package/tui/agents.py +45 -0
- package/tui/ansi/__init__.py +1 -0
- package/tui/ansi/__pycache__/__init__.cpython-314.pyc +0 -0
- package/tui/ansi/__pycache__/_ansi.cpython-314.pyc +0 -0
- package/tui/ansi/__pycache__/_ansi_colors.cpython-314.pyc +0 -0
- package/tui/ansi/__pycache__/_control_codes.cpython-314.pyc +0 -0
- package/tui/ansi/__pycache__/_keys.cpython-314.pyc +0 -0
- package/tui/ansi/__pycache__/_sgr_styles.cpython-314.pyc +0 -0
- package/tui/ansi/__pycache__/_stream_parser.cpython-314.pyc +0 -0
- package/tui/ansi/_ansi.py +1689 -0
- package/tui/ansi/_ansi_colors.py +264 -0
- package/tui/ansi/_control_codes.py +37 -0
- package/tui/ansi/_keys.py +251 -0
- package/tui/ansi/_sgr_styles.py +64 -0
- package/tui/ansi/_stream_parser.py +418 -0
- package/tui/answer.py +12 -0
- package/tui/app.py +1236 -0
- package/tui/atomic.py +37 -0
- package/tui/cli.py +313 -0
- package/tui/code_analyze.py +27 -0
- package/tui/complete.py +38 -0
- package/tui/constants.py +61 -0
- package/tui/conversation_markdown.py +30 -0
- package/tui/danger.py +372 -0
- package/tui/data/agents/ampcode.com.toml +51 -0
- package/tui/data/agents/augmentcode.com.toml +40 -0
- package/tui/data/agents/cdh.cloud-dev-harness.toml +22 -0
- package/tui/data/agents/claude.com.toml +41 -0
- package/tui/data/agents/copilot.github.com.toml +29 -0
- package/tui/data/agents/crowai.dev.toml +35 -0
- package/tui/data/agents/cursor.com.toml +38 -0
- package/tui/data/agents/deepagents.langchain.com +33 -0
- package/tui/data/agents/docker.com.toml +59 -0
- package/tui/data/agents/geminicli.com.toml +28 -0
- package/tui/data/agents/goose.ai.toml +51 -0
- package/tui/data/agents/inference.huggingface.co.toml +41 -0
- package/tui/data/agents/kimi.com.toml +35 -0
- package/tui/data/agents/kiro.dev.toml +42 -0
- package/tui/data/agents/openai.com.toml +53 -0
- package/tui/data/agents/openclaw.ai.toml +37 -0
- package/tui/data/agents/opencode.ai.toml +39 -0
- package/tui/data/agents/openhands.dev.toml +45 -0
- package/tui/data/agents/stakpak.dev.toml +61 -0
- package/tui/data/agents/vibe.mistral.ai.toml +30 -0
- package/tui/data/agents/vtcode.dev.toml +62 -0
- package/tui/data/images/frog.png +0 -0
- package/tui/data/sounds/question.wav +0 -0
- package/tui/data/sounds/turn-over.wav +0 -0
- package/tui/db.py +190 -0
- package/tui/dec.py +332 -0
- package/tui/directory.py +234 -0
- package/tui/directory_suggester.py +93 -0
- package/tui/directory_watcher.py +197 -0
- package/tui/format_path.py +25 -0
- package/tui/fuzzy.py +140 -0
- package/tui/fuzzy_index.py +275 -0
- package/tui/gist.py +33 -0
- package/tui/history.py +138 -0
- package/tui/jsonrpc.py +578 -0
- package/tui/menus.py +14 -0
- package/tui/message_log.py +69 -0
- package/tui/messages.py +139 -0
- package/tui/option_content.py +51 -0
- package/tui/os.py +0 -0
- package/tui/path_complete.py +217 -0
- package/tui/path_filter.py +124 -0
- package/tui/paths.py +71 -0
- package/tui/pill.py +23 -0
- package/tui/platform_commands.py +52 -0
- package/tui/prompt/__pycache__/extract.cpython-314.pyc +0 -0
- package/tui/prompt/__pycache__/resource.cpython-314.pyc +0 -0
- package/tui/prompt/extract.py +19 -0
- package/tui/prompt/resource.py +68 -0
- package/tui/protocol.py +28 -0
- package/tui/screens/__init__.py +0 -0
- package/tui/screens/__pycache__/__init__.cpython-314.pyc +0 -0
- package/tui/screens/__pycache__/log.cpython-314.pyc +0 -0
- package/tui/screens/__pycache__/main.cpython-314.pyc +0 -0
- package/tui/screens/__pycache__/projects_screen.cpython-314.pyc +0 -0
- package/tui/screens/__pycache__/sessions.cpython-314.pyc +0 -0
- package/tui/screens/__pycache__/settings.cpython-314.pyc +0 -0
- package/tui/screens/__pycache__/store.cpython-314.pyc +0 -0
- package/tui/screens/action_modal.py +94 -0
- package/tui/screens/agent_modal.py +175 -0
- package/tui/screens/command_edit_modal.py +74 -0
- package/tui/screens/log.py +553 -0
- package/tui/screens/main.py +411 -0
- package/tui/screens/main.tcss +655 -0
- package/tui/screens/permissions.py +404 -0
- package/tui/screens/permissions.tcss +72 -0
- package/tui/screens/projects.tcss +66 -0
- package/tui/screens/projects_app.py +319 -0
- package/tui/screens/projects_screen.py +142 -0
- package/tui/screens/session_resume_modal.py +172 -0
- package/tui/screens/session_resume_modal.tcss +35 -0
- package/tui/screens/sessions.py +166 -0
- package/tui/screens/sessions.tcss +119 -0
- package/tui/screens/settings.py +254 -0
- package/tui/screens/settings.tcss +101 -0
- package/tui/screens/store.py +500 -0
- package/tui/screens/store.tcss +274 -0
- package/tui/screens/tool_content_screen.py +59 -0
- package/tui/session_tracker.py +120 -0
- package/tui/settings.py +353 -0
- package/tui/settings_schema.py +431 -0
- package/tui/shell.py +304 -0
- package/tui/shell_read.py +42 -0
- package/tui/slash_command.py +34 -0
- package/tui/tui.tcss +246 -0
- package/tui/twitter.py +38 -0
- package/tui/version.py +80 -0
- package/tui/visuals/__init__.py +0 -0
- package/tui/visuals/__pycache__/__init__.cpython-314.pyc +0 -0
- package/tui/visuals/__pycache__/columns.cpython-314.pyc +0 -0
- package/tui/visuals/columns.py +273 -0
- package/tui/widgets/__init__.py +0 -0
- package/tui/widgets/__pycache__/__init__.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/acp_content.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/agent_response.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/agent_thought.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/ask_user.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/condensed_path.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/context_stats.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/conversation.cpython-313.pyc +0 -0
- package/tui/widgets/__pycache__/conversation.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/diff_view.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/directory_input.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/flash.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/future_text.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/grid_select.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/highlighted_textarea.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/mandelbrot.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/markdown_note.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/menu.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/modified_files.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/non_selectable_label.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/note.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/path_search.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/plan.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/project_directory_tree.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/project_grid_select.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/project_summary.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/prompt.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/question.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/session_grid_select.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/session_summary.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/session_tabs.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/shell_result.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/shell_terminal.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/side_bar.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/slash_complete.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/strike_text.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/subagent.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/terminal.cpython-313.pyc +0 -0
- package/tui/widgets/__pycache__/terminal.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/throbber.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/tool_call.cpython-313.pyc +0 -0
- package/tui/widgets/__pycache__/tool_call.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/user_input.cpython-314.pyc +0 -0
- package/tui/widgets/acp_content.py +70 -0
- package/tui/widgets/agent_response.py +77 -0
- package/tui/widgets/agent_thought.py +168 -0
- package/tui/widgets/ask_user.py +264 -0
- package/tui/widgets/command_pane.py +223 -0
- package/tui/widgets/condensed_path.py +115 -0
- package/tui/widgets/context_stats.py +66 -0
- package/tui/widgets/conversation.py +2441 -0
- package/tui/widgets/danger_warning.py +65 -0
- package/tui/widgets/diff_view.py +59 -0
- package/tui/widgets/directory_input.py +8 -0
- package/tui/widgets/flash.py +81 -0
- package/tui/widgets/future_text.py +126 -0
- package/tui/widgets/grid_select.py +234 -0
- package/tui/widgets/highlighted_textarea.py +180 -0
- package/tui/widgets/mandelbrot.py +294 -0
- package/tui/widgets/markdown_note.py +13 -0
- package/tui/widgets/menu.py +147 -0
- package/tui/widgets/modified_files.py +106 -0
- package/tui/widgets/non_selectable_label.py +5 -0
- package/tui/widgets/note.py +18 -0
- package/tui/widgets/path_search.py +492 -0
- package/tui/widgets/plan.py +263 -0
- package/tui/widgets/project_directory_tree.py +90 -0
- package/tui/widgets/project_grid_select.py +35 -0
- package/tui/widgets/project_summary.py +33 -0
- package/tui/widgets/prompt.py +795 -0
- package/tui/widgets/question.py +360 -0
- package/tui/widgets/session_grid_select.py +224 -0
- package/tui/widgets/session_summary.py +115 -0
- package/tui/widgets/session_tabs.py +188 -0
- package/tui/widgets/shell_result.py +35 -0
- package/tui/widgets/shell_terminal.py +40 -0
- package/tui/widgets/side_bar.py +114 -0
- package/tui/widgets/slash_complete.py +235 -0
- package/tui/widgets/strike_text.py +70 -0
- package/tui/widgets/subagent.py +87 -0
- package/tui/widgets/terminal.py +577 -0
- package/tui/widgets/terminal_tool.py +351 -0
- package/tui/widgets/throbber.py +100 -0
- package/tui/widgets/tool_call.py +368 -0
- package/tui/widgets/user_input.py +23 -0
- package/tui/widgets/version.py +5 -0
- package/tui/widgets/welcome.py +31 -0
package/tui/danger.py
ADDED
|
@@ -0,0 +1,372 @@
|
|
|
1
|
+
from enum import IntEnum
|
|
2
|
+
from functools import lru_cache
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
from typing import Iterable, NamedTuple, Sequence
|
|
5
|
+
|
|
6
|
+
from textual.content import Span
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
SAFE_COMMANDS = {
|
|
10
|
+
# Display & Output
|
|
11
|
+
"echo",
|
|
12
|
+
"cat",
|
|
13
|
+
"less",
|
|
14
|
+
"more",
|
|
15
|
+
"head",
|
|
16
|
+
"tail",
|
|
17
|
+
"tac",
|
|
18
|
+
"nl",
|
|
19
|
+
# File & Directory Information
|
|
20
|
+
"ls",
|
|
21
|
+
"tree",
|
|
22
|
+
"pwd",
|
|
23
|
+
"file",
|
|
24
|
+
"stat",
|
|
25
|
+
"du",
|
|
26
|
+
"df",
|
|
27
|
+
# Search & Find
|
|
28
|
+
"find",
|
|
29
|
+
"locate",
|
|
30
|
+
"which",
|
|
31
|
+
"whereis",
|
|
32
|
+
"type",
|
|
33
|
+
"grep",
|
|
34
|
+
"egrep",
|
|
35
|
+
"fgrep",
|
|
36
|
+
# Text Processing (read-only)
|
|
37
|
+
"wc",
|
|
38
|
+
"sort",
|
|
39
|
+
"uniq",
|
|
40
|
+
"cut",
|
|
41
|
+
"paste",
|
|
42
|
+
"column",
|
|
43
|
+
"tr",
|
|
44
|
+
"diff",
|
|
45
|
+
"cmp",
|
|
46
|
+
"comm",
|
|
47
|
+
# System Information
|
|
48
|
+
"whoami",
|
|
49
|
+
"who",
|
|
50
|
+
"w",
|
|
51
|
+
"id",
|
|
52
|
+
"hostname",
|
|
53
|
+
"uname",
|
|
54
|
+
"uptime",
|
|
55
|
+
"date",
|
|
56
|
+
"cal",
|
|
57
|
+
"env",
|
|
58
|
+
"printenv",
|
|
59
|
+
# Process Information
|
|
60
|
+
"ps",
|
|
61
|
+
"top",
|
|
62
|
+
"htop",
|
|
63
|
+
"pgrep",
|
|
64
|
+
"jobs",
|
|
65
|
+
"pstree",
|
|
66
|
+
# Network (read-only operations)
|
|
67
|
+
"ping",
|
|
68
|
+
"traceroute",
|
|
69
|
+
"nslookup",
|
|
70
|
+
"dig",
|
|
71
|
+
"host",
|
|
72
|
+
"netstat",
|
|
73
|
+
"ss",
|
|
74
|
+
"ifconfig",
|
|
75
|
+
"ip",
|
|
76
|
+
# View compressed files (without extracting)
|
|
77
|
+
"zcat",
|
|
78
|
+
"zless",
|
|
79
|
+
# History & Help
|
|
80
|
+
"history",
|
|
81
|
+
"man",
|
|
82
|
+
"help",
|
|
83
|
+
"info",
|
|
84
|
+
"apropos",
|
|
85
|
+
"whatis",
|
|
86
|
+
# Comparison & Checksums
|
|
87
|
+
"md5sum",
|
|
88
|
+
"sha256sum",
|
|
89
|
+
"sha1sum",
|
|
90
|
+
"cksum",
|
|
91
|
+
"sum",
|
|
92
|
+
# Other Safe Commands
|
|
93
|
+
"bc",
|
|
94
|
+
"expr",
|
|
95
|
+
"test",
|
|
96
|
+
"sleep",
|
|
97
|
+
"true",
|
|
98
|
+
"false",
|
|
99
|
+
"yes",
|
|
100
|
+
"seq",
|
|
101
|
+
"basename",
|
|
102
|
+
"dirname",
|
|
103
|
+
"realpath",
|
|
104
|
+
"readlink",
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
UNSAFE_COMMANDS = {
|
|
108
|
+
# File/Directory Creation
|
|
109
|
+
"mkdir",
|
|
110
|
+
"touch",
|
|
111
|
+
"mktemp",
|
|
112
|
+
"mkfifo",
|
|
113
|
+
"mknod",
|
|
114
|
+
# File/Directory Deletion
|
|
115
|
+
"rm",
|
|
116
|
+
"rmdir",
|
|
117
|
+
"shred",
|
|
118
|
+
# File/Directory Moving/Copying
|
|
119
|
+
"mv",
|
|
120
|
+
"cp",
|
|
121
|
+
"rsync",
|
|
122
|
+
"scp",
|
|
123
|
+
"install",
|
|
124
|
+
# File Modification/Editing
|
|
125
|
+
"sed", # with -i flag
|
|
126
|
+
"awk", # can write files
|
|
127
|
+
"tee", # writes to files and stdout
|
|
128
|
+
# Permissions/Ownership
|
|
129
|
+
"chmod",
|
|
130
|
+
"chown",
|
|
131
|
+
"chgrp",
|
|
132
|
+
"chattr",
|
|
133
|
+
"setfacl",
|
|
134
|
+
# Linking
|
|
135
|
+
"ln",
|
|
136
|
+
"link",
|
|
137
|
+
"unlink",
|
|
138
|
+
# Archive/Compression (extract/compress operations)
|
|
139
|
+
"tar",
|
|
140
|
+
"untar",
|
|
141
|
+
"zip",
|
|
142
|
+
"unzip",
|
|
143
|
+
"gzip",
|
|
144
|
+
"gunzip",
|
|
145
|
+
"bzip2",
|
|
146
|
+
"bunzip2",
|
|
147
|
+
"xz",
|
|
148
|
+
"unxz",
|
|
149
|
+
"7z",
|
|
150
|
+
"rar",
|
|
151
|
+
"unrar",
|
|
152
|
+
# Download Tools
|
|
153
|
+
"wget",
|
|
154
|
+
"curl",
|
|
155
|
+
"fetch",
|
|
156
|
+
"aria2c",
|
|
157
|
+
# Low-level Disk Operations
|
|
158
|
+
"dd",
|
|
159
|
+
"truncate",
|
|
160
|
+
"fallocate",
|
|
161
|
+
# File Splitting
|
|
162
|
+
"split",
|
|
163
|
+
"csplit",
|
|
164
|
+
# Synchronization
|
|
165
|
+
"sync",
|
|
166
|
+
# System Administration
|
|
167
|
+
"useradd",
|
|
168
|
+
"userdel",
|
|
169
|
+
"usermod",
|
|
170
|
+
"groupadd",
|
|
171
|
+
"groupdel",
|
|
172
|
+
"passwd",
|
|
173
|
+
"mount",
|
|
174
|
+
"umount",
|
|
175
|
+
"mkfs",
|
|
176
|
+
"fdisk",
|
|
177
|
+
"parted",
|
|
178
|
+
"swapon",
|
|
179
|
+
"swapoff",
|
|
180
|
+
# Other Potentially Dangerous
|
|
181
|
+
"patch",
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
COMMAND_SPLIT = {";", "&&", "||", "|"}
|
|
186
|
+
CHANGE_DIRECTORY = {"cd"}
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
class DangerLevel(IntEnum):
|
|
190
|
+
"""The danger level of a command."""
|
|
191
|
+
|
|
192
|
+
SAFE = 0 # Command is know to be generally save
|
|
193
|
+
UNKNOWN = 1 # We don't know about this command
|
|
194
|
+
DANGEROUS = 2 # Command is potentially dangerous (can modify filesystem)
|
|
195
|
+
DESTRUCTIVE = 3 # Command is both dangerous and refers outside of project root
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
class CommandAtom(NamedTuple):
|
|
199
|
+
"""A command "atom"."""
|
|
200
|
+
|
|
201
|
+
name: str
|
|
202
|
+
"""Name of the command."""
|
|
203
|
+
level: DangerLevel
|
|
204
|
+
"""Danger level."""
|
|
205
|
+
path: Path
|
|
206
|
+
"""The path to which this command is expected to apply."""
|
|
207
|
+
span: tuple[int, int]
|
|
208
|
+
"""Span to highlight error."""
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
@lru_cache(maxsize=1024)
|
|
212
|
+
def detect(
|
|
213
|
+
project_directory: str,
|
|
214
|
+
current_working_directory: str,
|
|
215
|
+
command_line: str,
|
|
216
|
+
*,
|
|
217
|
+
danger_style: str = "",
|
|
218
|
+
destructive_style: str = "$text-error on $error-muted 70%",
|
|
219
|
+
) -> tuple[Sequence[Span], DangerLevel]:
|
|
220
|
+
"""Attempt to detect potentially destructive commands.
|
|
221
|
+
|
|
222
|
+
Args:
|
|
223
|
+
project_directory: Project directory.
|
|
224
|
+
current_working_directory: Current working directory.
|
|
225
|
+
command_line: Bash command.
|
|
226
|
+
danger_style: Style to highlight dangerous commands.
|
|
227
|
+
destructive_style: Style highlight destructive commands.
|
|
228
|
+
|
|
229
|
+
Returns:
|
|
230
|
+
A tuple of spans to highlight the command, and a `DangerLevel` enumeration.
|
|
231
|
+
"""
|
|
232
|
+
try:
|
|
233
|
+
atoms = list(
|
|
234
|
+
analyze(project_directory, current_working_directory, command_line)
|
|
235
|
+
)
|
|
236
|
+
except OSError:
|
|
237
|
+
return [], DangerLevel.UNKNOWN
|
|
238
|
+
spans: list[Span] = []
|
|
239
|
+
for atom in atoms:
|
|
240
|
+
if atom.level == DangerLevel.DANGEROUS and danger_style:
|
|
241
|
+
spans.append(Span(*atom.span, danger_style))
|
|
242
|
+
elif atom.level == DangerLevel.DESTRUCTIVE and destructive_style:
|
|
243
|
+
spans.append(Span(*atom.span, destructive_style))
|
|
244
|
+
|
|
245
|
+
if atoms:
|
|
246
|
+
danger_level = max(command_atom.level for command_atom in atoms)
|
|
247
|
+
else:
|
|
248
|
+
danger_level = DangerLevel.SAFE
|
|
249
|
+
|
|
250
|
+
return (spans, danger_level)
|
|
251
|
+
|
|
252
|
+
|
|
253
|
+
def analyze(
|
|
254
|
+
project_directory: str, current_working_directory: str, command_line: str
|
|
255
|
+
) -> Iterable[CommandAtom]:
|
|
256
|
+
"""Analyze a command and generate information about potentially destructive commands.
|
|
257
|
+
|
|
258
|
+
Args:
|
|
259
|
+
project_dir: The project directory.
|
|
260
|
+
command_line: A bash command line.
|
|
261
|
+
|
|
262
|
+
Yields:
|
|
263
|
+
`CommandAtom` objects.
|
|
264
|
+
"""
|
|
265
|
+
project_path = Path(project_directory).resolve()
|
|
266
|
+
|
|
267
|
+
import bashlex
|
|
268
|
+
from bashlex import ast
|
|
269
|
+
|
|
270
|
+
def recurse_nodes(root_path: Path, nodes: list[ast.node]) -> Iterable[CommandAtom]:
|
|
271
|
+
for node in nodes:
|
|
272
|
+
kind: str = node.kind
|
|
273
|
+
|
|
274
|
+
if kind == "list":
|
|
275
|
+
yield from recurse_nodes(root_path, node.parts)
|
|
276
|
+
return
|
|
277
|
+
|
|
278
|
+
if kind == "operator":
|
|
279
|
+
continue
|
|
280
|
+
|
|
281
|
+
level = DangerLevel.UNKNOWN
|
|
282
|
+
|
|
283
|
+
if not hasattr(node, "parts"):
|
|
284
|
+
continue
|
|
285
|
+
|
|
286
|
+
if node.parts:
|
|
287
|
+
command_name = command_line[slice(*node.parts[0].pos)]
|
|
288
|
+
if command_name in SAFE_COMMANDS:
|
|
289
|
+
level = DangerLevel.SAFE
|
|
290
|
+
elif command_name in UNSAFE_COMMANDS:
|
|
291
|
+
level = DangerLevel.DANGEROUS
|
|
292
|
+
parts = node.parts[1:]
|
|
293
|
+
else:
|
|
294
|
+
parts = node.parts
|
|
295
|
+
command_name = ""
|
|
296
|
+
|
|
297
|
+
if not parts:
|
|
298
|
+
yield CommandAtom(command_name, level, root_path, node.pos)
|
|
299
|
+
continue
|
|
300
|
+
|
|
301
|
+
change_directory = command_name in CHANGE_DIRECTORY
|
|
302
|
+
|
|
303
|
+
for command_node in parts:
|
|
304
|
+
command_word = command_line[slice(*node.pos)]
|
|
305
|
+
|
|
306
|
+
if command_node.kind == "redirect":
|
|
307
|
+
redirect = command_line[slice(*command_node.output.pos)]
|
|
308
|
+
try:
|
|
309
|
+
target_path = (
|
|
310
|
+
root_path / Path(redirect).expanduser()
|
|
311
|
+
).resolve()
|
|
312
|
+
except OSError:
|
|
313
|
+
continue
|
|
314
|
+
if not target_path.is_relative_to(project_path):
|
|
315
|
+
yield CommandAtom(
|
|
316
|
+
"redirect",
|
|
317
|
+
DangerLevel.DESTRUCTIVE,
|
|
318
|
+
target_path,
|
|
319
|
+
command_node.pos,
|
|
320
|
+
)
|
|
321
|
+
continue
|
|
322
|
+
|
|
323
|
+
if command_node.kind == "command":
|
|
324
|
+
yield from recurse_nodes(root_path, command_node.parts)
|
|
325
|
+
continue
|
|
326
|
+
if command_word.startswith(("-", "+")):
|
|
327
|
+
continue
|
|
328
|
+
word = command_line[slice(*command_node.pos)]
|
|
329
|
+
if change_directory:
|
|
330
|
+
try:
|
|
331
|
+
root_path = (root_path / Path(word)).expanduser().resolve()
|
|
332
|
+
except OSError:
|
|
333
|
+
pass
|
|
334
|
+
continue
|
|
335
|
+
|
|
336
|
+
try:
|
|
337
|
+
target_path = (root_path / Path(word)).expanduser().resolve()
|
|
338
|
+
except OSError:
|
|
339
|
+
continue
|
|
340
|
+
if level == DangerLevel.DANGEROUS and not target_path.is_relative_to(
|
|
341
|
+
project_path
|
|
342
|
+
):
|
|
343
|
+
# If refers to a path outside of the project, upgrade to destructive
|
|
344
|
+
level = DangerLevel.DESTRUCTIVE
|
|
345
|
+
|
|
346
|
+
yield CommandAtom(command_word, level, target_path, node.pos)
|
|
347
|
+
|
|
348
|
+
current_path = Path(current_working_directory)
|
|
349
|
+
try:
|
|
350
|
+
nodes = bashlex.parse(command_line)
|
|
351
|
+
except Exception:
|
|
352
|
+
# Failed to parse bash
|
|
353
|
+
return
|
|
354
|
+
|
|
355
|
+
yield from recurse_nodes(current_path, nodes)
|
|
356
|
+
|
|
357
|
+
|
|
358
|
+
if __name__ == "__main__":
|
|
359
|
+
import os
|
|
360
|
+
from rich import print
|
|
361
|
+
|
|
362
|
+
TEST = [
|
|
363
|
+
"ls;ls",
|
|
364
|
+
"echo 'hello world'",
|
|
365
|
+
"rm foo",
|
|
366
|
+
"rm ../foo",
|
|
367
|
+
"rm /",
|
|
368
|
+
"cat foo > ../foo.txt",
|
|
369
|
+
]
|
|
370
|
+
|
|
371
|
+
for test in TEST:
|
|
372
|
+
print(repr(test), detect(os.getcwd(), os.getcwd(), test))
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Schema defined in agent_schema.py
|
|
2
|
+
# https://github.com/tao12345666333/amp-acp
|
|
3
|
+
|
|
4
|
+
identity = "ampcode.com"
|
|
5
|
+
name = "Amp (AmpCode)"
|
|
6
|
+
short_name = "amp"
|
|
7
|
+
url = "https://ampcode.com"
|
|
8
|
+
protocol = "acp"
|
|
9
|
+
author_name = "AmpCode"
|
|
10
|
+
author_url = "https://ampcode.com"
|
|
11
|
+
publisher_name = "Will McGugan"
|
|
12
|
+
publisher_url = "https://willmcgugan.github.io/"
|
|
13
|
+
type = "coding"
|
|
14
|
+
description = "Open-source ACP adapter that exposes the Amp CLI to editors such as Zed via the Agent Client Protocol."
|
|
15
|
+
tags = []
|
|
16
|
+
run_command."*" = "npx -y amp-acp"
|
|
17
|
+
|
|
18
|
+
help = '''
|
|
19
|
+
# Amp (AmpCode)
|
|
20
|
+
|
|
21
|
+
Amp is a frontier coding agent for your terminal and editor, built by Sourcegraph.
|
|
22
|
+
|
|
23
|
+
- **Multi-Model** Sonnet, GPT-5, fast models—Amp uses them all, for what each model is best at.
|
|
24
|
+
- **Opinionated** You're always using the good parts of Amp. If we don't use and love a feature, we kill it.
|
|
25
|
+
- **On the Frontier** Amp goes where the models take it. No backcompat, no legacy features.
|
|
26
|
+
- **Threads** You can save and share your interactions with Amp. You wouldn't code without version control, would you?
|
|
27
|
+
|
|
28
|
+
## Prerequisites
|
|
29
|
+
|
|
30
|
+
- Node.js 18+ so `npx` can run the adapter
|
|
31
|
+
- Ensure the `AMP_EXECUTABLE` environment variable points at your Amp binary (or place `amp` on `PATH`)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## ACP adapter for AmpCode
|
|
37
|
+
|
|
38
|
+
**Repository**: https://github.com/tao12345666333/amp-acp
|
|
39
|
+
'''
|
|
40
|
+
|
|
41
|
+
[actions."*".install]
|
|
42
|
+
command = "curl -fsSL https://ampcode.com/install.sh | bash && npm install -g amp-acp"
|
|
43
|
+
description = "Install AMP Code"
|
|
44
|
+
|
|
45
|
+
[actions."*".install_adapter]
|
|
46
|
+
command = "npm install -g amp-acp"
|
|
47
|
+
description = "Install the Amp ACP adapter"
|
|
48
|
+
|
|
49
|
+
[actions."*".login]
|
|
50
|
+
command = "amp login"
|
|
51
|
+
description = "Login to Amp (run once)"
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Schema defined in agent_schema.py
|
|
2
|
+
# https://github.com/augmentcode/auggie
|
|
3
|
+
|
|
4
|
+
identity = "augmentcode.com"
|
|
5
|
+
name = "Auggie (Augment Code)"
|
|
6
|
+
short_name = "auggie"
|
|
7
|
+
url = "https://www.augmentcode.com/product/CLI"
|
|
8
|
+
protocol = "acp"
|
|
9
|
+
author_name = "Augment Code"
|
|
10
|
+
author_url = "https://www.augmentcode.com/"
|
|
11
|
+
publisher_name = "Will McGugan"
|
|
12
|
+
publisher_url = "https://willmcgugan.github.io/"
|
|
13
|
+
type = "coding"
|
|
14
|
+
description = "An AI agent that brings Augment Code's power to the terminal with ACP support for Zed, Neovim, and Emacs."
|
|
15
|
+
tags = []
|
|
16
|
+
run_command."*" = "auggie --acp"
|
|
17
|
+
|
|
18
|
+
help = '''
|
|
19
|
+
# Auggie (Augment Code)
|
|
20
|
+
|
|
21
|
+
*The agentic CLI that goes where your code does*
|
|
22
|
+
|
|
23
|
+
## Features
|
|
24
|
+
|
|
25
|
+
- **Agent Client Protocol (ACP) Support**: Use Auggie in Zed, Neovim, Emacs, and other ACP-compatible editors
|
|
26
|
+
- **Autonomous Code Analysis**: Intelligently explore codebases and build working memory
|
|
27
|
+
- **Multi-Editor Integration**: Seamlessly integrates with your favorite development environment
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
**Documentation**: https://docs.augmentcode.com/cli/setup-auggie/install-auggie-cli
|
|
32
|
+
'''
|
|
33
|
+
|
|
34
|
+
[actions."*".install]
|
|
35
|
+
command = "npm install -g @augmentcode/auggie"
|
|
36
|
+
description = "Install Auggie CLI (requires Node 22+)"
|
|
37
|
+
|
|
38
|
+
[actions."*".login]
|
|
39
|
+
command = "auggie login"
|
|
40
|
+
description = "Login it Auggie (run once)"
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# CDH (Cloud Dev Harness) - Agent for A2TUI
|
|
2
|
+
# https://github.com/cloud-dev-harness/cdh
|
|
3
|
+
|
|
4
|
+
identity = "cdh.cloud-dev-harness"
|
|
5
|
+
name = "CDH Agent"
|
|
6
|
+
short_name = "cdh"
|
|
7
|
+
url = "https://github.com/cloud-dev-harness/cdh"
|
|
8
|
+
protocol = "acp"
|
|
9
|
+
author_name = "CDH Team"
|
|
10
|
+
author_url = "https://github.com/cloud-dev-harness"
|
|
11
|
+
publisher_name = "CDH Team"
|
|
12
|
+
publisher_url = "https://github.com/cloud-dev-harness"
|
|
13
|
+
type = "coding"
|
|
14
|
+
description = "Cloud Dev Harness - cloud-native development Agent framework with LLM provider integration"
|
|
15
|
+
tags = []
|
|
16
|
+
recommended = true
|
|
17
|
+
help = "CDH Agent - Cloud Dev Harness\n\nA cloud-native development Agent framework with LLM provider integration.\n\nSupported providers: MiniMax, Anthropic, OpenAI, DeepSeek, GLM, Ollama"
|
|
18
|
+
commands_module = "onecode.commands"
|
|
19
|
+
commands_prefix = "onecode:"
|
|
20
|
+
run_command."*" = "python3 -m onecode.agent.onecode_agent_acp"
|
|
21
|
+
|
|
22
|
+
[actions]
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Schema defined in agent_schema.py
|
|
2
|
+
# https://www.claude.com/product/claude-code
|
|
3
|
+
|
|
4
|
+
identity = "claude.com"
|
|
5
|
+
name = "Claude Code"
|
|
6
|
+
short_name = "claude"
|
|
7
|
+
url = "https://www.claude.com/product/claude-code"
|
|
8
|
+
protocol = "acp"
|
|
9
|
+
author_name = "Anthropic"
|
|
10
|
+
author_url = "https://www.anthropic.com/"
|
|
11
|
+
publisher_name = "Will McGugan"
|
|
12
|
+
publisher_url = "https://willmcgugan.github.io/"
|
|
13
|
+
type = "coding"
|
|
14
|
+
description = "Unleash Claude’s raw power directly in your terminal."
|
|
15
|
+
tags = []
|
|
16
|
+
run_command."*" = "claude-agent-acp"
|
|
17
|
+
|
|
18
|
+
help = '''
|
|
19
|
+
# Claude Code
|
|
20
|
+
|
|
21
|
+
Built for developers
|
|
22
|
+
Unleash Claude’s raw power directly in your terminal.
|
|
23
|
+
Search million-line codebases instantly.
|
|
24
|
+
Turn hours-long workflows into a single command.
|
|
25
|
+
Your tools.
|
|
26
|
+
Your workflow.
|
|
27
|
+
Your codebase, evolving at thought speed.
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
[ACP adapter for Claude Code](https://github.com/zed-industries/claude-code-acp) by Zed Industries.
|
|
31
|
+
|
|
32
|
+
'''
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
[actions."*".install]
|
|
36
|
+
command = "curl -fsSL https://claude.ai/install.sh | bash && npm install -g @zed-industries/claude-code-acp"
|
|
37
|
+
description = "Install Claude Code + ACP adapter"
|
|
38
|
+
|
|
39
|
+
[actions."*".install_acp]
|
|
40
|
+
command = "npm install -g @agentclientprotocol/claude-agent-acp"
|
|
41
|
+
description = "Install ACP adapter"
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Schema defined in agent_schema.py
|
|
2
|
+
# https://github.com/github/copilot-cli?locale=en-US
|
|
3
|
+
|
|
4
|
+
identity = "copilot.github.com"
|
|
5
|
+
name = "Copilot"
|
|
6
|
+
short_name = "copilot"
|
|
7
|
+
url = "https://github.com/github/copilot-cli"
|
|
8
|
+
protocol = "acp"
|
|
9
|
+
author_name = "GitHub"
|
|
10
|
+
author_url = "https://githib.com"
|
|
11
|
+
publisher_name = "Will McGugan"
|
|
12
|
+
publisher_url = "https://willmcgugan.github.io/"
|
|
13
|
+
type = "coding"
|
|
14
|
+
description = "The power of GitHub Copilot, now in your terminal."
|
|
15
|
+
tags = []
|
|
16
|
+
run_command."*" = "copilot --acp"
|
|
17
|
+
|
|
18
|
+
help = '''
|
|
19
|
+
# GitHub Copilot
|
|
20
|
+
|
|
21
|
+
GitHub Copilot CLI brings AI-powered coding assistance directly to your command line, enabling you to build, debug, and understand code through natural language conversations. Powered by the same agentic harness as GitHub's Copilot coding agent, it provides intelligent assistance while staying deeply integrated with your GitHub workflow.
|
|
22
|
+
|
|
23
|
+
Install vial the select below, or see the README for [alternative install methods](https://github.com/github/copilot-cli?tab=readme-ov-file#installation)
|
|
24
|
+
|
|
25
|
+
'''
|
|
26
|
+
|
|
27
|
+
[actions."*".install]
|
|
28
|
+
command = "npm install -g @github/copilot@prerelease"
|
|
29
|
+
description = "Install Copilot"
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Schema defined in agent_schema.py
|
|
2
|
+
# https://github.com/crow-cli/crow-cli
|
|
3
|
+
|
|
4
|
+
identity = "crowai.dev"
|
|
5
|
+
name = "crow-cli"
|
|
6
|
+
short_name = "crow-cli"
|
|
7
|
+
url = "https://crow-ai.dev"
|
|
8
|
+
protocol = "acp"
|
|
9
|
+
author_name = "Thomas Wood"
|
|
10
|
+
author_url = "https://crow-ai.dev"
|
|
11
|
+
publisher_name = "Thomas Wood"
|
|
12
|
+
publisher_url = "https://crow-ai.dev"
|
|
13
|
+
type = "coding"
|
|
14
|
+
description = "Minimal ACP Native Coding Agent. A reference implementation of the Agent Client Protocol with zero frameworks—just pure Python, OpenAI SDK, FastMCP, and SQLAlchemy."
|
|
15
|
+
tags = []
|
|
16
|
+
run_command."*" = "crow-cli acp"
|
|
17
|
+
|
|
18
|
+
help = '''
|
|
19
|
+
# crow-cli
|
|
20
|
+
|
|
21
|
+
Minimal ACP Native Coding Agent.
|
|
22
|
+
|
|
23
|
+
Run `uvx crow-cli init` to configure before running.
|
|
24
|
+
|
|
25
|
+
'''
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
[actions."*".install]
|
|
29
|
+
command = "uv tool install crow-cli --no-cache --python 3.14"
|
|
30
|
+
description = "Install crow-cli"
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
[actions."*".update]
|
|
34
|
+
command = "uv tool upgrade crow-cli --no-cache --python 3.14"
|
|
35
|
+
description = "Upgrade crow-cli"
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Schema defined in agent_schema.py
|
|
2
|
+
# https://cursor.com/docs/cli/acp
|
|
3
|
+
|
|
4
|
+
identity = "cursor.com"
|
|
5
|
+
name = "Cursor"
|
|
6
|
+
short_name = "cursor"
|
|
7
|
+
url = "https://cursor.com/docs/cli/acp"
|
|
8
|
+
protocol = "acp"
|
|
9
|
+
author_name = "Cursor"
|
|
10
|
+
author_url = "https://cursor.com"
|
|
11
|
+
publisher_name = "Will McGugan"
|
|
12
|
+
publisher_url = "https://willmcgugan.github.io/"
|
|
13
|
+
type = "coding"
|
|
14
|
+
description = "AI-powered coding assistant from Cursor, now in your terminal with native ACP support."
|
|
15
|
+
tags = []
|
|
16
|
+
run_command."*" = "agent acp"
|
|
17
|
+
|
|
18
|
+
help = '''
|
|
19
|
+
# Cursor
|
|
20
|
+
|
|
21
|
+
**AI-powered coding in your terminal**
|
|
22
|
+
|
|
23
|
+
Cursor CLI brings the power of Cursor's AI coding assistant to your command line with native Agent Client Protocol support.
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
⚠️ Run Login action after installing, to login via your browser.
|
|
28
|
+
|
|
29
|
+
**Documentation**: https://cursor.com/docs/cli/acp
|
|
30
|
+
'''
|
|
31
|
+
|
|
32
|
+
[actions."*".install]
|
|
33
|
+
command = "curl https://cursor.com/install -fsS | bash"
|
|
34
|
+
description = "Install Cursor CLI"
|
|
35
|
+
|
|
36
|
+
[actions."*".login]
|
|
37
|
+
command = "agent login"
|
|
38
|
+
description = "Login (must be done once)"
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
identity = "deepagents.langchain.com"
|
|
2
|
+
name = "Deep Agents"
|
|
3
|
+
short_name = "deepagents"
|
|
4
|
+
url = "https://github.com/langchain-ai/deepagents"
|
|
5
|
+
protocol = "acp"
|
|
6
|
+
author_name = "LangChain"
|
|
7
|
+
author_url = "https://www.langchain.com/"
|
|
8
|
+
publisher_name = "LangChain"
|
|
9
|
+
publisher_url = "https://www.langchain.com/"
|
|
10
|
+
type = "coding"
|
|
11
|
+
description = "LangChain's open-source terminal coding agent built on LangGraph. File operations, shell access, sub-agents, and MCP tool support."
|
|
12
|
+
tags = ["open-source"]
|
|
13
|
+
run_command."*" = "deepagents --acp"
|
|
14
|
+
|
|
15
|
+
help = '''
|
|
16
|
+
# Deep Agents
|
|
17
|
+
|
|
18
|
+
LangChain's open-source terminal coding agent built on LangGraph.
|
|
19
|
+
|
|
20
|
+
Supports file operations, shell access, subagents, MCP tools, and dynamic model switching.
|
|
21
|
+
|
|
22
|
+
[deepagents-cli](https://github.com/langchain-ai/deepagents/tree/main/libs/cli)
|
|
23
|
+
'''
|
|
24
|
+
|
|
25
|
+
[actions."*".install]
|
|
26
|
+
command = "uv tool install deepagents-cli -U --python 3.12"
|
|
27
|
+
bootstrap_uv = true
|
|
28
|
+
description = "Install deepagents-cli"
|
|
29
|
+
|
|
30
|
+
[actions."*".update]
|
|
31
|
+
command = "uv tool install deepagents-cli -U --python 3.12"
|
|
32
|
+
bootstrap_uv = true
|
|
33
|
+
description = "Update deepagents-cli"
|