@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
|
@@ -0,0 +1,662 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import fnmatch
|
|
4
|
+
import re
|
|
5
|
+
from dataclasses import dataclass, field
|
|
6
|
+
from enum import Enum
|
|
7
|
+
from typing import Optional
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class AgentMode(Enum):
|
|
11
|
+
PRIMARY = "primary"
|
|
12
|
+
SUBAGENT = "subagent"
|
|
13
|
+
ALL = "all"
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class AgentPermission(Enum):
|
|
17
|
+
ALLOW = "allow"
|
|
18
|
+
ASK = "ask"
|
|
19
|
+
DENY = "deny"
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
@dataclass
|
|
23
|
+
class ToolConfig:
|
|
24
|
+
name: str
|
|
25
|
+
permission: AgentPermission = AgentPermission.ALLOW
|
|
26
|
+
patterns: list[str] = field(default_factory=list)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
@dataclass
|
|
30
|
+
class AgentConfig:
|
|
31
|
+
name: str
|
|
32
|
+
description: str = ""
|
|
33
|
+
mode: AgentMode = AgentMode.PRIMARY
|
|
34
|
+
temperature: float = 0.3
|
|
35
|
+
top_p: Optional[float] = None
|
|
36
|
+
model: Optional[str] = None
|
|
37
|
+
max_turns: int = 0
|
|
38
|
+
steps: int = 0
|
|
39
|
+
hidden: bool = False
|
|
40
|
+
color: str = ""
|
|
41
|
+
permission_edit: AgentPermission = AgentPermission.ALLOW
|
|
42
|
+
permission_bash: AgentPermission = AgentPermission.ALLOW
|
|
43
|
+
permission_read: AgentPermission = AgentPermission.ALLOW
|
|
44
|
+
permission_webfetch: AgentPermission = AgentPermission.ALLOW
|
|
45
|
+
permission_websearch: AgentPermission = AgentPermission.DENY
|
|
46
|
+
permission_task: AgentPermission = AgentPermission.ALLOW
|
|
47
|
+
permission_doom_loop: AgentPermission = AgentPermission.ASK
|
|
48
|
+
permission_skill: AgentPermission = AgentPermission.ALLOW
|
|
49
|
+
permission_lsp: AgentPermission = AgentPermission.ALLOW
|
|
50
|
+
permission_question: AgentPermission = AgentPermission.ALLOW
|
|
51
|
+
permission_external_directory: AgentPermission = AgentPermission.DENY
|
|
52
|
+
permission_glob: AgentPermission = AgentPermission.ALLOW
|
|
53
|
+
permission_grep: AgentPermission = AgentPermission.ALLOW
|
|
54
|
+
permission_list: AgentPermission = AgentPermission.ALLOW
|
|
55
|
+
permission_todowrite: AgentPermission = AgentPermission.ALLOW
|
|
56
|
+
tools: list[str] = field(default_factory=list)
|
|
57
|
+
disallowed_tools: list[str] = field(default_factory=list)
|
|
58
|
+
prompt_file: str = ""
|
|
59
|
+
bash_permissions: dict[str, str] = field(default_factory=dict)
|
|
60
|
+
|
|
61
|
+
def get_tools_config(self) -> dict[str, AgentPermission]:
|
|
62
|
+
return {
|
|
63
|
+
"edit": self.permission_edit,
|
|
64
|
+
"bash": self.permission_bash,
|
|
65
|
+
"read": self.permission_read,
|
|
66
|
+
"webfetch": self.permission_webfetch,
|
|
67
|
+
"websearch": self.permission_websearch,
|
|
68
|
+
"task": self.permission_task,
|
|
69
|
+
"lsp": self.permission_lsp,
|
|
70
|
+
"skill": self.permission_skill,
|
|
71
|
+
"question": self.permission_question,
|
|
72
|
+
"glob": self.permission_glob,
|
|
73
|
+
"grep": self.permission_grep,
|
|
74
|
+
"list": self.permission_list,
|
|
75
|
+
"todowrite": self.permission_todowrite,
|
|
76
|
+
"external_directory": self.permission_external_directory,
|
|
77
|
+
"doom_loop": self.permission_doom_loop,
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
def should_ask_for_edit(self) -> bool:
|
|
81
|
+
return self.permission_edit == AgentPermission.ASK
|
|
82
|
+
|
|
83
|
+
def should_ask_for_bash(self) -> bool:
|
|
84
|
+
return self.permission_bash == AgentPermission.ASK
|
|
85
|
+
|
|
86
|
+
def tool_allowed(self, tool_name: str) -> bool:
|
|
87
|
+
if self.tools:
|
|
88
|
+
return tool_name in self.tools
|
|
89
|
+
if self.disallowed_tools:
|
|
90
|
+
return tool_name not in self.disallowed_tools
|
|
91
|
+
return True
|
|
92
|
+
|
|
93
|
+
def get_bash_permission(self, command: str) -> AgentPermission:
|
|
94
|
+
for pattern, action in self.bash_permissions.items():
|
|
95
|
+
if fnmatch.fnmatch(command, pattern) or fnmatch.fnmatch(command.split()[0] if command.split() else "", pattern):
|
|
96
|
+
if action == "allow":
|
|
97
|
+
return AgentPermission.ALLOW
|
|
98
|
+
elif action == "ask":
|
|
99
|
+
return AgentPermission.ASK
|
|
100
|
+
elif action == "deny":
|
|
101
|
+
return AgentPermission.DENY
|
|
102
|
+
return self.permission_bash
|
|
103
|
+
|
|
104
|
+
def get_effective_max_turns(self) -> int:
|
|
105
|
+
if self.steps > 0:
|
|
106
|
+
return min(self.steps, self.max_turns) if self.max_turns > 0 else self.steps
|
|
107
|
+
return self.max_turns
|
|
108
|
+
|
|
109
|
+
def is_hidden(self) -> bool:
|
|
110
|
+
return self.hidden
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
class BuildAgent(AgentConfig):
|
|
114
|
+
def __init__(self):
|
|
115
|
+
super().__init__(
|
|
116
|
+
name="build",
|
|
117
|
+
description="Full development agent with all tools enabled. Edits and shell commands require user approval. Uses CoT reasoning + ReAct loop with Task-first delegation.",
|
|
118
|
+
mode=AgentMode.PRIMARY,
|
|
119
|
+
permission_edit=AgentPermission.ASK,
|
|
120
|
+
permission_bash=AgentPermission.ASK,
|
|
121
|
+
permission_read=AgentPermission.ALLOW,
|
|
122
|
+
permission_webfetch=AgentPermission.ALLOW,
|
|
123
|
+
permission_websearch=AgentPermission.ALLOW,
|
|
124
|
+
max_turns=10,
|
|
125
|
+
steps=0,
|
|
126
|
+
tools=[],
|
|
127
|
+
)
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
class PlanAgent(AgentConfig):
|
|
131
|
+
def __init__(self):
|
|
132
|
+
super().__init__(
|
|
133
|
+
name="plan",
|
|
134
|
+
description="Plan mode: CoT + ReAct (思考→行动→观察) agent with hard plan gate and Task-first delegation. Creates task plans first, presents for user review, then delegates execution via Task subagents with Human-in-the-loop.",
|
|
135
|
+
mode=AgentMode.PRIMARY,
|
|
136
|
+
permission_edit=AgentPermission.ASK,
|
|
137
|
+
permission_bash=AgentPermission.ASK,
|
|
138
|
+
permission_read=AgentPermission.ALLOW,
|
|
139
|
+
permission_webfetch=AgentPermission.ALLOW,
|
|
140
|
+
permission_websearch=AgentPermission.ALLOW,
|
|
141
|
+
max_turns=20,
|
|
142
|
+
temperature=0.2,
|
|
143
|
+
tools=[],
|
|
144
|
+
)
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
class SoloAgent(AgentConfig):
|
|
148
|
+
def __init__(self):
|
|
149
|
+
super().__init__(
|
|
150
|
+
name="solo",
|
|
151
|
+
description="Independent agent that plans first, then acts with full tool access. Uses CoT reasoning + ReAct loop with Task-first delegation. Shell commands require user approval.",
|
|
152
|
+
mode=AgentMode.PRIMARY,
|
|
153
|
+
permission_edit=AgentPermission.ALLOW,
|
|
154
|
+
permission_bash=AgentPermission.ASK,
|
|
155
|
+
permission_read=AgentPermission.ALLOW,
|
|
156
|
+
permission_webfetch=AgentPermission.ALLOW,
|
|
157
|
+
permission_websearch=AgentPermission.ALLOW,
|
|
158
|
+
max_turns=10,
|
|
159
|
+
temperature=0.3,
|
|
160
|
+
tools=[],
|
|
161
|
+
)
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
class GeneralAgent(AgentConfig):
|
|
165
|
+
def __init__(self):
|
|
166
|
+
super().__init__(
|
|
167
|
+
name="general",
|
|
168
|
+
description="General-purpose subagent for complex multi-step tasks. Executes focused work delegated by parent agent via Task tool. Uses CoT + ReAct internally.",
|
|
169
|
+
mode=AgentMode.SUBAGENT,
|
|
170
|
+
permission_edit=AgentPermission.ALLOW,
|
|
171
|
+
permission_bash=AgentPermission.ALLOW,
|
|
172
|
+
permission_read=AgentPermission.ALLOW,
|
|
173
|
+
permission_todowrite=AgentPermission.DENY,
|
|
174
|
+
tools=[],
|
|
175
|
+
)
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
class ExploreAgent(AgentConfig):
|
|
179
|
+
def __init__(self):
|
|
180
|
+
super().__init__(
|
|
181
|
+
name="explore",
|
|
182
|
+
description="Fast read-only agent for exploring codebases",
|
|
183
|
+
mode=AgentMode.SUBAGENT,
|
|
184
|
+
permission_edit=AgentPermission.DENY,
|
|
185
|
+
permission_bash=AgentPermission.DENY,
|
|
186
|
+
permission_read=AgentPermission.ALLOW,
|
|
187
|
+
hidden=True,
|
|
188
|
+
tools=[],
|
|
189
|
+
)
|
|
190
|
+
|
|
191
|
+
|
|
192
|
+
class ScoutAgent(AgentConfig):
|
|
193
|
+
def __init__(self):
|
|
194
|
+
super().__init__(
|
|
195
|
+
name="scout",
|
|
196
|
+
description="Read-only agent for external docs and dependency research",
|
|
197
|
+
mode=AgentMode.SUBAGENT,
|
|
198
|
+
permission_edit=AgentPermission.DENY,
|
|
199
|
+
permission_bash=AgentPermission.DENY,
|
|
200
|
+
permission_read=AgentPermission.ALLOW,
|
|
201
|
+
permission_webfetch=AgentPermission.ALLOW,
|
|
202
|
+
permission_websearch=AgentPermission.ALLOW,
|
|
203
|
+
hidden=True,
|
|
204
|
+
tools=[],
|
|
205
|
+
)
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
class CompactionAgent(AgentConfig):
|
|
209
|
+
def __init__(self):
|
|
210
|
+
super().__init__(
|
|
211
|
+
name="compaction",
|
|
212
|
+
description="System agent that compacts long context into a smaller summary",
|
|
213
|
+
mode=AgentMode.PRIMARY,
|
|
214
|
+
permission_edit=AgentPermission.DENY,
|
|
215
|
+
permission_bash=AgentPermission.DENY,
|
|
216
|
+
permission_read=AgentPermission.ALLOW,
|
|
217
|
+
permission_webfetch=AgentPermission.DENY,
|
|
218
|
+
permission_websearch=AgentPermission.DENY,
|
|
219
|
+
permission_task=AgentPermission.DENY,
|
|
220
|
+
permission_skill=AgentPermission.DENY,
|
|
221
|
+
hidden=True,
|
|
222
|
+
temperature=0.1,
|
|
223
|
+
tools=["read"],
|
|
224
|
+
)
|
|
225
|
+
|
|
226
|
+
|
|
227
|
+
class TitleAgent(AgentConfig):
|
|
228
|
+
def __init__(self):
|
|
229
|
+
super().__init__(
|
|
230
|
+
name="title",
|
|
231
|
+
description="System agent that generates short session titles",
|
|
232
|
+
mode=AgentMode.PRIMARY,
|
|
233
|
+
permission_edit=AgentPermission.DENY,
|
|
234
|
+
permission_bash=AgentPermission.DENY,
|
|
235
|
+
permission_read=AgentPermission.ALLOW,
|
|
236
|
+
permission_webfetch=AgentPermission.DENY,
|
|
237
|
+
permission_websearch=AgentPermission.DENY,
|
|
238
|
+
permission_task=AgentPermission.DENY,
|
|
239
|
+
permission_skill=AgentPermission.DENY,
|
|
240
|
+
hidden=True,
|
|
241
|
+
temperature=0.1,
|
|
242
|
+
max_turns=1,
|
|
243
|
+
tools=["read"],
|
|
244
|
+
)
|
|
245
|
+
|
|
246
|
+
|
|
247
|
+
class SummaryAgent(AgentConfig):
|
|
248
|
+
def __init__(self):
|
|
249
|
+
super().__init__(
|
|
250
|
+
name="summary",
|
|
251
|
+
description="System agent that creates session summaries",
|
|
252
|
+
mode=AgentMode.PRIMARY,
|
|
253
|
+
permission_edit=AgentPermission.DENY,
|
|
254
|
+
permission_bash=AgentPermission.DENY,
|
|
255
|
+
permission_read=AgentPermission.ALLOW,
|
|
256
|
+
permission_webfetch=AgentPermission.DENY,
|
|
257
|
+
permission_websearch=AgentPermission.DENY,
|
|
258
|
+
permission_task=AgentPermission.DENY,
|
|
259
|
+
permission_skill=AgentPermission.DENY,
|
|
260
|
+
hidden=True,
|
|
261
|
+
temperature=0.1,
|
|
262
|
+
max_turns=2,
|
|
263
|
+
tools=["read"],
|
|
264
|
+
)
|
|
265
|
+
|
|
266
|
+
|
|
267
|
+
BUILT_IN_AGENTS = {
|
|
268
|
+
"build": BuildAgent,
|
|
269
|
+
"plan": PlanAgent,
|
|
270
|
+
"solo": SoloAgent,
|
|
271
|
+
"general": GeneralAgent,
|
|
272
|
+
"explore": ExploreAgent,
|
|
273
|
+
"scout": ScoutAgent,
|
|
274
|
+
"compaction": CompactionAgent,
|
|
275
|
+
"title": TitleAgent,
|
|
276
|
+
"summary": SummaryAgent,
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
|
|
280
|
+
def create_agent(agent_type: str) -> AgentConfig:
|
|
281
|
+
agent_cls = BUILT_IN_AGENTS.get(agent_type)
|
|
282
|
+
if agent_cls:
|
|
283
|
+
return agent_cls()
|
|
284
|
+
return BuildAgent()
|
|
285
|
+
|
|
286
|
+
|
|
287
|
+
def get_agent_by_name(name: str) -> Optional[AgentConfig]:
|
|
288
|
+
agent_cls = BUILT_IN_AGENTS.get(name)
|
|
289
|
+
if agent_cls:
|
|
290
|
+
return agent_cls()
|
|
291
|
+
return None
|
|
292
|
+
|
|
293
|
+
|
|
294
|
+
def get_system_prompt(agent_type: str) -> str:
|
|
295
|
+
agent = create_agent(agent_type)
|
|
296
|
+
lines = [
|
|
297
|
+
f"You are {agent.name}.",
|
|
298
|
+
agent.description,
|
|
299
|
+
]
|
|
300
|
+
|
|
301
|
+
if agent.should_ask_for_edit():
|
|
302
|
+
lines.append("- File edits require user approval")
|
|
303
|
+
if agent.should_ask_for_bash():
|
|
304
|
+
lines.append("- Shell commands require user approval")
|
|
305
|
+
|
|
306
|
+
return "\n".join(lines)
|
|
307
|
+
|
|
308
|
+
|
|
309
|
+
TOOL_DESCRIPTIONS = """
|
|
310
|
+
## Available Tools
|
|
311
|
+
|
|
312
|
+
### Tool Call Format (REQUIRED)
|
|
313
|
+
|
|
314
|
+
To call one or more tools in a single assistant turn, emit the structured
|
|
315
|
+
``<minimax:tool_call>`` block. Each tool call goes inside an
|
|
316
|
+
``<invoke name="ToolName">`` element with one or more
|
|
317
|
+
``<parameter name="arg">value</parameter>`` children. You may put multiple
|
|
318
|
+
``<invoke>`` blocks inside a single ``<minimax:tool_call>`` to run them in
|
|
319
|
+
parallel.
|
|
320
|
+
|
|
321
|
+
```xml
|
|
322
|
+
<minimax:tool_call>
|
|
323
|
+
<invoke name="Read">
|
|
324
|
+
<parameter name="path">SPEC.md</parameter>
|
|
325
|
+
</invoke>
|
|
326
|
+
<invoke name="Bash">
|
|
327
|
+
<parameter name="command">ls -la</parameter>
|
|
328
|
+
<parameter name="timeout">30</parameter>
|
|
329
|
+
</invoke>
|
|
330
|
+
</minimax:tool_call>
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
Rules:
|
|
334
|
+
- The outer wrapper is **always** ``<minimax:tool_call>...</minimax:tool_call>``.
|
|
335
|
+
- Parameter values are written **inline** (no JSON encoding).
|
|
336
|
+
- Escape only the five XML predefined entities: ``<`` ``>`` ``&``
|
|
337
|
+
``"`` ``'`` — do not invent new escapes.
|
|
338
|
+
- You may emit multiple tool calls in one block; the engine will execute
|
|
339
|
+
them in document order.
|
|
340
|
+
- Do NOT use bare ``{tool => "X", args => {...}}`` or
|
|
341
|
+
``[TOOL_CALL]...[/TOOL_CALL]`` formats — those are legacy and will be
|
|
342
|
+
parsed only as a fallback for old session replays.
|
|
343
|
+
|
|
344
|
+
### File Operations
|
|
345
|
+
- **Read**: read(path, offset=0, limit=0) - Read file contents. Returns content with line numbers.
|
|
346
|
+
- **Write**: write(path, content) - Create or overwrite file with content.
|
|
347
|
+
- **Edit**: edit(path, old_string, new_string) - Replace exact string in file. **CRITICAL**: old_string must be UNIQUE in the file — provide enough context (surrounding lines) to guarantee a single match. The edit WILL FAIL if old_string appears multiple times.
|
|
348
|
+
- **Insert**: insert(path, line, text) - Insert text at a specific line. line=-1 for beginning, line=0 to insert after line 0, etc. Must read file first to verify target location.
|
|
349
|
+
- **UndoEdit**: undo_edit(path) - Undo the most recent Edit/Insert on a file. Restores previous content.
|
|
350
|
+
- **Glob**: glob(pattern) - Find files matching a glob pattern (e.g., "**/*.py").
|
|
351
|
+
- **Grep**: grep(pattern, include=None) - Search for regex pattern in files.
|
|
352
|
+
- **List**: list(path=".") - List directory contents.
|
|
353
|
+
- **ApplyPatch**: apply_patch(patch) - Apply a patch file. Supports Add/Update/Move/Delete File markers.
|
|
354
|
+
|
|
355
|
+
### Shell
|
|
356
|
+
- **Bash**: bash(command, timeout=60) - Execute shell command. Returns stdout/stderr.
|
|
357
|
+
|
|
358
|
+
### Web
|
|
359
|
+
- **WebFetch**: webfetch(url, prompt) - Fetch URL content and extract info.
|
|
360
|
+
- **WebSearch**: websearch(query) - Search the web and return results.
|
|
361
|
+
|
|
362
|
+
### Agent
|
|
363
|
+
- **Task**: task(agent_type, prompt) - Spawn subagent to handle subtask.
|
|
364
|
+
- **Agent**: agent(calls, stop_on_error=True) - Execute a batch of tool calls as an atomic step. Each call includes {name, input}. Halts on first error when stop_on_error is true.
|
|
365
|
+
- **ToolSearch**: tool_search(query) - Search for available tools by keyword.
|
|
366
|
+
- **Skill**: skill(name) - Load skill by name.
|
|
367
|
+
|
|
368
|
+
### Communication
|
|
369
|
+
- **SendMessage**: send_message(message, attachments=[]) - Send a user-visible message during execution. Use to communicate status updates, findings, or results.
|
|
370
|
+
|
|
371
|
+
### Human Interaction
|
|
372
|
+
- **AskUser**: ask_user(question, context="", options=[]) - Ask the user a question. Use when you need:
|
|
373
|
+
- Approval before modifying or creating files (when permission_edit is ASK)
|
|
374
|
+
- Clarification on ambiguous requirements
|
|
375
|
+
- Confirmation before destructive operations
|
|
376
|
+
- Any time you need human input to continue
|
|
377
|
+
|
|
378
|
+
When asking for confirmation or a simple choice, **always provide `options`** with predefined choices instead of free-text input. Each option supports:
|
|
379
|
+
- `label` (str, required): Display text shown to the user
|
|
380
|
+
- `value` (str, required): Value returned when selected
|
|
381
|
+
- `key` (str, optional): Single-character keyboard shortcut (e.g. "y", "n", "1")
|
|
382
|
+
- `default` (bool, optional): Auto-select if user doesn't respond (set on at most one option)
|
|
383
|
+
|
|
384
|
+
Examples:
|
|
385
|
+
```
|
|
386
|
+
# Confirmation with options
|
|
387
|
+
ask_user(
|
|
388
|
+
question="Please confirm SPEC.md is correct?",
|
|
389
|
+
options=[
|
|
390
|
+
{"label": "✓ Confirm", "value": "confirmed", "key": "y", "default": true},
|
|
391
|
+
{"label": "✗ Needs changes", "value": "needs_changes", "key": "n"},
|
|
392
|
+
]
|
|
393
|
+
)
|
|
394
|
+
|
|
395
|
+
# Multiple choice
|
|
396
|
+
ask_user(
|
|
397
|
+
question="Which environment to deploy?",
|
|
398
|
+
options=[
|
|
399
|
+
{"label": "1. Development", "value": "dev", "key": "1"},
|
|
400
|
+
{"label": "2. Staging", "value": "staging", "key": "2", "default": true},
|
|
401
|
+
{"label": "3. Production", "value": "prod", "key": "3"},
|
|
402
|
+
]
|
|
403
|
+
)
|
|
404
|
+
```
|
|
405
|
+
|
|
406
|
+
### Skills (CDH)
|
|
407
|
+
- **Skill**: skill(name, arguments=[]) - Run a registered skill by name. Skills are markdown-based instruction sets with YAML frontmatter.
|
|
408
|
+
|
|
409
|
+
### MCP (CDH)
|
|
410
|
+
- **MCPTool**: mcp_tool(server, tool, arguments) - Call a tool on a connected MCP server.
|
|
411
|
+
- **MCPResources**: mcp_resources(server, action, uri) - List or read resources on a connected MCP server.
|
|
412
|
+
|
|
413
|
+
### LSP (CDH)
|
|
414
|
+
- **LSP**: lsp(command, file_path, action, line, character, query) - Get code intelligence from a Language Server. Supported actions: diagnostics, gotoDefinition, findReferences, hover, documentSymbol, workspaceSymbol, gotoImplementation, callHierarchy, incomingCalls, outgoingCalls.
|
|
415
|
+
|
|
416
|
+
### Cron (CDH)
|
|
417
|
+
- **CronCreate**: cron_create(name, interval_seconds, command) - Create a scheduled cron job.
|
|
418
|
+
- **CronList**: cron_list() - List all cron jobs.
|
|
419
|
+
- **CronRemove**: cron_remove(name) - Remove a cron job.
|
|
420
|
+
|
|
421
|
+
### Git (CDH)
|
|
422
|
+
- **Worktree**: worktree(action, path, branch) - Manage git worktrees: create, list, prune.
|
|
423
|
+
|
|
424
|
+
### Config (CDH)
|
|
425
|
+
- **ConfigRead**: config_read(key) - Read configuration values.
|
|
426
|
+
- **ConfigWrite**: config_write(key, value) - Set allowed configuration values (does NOT expose secrets).
|
|
427
|
+
|
|
428
|
+
### Tasks & Planning (CDH)
|
|
429
|
+
- **TaskCreate**: task_create(subject, description, activeForm="", metadata={}) - Create a task. Returns task id.
|
|
430
|
+
- **TaskGet**: task_get(taskId) - Retrieve a task by ID.
|
|
431
|
+
- **TaskList**: task_list() - List all tasks with status, owner, and blockers.
|
|
432
|
+
- **TaskUpdate**: task_update(taskId, subject, description, activeForm, status, owner, addBlocks, addBlockedBy, metadata, output) - Update task fields and dependencies.
|
|
433
|
+
- **TaskOutput**: task_output(task_id) - Get output from a task.
|
|
434
|
+
- **TaskStop**: task_stop(task_id) - Stop a running task.
|
|
435
|
+
- **TodoCreate**: todo_create(text) - Create a todo item. Returns todo id.
|
|
436
|
+
- **TodoList**: todo_list() - List all todos.
|
|
437
|
+
- **TodoComplete**: todo_complete(todo_id) - Mark a todo as complete.
|
|
438
|
+
"""
|
|
439
|
+
|
|
440
|
+
def filter_tool_descriptions(
|
|
441
|
+
allowlist: list[str] | None = None,
|
|
442
|
+
denylist: list[str] | None = None,
|
|
443
|
+
) -> str:
|
|
444
|
+
"""Return TOOL_DESCRIPTIONS filtered to only show the allowed tools.
|
|
445
|
+
|
|
446
|
+
When *allowlist* is non-empty, only those tool names are shown.
|
|
447
|
+
When *denylist* is non-empty, those tool names are hidden (their
|
|
448
|
+
description lines are removed, but category headers are kept).
|
|
449
|
+
If both are empty, the full tool list is returned.
|
|
450
|
+
"""
|
|
451
|
+
if not allowlist and not denylist:
|
|
452
|
+
return TOOL_DESCRIPTIONS
|
|
453
|
+
|
|
454
|
+
_TOOL_LINE_RE = re.compile(r'^- \*\*([^*]+)\*\*:')
|
|
455
|
+
|
|
456
|
+
lines = TOOL_DESCRIPTIONS.split("\n")
|
|
457
|
+
result_lines: list[str] = []
|
|
458
|
+
skip_this_line = False
|
|
459
|
+
|
|
460
|
+
for line in lines:
|
|
461
|
+
m = _TOOL_LINE_RE.match(line.lstrip())
|
|
462
|
+
if m:
|
|
463
|
+
tool_name = m.group(1).strip()
|
|
464
|
+
if allowlist:
|
|
465
|
+
skip_this_line = tool_name not in allowlist
|
|
466
|
+
elif denylist:
|
|
467
|
+
skip_this_line = tool_name in denylist
|
|
468
|
+
else:
|
|
469
|
+
skip_this_line = False
|
|
470
|
+
else:
|
|
471
|
+
skip_this_line = False
|
|
472
|
+
|
|
473
|
+
if not skip_this_line:
|
|
474
|
+
result_lines.append(line)
|
|
475
|
+
|
|
476
|
+
return "\n".join(result_lines)
|
|
477
|
+
|
|
478
|
+
|
|
479
|
+
REACT_CYCLE = """
|
|
480
|
+
## ReAct Cycle — 思考 → 行动 → 观察
|
|
481
|
+
|
|
482
|
+
You operate in a **ReAct loop with Chain of Thought (CoT) reasoning**:
|
|
483
|
+
|
|
484
|
+
```
|
|
485
|
+
┌────────────────────────────────────────────────────┐
|
|
486
|
+
│ ╭──────────╮ ╭──────────╮ ╭──────────╮ │
|
|
487
|
+
│ │ Thought │ → │ Action │ → │Observa- │ │
|
|
488
|
+
│ │ (思考) │ │ (行动) │ │tion(观察)│ ──→ │
|
|
489
|
+
│ ╰──────────╯ ╰──────────╯ ╰──────────╯ │
|
|
490
|
+
│ ↑ ↓ (cycle continues) │
|
|
491
|
+
│ │ │
|
|
492
|
+
│ └──────── Feedback Loop ────────────────────┘ │
|
|
493
|
+
└────────────────────────────────────────────────────┘
|
|
494
|
+
```
|
|
495
|
+
|
|
496
|
+
### Thought Phase (思考阶段)
|
|
497
|
+
Before any action, reason step by step inside `<thinking>`:
|
|
498
|
+
1. **Current state**: What do I know? What has been done? What are the results?
|
|
499
|
+
2. **Goal**: What needs to be accomplished next?
|
|
500
|
+
3. **Plan**: How should I approach it? What's the smallest next step?
|
|
501
|
+
4. **Tool selection**: Which tool is appropriate?
|
|
502
|
+
- **For multi-step or independent work → always use `Task`** to spawn a subagent
|
|
503
|
+
- For simple queries → use read/search tools directly
|
|
504
|
+
- For execution (Write/Edit/Insert/ApplyPatch/Bash) → prefer delegating via `Task`
|
|
505
|
+
|
|
506
|
+
### Action Phase (行动阶段)
|
|
507
|
+
Execute the chosen action. **Action types (in priority order)**:
|
|
508
|
+
1. **Delegate via Task**: `Task(agent_type="general"|"explore"|"scout", prompt="...")` — **preferred for any substantial work**. Multi-step logic, file modifications, research, and any task that needs >1-2 tool calls should be delegated.
|
|
509
|
+
2. **Plan**: `task_create()` / `task_update()` / `todo_create()` to organize the work DAG.
|
|
510
|
+
3. **Research**: `Read()` / `Grep()` / `Glob()` / `WebFetch()` / `WebSearch()` for information gathering.
|
|
511
|
+
4. **Direct execute**: Only for trivial single-step operations that cannot justify a subagent.
|
|
512
|
+
|
|
513
|
+
### Observation Phase (观察阶段)
|
|
514
|
+
The tool result IS your observation. Process it:
|
|
515
|
+
- **Success**: Note key outputs, update task status, move to next step
|
|
516
|
+
- **Error**: Diagnose root cause, decide: retry with fix | modify plan | ask user
|
|
517
|
+
- **Partial**: Extract what worked, adjust approach for remaining work
|
|
518
|
+
|
|
519
|
+
### Core Rules
|
|
520
|
+
- **ALL reasoning goes in `<thinking>`**: Never narrate "I will now..." in visible text
|
|
521
|
+
- **Prefer Task over direct execution**: File edits, multi-step logic, research → always use `Task()`
|
|
522
|
+
- **One responsibility per Task**: Each subagent should have a clear, focused goal
|
|
523
|
+
- **Pass context**: Include relevant context (file paths, findings) in Task prompts
|
|
524
|
+
- **CoT every cycle**: Every turn starts with `<thinking>` reasoning before any action
|
|
525
|
+
"""
|
|
526
|
+
|
|
527
|
+
PLAN_INSTRUCTIONS = """
|
|
528
|
+
## ReAct Workflow (Thought → Action → Observation)
|
|
529
|
+
|
|
530
|
+
The agent is a **ReAct** implementation: each cycle is **Thought → Action → Observation**.
|
|
531
|
+
**Action always delegates to `Task` subagents for any substantial work.**
|
|
532
|
+
**Human-in-the-loop** means you involve the user at key decision points.
|
|
533
|
+
|
|
534
|
+
```
|
|
535
|
+
Loop:
|
|
536
|
+
Thought → Reason step by step (CoT) inside <thinking>
|
|
537
|
+
Always ask: "Should I delegate this to a Task subagent?"
|
|
538
|
+
Action → Prefer Task(agent_type, prompt) for multi-step work
|
|
539
|
+
Only use direct tools for trivial single-step operations
|
|
540
|
+
Observation → Incorporate results into the next Thought
|
|
541
|
+
```
|
|
542
|
+
|
|
543
|
+
Plan/Build/Solo are different configurations of this same ReAct engine. The
|
|
544
|
+
difference is how strictly planning is enforced before execution:
|
|
545
|
+
- **plan** mode: hard gate — execution tools blocked until a task plan exists
|
|
546
|
+
- **build**/**solo** mode: soft gate — execution allowed but planning encouraged
|
|
547
|
+
|
|
548
|
+
**Task-first principle**: Any action that requires >1 tool call or involves
|
|
549
|
+
file modification MUST be delegated to a `Task` subagent. Direct execution
|
|
550
|
+
(Write/Edit/Insert/ApplyPatch/Bash) is only for trivial single-step operations.
|
|
551
|
+
|
|
552
|
+
---
|
|
553
|
+
|
|
554
|
+
### Step 1: Think (CoT) — Chain of Thought Reasoning
|
|
555
|
+
|
|
556
|
+
Analyze the request with step-by-step reasoning before any action.
|
|
557
|
+
|
|
558
|
+
- Wrap ALL reasoning in `<thinking>...</thinking>` — visible text is for the user only
|
|
559
|
+
- Think step by step: What's the goal? What's the current state? What's the best approach?
|
|
560
|
+
- **Always consider**: "Can this be delegated to a Task subagent?"
|
|
561
|
+
- Read relevant files, grep for patterns, glob for structure
|
|
562
|
+
- Use `webfetch`/`websearch` for external APIs or docs
|
|
563
|
+
- Delegate deep research to `explore`/`scout` subagents via `task()`
|
|
564
|
+
- Ask the user via `ask_user()` if requirements are ambiguous
|
|
565
|
+
- Do NOT create tasks yet — first understand what is needed
|
|
566
|
+
|
|
567
|
+
---
|
|
568
|
+
|
|
569
|
+
### Step 2: Act (Plan) — Create the Task Plan
|
|
570
|
+
|
|
571
|
+
Once you understand the work, create a complete task plan via `task_create()`.
|
|
572
|
+
|
|
573
|
+
**Task Granularity Rules**
|
|
574
|
+
- One task = one concern (e.g. "Create User model", "Add login API endpoint")
|
|
575
|
+
- Each task: **delegate to a Task subagent**. If a task needs >5 tool calls, split it.
|
|
576
|
+
- Every task must have a **clear, verifiable completion criterion**
|
|
577
|
+
- Use `todo_create()` only for truly trivial items (single config change, one quick check)
|
|
578
|
+
|
|
579
|
+
**Creating Tasks**
|
|
580
|
+
```
|
|
581
|
+
task_create(subject="<verb + noun>", description="<what + acceptance criteria>",
|
|
582
|
+
metadata={"priority": "high|medium|low", "effort": "small|medium|large"})
|
|
583
|
+
```
|
|
584
|
+
- Set `addBlockedBy` on dependent tasks so the dependency DAG is clear
|
|
585
|
+
- **Create ALL tasks upfront** before presenting the plan to the user
|
|
586
|
+
|
|
587
|
+
**Present Plan for Review (Human-in-the-loop)**
|
|
588
|
+
After creating all tasks, use `send_message()` to summarize the plan, then
|
|
589
|
+
`ask_user()` to get approval before executing:
|
|
590
|
+
```
|
|
591
|
+
send_message("Plan: 1. Setup DB model 2. Add API endpoint 3. Write tests")
|
|
592
|
+
ask_user("Shall I proceed with executing this plan?")
|
|
593
|
+
```
|
|
594
|
+
Wait for user approval before moving to execution.
|
|
595
|
+
|
|
596
|
+
---
|
|
597
|
+
|
|
598
|
+
### Step 3: Act (Execute) — Delegate to Task Subagents
|
|
599
|
+
|
|
600
|
+
Execute by **delegating to Task subagents** rather than using direct tools.
|
|
601
|
+
|
|
602
|
+
- **PREFERRED**: `Task(agent_type="general", prompt="Detailed instructions with context...")`
|
|
603
|
+
- Use `general` subagent for implementation work, `explore` for code search, `scout` for research
|
|
604
|
+
- Pass enough context in the prompt: relevant file paths, code snippets, requirements
|
|
605
|
+
- Update task status: `pending` → `in_progress` → `completed`
|
|
606
|
+
- Use `task_update(..., output=...)` to pass results to downstream tasks
|
|
607
|
+
- Direct execution tools (Write/Edit/Insert/ApplyPatch/Bash) should be avoided
|
|
608
|
+
in favor of `Task` delegation. Only use them for truly trivial operations.
|
|
609
|
+
- After each task, report progress via `send_message()` to keep the user in the loop
|
|
610
|
+
|
|
611
|
+
---
|
|
612
|
+
|
|
613
|
+
### Step 4: Observe — Feed Results Back
|
|
614
|
+
|
|
615
|
+
After every Action, the tool result is your **Observation**. Use it to inform the
|
|
616
|
+
next Thought:
|
|
617
|
+
- Task subagent completed → review SUMMARY/CHANGES/EVIDENCE/RISKS/BLOCKERS sections
|
|
618
|
+
- Task creation succeeded → proceed to present plan or delegate execution
|
|
619
|
+
- Error occurred → diagnose and decide: retry, modify plan, or ask the user
|
|
620
|
+
- User denied an action → adapt the task plan accordingly
|
|
621
|
+
|
|
622
|
+
---
|
|
623
|
+
|
|
624
|
+
### Rules
|
|
625
|
+
|
|
626
|
+
- **No top-level planning prose**: All planning goes through task/todo tools so the UI renders it.
|
|
627
|
+
- **CoT in `<thinking>`**: Every turn starts with chain-of-thought reasoning inside `<thinking>`. Never narrate "I will now…" in visible text.
|
|
628
|
+
- **Task-first**: Any operation needing >1 tool call → delegate via `Task()`. Direct tool use is exceptional.
|
|
629
|
+
- **Task status discipline**: `pending` → `in_progress` → `completed`. Every task transitions through all three.
|
|
630
|
+
- **No execution without a plan**: Write/Edit/Insert/ApplyPatch/Bash require tasks. Create tasks first.
|
|
631
|
+
- **Human at key decisions**: Present the plan, get approval, then execute. Report progress as you go.
|
|
632
|
+
"""
|
|
633
|
+
|
|
634
|
+
COMPACTION_INSTRUCTIONS = """
|
|
635
|
+
## Context Compaction
|
|
636
|
+
|
|
637
|
+
You are a compaction agent. Your job is to summarize the conversation history into a concise format that preserves key information while minimizing token usage.
|
|
638
|
+
|
|
639
|
+
Output a summary with these sections:
|
|
640
|
+
- **Summary**: Brief overview of what has been discussed/accomplished
|
|
641
|
+
- **Key Decisions**: Important choices made and their rationale
|
|
642
|
+
- **Remaining Tasks**: What still needs to be done
|
|
643
|
+
- **Context Needed**: Information required to continue the work
|
|
644
|
+
|
|
645
|
+
Keep each section concise. Use bullet points where possible.
|
|
646
|
+
"""
|
|
647
|
+
|
|
648
|
+
TITLE_INSTRUCTIONS = """
|
|
649
|
+
Generate a short, descriptive title (max 5 words) for this conversation.
|
|
650
|
+
The title should capture the main topic or task being worked on.
|
|
651
|
+
Only output the title, nothing else.
|
|
652
|
+
"""
|
|
653
|
+
|
|
654
|
+
SUMMARY_INSTRUCTIONS = """
|
|
655
|
+
Create a summary of this conversation session. Include:
|
|
656
|
+
- What was the user trying to accomplish
|
|
657
|
+
- What was done
|
|
658
|
+
- What was the outcome
|
|
659
|
+
- Any important notes for future sessions
|
|
660
|
+
|
|
661
|
+
Keep it concise but informative.
|
|
662
|
+
"""
|