@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,140 @@
|
|
|
1
|
+
# AI-DLC Skill — Requirements
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
This skill implements the AI-Driven Development Lifecycle for **monorepo multi-component stacks** (native + desktop + web + backend + wxa + mya + tta) with four core phases — Understand (SDD+BDD), Plan (SDD+TDD), Verify (BDD+TDD), Deliver (SDD+Cloud) — plus a first-class **Integration** discipline that governs cross-component contracts (API, events, shared types).
|
|
6
|
+
|
|
7
|
+
## Topology
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
┌──────────────────── Monorepo Root ─────────────────────┐
|
|
11
|
+
│ │
|
|
12
|
+
│ apps/native apps/desktop apps/web apps/backend │
|
|
13
|
+
│ (NATIVE-FR-) (DESKTOP-FR-) (WEB-FR-) (BE-FR-) │
|
|
14
|
+
│ apps/wxa apps/mya apps/tta │
|
|
15
|
+
│ (WXA-FR-) (MYA-FR-) (TTA-FR-) │
|
|
16
|
+
│ │ │ │ │
|
|
17
|
+
│ └──────┬───────┴─────┬─────┘ │
|
|
18
|
+
│ │ │ │
|
|
19
|
+
│ contracts/ packages/shared/ │
|
|
20
|
+
│ (INT-FR-*) (generated types) │
|
|
21
|
+
│ │
|
|
22
|
+
│ features/ tests/ openspec/ providers/ │
|
|
23
|
+
└────────────────────────────────────────────────────────┘
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
FR namespaces:
|
|
27
|
+
|
|
28
|
+
| Prefix | Owner | Scope |
|
|
29
|
+
|--------|-------|-------|
|
|
30
|
+
| `NATIVE-*` | `apps/native` | Native mobile behavior |
|
|
31
|
+
| `DESKTOP-*` | `apps/desktop` | Desktop client behavior |
|
|
32
|
+
| `WEB-*` | `apps/web` | Browser frontend behavior |
|
|
33
|
+
| `BE-*` | `apps/backend` | Server/service behavior |
|
|
34
|
+
| `WXA-*` | `apps/wxa` | WeChat Mini Program behavior |
|
|
35
|
+
| `MYA-*` | `apps/mya` | Mini Program (e.g. Alipay) behavior |
|
|
36
|
+
| `TTA-*` | `apps/tta` | TikTok Mini Program behavior |
|
|
37
|
+
| `INT-*` | `contracts/`, `packages/shared/` | Cross-component contract & integration |
|
|
38
|
+
|
|
39
|
+
## Functional Requirements
|
|
40
|
+
|
|
41
|
+
### FR-001: Understand Phase
|
|
42
|
+
|
|
43
|
+
**Priority:** P0
|
|
44
|
+
|
|
45
|
+
**When** a developer starts a new feature (single-component or cross-cutting),
|
|
46
|
+
**the system SHALL** capture intent, produce an OpenSpec spec delta in EARS format, and write BDD feature files with Given/When/Then scenarios.
|
|
47
|
+
|
|
48
|
+
**Acceptance Criteria:**
|
|
49
|
+
- Intent documented before implementation
|
|
50
|
+
- Spec delta uses EARS (Ubiquitous/Event-Driven/State-Driven/Unwanted/Optional)
|
|
51
|
+
- Each FR tagged with `@FR-{PREFIX}-NNN` in `.feature` files
|
|
52
|
+
- Cross-component features use `INT-*` FRs in addition to per-component FRs
|
|
53
|
+
- Minimum 3 scenarios per FR: positive, negative, edge
|
|
54
|
+
- Scenarios reviewed and approved by human
|
|
55
|
+
|
|
56
|
+
### FR-002: Plan Phase
|
|
57
|
+
|
|
58
|
+
**Priority:** P0
|
|
59
|
+
|
|
60
|
+
**When** spec and feature files are approved,
|
|
61
|
+
**the system SHALL** produce a technical design, decompose work into units with dependency DAG, and write test plans.
|
|
62
|
+
|
|
63
|
+
**Acceptance Criteria:**
|
|
64
|
+
- Design doc includes architecture, data model, API contract, state machine
|
|
65
|
+
- Tasks have explicit dependencies (DAG), per-component and cross-component
|
|
66
|
+
- Cross-component tasks reference the relevant `INT-*` contract FR
|
|
67
|
+
- Test plan written per scenario before implementation
|
|
68
|
+
|
|
69
|
+
### FR-003: Verify Phase
|
|
70
|
+
|
|
71
|
+
**Priority:** P0
|
|
72
|
+
|
|
73
|
+
**When** design and tasks are approved,
|
|
74
|
+
**the system SHALL** execute TDD red-green-refactor per BDD scenario and verify all scenarios pass.
|
|
75
|
+
|
|
76
|
+
**Acceptance Criteria:**
|
|
77
|
+
- Tests written before implementation (Red)
|
|
78
|
+
- Tests fail initially (confirming assertion works)
|
|
79
|
+
- Minimum implementation written to pass (Green)
|
|
80
|
+
- Implementation refactored, all tests still pass
|
|
81
|
+
- All BDD scenarios pass via pytest-bdd (or equivalent per component)
|
|
82
|
+
- Quality gates enforced: coverage ≥80%, scenarios ≥90%, 0 vulns, no TODO
|
|
83
|
+
- Per-component unit, integration, and e2e layers are all green
|
|
84
|
+
- Cross-stack e2e scenarios pass against the unified preview URL
|
|
85
|
+
|
|
86
|
+
### FR-004: Deliver Phase
|
|
87
|
+
|
|
88
|
+
**Priority:** P1
|
|
89
|
+
|
|
90
|
+
**When** all scenarios pass quality gates,
|
|
91
|
+
**the system SHALL** deploy the full stack to preview, run cross-stack BDD e2e tests, and after human approval deploy to production with BVT verification.
|
|
92
|
+
|
|
93
|
+
**Acceptance Criteria:**
|
|
94
|
+
- Unified preview URL dynamically resolved per platform (TCB/Aliyun)
|
|
95
|
+
- BDD e2e tests run against preview URL for the component they target
|
|
96
|
+
- Cross-stack e2e tests run against the unified preview URL
|
|
97
|
+
- Production deploy requires human approval
|
|
98
|
+
- BVT (Build Verification Test) passes after production deploy
|
|
99
|
+
- Failed BVT triggers rollback
|
|
100
|
+
|
|
101
|
+
### FR-005: Cross-Component Contract Discipline
|
|
102
|
+
|
|
103
|
+
**Priority:** P0
|
|
104
|
+
|
|
105
|
+
**When** a feature spans more than one component (e.g. `WEB-*` + `BE-*`, or `NATIVE-*` + `BE-*`),
|
|
106
|
+
**the system SHALL** define and verify the contract between components before integration.
|
|
107
|
+
|
|
108
|
+
**Acceptance Criteria:**
|
|
109
|
+
- All public APIs and async events are described in `contracts/` (OpenAPI/AsyncAPI) and tagged with `INT-FR-NNN`
|
|
110
|
+
- Contract changes require a contract-diff review (backward-compat by default)
|
|
111
|
+
- Shared types are generated from contracts, not hand-written, in `packages/shared/`
|
|
112
|
+
- Contract tests run on every PR that touches `contracts/` or any consumer
|
|
113
|
+
- A breaking contract change requires a major version bump and human approval
|
|
114
|
+
|
|
115
|
+
### FR-006: Monorepo Stack Awareness
|
|
116
|
+
|
|
117
|
+
**Priority:** P0
|
|
118
|
+
|
|
119
|
+
**When** the AI agent operates in a monorepo with multiple components,
|
|
120
|
+
**the system SHALL** be aware of which component(s) the current work affects and apply the right scope, tests, and deploy steps.
|
|
121
|
+
|
|
122
|
+
**Acceptance Criteria:**
|
|
123
|
+
- Spec delta, design doc, and task list each declare an `affects: [native, desktop, web, backend, wxa, mya, tta, contracts]` field
|
|
124
|
+
- Test plan enumerates the layers it covers: `unit`, `integration`, `e2e`, `cross-stack`
|
|
125
|
+
- Only the affected components are deployed in the unified preview (others reused or stubbed)
|
|
126
|
+
- BVT and rollback operate on the whole stack, not a single component
|
|
127
|
+
|
|
128
|
+
## Cross-Cutting Rules (summary)
|
|
129
|
+
|
|
130
|
+
See `rules/` for full definitions.
|
|
131
|
+
|
|
132
|
+
| Prefix | File | Phase | Scope |
|
|
133
|
+
|--------|------|-------|-------|
|
|
134
|
+
| UND | `rules/understand.md` | Understand | Single + multi-component |
|
|
135
|
+
| PLN | `rules/plan.md` | Plan | Single + multi-component |
|
|
136
|
+
| VRF | `rules/verify.md` | Verify | Single + multi-component |
|
|
137
|
+
| DLV | `rules/deliver.md` | Deliver | Stack deploy + rollback |
|
|
138
|
+
| INT | `rules/integration.md` | All phases | Cross-component contracts |
|
|
139
|
+
| STK | `rules/stack.md` | All phases | Monorepo / multi-component |
|
|
140
|
+
| SEC | `rules/security.md` | All phases | Security baseline |
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
categories:
|
|
2
|
+
- ai-dlc
|
|
3
|
+
- development
|
|
4
|
+
- sdd
|
|
5
|
+
- bdd
|
|
6
|
+
- tdd
|
|
7
|
+
- specification
|
|
8
|
+
- cloud
|
|
9
|
+
- monorepo
|
|
10
|
+
- integration
|
|
11
|
+
description: >-
|
|
12
|
+
AI-Driven Development Lifecycle for monorepo multi-component stacks
|
|
13
|
+
(native + desktop + web + backend + wxa + mya + tta). Adaptive orchestration:
|
|
14
|
+
Master Agent evaluates complexity, delegates sub-tasks via CDHA Task tool.
|
|
15
|
+
Core phases: Understand (SDD+BDD) → Plan (SDD+TDD) → Verify (BDD+TDD) →
|
|
16
|
+
Deliver (SDD+Cloud), with cross-stack Integration rules governing
|
|
17
|
+
component boundaries. FR namespaces: NATIVE-*, DESKTOP-*, WEB-*, BE-*,
|
|
18
|
+
WXA-*, MYA-*, TTA-*, INT-*. Default cloud platform: TCB. Also supports Aliyun.
|
|
19
|
+
enabled: true
|
|
20
|
+
entry: SKILL.md
|
|
21
|
+
name: ai-dlc-skill
|
|
22
|
+
version: 4.0.0
|
|
23
|
+
|
|
24
|
+
stack:
|
|
25
|
+
topology: monorepo
|
|
26
|
+
components:
|
|
27
|
+
- id: native
|
|
28
|
+
kind: mobile
|
|
29
|
+
tech: react-native | flutter
|
|
30
|
+
default_language: dart
|
|
31
|
+
default_ui_framework: flutter-sdk
|
|
32
|
+
owns: apps/native
|
|
33
|
+
fr_prefix: NATIVE
|
|
34
|
+
- id: desktop
|
|
35
|
+
kind: desktop
|
|
36
|
+
tech: electron | tauri
|
|
37
|
+
default_language: typescript
|
|
38
|
+
default_ui_framework: electron-react
|
|
39
|
+
owns: apps/desktop
|
|
40
|
+
fr_prefix: DESKTOP
|
|
41
|
+
- id: web
|
|
42
|
+
kind: frontend
|
|
43
|
+
tech: react | vue | svelte
|
|
44
|
+
default_language: typescript
|
|
45
|
+
default_ui_framework: nextjs
|
|
46
|
+
owns: apps/web
|
|
47
|
+
fr_prefix: WEB
|
|
48
|
+
- id: backend
|
|
49
|
+
kind: service
|
|
50
|
+
tech: python | node | go
|
|
51
|
+
owns: apps/backend
|
|
52
|
+
fr_prefix: BE
|
|
53
|
+
- id: wxa
|
|
54
|
+
kind: mini-program
|
|
55
|
+
tech: miniprogram
|
|
56
|
+
default_language: javascript
|
|
57
|
+
default_ui_framework: vant-weapp
|
|
58
|
+
owns: apps/wxa
|
|
59
|
+
fr_prefix: WXA
|
|
60
|
+
- id: mya
|
|
61
|
+
kind: mini-program
|
|
62
|
+
tech: miniprogram
|
|
63
|
+
default_language: javascript
|
|
64
|
+
default_ui_framework: ant-design-mini
|
|
65
|
+
owns: apps/mya
|
|
66
|
+
fr_prefix: MYA
|
|
67
|
+
- id: tta
|
|
68
|
+
kind: mini-program
|
|
69
|
+
tech: miniprogram
|
|
70
|
+
default_language: typescript
|
|
71
|
+
owns: apps/tta
|
|
72
|
+
fr_prefix: TTA
|
|
73
|
+
cross_cutting:
|
|
74
|
+
fr_prefix: INT
|
|
75
|
+
owns:
|
|
76
|
+
- contracts/
|
|
77
|
+
- packages/shared/
|
|
78
|
+
e2e_layers:
|
|
79
|
+
- unit
|
|
80
|
+
- integration
|
|
81
|
+
- e2e
|
|
82
|
+
- cross-stack
|
|
83
|
+
storage:
|
|
84
|
+
default_provider: tcb
|
|
85
|
+
providers:
|
|
86
|
+
tcb:
|
|
87
|
+
object_storage: cloudbase-storage
|
|
88
|
+
document_db: docdb
|
|
89
|
+
relational_db: mysql
|
|
90
|
+
cdn: tencent-cloud-cdn
|
|
91
|
+
aliyun:
|
|
92
|
+
object_storage: oss
|
|
93
|
+
document_db: mongodb
|
|
94
|
+
relational_db: rds-mysql
|
|
95
|
+
cdn: aliyun-cdn
|
|
96
|
+
|
|
97
|
+
integration:
|
|
98
|
+
contract_first: true
|
|
99
|
+
contract_format: openapi-3.1
|
|
100
|
+
backward_compat: required
|
|
101
|
+
breaking_change_gate: human-approval
|
|
102
|
+
shared_types:
|
|
103
|
+
generator: openapi-typescript | openapi-python
|
|
104
|
+
output: packages/shared/
|
|
105
|
+
publish: workspace-package
|
|
106
|
+
event_contract:
|
|
107
|
+
format: asyncapi | cloudevent
|
|
108
|
+
registry: contracts/events/
|
|
109
|
+
version_strategy: semver-major-for-breaking
|
|
110
|
+
|
|
111
|
+
deploy:
|
|
112
|
+
preview:
|
|
113
|
+
strategy: unified
|
|
114
|
+
description: >-
|
|
115
|
+
Single stack preview deploys all components together.
|
|
116
|
+
PREVIEW_URL is the backend gateway; web, native, desktop,
|
|
117
|
+
and mini-programs receive it as a build-time/runtime config.
|
|
118
|
+
ttl: 24h
|
|
119
|
+
bdd_target: cross-stack
|
|
120
|
+
environments:
|
|
121
|
+
- preview
|
|
122
|
+
- staging
|
|
123
|
+
- production
|
|
124
|
+
|
|
125
|
+
quality_gates:
|
|
126
|
+
coverage_min: 80
|
|
127
|
+
bdd_pass_rate: 100
|
|
128
|
+
contract_diff: required
|
|
129
|
+
no_todo: true
|
|
130
|
+
no_secrets_in_diff: true
|
|
131
|
+
|
|
132
|
+
agents:
|
|
133
|
+
- name: ai-dlc-master
|
|
134
|
+
entry: SKILL.md
|
|
135
|
+
mode: primary
|
|
136
|
+
- name: ai-dlc-understand
|
|
137
|
+
entry: phases/understand/entry.md
|
|
138
|
+
mode: subagent
|
|
139
|
+
- name: ai-dlc-plan
|
|
140
|
+
entry: phases/plan/entry.md
|
|
141
|
+
mode: subagent
|
|
142
|
+
- name: ai-dlc-verify
|
|
143
|
+
entry: phases/verify/entry.md
|
|
144
|
+
mode: subagent
|
|
145
|
+
- name: ai-dlc-deliver
|
|
146
|
+
entry: phases/deliver/entry.md
|
|
147
|
+
mode: subagent
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Contracts Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to any contract in `contracts/` are recorded here. Format follows
|
|
4
|
+
[Keep a Changelog](https://keepachangelog.com/) and the project uses [SemVer](https://semver.org/).
|
|
5
|
+
|
|
6
|
+
> **Breaking change rule (INT-002):** any MAJOR bump requires human approval and a
|
|
7
|
+
> Migration section. `tools/contract_diff.py` flags breaking changes automatically.
|
|
8
|
+
|
|
9
|
+
## [Unreleased]
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
- _None yet_
|
|
13
|
+
|
|
14
|
+
### Changed
|
|
15
|
+
- _None yet_
|
|
16
|
+
|
|
17
|
+
### Removed
|
|
18
|
+
- _None yet_
|
|
19
|
+
|
|
20
|
+
### Migration
|
|
21
|
+
- _None yet_
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## {{version}} — {{date}} — {{change_id}}
|
|
26
|
+
|
|
27
|
+
**FRs:** {{list_of_frs}}
|
|
28
|
+
**Affects:** {{components}}
|
|
29
|
+
|
|
30
|
+
### Added
|
|
31
|
+
- {{new_endpoint_or_field}}
|
|
32
|
+
|
|
33
|
+
### Changed
|
|
34
|
+
- {{additive_change}}
|
|
35
|
+
|
|
36
|
+
### Removed
|
|
37
|
+
- {{breaking_removal}}
|
|
38
|
+
|
|
39
|
+
### Migration
|
|
40
|
+
1. {{step_1}}
|
|
41
|
+
2. {{step_2}}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
asyncapi: 3.0.0
|
|
2
|
+
info:
|
|
3
|
+
title: {{title}}
|
|
4
|
+
version: {{version}}
|
|
5
|
+
description: |
|
|
6
|
+
Async contract for INT-FR-{{int_fr_id}}.
|
|
7
|
+
Producer: {{producer}}
|
|
8
|
+
Consumers: {{consumers}}
|
|
9
|
+
x-change-id: {{change_id}}
|
|
10
|
+
x-fr: INT-FR-{{int_fr_id}}
|
|
11
|
+
|
|
12
|
+
channels:
|
|
13
|
+
{{channel_name}}:
|
|
14
|
+
address: {{channel_address}}
|
|
15
|
+
messages:
|
|
16
|
+
{{message_name}}:
|
|
17
|
+
$ref: '#/components/messages/{{MessageName}}'
|
|
18
|
+
|
|
19
|
+
operations:
|
|
20
|
+
{{operation_name}}:
|
|
21
|
+
action: {{send | receive}}
|
|
22
|
+
channel:
|
|
23
|
+
$ref: '#/channels/{{channel_name}}'
|
|
24
|
+
|
|
25
|
+
components:
|
|
26
|
+
messages:
|
|
27
|
+
{{MessageName}}:
|
|
28
|
+
name: {{message_name}}
|
|
29
|
+
title: {{message_title}}
|
|
30
|
+
contentType: application/cloudevents+json
|
|
31
|
+
payload:
|
|
32
|
+
$ref: '#/components/schemas/{{PayloadName}}'
|
|
33
|
+
schemas:
|
|
34
|
+
{{PayloadName}}:
|
|
35
|
+
type: object
|
|
36
|
+
required: [id, type, time, data]
|
|
37
|
+
properties:
|
|
38
|
+
id: { type: string, format: uuid }
|
|
39
|
+
type: { type: string }
|
|
40
|
+
source: { type: string }
|
|
41
|
+
time: { type: string, format: date-time }
|
|
42
|
+
specversion: { type: string, enum: ["1.0"] }
|
|
43
|
+
data: { type: object }
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# Contract Diff — {{change_id}}
|
|
2
|
+
|
|
3
|
+
> Auto-generated by `tools/contract_diff.py`. Reviewed during Verify and Deliver.
|
|
4
|
+
|
|
5
|
+
## Summary
|
|
6
|
+
|
|
7
|
+
| Field | Value |
|
|
8
|
+
|-------|-------|
|
|
9
|
+
| Change ID | `{{change_id}}` |
|
|
10
|
+
| Base version | `{{base_version}}` |
|
|
11
|
+
| Head version | `{{head_version}}` |
|
|
12
|
+
| Breaking? | {{yes / no}} |
|
|
13
|
+
| Approval required | {{yes / no}} |
|
|
14
|
+
|
|
15
|
+
## Files Changed
|
|
16
|
+
|
|
17
|
+
| File | Old Version | New Version | Breaking |
|
|
18
|
+
|------|-------------|-------------|----------|
|
|
19
|
+
| `{{path}}` | `{{old}}` | `{{new}}` | {{y / n}} |
|
|
20
|
+
|
|
21
|
+
## OpenAPI Diff
|
|
22
|
+
|
|
23
|
+
```diff
|
|
24
|
+
--- a/contracts/api/{{file}}.yaml
|
|
25
|
+
+++ b/contracts/api/{{file}}.yaml
|
|
26
|
+
@@
|
|
27
|
+
- removed: {{field}}
|
|
28
|
+
+ added: {{field}}
|
|
29
|
+
~ changed: {{field}} ({{old_type}} → {{new_type}})
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## AsyncAPI Diff
|
|
33
|
+
|
|
34
|
+
```diff
|
|
35
|
+
--- a/contracts/events/{{file}}.yaml
|
|
36
|
+
+++ b/contracts/events/{{file}}.yaml
|
|
37
|
+
@@
|
|
38
|
+
- channel removed: {{name}}
|
|
39
|
+
+ channel added: {{name}}
|
|
40
|
+
~ payload field: {{field}}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Breaking Change Detail
|
|
44
|
+
|
|
45
|
+
> _Filled automatically. Each breaking change must link to a migration note in `contracts/CHANGELOG.md`._
|
|
46
|
+
|
|
47
|
+
- {{breaking_change_1}}
|
|
48
|
+
- Migration: {{link}}
|
|
49
|
+
|
|
50
|
+
## Compat Check Result
|
|
51
|
+
|
|
52
|
+
```
|
|
53
|
+
$ tools/contract_diff.py --base {{base}} --head {{head}}
|
|
54
|
+
RESULT: {{COMPATIBLE | BREAKING}}
|
|
55
|
+
EXIT: {{0 | 1}}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Sign-off
|
|
59
|
+
|
|
60
|
+
- [ ] Contracts owner reviewed
|
|
61
|
+
- [ ] Provider team reviewed
|
|
62
|
+
- [ ] Consumer teams reviewed
|
|
63
|
+
- [ ] (If breaking) Human approval received
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Contract Spec — {{contract_name}}
|
|
2
|
+
|
|
3
|
+
> Source of truth for cross-component contract. Implements `INT-FR-{{int_fr_id}}`.
|
|
4
|
+
> Consumers: {{consumers}}
|
|
5
|
+
> Producers: {{producers}}
|
|
6
|
+
|
|
7
|
+
## Kind
|
|
8
|
+
|
|
9
|
+
- [ ] REST API (OpenAPI 3.1) — `contracts/api/{{name}}.yaml`
|
|
10
|
+
- [ ] AsyncAPI event — `contracts/events/{{name}}.yaml`
|
|
11
|
+
- [ ] GraphQL schema — `contracts/api/{{name}}.graphql`
|
|
12
|
+
|
|
13
|
+
## Versioning
|
|
14
|
+
|
|
15
|
+
- Current version: `{{version}}` (SemVer: MAJOR.MINOR.PATCH)
|
|
16
|
+
- MAJOR: breaking (field removed, type changed, status code changed)
|
|
17
|
+
- MINOR: additive (new optional field, new endpoint)
|
|
18
|
+
- PATCH: doc / example only
|
|
19
|
+
|
|
20
|
+
> Any MAJOR bump requires human approval (INT-002) and a migration note in
|
|
21
|
+
> `contracts/CHANGELOG.md`.
|
|
22
|
+
|
|
23
|
+
## Change
|
|
24
|
+
|
|
25
|
+
| Field | Value |
|
|
26
|
+
|-------|-------|
|
|
27
|
+
| Change ID | `{{change_id}}` |
|
|
28
|
+
| Affects | {{affects: [native, desktop, web, backend, wxa, mya, tta]}} |
|
|
29
|
+
| Direction | {{provider → consumer / bidirectional}} |
|
|
30
|
+
| Breaking? | {{yes / no}} |
|
|
31
|
+
| Migration | {{link to migration doc or "none"}} |
|
|
32
|
+
|
|
33
|
+
## FR Mapping
|
|
34
|
+
|
|
35
|
+
| FR | Component | Role |
|
|
36
|
+
|----|-----------|------|
|
|
37
|
+
| `INT-FR-{{int_fr_id}}` | contracts | Contract definition |
|
|
38
|
+
| `{{provider_namespace}}-FR-{{provider_fr}}` | {{provider}} | Provider behavior |
|
|
39
|
+
| `{{consumer_namespace}}-FR-{{consumer_fr}}` | {{consumer}} | Consumer behavior |
|
|
40
|
+
|
|
41
|
+
## Contract Test Mapping
|
|
42
|
+
|
|
43
|
+
- `tests/contract/test_{{contract_name}}.py`
|
|
44
|
+
- Scenarios: @INT-FR-{{int_fr_id}} @positive / @negative / @edge
|
|
45
|
+
|
|
46
|
+
## See Also
|
|
47
|
+
|
|
48
|
+
- `contracts/CHANGELOG.md` — version history
|
|
49
|
+
- `openspec/changes/{{change_id}}/contract-diff.md` — auto-generated diff
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
openapi: 3.1.0
|
|
2
|
+
info:
|
|
3
|
+
title: {{title}}
|
|
4
|
+
version: {{version}}
|
|
5
|
+
description: |
|
|
6
|
+
Implements INT-FR-{{int_fr_id}}.
|
|
7
|
+
Consumers: {{consumers}}
|
|
8
|
+
Producers: {{producers}}
|
|
9
|
+
x-change-id: {{change_id}}
|
|
10
|
+
x-fr: INT-FR-{{int_fr_id}}
|
|
11
|
+
|
|
12
|
+
servers:
|
|
13
|
+
- url: ${BACKEND_URL}
|
|
14
|
+
description: Stack preview / staging / production (URL injected at deploy)
|
|
15
|
+
|
|
16
|
+
paths:
|
|
17
|
+
/{{resource}}:
|
|
18
|
+
{{methods}}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Runtime Contract 模板 — Serverless 函数接口声明
|
|
2
|
+
# Provider-agnostic: 描述函数"做什么",不涉及具体部署平台
|
|
3
|
+
# 放置在 contracts/functions/{name}.yaml
|
|
4
|
+
|
|
5
|
+
function: {{function_name}}
|
|
6
|
+
version: {{semver}}
|
|
7
|
+
fr_ref: {{INT-FR-NNN}}
|
|
8
|
+
description: {{description}}
|
|
9
|
+
|
|
10
|
+
triggers:
|
|
11
|
+
- type: http # http | timer | event | oss | mns
|
|
12
|
+
method: POST
|
|
13
|
+
path: /{{endpoint}}
|
|
14
|
+
- type: event
|
|
15
|
+
source: {{event_source}}
|
|
16
|
+
|
|
17
|
+
timeout: {{timeout}}s
|
|
18
|
+
memory: {{memory}}MB
|
|
19
|
+
|
|
20
|
+
env:
|
|
21
|
+
{{env_var_name}}: {from: {{source}}} # stack_env | secrets | literal
|
|
22
|
+
|
|
23
|
+
# Provider-specific 映射 (自动选择)
|
|
24
|
+
# 部署时根据 --provider + --compute-mode 选择合适的 runtime
|
|
25
|
+
provider_map:
|
|
26
|
+
tcb:
|
|
27
|
+
compute_mode: cloudbase-functions
|
|
28
|
+
runtime: nodejs18 | python3.10 | go1.18
|
|
29
|
+
aliyun:
|
|
30
|
+
compute_mode: fc # Function Compute
|
|
31
|
+
runtime: python3.10 | nodejs18
|
|
32
|
+
# 或 SAE 模式 (container):
|
|
33
|
+
sae:
|
|
34
|
+
type: web-app
|
|
35
|
+
port: 8080
|
|
36
|
+
health_check: /health
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Technical Design — {{feature_name}}
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
{{brief_description}}
|
|
6
|
+
|
|
7
|
+
## Architecture
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
[Client] → [API Gateway] → [Function] → [Database]
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Data Model
|
|
14
|
+
|
|
15
|
+
```python
|
|
16
|
+
@dataclass
|
|
17
|
+
class {{model_name}}:
|
|
18
|
+
id: str
|
|
19
|
+
{{field_1}}: {{type_1}}
|
|
20
|
+
{{field_2}}: {{type_2}}
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
| Field | Type | Constraints | Description |
|
|
24
|
+
|-------|------|-------------|-------------|
|
|
25
|
+
| {{field}} | {{type}} | {{constraints}} | {{description}} |
|
|
26
|
+
|
|
27
|
+
## API Contract
|
|
28
|
+
|
|
29
|
+
| Method | Path | Request | Response | Status |
|
|
30
|
+
|--------|------|---------|----------|--------|
|
|
31
|
+
| {{method}} | {{path}} | {{request}} | {{response}} | {{status_code}} |
|
|
32
|
+
|
|
33
|
+
## State Machine
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
{{state_a}} → {{state_b}} → {{state_c}}
|
|
37
|
+
{{state_b}} → {{error_state}} (on validation failure)
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Dependencies
|
|
41
|
+
|
|
42
|
+
- {{dependency_1}}
|
|
43
|
+
- {{dependency_2}}
|
|
44
|
+
|
|
45
|
+
## BDD Scenarios
|
|
46
|
+
|
|
47
|
+
- `features/{{domain}}/{{feature}}.feature` — @FR-{{fr_id}} @positive
|
|
48
|
+
- `features/{{domain}}/{{feature}}.feature` — @FR-{{fr_id}} @negative
|
|
49
|
+
- `features/{{domain}}/{{feature}}.feature` — @FR-{{fr_id}} @edge
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Task List — {{feature_name}}
|
|
2
|
+
|
|
3
|
+
## Dependency Graph
|
|
4
|
+
|
|
5
|
+
```mermaid
|
|
6
|
+
graph TD
|
|
7
|
+
{{dag_nodes}}
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
## Units
|
|
11
|
+
|
|
12
|
+
### Unit 1: {{unit_1_name}}
|
|
13
|
+
|
|
14
|
+
- **Depends on:** none
|
|
15
|
+
- **Scenarios:** {{scenario_tags_1}}
|
|
16
|
+
- **Tasks:**
|
|
17
|
+
- [ ] {{task_1}}
|
|
18
|
+
- [ ] {{task_2}}
|
|
19
|
+
- **Test plan:**
|
|
20
|
+
- `test_{{case_1}}` → {{expected_1}}
|
|
21
|
+
- `test_{{case_2}}` → {{expected_2}}
|
|
22
|
+
|
|
23
|
+
### Unit 2: {{unit_2_name}}
|
|
24
|
+
|
|
25
|
+
- **Depends on:** {{unit_1_name}}
|
|
26
|
+
- **Scenarios:** {{scenario_tags_2}}
|
|
27
|
+
- **Tasks:**
|
|
28
|
+
- [ ] {{task_1}}
|
|
29
|
+
- [ ] {{task_2}}
|
|
30
|
+
- **Test plan:**
|
|
31
|
+
- `test_{{case_1}}` → {{expected_1}}
|
|
32
|
+
- `test_{{case_2}}` → {{expected_2}}
|