@scemoon/cdh 1.0.6 → 1.0.7
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/package.json +2 -2
- package/ai-dlc-skill/SKILL.md +0 -77
- package/ai-dlc-skill/agents/deliver-agent.md +0 -24
- package/ai-dlc-skill/agents/master.md +0 -50
- package/ai-dlc-skill/agents/plan-agent.md +0 -23
- package/ai-dlc-skill/agents/understand-agent.md +0 -23
- package/ai-dlc-skill/agents/verify-agent.md +0 -27
- package/ai-dlc-skill/architecture/project-structure.md +0 -78
- package/ai-dlc-skill/brownfield/README.md +0 -30
- package/ai-dlc-skill/brownfield/generate-context.sh +0 -64
- package/ai-dlc-skill/brownfield/scripts/deps.sh +0 -27
- package/ai-dlc-skill/brownfield/scripts/discover.sh +0 -34
- package/ai-dlc-skill/brownfield/scripts/extract-api.sh +0 -45
- package/ai-dlc-skill/components/backend.md +0 -34
- package/ai-dlc-skill/components/desktop.md +0 -30
- package/ai-dlc-skill/components/mya.md +0 -29
- package/ai-dlc-skill/components/native.md +0 -30
- package/ai-dlc-skill/components/tta.md +0 -29
- package/ai-dlc-skill/components/web.md +0 -31
- package/ai-dlc-skill/components/wxa.md +0 -29
- package/ai-dlc-skill/contracts/README.md +0 -25
- package/ai-dlc-skill/core/adaptive-flow.md +0 -36
- package/ai-dlc-skill/core/security.md +0 -29
- package/ai-dlc-skill/cross-tool/cline/export.sh +0 -31
- package/ai-dlc-skill/cross-tool/copilot/export.sh +0 -47
- package/ai-dlc-skill/cross-tool/cursor/export.sh +0 -32
- package/ai-dlc-skill/cross-tool/export.sh +0 -22
- package/ai-dlc-skill/cross-tool/onecode/config.yaml.tpl +0 -17
- package/ai-dlc-skill/cross-tool/onecode/export-skills.sh +0 -35
- package/ai-dlc-skill/cross-tool/onecode/export.sh +0 -54
- package/ai-dlc-skill/phases/deliver/entry.md +0 -26
- package/ai-dlc-skill/phases/deliver/lifecycle.md +0 -185
- package/ai-dlc-skill/phases/deliver/prompt.md +0 -40
- package/ai-dlc-skill/phases/deliver/rules.md +0 -61
- package/ai-dlc-skill/phases/plan/entry.md +0 -25
- package/ai-dlc-skill/phases/plan/lifecycle.md +0 -204
- package/ai-dlc-skill/phases/plan/prompt.md +0 -38
- package/ai-dlc-skill/phases/plan/rules.md +0 -25
- package/ai-dlc-skill/phases/understand/entry.md +0 -26
- package/ai-dlc-skill/phases/understand/lifecycle.md +0 -184
- package/ai-dlc-skill/phases/understand/prompt.md +0 -41
- package/ai-dlc-skill/phases/understand/rules.md +0 -37
- package/ai-dlc-skill/phases/verify/entry.md +0 -26
- package/ai-dlc-skill/phases/verify/lifecycle.md +0 -192
- package/ai-dlc-skill/phases/verify/prompt.md +0 -43
- package/ai-dlc-skill/phases/verify/rules.md +0 -73
- package/ai-dlc-skill/practices/bdd.md +0 -91
- package/ai-dlc-skill/practices/sdd.md +0 -84
- package/ai-dlc-skill/practices/tdd.md +0 -95
- package/ai-dlc-skill/providers/README.md +0 -114
- package/ai-dlc-skill/providers/aliyun/deployment.yaml +0 -66
- package/ai-dlc-skill/providers/aliyun/preview.yaml +0 -84
- package/ai-dlc-skill/providers/aliyun/provider.yaml +0 -160
- package/ai-dlc-skill/providers/tcb/deployment.yaml +0 -69
- package/ai-dlc-skill/providers/tcb/preview.yaml +0 -83
- package/ai-dlc-skill/providers/tcb/provider.yaml +0 -172
- package/ai-dlc-skill/requirements.md +0 -140
- package/ai-dlc-skill/skill.yaml +0 -147
- package/ai-dlc-skill/templates/integration/CHANGELOG.md +0 -41
- package/ai-dlc-skill/templates/integration/asyncapi.yaml +0 -43
- package/ai-dlc-skill/templates/integration/contract-diff.md +0 -63
- package/ai-dlc-skill/templates/integration/contract-spec.md +0 -49
- package/ai-dlc-skill/templates/integration/openapi.yaml +0 -18
- package/ai-dlc-skill/templates/integration/runtime-contract.yaml +0 -36
- package/ai-dlc-skill/templates/plan/design.md +0 -49
- package/ai-dlc-skill/templates/plan/task-list.md +0 -32
- package/ai-dlc-skill/templates/project/README.md +0 -126
- package/ai-dlc-skill/templates/project/template.md +0 -119
- package/ai-dlc-skill/templates/understand/feature.feature +0 -23
- package/ai-dlc-skill/templates/understand/intent.md +0 -29
- package/ai-dlc-skill/templates/understand/spec-delta.md +0 -47
- package/ai-dlc-skill/templates/verify/test-unit.py +0 -27
- package/ai-dlc-skill/walkthrough/collect.sh +0 -50
- package/ai-dlc-skill/walkthrough/template.md +0 -54
- package/ai-dlc-skill/workflows/ai-dlc.yaml +0 -110
- package/ai-dlc-skill/workflows/deployment.yaml +0 -199
- package/cdh/__init__.py +0 -0
- package/cdh/__main__.py +0 -4
- package/cdh/__pycache__/__init__.cpython-314.pyc +0 -0
- package/cdh/__pycache__/cdh_mcp_injector.cpython-314.pyc +0 -0
- package/cdh/__pycache__/cdh_mcp_loader.cpython-314.pyc +0 -0
- package/cdh/__pycache__/cdh_mcp_manager.cpython-314.pyc +0 -0
- package/cdh/__pycache__/cdh_session_aggregator.cpython-314.pyc +0 -0
- package/cdh/__pycache__/cdh_skill_loader.cpython-314.pyc +0 -0
- package/cdh/__pycache__/cdh_skill_manager.cpython-314.pyc +0 -0
- package/cdh/__pycache__/cli.cpython-313.pyc +0 -0
- package/cdh/__pycache__/cli.cpython-314.pyc +0 -0
- package/cdh/__pycache__/scaffold.cpython-314.pyc +0 -0
- package/cdh/cdh_mcp_injector.py +0 -115
- package/cdh/cdh_mcp_loader.py +0 -67
- package/cdh/cdh_mcp_manager.py +0 -73
- package/cdh/cdh_session_aggregator.py +0 -258
- package/cdh/cdh_skill_manager.py +0 -105
- package/cdh/cli.py +0 -807
- package/cdh/scaffold.py +0 -728
- package/onecode/__init__.py +0 -1
- package/onecode/__main__.py +0 -4
- 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__/migrate.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_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__/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__/project_doc.cpython-314.pyc +0 -0
- package/onecode/agent/__pycache__/session.cpython-314.pyc +0 -0
- package/onecode/agent/agents/__init__.py +0 -29
- 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 +0 -589
- package/onecode/agent/attachments.py +0 -112
- package/onecode/agent/cdh_loader.py +0 -267
- package/onecode/agent/context.py +0 -343
- package/onecode/agent/engine.py +0 -2700
- package/onecode/agent/hooks.py +0 -86
- package/onecode/agent/onecode_agent_acp.py +0 -2743
- package/onecode/agent/onecode_agent_acp.py.bak +0 -2447
- package/onecode/agent/permissions.py +0 -150
- package/onecode/agent/permissions_store.py +0 -62
- package/onecode/agent/project_doc.py +0 -19
- package/onecode/agent/session.py +0 -195
- package/onecode/agent/snapshot.py +0 -144
- package/onecode/agent/tools/__init__.py +0 -17
- 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__/todo_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 +0 -132
- package/onecode/agent/tools/apply_patch_tool.py +0 -138
- package/onecode/agent/tools/bash_tool.py +0 -111
- package/onecode/agent/tools/communication_tools.py +0 -148
- package/onecode/agent/tools/config_tool.py +0 -130
- package/onecode/agent/tools/cron_tools.py +0 -178
- package/onecode/agent/tools/errors.py +0 -17
- package/onecode/agent/tools/file_ops.py +0 -221
- package/onecode/agent/tools/file_tools.py +0 -225
- package/onecode/agent/tools/git_tools.py +0 -88
- package/onecode/agent/tools/lsp_tools.py +0 -404
- package/onecode/agent/tools/mcp_tools.py +0 -127
- package/onecode/agent/tools/permission_handler.py +0 -46
- package/onecode/agent/tools/permissions.py +0 -77
- package/onecode/agent/tools/protocol.py +0 -20
- package/onecode/agent/tools/registry.py +0 -201
- package/onecode/agent/tools/sandbox.py +0 -358
- package/onecode/agent/tools/schema_validation.py +0 -100
- package/onecode/agent/tools/skill_tools.py +0 -52
- package/onecode/agent/tools/todo_tools.py +0 -207
- package/onecode/agent/tools/web_tools.py +0 -169
- package/onecode/builtin_skills/agent-browser/SKILL.md +0 -212
- package/onecode/builtin_skills/agent-browser/skill.yaml +0 -8
- package/onecode/builtin_skills/git/SKILL.md +0 -64
- package/onecode/builtin_skills/git/skill.yaml +0 -7
- package/onecode/builtin_skills/shell/SKILL.md +0 -58
- package/onecode/builtin_skills/shell/skill.yaml +0 -8
- package/onecode/builtin_skills/skill-creator/SKILL.md +0 -106
- package/onecode/builtin_skills/skill-creator/skill.yaml +0 -8
- package/onecode/cli.py +0 -935
- package/onecode/cloud/__init__.py +0 -0
- package/onecode/cloud/base.py +0 -20
- package/onecode/codebase/__init__.py +0 -69
- package/onecode/codebase/__pycache__/__init__.cpython-314.pyc +0 -0
- package/onecode/codebase/__pycache__/chunker.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 +0 -125
- package/onecode/codebase/indexer.py +0 -149
- package/onecode/codebase/retriever.py +0 -203
- package/onecode/codebase/storage.py +0 -131
- package/onecode/codebase/tools.py +0 -59
- package/onecode/commands.py +0 -596
- package/onecode/config.py +0 -314
- package/onecode/config_screen.py +0 -600
- package/onecode/cron/__init__.py +0 -3
- package/onecode/lsp/__init__.py +0 -3
- package/onecode/mcp/__init__.py +0 -4
- 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 +0 -193
- package/onecode/mcp/manager.py +0 -190
- package/onecode/memory/__init__.py +0 -49
- 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 +0 -159
- package/onecode/memory/pyramid.py +0 -133
- package/onecode/memory/recall.py +0 -203
- package/onecode/migrate.py +0 -122
- package/onecode/models/__init__.py +0 -4
- 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 +0 -104
- package/onecode/models/messages.py +0 -739
- package/onecode/models/provider.py +0 -699
- package/onecode/models/providers/__init__.py +0 -17
- 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__/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 +0 -273
- package/onecode/models/providers/deepseek_provider.py +0 -212
- package/onecode/models/providers/glm_provider.py +0 -195
- package/onecode/models/providers/minimax_provider.py +0 -158
- package/onecode/models/providers/minimaxi_provider.py +0 -417
- package/onecode/models/providers/ollama_provider.py +0 -100
- package/onecode/models/providers/openai_provider.py +0 -237
- package/onecode/models/registry.py +0 -212
- package/onecode/server/__init__.py +0 -3
- package/onecode/server/app.py +0 -224
- package/onecode/skills/__init__.py +0 -11
- 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__/bootstrap.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 +0 -38
- package/onecode/skills/bootstrap.py +0 -124
- package/onecode/skills/create.py +0 -56
- package/onecode/skills/frontmatter.py +0 -33
- package/onecode/skills/loader.py +0 -139
- package/onecode/skills/manager.py +0 -75
- package/onecode/skills/model.py +0 -43
- package/onecode/storage/__init__.py +0 -0
- package/onecode/storage/activity.py +0 -63
- package/onecode/storage/project.py +0 -54
- package/onecode/storage/session.py +0 -112
- package/onecode/tasks/__init__.py +0 -26
- package/onecode/tasks/manager.py +0 -232
- package/onecode/tasks/models.py +0 -240
- package/onecode/trace/__init__.py +0 -0
- package/onecode/trace/tracer.py +0 -173
- package/onecode/utils/__init__.py +0 -0
- package/onecode/utils/helpers.py +0 -20
- package/pyproject.toml +0 -74
- package/tui/__init__.py +0 -46
- package/tui/__main__.py +0 -4
- 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__/about.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-313.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 +0 -86
- package/tui/_path_fuzzy_search.py +0 -48
- package/tui/_path_match.py +0 -141
- package/tui/about.py +0 -95
- 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 +0 -1002
- package/tui/acp/api.py +0 -73
- package/tui/acp/encode_tool_call_id.py +0 -12
- package/tui/acp/messages.py +0 -203
- package/tui/acp/prompt.py +0 -53
- package/tui/acp/protocol.py +0 -499
- package/tui/agent.py +0 -70
- package/tui/agent_schema.py +0 -76
- package/tui/agents.py +0 -46
- package/tui/ansi/__init__.py +0 -1
- 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 +0 -1689
- package/tui/ansi/_ansi_colors.py +0 -264
- package/tui/ansi/_control_codes.py +0 -37
- package/tui/ansi/_keys.py +0 -251
- package/tui/ansi/_sgr_styles.py +0 -64
- package/tui/ansi/_stream_parser.py +0 -418
- package/tui/answer.py +0 -12
- package/tui/app.py +0 -1266
- package/tui/atomic.py +0 -37
- package/tui/cli.py +0 -313
- package/tui/code_analyze.py +0 -27
- package/tui/complete.py +0 -38
- package/tui/constants.py +0 -61
- package/tui/conversation_markdown.py +0 -30
- package/tui/danger.py +0 -372
- package/tui/data/agents/ampcode.com.toml +0 -52
- package/tui/data/agents/augmentcode.com.toml +0 -41
- package/tui/data/agents/cdh.cloud-dev-harness.toml +0 -23
- package/tui/data/agents/claude.com.toml +0 -41
- package/tui/data/agents/copilot.github.com.toml +0 -29
- package/tui/data/agents/crowai.dev.toml +0 -36
- package/tui/data/agents/cursor.com.toml +0 -38
- package/tui/data/agents/deepagents.langchain.com +0 -34
- package/tui/data/agents/docker.com.toml +0 -60
- package/tui/data/agents/geminicli.com.toml +0 -28
- package/tui/data/agents/goose.ai.toml +0 -52
- package/tui/data/agents/inference.huggingface.co.toml +0 -41
- package/tui/data/agents/kimi.com.toml +0 -35
- package/tui/data/agents/kiro.dev.toml +0 -43
- package/tui/data/agents/onecode.dev.toml +0 -22
- package/tui/data/agents/openai.com.toml +0 -53
- package/tui/data/agents/openclaw.ai.toml +0 -37
- package/tui/data/agents/opencode.ai.toml +0 -39
- package/tui/data/agents/openhands.dev.toml +0 -46
- package/tui/data/agents/stakpak.dev.toml +0 -62
- package/tui/data/agents/vibe.mistral.ai.toml +0 -31
- package/tui/data/agents/vtcode.dev.toml +0 -63
- 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 +0 -213
- package/tui/dec.py +0 -332
- package/tui/directory.py +0 -234
- package/tui/directory_suggester.py +0 -93
- package/tui/directory_watcher.py +0 -231
- package/tui/format_path.py +0 -25
- package/tui/fuzzy.py +0 -140
- package/tui/fuzzy_index.py +0 -275
- package/tui/gist.py +0 -33
- package/tui/history.py +0 -138
- package/tui/jsonrpc.py +0 -578
- package/tui/menus.py +0 -14
- package/tui/message_log.py +0 -69
- package/tui/messages.py +0 -144
- package/tui/option_content.py +0 -51
- package/tui/os.py +0 -0
- package/tui/path_complete.py +0 -217
- package/tui/path_filter.py +0 -124
- package/tui/paths.py +0 -87
- package/tui/pill.py +0 -23
- package/tui/platform_commands.py +0 -52
- 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 +0 -19
- package/tui/prompt/resource.py +0 -68
- package/tui/protocol.py +0 -28
- package/tui/screens/__init__.py +0 -0
- package/tui/screens/__pycache__/__init__.cpython-314.pyc +0 -0
- package/tui/screens/__pycache__/agent_modal.cpython-314.pyc +0 -0
- package/tui/screens/__pycache__/component_picker.cpython-314.pyc +0 -0
- package/tui/screens/__pycache__/diff_screen.cpython-314.pyc +0 -0
- package/tui/screens/__pycache__/log.cpython-314.pyc +0 -0
- package/tui/screens/__pycache__/main.cpython-313.pyc +0 -0
- package/tui/screens/__pycache__/main.cpython-314.pyc +0 -0
- package/tui/screens/__pycache__/permissions.cpython-314.pyc +0 -0
- package/tui/screens/__pycache__/projects_app.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__/store.cpython-314.pyc +0 -0
- package/tui/screens/__pycache__/tool_content_screen.cpython-314.pyc +0 -0
- package/tui/screens/action_modal.py +0 -94
- package/tui/screens/agent_modal.py +0 -175
- package/tui/screens/command_edit_modal.py +0 -74
- package/tui/screens/component_picker.py +0 -168
- package/tui/screens/diff_screen.py +0 -84
- package/tui/screens/log.py +0 -553
- package/tui/screens/main.py +0 -385
- package/tui/screens/main.tcss +0 -655
- package/tui/screens/permissions.py +0 -404
- package/tui/screens/permissions.tcss +0 -72
- package/tui/screens/projects.tcss +0 -80
- package/tui/screens/projects_app.py +0 -347
- package/tui/screens/projects_screen.py +0 -284
- package/tui/screens/session_resume_modal.py +0 -172
- package/tui/screens/session_resume_modal.tcss +0 -35
- package/tui/screens/sessions.py +0 -164
- package/tui/screens/sessions.tcss +0 -119
- package/tui/screens/settings.py +0 -254
- package/tui/screens/settings.tcss +0 -101
- package/tui/screens/store.py +0 -500
- package/tui/screens/store.tcss +0 -274
- package/tui/screens/tool_content_screen.py +0 -59
- package/tui/session_tracker.py +0 -123
- package/tui/settings.py +0 -353
- package/tui/settings_schema.py +0 -431
- package/tui/shell.py +0 -304
- package/tui/shell_read.py +0 -42
- package/tui/slash_command.py +0 -34
- package/tui/tui.tcss +0 -246
- package/tui/twitter.py +0 -38
- package/tui/version.py +0 -80
- 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 +0 -272
- 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-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__/load_more.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__/subagent_screen.cpython-314.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-314.pyc +0 -0
- package/tui/widgets/__pycache__/user_input.cpython-314.pyc +0 -0
- package/tui/widgets/acp_content.py +0 -70
- package/tui/widgets/agent_response.py +0 -76
- package/tui/widgets/agent_thought.py +0 -167
- package/tui/widgets/ask_user.py +0 -264
- package/tui/widgets/command_pane.py +0 -223
- package/tui/widgets/condensed_path.py +0 -115
- package/tui/widgets/context_stats.py +0 -66
- package/tui/widgets/conversation.py +0 -2641
- package/tui/widgets/danger_warning.py +0 -65
- package/tui/widgets/diff_view.py +0 -69
- package/tui/widgets/directory_input.py +0 -8
- package/tui/widgets/flash.py +0 -81
- package/tui/widgets/future_text.py +0 -126
- package/tui/widgets/grid_select.py +0 -234
- package/tui/widgets/highlighted_textarea.py +0 -180
- package/tui/widgets/load_more.py +0 -24
- package/tui/widgets/mandelbrot.py +0 -294
- package/tui/widgets/markdown_note.py +0 -13
- package/tui/widgets/menu.py +0 -147
- package/tui/widgets/modified_files.py +0 -306
- package/tui/widgets/non_selectable_label.py +0 -5
- package/tui/widgets/note.py +0 -18
- package/tui/widgets/path_search.py +0 -492
- package/tui/widgets/plan.py +0 -285
- package/tui/widgets/project_directory_tree.py +0 -102
- package/tui/widgets/project_grid_select.py +0 -64
- package/tui/widgets/project_summary.py +0 -33
- package/tui/widgets/prompt.py +0 -795
- package/tui/widgets/question.py +0 -360
- package/tui/widgets/session_grid_select.py +0 -230
- package/tui/widgets/session_summary.py +0 -115
- package/tui/widgets/session_tabs.py +0 -188
- package/tui/widgets/shell_result.py +0 -35
- package/tui/widgets/shell_terminal.py +0 -40
- package/tui/widgets/side_bar.py +0 -124
- package/tui/widgets/slash_complete.py +0 -235
- package/tui/widgets/strike_text.py +0 -70
- package/tui/widgets/subagent.py +0 -287
- package/tui/widgets/subagent_screen.py +0 -709
- package/tui/widgets/terminal.py +0 -576
- package/tui/widgets/terminal_tool.py +0 -360
- package/tui/widgets/throbber.py +0 -100
- package/tui/widgets/tool_call.py +0 -398
- package/tui/widgets/user_input.py +0 -23
- package/tui/widgets/version.py +0 -5
- package/tui/widgets/welcome.py +0 -31
|
@@ -1,199 +0,0 @@
|
|
|
1
|
-
# AI-DLC Deliver Deployment Pipeline (Stack)
|
|
2
|
-
|
|
3
|
-
Extends the Deliver phase with a unified stack deploy pipeline, per-component and cross-stack e2e, and stack-level BVT + rollback.
|
|
4
|
-
|
|
5
|
-
## Environments
|
|
6
|
-
|
|
7
|
-
| Environment | Purpose | Deploy Trigger | TTL |
|
|
8
|
-
|-------------|---------|----------------|-----|
|
|
9
|
-
| preview | Per-component + cross-stack e2e verification | Feature branch | 24h, auto-cleanup |
|
|
10
|
-
| staging | Pre-production stack validation | PR merge to main | — |
|
|
11
|
-
| production | Live traffic | Release tag + human approval | — |
|
|
12
|
-
|
|
13
|
-
## Stack Topology
|
|
14
|
-
|
|
15
|
-
```yaml
|
|
16
|
-
stack:
|
|
17
|
-
components:
|
|
18
|
-
- id: backend
|
|
19
|
-
deploy:
|
|
20
|
-
- functions: tcb fn deploy
|
|
21
|
-
- db: tcb db migrate
|
|
22
|
-
exposes: BACKEND_URL
|
|
23
|
-
- id: web
|
|
24
|
-
depends_on: [backend]
|
|
25
|
-
deploy:
|
|
26
|
-
- hosting: tcb hosting deploy --build-env BACKEND_URL=${BACKEND_URL}
|
|
27
|
-
consumes: BACKEND_URL
|
|
28
|
-
- id: native
|
|
29
|
-
depends_on: [backend]
|
|
30
|
-
deploy:
|
|
31
|
-
- build: build with BACKEND_URL injected
|
|
32
|
-
- distribute: upload to internal distribution
|
|
33
|
-
consumes: BACKEND_URL
|
|
34
|
-
- id: desktop
|
|
35
|
-
depends_on: [backend]
|
|
36
|
-
deploy:
|
|
37
|
-
- build: build with BACKEND_URL injected
|
|
38
|
-
- distribute: upload to internal distribution
|
|
39
|
-
consumes: BACKEND_URL
|
|
40
|
-
- id: wxa
|
|
41
|
-
depends_on: [backend]
|
|
42
|
-
deploy:
|
|
43
|
-
- build: build with BACKEND_URL injected
|
|
44
|
-
- distribute: upload to mini-program platform
|
|
45
|
-
consumes: BACKEND_URL
|
|
46
|
-
- id: mya
|
|
47
|
-
depends_on: [backend]
|
|
48
|
-
deploy:
|
|
49
|
-
- build: build with BACKEND_URL injected
|
|
50
|
-
- distribute: upload to mini-program platform
|
|
51
|
-
consumes: BACKEND_URL
|
|
52
|
-
- id: tta
|
|
53
|
-
depends_on: [backend]
|
|
54
|
-
deploy:
|
|
55
|
-
- build: build with BACKEND_URL injected
|
|
56
|
-
- distribute: upload to mini-program platform
|
|
57
|
-
consumes: BACKEND_URL
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
The `deploy_stack` orchestrator:
|
|
61
|
-
1. Resolves the platform (TCB / Aliyun) from the active provider.
|
|
62
|
-
2. Deploys `backend` first; captures `BACKEND_URL`.
|
|
63
|
-
3. Deploys all client components (`web`, `native`, `desktop`, `wxa`, `mya`, `tta`) in parallel with `BACKEND_URL` injected at build time.
|
|
64
|
-
4. Exposes `STACK_URL` (= `BACKEND_URL` for the gateway) and per-component URLs.
|
|
65
|
-
|
|
66
|
-
## Pipeline
|
|
67
|
-
|
|
68
|
-
```yaml
|
|
69
|
-
name: deliver
|
|
70
|
-
version: 3.0.0
|
|
71
|
-
|
|
72
|
-
stages:
|
|
73
|
-
- name: preview
|
|
74
|
-
description: Unified stack preview with per-component + cross-stack e2e
|
|
75
|
-
steps:
|
|
76
|
-
- name: deploy_stack
|
|
77
|
-
command: deploy_stack --preview
|
|
78
|
-
platform: dynamic # TCB or Aliyun
|
|
79
|
-
output:
|
|
80
|
-
- name: stack_url
|
|
81
|
-
- name: backend_url
|
|
82
|
-
- name: web_url
|
|
83
|
-
- name: e2e_backend
|
|
84
|
-
command: pytest apps/backend/tests/e2e/ --base-url ${BACKEND_URL}
|
|
85
|
-
requires: [deploy_stack]
|
|
86
|
-
- name: e2e_web
|
|
87
|
-
command: pytest apps/web/tests/e2e/ --base-url ${WEB_URL} --api-url ${BACKEND_URL}
|
|
88
|
-
requires: [deploy_stack]
|
|
89
|
-
- name: e2e_native
|
|
90
|
-
command: pytest apps/native/tests/e2e/ --backend-url ${BACKEND_URL}
|
|
91
|
-
requires: [deploy_stack]
|
|
92
|
-
when: affects contains native
|
|
93
|
-
- name: e2e_desktop
|
|
94
|
-
command: pytest apps/desktop/tests/e2e/ --backend-url ${BACKEND_URL}
|
|
95
|
-
requires: [deploy_stack]
|
|
96
|
-
when: affects contains desktop
|
|
97
|
-
- name: e2e_wxa
|
|
98
|
-
command: pytest apps/wxa/tests/e2e/ --backend-url ${BACKEND_URL}
|
|
99
|
-
requires: [deploy_stack]
|
|
100
|
-
when: affects contains wxa
|
|
101
|
-
- name: e2e_mya
|
|
102
|
-
command: pytest apps/mya/tests/e2e/ --backend-url ${BACKEND_URL}
|
|
103
|
-
requires: [deploy_stack]
|
|
104
|
-
when: affects contains mya
|
|
105
|
-
- name: e2e_tta
|
|
106
|
-
command: pytest apps/tta/tests/e2e/ --backend-url ${BACKEND_URL}
|
|
107
|
-
requires: [deploy_stack]
|
|
108
|
-
when: affects contains tta
|
|
109
|
-
- name: e2e_cross_stack
|
|
110
|
-
command: pytest aidlc/tests/cross-stack/ --stack-url ${STACK_URL}
|
|
111
|
-
requires: [e2e_backend, e2e_web, e2e_native, e2e_desktop, e2e_wxa, e2e_mya, e2e_tta]
|
|
112
|
-
when: affects contains >= 2 components
|
|
113
|
-
|
|
114
|
-
- name: staging
|
|
115
|
-
description: Staging stack smoke test
|
|
116
|
-
steps:
|
|
117
|
-
- name: deploy_stack
|
|
118
|
-
command: deploy_stack --env staging
|
|
119
|
-
- name: smoke
|
|
120
|
-
command: smoke-test ${STACK_URL}
|
|
121
|
-
- name: cross_stack
|
|
122
|
-
command: pytest aidlc/tests/cross-stack/ --stack-url ${STACK_URL}
|
|
123
|
-
|
|
124
|
-
- name: production
|
|
125
|
-
description: Stack production deploy with stack BVT
|
|
126
|
-
conditions:
|
|
127
|
-
branch: main
|
|
128
|
-
steps:
|
|
129
|
-
- name: approve
|
|
130
|
-
command: human-approval-gate
|
|
131
|
-
inputs:
|
|
132
|
-
- per_component_e2e_reports
|
|
133
|
-
- cross_stack_e2e_report
|
|
134
|
-
- staging_smoke_report
|
|
135
|
-
- aidlc/openspec/changes/{id}/contract-diff.md
|
|
136
|
-
- name: deploy_stack
|
|
137
|
-
command: deploy_stack --env production
|
|
138
|
-
- name: bvt
|
|
139
|
-
command: bvt ${PRODUCTION_URL}
|
|
140
|
-
timeout: 60s
|
|
141
|
-
- name: health_check
|
|
142
|
-
command: curl -f ${PRODUCTION_URL}/health
|
|
143
|
-
timeout: 30s
|
|
144
|
-
- name: archive_contract_diff
|
|
145
|
-
command: cp aidlc/openspec/changes/{id}/contract-diff.md aidlc/deploy-artifacts/
|
|
146
|
-
|
|
147
|
-
rollback:
|
|
148
|
-
triggers:
|
|
149
|
-
- condition: BVT failure → automatic stack rollback
|
|
150
|
-
- condition: Health check 5xx → automatic stack rollback
|
|
151
|
-
- condition: Error rate >1% in 5min → manual stack rollback
|
|
152
|
-
action: deploy_stack --rollback ${LAST_STABLE_STACK_VERSION}
|
|
153
|
-
scope: stack # all components roll back together (STK-006)
|
|
154
|
-
```
|
|
155
|
-
|
|
156
|
-
## BVT Checklist (Stack)
|
|
157
|
-
|
|
158
|
-
Executed after every production deployment. BVT operates on the **stack**, not a single component:
|
|
159
|
-
|
|
160
|
-
```bash
|
|
161
|
-
bvt ${PRODUCTION_URL}
|
|
162
|
-
# 1. backend /health returns 200 OK
|
|
163
|
-
# 2. web home page returns 200 (SSR) or shell loads (SPA)
|
|
164
|
-
# 3. native/desktop/mini-program launch probe (deep link resolves against BACKEND_URL)
|
|
165
|
-
# 4. Core cross-stack flow (login) succeeds end-to-end
|
|
166
|
-
# 5. Database reachable
|
|
167
|
-
# 6. Error rate < 0.1%
|
|
168
|
-
# 7. Latency p99 < 500ms
|
|
169
|
-
# 8. Contract diff archived
|
|
170
|
-
```
|
|
171
|
-
|
|
172
|
-
## Build Config Injection
|
|
173
|
-
|
|
174
|
-
All client builds (`web`, `native`, `desktop`, `wxa`, `mya`, `tta`) receive `BACKEND_URL` (and any other stack-level config) at build time. The orchestrator passes the env value; components MUST NOT hardcode URLs (STK-005).
|
|
175
|
-
|
|
176
|
-
```bash
|
|
177
|
-
# web
|
|
178
|
-
pnpm --filter web build --env BACKEND_URL=$BACKEND_URL
|
|
179
|
-
|
|
180
|
-
# native
|
|
181
|
-
cd apps/native && BACKEND_URL=$BACKEND_URL pnpm build
|
|
182
|
-
|
|
183
|
-
# desktop
|
|
184
|
-
cd apps/desktop && BACKEND_URL=$BACKEND_URL pnpm build
|
|
185
|
-
|
|
186
|
-
# mini-programs (wxa, mya, tta)
|
|
187
|
-
cd apps/wxa && BACKEND_URL=$BACKEND_URL pnpm build
|
|
188
|
-
cd apps/mya && BACKEND_URL=$BACKEND_URL pnpm build
|
|
189
|
-
cd apps/tta && BACKEND_URL=$BACKEND_URL pnpm build
|
|
190
|
-
```
|
|
191
|
-
|
|
192
|
-
## Component URL Resolution
|
|
193
|
-
|
|
194
|
-
Per-platform URL patterns (resolved by `deploy_stack`):
|
|
195
|
-
|
|
196
|
-
| Platform | STACK_URL | WEB_URL | NATIVE/DESKTOP distribution | MINI-PROGRAM distribution |
|
|
197
|
-
|----------|-----------|---------|---------------------------|---------------------------|
|
|
198
|
-
| TCB | `https://{env-id}.tcb-preview.com` | `https://{env-id}-{project}.tcb-preview.com` | internal distribution URL | mini-program preview QR |
|
|
199
|
-
| Aliyun | `https://{gateway}.{region}.fc.devs.com` | `https://{bucket}.{region}.oss-website.aliyuncs.com` | internal distribution URL | mini-program preview QR |
|
package/cdh/__init__.py
DELETED
|
File without changes
|
package/cdh/__main__.py
DELETED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/cdh/cdh_mcp_injector.py
DELETED
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
"""cdh platform MCP injector — injects platform MCPs into engines.
|
|
2
|
-
|
|
3
|
-
Strategies (per engine capability):
|
|
4
|
-
- env var: Set CDH_SHARED_MCP with JSON-serialized platform MCP configs
|
|
5
|
-
- CLI args: Inject via engine-specific CLI flags (--mcp-server name=url)
|
|
6
|
-
- config file: Write a temp config that the engine reads at startup
|
|
7
|
-
|
|
8
|
-
Name conflict: engine private MCPs win over cdh platform MCPs.
|
|
9
|
-
Engines that don't support injection get a silent fallback (INFO log).
|
|
10
|
-
"""
|
|
11
|
-
|
|
12
|
-
from __future__ import annotations
|
|
13
|
-
|
|
14
|
-
import json
|
|
15
|
-
import logging
|
|
16
|
-
import os
|
|
17
|
-
from pathlib import Path
|
|
18
|
-
from typing import Optional
|
|
19
|
-
|
|
20
|
-
import yaml
|
|
21
|
-
|
|
22
|
-
logger = logging.getLogger("cdh.mcp.injector")
|
|
23
|
-
|
|
24
|
-
CDH_SHARED_MCP_ENV = "CDH_SHARED_MCP"
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
class CdhMcpInjector:
|
|
28
|
-
SUPPORTED_ENGINES = {"onecode", "opencode"}
|
|
29
|
-
|
|
30
|
-
def __init__(self, platform_mcps_dir: Path | None = None):
|
|
31
|
-
from cdh.cdh_mcp_manager import CDH_PLATFORM_MCPS_DIR
|
|
32
|
-
|
|
33
|
-
self.platform_mcps_dir = platform_mcps_dir or CDH_PLATFORM_MCPS_DIR
|
|
34
|
-
|
|
35
|
-
def inject_env(self) -> None:
|
|
36
|
-
"""Set CDH_SHARED_MCP env var with platform MCP configs."""
|
|
37
|
-
config_path = self.platform_mcps_dir / "mcps.yaml"
|
|
38
|
-
if not config_path.exists():
|
|
39
|
-
return
|
|
40
|
-
try:
|
|
41
|
-
data = yaml.safe_load(config_path.read_text()) or {}
|
|
42
|
-
os.environ[CDH_SHARED_MCP_ENV] = json.dumps(data)
|
|
43
|
-
logger.debug("Set %s with %d MCP servers", CDH_SHARED_MCP_ENV, len(data))
|
|
44
|
-
except Exception as e:
|
|
45
|
-
logger.warning("Failed to inject platform MCPs via env: %s", e)
|
|
46
|
-
|
|
47
|
-
def clear_env(self) -> None:
|
|
48
|
-
os.environ.pop(CDH_SHARED_MCP_ENV, None)
|
|
49
|
-
|
|
50
|
-
def get_shared_mcp_config(self) -> dict[str, dict]:
|
|
51
|
-
raw = os.environ.get(CDH_SHARED_MCP_ENV, "")
|
|
52
|
-
if not raw:
|
|
53
|
-
return {}
|
|
54
|
-
try:
|
|
55
|
-
return json.loads(raw)
|
|
56
|
-
except json.JSONDecodeError:
|
|
57
|
-
logger.warning("Invalid %s value, ignoring", CDH_SHARED_MCP_ENV)
|
|
58
|
-
return {}
|
|
59
|
-
|
|
60
|
-
def inject_for_engine(
|
|
61
|
-
self,
|
|
62
|
-
engine_name: str,
|
|
63
|
-
engine_mcps_path: Path | None = None,
|
|
64
|
-
) -> Optional[str]:
|
|
65
|
-
"""Inject platform MCPs for a specific engine.
|
|
66
|
-
|
|
67
|
-
Returns an info/warning message, or None if no injection needed.
|
|
68
|
-
|
|
69
|
-
For supported engines: sets CDH_SHARED_MCP env var.
|
|
70
|
-
For unsupported engines: logs a silent INFO fallback.
|
|
71
|
-
"""
|
|
72
|
-
platform_config = self._load_platform_config()
|
|
73
|
-
if not platform_config:
|
|
74
|
-
return None
|
|
75
|
-
|
|
76
|
-
if engine_name not in self.SUPPORTED_ENGINES:
|
|
77
|
-
logger.info(
|
|
78
|
-
"Engine '%s' does not support cdh platform MCP injection. "
|
|
79
|
-
"Platform MCPs available via %s env var.",
|
|
80
|
-
engine_name,
|
|
81
|
-
CDH_SHARED_MCP_ENV,
|
|
82
|
-
)
|
|
83
|
-
return None
|
|
84
|
-
|
|
85
|
-
# Merge with engine private (engine wins)
|
|
86
|
-
merged = dict(platform_config)
|
|
87
|
-
if engine_mcps_path and engine_mcps_path.exists():
|
|
88
|
-
try:
|
|
89
|
-
engine_data = yaml.safe_load(engine_mcps_path.read_text()) or {}
|
|
90
|
-
engine_data = {
|
|
91
|
-
k: v for k, v in engine_data.items() if isinstance(v, dict)
|
|
92
|
-
}
|
|
93
|
-
except Exception:
|
|
94
|
-
engine_data = {}
|
|
95
|
-
merged.update(engine_data)
|
|
96
|
-
|
|
97
|
-
os.environ[CDH_SHARED_MCP_ENV] = json.dumps(merged)
|
|
98
|
-
logger.debug(
|
|
99
|
-
"Injected %d platform MCPs + %d engine MCPs via %s for '%s'",
|
|
100
|
-
len(platform_config),
|
|
101
|
-
len(engine_data) if engine_mcps_path and engine_mcps_path.exists() else 0,
|
|
102
|
-
CDH_SHARED_MCP_ENV,
|
|
103
|
-
engine_name,
|
|
104
|
-
)
|
|
105
|
-
return f"{len(platform_config)} platform MCP(s) injected for '{engine_name}'"
|
|
106
|
-
|
|
107
|
-
def _load_platform_config(self) -> dict[str, dict]:
|
|
108
|
-
config_path = self.platform_mcps_dir / "mcps.yaml"
|
|
109
|
-
if not config_path.exists():
|
|
110
|
-
return {}
|
|
111
|
-
try:
|
|
112
|
-
data = yaml.safe_load(config_path.read_text()) or {}
|
|
113
|
-
return {k: v for k, v in data.items() if isinstance(v, dict)}
|
|
114
|
-
except Exception:
|
|
115
|
-
return {}
|
package/cdh/cdh_mcp_loader.py
DELETED
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
"""cdh platform MCP loader — merges platform MCPs with engine-private MCPs.
|
|
2
|
-
|
|
3
|
-
Discovery order:
|
|
4
|
-
1. Read engine-private MCPs from engine's own config (e.g. ~/.onecode/mcps/mcps.yaml)
|
|
5
|
-
2. Read cdh platform MCPs from ~/.cdh/mcps/mcps.yaml
|
|
6
|
-
3. Merge: engine private wins on name conflict
|
|
7
|
-
4. Return merged list for injection
|
|
8
|
-
"""
|
|
9
|
-
|
|
10
|
-
from __future__ import annotations
|
|
11
|
-
|
|
12
|
-
import logging
|
|
13
|
-
from pathlib import Path
|
|
14
|
-
|
|
15
|
-
import yaml
|
|
16
|
-
|
|
17
|
-
from cdh.cdh_mcp_manager import CDH_PLATFORM_MCPS_DIR
|
|
18
|
-
|
|
19
|
-
logger = logging.getLogger("cdh.mcp.loader")
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
class CdhMcpLoader:
|
|
23
|
-
def __init__(self, platform_mcps_dir: Path | None = None):
|
|
24
|
-
self.platform_mcps_dir = platform_mcps_dir or CDH_PLATFORM_MCPS_DIR
|
|
25
|
-
self._cache: dict[str, dict] | None = None
|
|
26
|
-
|
|
27
|
-
def load_platform(self) -> dict[str, dict]:
|
|
28
|
-
config_path = self.platform_mcps_dir / "mcps.yaml"
|
|
29
|
-
if not config_path.exists():
|
|
30
|
-
return {}
|
|
31
|
-
try:
|
|
32
|
-
data = yaml.safe_load(config_path.read_text()) or {}
|
|
33
|
-
return {k: v for k, v in data.items() if isinstance(v, dict)}
|
|
34
|
-
except Exception:
|
|
35
|
-
logger.warning("Failed to load platform MCP config from %s", config_path)
|
|
36
|
-
return {}
|
|
37
|
-
|
|
38
|
-
def get_merged(
|
|
39
|
-
self, engine_mcps_path: Path | None = None
|
|
40
|
-
) -> list[dict]:
|
|
41
|
-
platform = self.load_platform()
|
|
42
|
-
|
|
43
|
-
if engine_mcps_path and engine_mcps_path.exists():
|
|
44
|
-
try:
|
|
45
|
-
engine_data = yaml.safe_load(engine_mcps_path.read_text()) or {}
|
|
46
|
-
engine_data = {k: v for k, v in engine_data.items() if isinstance(v, dict)}
|
|
47
|
-
except Exception:
|
|
48
|
-
engine_data = {}
|
|
49
|
-
else:
|
|
50
|
-
engine_data = {}
|
|
51
|
-
|
|
52
|
-
merged = dict(platform)
|
|
53
|
-
merged.update(engine_data)
|
|
54
|
-
|
|
55
|
-
return [
|
|
56
|
-
{"name": name, **cfg, "source": "engine" if name in engine_data else "platform"}
|
|
57
|
-
for name, cfg in merged.items()
|
|
58
|
-
]
|
|
59
|
-
|
|
60
|
-
def get_platform_only(self) -> list[dict]:
|
|
61
|
-
return [
|
|
62
|
-
{"name": name, **cfg, "source": "platform"}
|
|
63
|
-
for name, cfg in self.load_platform().items()
|
|
64
|
-
]
|
|
65
|
-
|
|
66
|
-
def invalidate_cache(self) -> None:
|
|
67
|
-
self._cache = None
|
package/cdh/cdh_mcp_manager.py
DELETED
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
"""cdh platform MCP manager — operates ~/.cdh/mcps/.
|
|
2
|
-
|
|
3
|
-
This is the cdh platform equivalent of onecode.mcp.manager.MCPManager,
|
|
4
|
-
but operates strictly on ~/.cdh/mcps/ (cdh platform shared MCP pool).
|
|
5
|
-
Engines (onecode/opencode/claude) read platform MCPs via env var
|
|
6
|
-
injection at launch time (see cdh_mcp_injector.py).
|
|
7
|
-
"""
|
|
8
|
-
|
|
9
|
-
from __future__ import annotations
|
|
10
|
-
|
|
11
|
-
import logging
|
|
12
|
-
from pathlib import Path
|
|
13
|
-
from typing import Optional
|
|
14
|
-
|
|
15
|
-
import yaml
|
|
16
|
-
|
|
17
|
-
logger = logging.getLogger("cdh.mcp")
|
|
18
|
-
|
|
19
|
-
CDH_PLATFORM_MCPS_DIR = Path.home() / ".cdh" / "mcps"
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
class CdhMcpManager:
|
|
23
|
-
def __init__(self, mcps_dir: Path | None = None):
|
|
24
|
-
self.mcps_dir = mcps_dir or CDH_PLATFORM_MCPS_DIR
|
|
25
|
-
self.mcps_dir.mkdir(parents=True, exist_ok=True)
|
|
26
|
-
self.config_path = self.mcps_dir / "mcps.yaml"
|
|
27
|
-
self._data: dict[str, dict] = {}
|
|
28
|
-
if self.config_path.exists():
|
|
29
|
-
try:
|
|
30
|
-
self._data = yaml.safe_load(self.config_path.read_text()) or {}
|
|
31
|
-
except Exception:
|
|
32
|
-
self._data = {}
|
|
33
|
-
|
|
34
|
-
def add(self, name: str, url: str, transport: str = "sse") -> None:
|
|
35
|
-
self._data[name] = {"url": url, "transport": transport, "enabled": True}
|
|
36
|
-
self._save()
|
|
37
|
-
|
|
38
|
-
def add_stdio(self, name: str, command: str, args: list[str] | None = None) -> None:
|
|
39
|
-
self._data[name] = {
|
|
40
|
-
"command": command,
|
|
41
|
-
"args": args or [],
|
|
42
|
-
"transport": "stdio",
|
|
43
|
-
"enabled": True,
|
|
44
|
-
}
|
|
45
|
-
self._save()
|
|
46
|
-
|
|
47
|
-
def list(self) -> list[dict]:
|
|
48
|
-
return [{"name": name, **cfg} for name, cfg in self._data.items()]
|
|
49
|
-
|
|
50
|
-
def get(self, name: str) -> Optional[dict]:
|
|
51
|
-
return self._data.get(name)
|
|
52
|
-
|
|
53
|
-
def enable(self, name: str, enabled: bool = True) -> Optional[str]:
|
|
54
|
-
if name not in self._data:
|
|
55
|
-
return f"MCP server '{name}' not found"
|
|
56
|
-
self._data[name]["enabled"] = enabled
|
|
57
|
-
self._save()
|
|
58
|
-
return None
|
|
59
|
-
|
|
60
|
-
def remove(self, name: str) -> Optional[str]:
|
|
61
|
-
if name not in self._data:
|
|
62
|
-
return f"MCP server '{name}' not found"
|
|
63
|
-
del self._data[name]
|
|
64
|
-
self._save()
|
|
65
|
-
return None
|
|
66
|
-
|
|
67
|
-
def to_dict(self) -> dict[str, dict]:
|
|
68
|
-
return dict(self._data)
|
|
69
|
-
|
|
70
|
-
def _save(self) -> None:
|
|
71
|
-
self.config_path.write_text(
|
|
72
|
-
yaml.dump(self._data, default_flow_style=False), encoding="utf-8"
|
|
73
|
-
)
|