universal-dev-standards 5.0.0-rc.8 → 5.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/bin/uds.js +5 -3
- package/bundled/ai/standards/acceptance-criteria-traceability.ai.yaml +178 -0
- package/bundled/ai/standards/agent-dispatch.ai.yaml +69 -0
- package/bundled/ai/standards/ai-command-behavior.ai.yaml +45 -0
- package/bundled/ai/standards/api-design-standards.ai.yaml +192 -0
- package/bundled/ai/standards/branch-completion.ai.yaml +82 -0
- package/bundled/ai/standards/change-batching-standards.ai.yaml +195 -0
- package/bundled/ai/standards/database-standards.ai.yaml +220 -0
- package/bundled/ai/standards/error-codes.ai.yaml +37 -2
- package/bundled/ai/standards/git-worktree.ai.yaml +77 -0
- package/bundled/ai/standards/logging.ai.yaml +21 -2
- package/bundled/ai/standards/model-selection.ai.yaml +81 -0
- package/bundled/ai/standards/pipeline-integration-standards.ai.yaml +184 -0
- package/bundled/ai/standards/systematic-debugging.ai.yaml +73 -0
- package/bundled/ai/standards/verification-evidence.ai.yaml +84 -0
- package/bundled/ai/standards/workflow-enforcement.ai.yaml +253 -0
- package/bundled/core/acceptance-criteria-traceability.md +293 -0
- package/bundled/core/agent-dispatch.md +149 -0
- package/bundled/core/ai-command-behavior.md +239 -0
- package/bundled/core/api-design-standards.md +938 -0
- package/bundled/core/branch-completion.md +158 -0
- package/bundled/core/change-batching-standards.md +257 -0
- package/bundled/core/checkin-standards.md +43 -6
- package/bundled/core/database-standards.md +828 -0
- package/bundled/core/error-code-standards.md +228 -2
- package/bundled/core/forward-derivation-standards.md +54 -2
- package/bundled/core/git-worktree.md +131 -0
- package/bundled/core/model-selection.md +153 -0
- package/bundled/core/pipeline-integration-standards.md +230 -0
- package/bundled/core/systematic-debugging.md +156 -0
- package/bundled/core/testing-standards.md +49 -39
- package/bundled/core/verification-evidence.md +172 -0
- package/bundled/core/workflow-enforcement.md +132 -0
- package/bundled/locales/zh-CN/CLAUDE.md +2 -2
- package/bundled/locales/zh-CN/README.md +4 -4
- package/bundled/locales/zh-CN/SECURITY.md +92 -0
- package/bundled/locales/zh-CN/core/acceptance-criteria-traceability.md +301 -0
- package/bundled/locales/zh-CN/core/acceptance-test-driven-development.md +47 -0
- package/bundled/locales/zh-CN/core/accessibility-standards.md +124 -0
- package/bundled/locales/zh-CN/core/agent-dispatch.md +113 -0
- package/bundled/locales/zh-CN/core/ai-agreement-standards.md +103 -0
- package/bundled/locales/zh-CN/core/ai-command-behavior.md +247 -0
- package/bundled/locales/zh-CN/core/api-design-standards.md +946 -0
- package/bundled/locales/zh-CN/core/behavior-driven-development.md +48 -0
- package/bundled/locales/zh-CN/core/branch-completion.md +112 -0
- package/bundled/locales/zh-CN/core/change-batching-standards.md +265 -0
- package/bundled/locales/zh-CN/core/checkin-standards.md +43 -5
- package/bundled/locales/zh-CN/core/context-aware-loading.md +106 -0
- package/bundled/locales/zh-CN/core/database-standards.md +836 -0
- package/bundled/locales/zh-CN/core/deployment-standards.md +80 -0
- package/bundled/locales/zh-CN/core/error-code-standards.md +2 -2
- package/bundled/locales/zh-CN/core/forward-derivation-standards.md +493 -0
- package/bundled/locales/zh-CN/core/git-worktree.md +101 -0
- package/bundled/locales/zh-CN/core/model-selection.md +112 -0
- package/bundled/locales/zh-CN/core/performance-standards.md +104 -0
- package/bundled/locales/zh-CN/core/pipeline-integration-standards.md +238 -0
- package/bundled/locales/zh-CN/core/project-context-memory.md +124 -0
- package/bundled/locales/zh-CN/core/requirement-engineering.md +49 -0
- package/bundled/locales/zh-CN/core/security-standards.md +100 -0
- package/bundled/locales/zh-CN/core/systematic-debugging.md +106 -0
- package/bundled/locales/zh-CN/core/test-governance.md +116 -0
- package/bundled/locales/zh-CN/core/testing-standards.md +392 -156
- package/bundled/locales/zh-CN/core/verification-evidence.md +118 -0
- package/bundled/locales/zh-CN/core/virtual-organization-standards.md +104 -0
- package/bundled/locales/zh-CN/core/workflow-enforcement.md +132 -0
- package/bundled/locales/zh-CN/docs/CHEATSHEET.md +27 -1
- package/bundled/locales/zh-CN/docs/CLI-INIT-OPTIONS.md +9 -1
- package/bundled/locales/zh-CN/docs/FEATURE-REFERENCE.md +37 -9
- package/bundled/locales/zh-CN/docs/USER-MANUAL.md +652 -0
- package/bundled/locales/zh-CN/integrations/github-copilot/copilot-instructions.md +1 -1
- package/bundled/locales/zh-CN/integrations/openspec/AGENTS.md +29 -4
- package/bundled/locales/zh-CN/integrations/spec-kit/AGENTS.md +143 -72
- package/bundled/locales/zh-CN/skills/ac-coverage-assistant/SKILL.md +126 -0
- package/bundled/locales/zh-CN/skills/api-design-assistant/SKILL.md +100 -0
- package/bundled/locales/zh-CN/skills/brainstorm-assistant/SKILL.md +119 -0
- package/bundled/locales/zh-CN/skills/ci-cd-assistant/SKILL.md +82 -0
- package/bundled/locales/zh-CN/skills/commands/ac-coverage.md +97 -0
- package/bundled/locales/zh-CN/skills/commands/api-design.md +94 -0
- package/bundled/locales/zh-CN/skills/commands/atdd.md +163 -0
- package/bundled/locales/zh-CN/skills/commands/audit.md +77 -0
- package/bundled/locales/zh-CN/skills/commands/bdd.md +1 -1
- package/bundled/locales/zh-CN/skills/commands/brainstorm.md +87 -0
- package/bundled/locales/zh-CN/skills/commands/changelog.md +63 -0
- package/bundled/locales/zh-CN/skills/commands/check.md +219 -0
- package/bundled/locales/zh-CN/skills/commands/checkin.md +61 -0
- package/bundled/locales/zh-CN/skills/commands/ci-cd.md +77 -0
- package/bundled/locales/zh-CN/skills/commands/commit.md +81 -0
- package/bundled/locales/zh-CN/skills/commands/config.md +207 -0
- package/bundled/locales/zh-CN/skills/commands/coverage.md +74 -0
- package/bundled/locales/zh-CN/skills/commands/database.md +78 -0
- package/bundled/locales/zh-CN/skills/commands/derive-all.md +58 -0
- package/bundled/locales/zh-CN/skills/commands/derive-atdd.md +54 -0
- package/bundled/locales/zh-CN/skills/commands/derive-bdd.md +53 -0
- package/bundled/locales/zh-CN/skills/commands/derive-tdd.md +54 -0
- package/bundled/locales/zh-CN/skills/commands/derive.md +78 -0
- package/bundled/locales/zh-CN/skills/commands/dev-workflow.md +119 -0
- package/bundled/locales/zh-CN/skills/commands/discover.md +86 -0
- package/bundled/locales/zh-CN/skills/commands/docgen.md +67 -0
- package/bundled/locales/zh-CN/skills/commands/docs.md +65 -0
- package/bundled/locales/zh-CN/skills/commands/durable.md +87 -0
- package/bundled/locales/zh-CN/skills/commands/guide.md +52 -0
- package/bundled/locales/zh-CN/skills/commands/incident.md +92 -0
- package/bundled/locales/zh-CN/skills/commands/init.md +272 -0
- package/bundled/locales/zh-CN/skills/commands/methodology.md +1 -1
- package/bundled/locales/zh-CN/skills/commands/metrics.md +73 -0
- package/bundled/locales/zh-CN/skills/commands/migrate.md +92 -0
- package/bundled/locales/zh-CN/skills/commands/pr.md +80 -0
- package/bundled/locales/zh-CN/skills/commands/refactor.md +1 -1
- package/bundled/locales/zh-CN/skills/commands/release.md +62 -0
- package/bundled/locales/zh-CN/skills/commands/requirement.md +54 -0
- package/bundled/locales/zh-CN/skills/commands/reverse-bdd.md +47 -0
- package/bundled/locales/zh-CN/skills/commands/reverse-sdd.md +51 -0
- package/bundled/locales/zh-CN/skills/commands/reverse-tdd.md +51 -0
- package/bundled/locales/zh-CN/skills/commands/reverse.md +63 -0
- package/bundled/locales/zh-CN/skills/commands/review.md +50 -0
- package/bundled/locales/zh-CN/skills/commands/scan.md +76 -0
- package/bundled/locales/zh-CN/skills/commands/sdd-retro.md +40 -0
- package/bundled/locales/zh-CN/skills/commands/sdd.md +379 -0
- package/bundled/locales/zh-CN/skills/commands/security.md +75 -0
- package/bundled/locales/zh-CN/skills/commands/tdd.md +111 -0
- package/bundled/locales/zh-CN/skills/commands/update.md +337 -0
- package/bundled/locales/zh-CN/skills/commit-standards/SKILL.md +1 -2
- package/bundled/locales/zh-CN/skills/database-assistant/SKILL.md +97 -0
- package/bundled/locales/zh-CN/skills/dev-workflow-guide/SKILL.md +145 -0
- package/bundled/locales/zh-CN/skills/durable-execution-assistant/SKILL.md +84 -0
- package/bundled/locales/zh-CN/skills/incident-response-assistant/SKILL.md +107 -0
- package/bundled/locales/zh-CN/skills/metrics-dashboard-assistant/SKILL.md +67 -0
- package/bundled/locales/zh-CN/skills/migration-assistant/SKILL.md +77 -0
- package/bundled/locales/zh-CN/skills/pr-automation-assistant/SKILL.md +90 -0
- package/bundled/locales/zh-CN/skills/security-assistant/SKILL.md +79 -0
- package/bundled/locales/zh-CN/skills/security-scan-assistant/SKILL.md +72 -0
- package/bundled/locales/zh-CN/skills/spec-driven-dev/SKILL.md +73 -10
- package/bundled/locales/zh-CN/skills/spec-driven-dev/guide.md +267 -122
- package/bundled/locales/zh-TW/CLAUDE.md +2 -2
- package/bundled/locales/zh-TW/README.md +4 -4
- package/bundled/locales/zh-TW/SECURITY.md +92 -0
- package/bundled/locales/zh-TW/core/acceptance-criteria-traceability.md +301 -0
- package/bundled/locales/zh-TW/core/acceptance-test-driven-development.md +47 -0
- package/bundled/locales/zh-TW/core/accessibility-standards.md +84 -0
- package/bundled/locales/zh-TW/core/agent-dispatch.md +89 -0
- package/bundled/locales/zh-TW/core/ai-agreement-standards.md +87 -0
- package/bundled/locales/zh-TW/core/ai-command-behavior.md +247 -0
- package/bundled/locales/zh-TW/core/api-design-standards.md +946 -0
- package/bundled/locales/zh-TW/core/behavior-driven-development.md +63 -0
- package/bundled/locales/zh-TW/core/branch-completion.md +76 -0
- package/bundled/locales/zh-TW/core/change-batching-standards.md +265 -0
- package/bundled/locales/zh-TW/core/checkin-standards.md +39 -5
- package/bundled/locales/zh-TW/core/context-aware-loading.md +86 -0
- package/bundled/locales/zh-TW/core/database-standards.md +836 -0
- package/bundled/locales/zh-TW/core/deployment-standards.md +66 -0
- package/bundled/locales/zh-TW/core/error-code-standards.md +230 -4
- package/bundled/locales/zh-TW/core/forward-derivation-standards.md +62 -2
- package/bundled/locales/zh-TW/core/git-worktree.md +104 -0
- package/bundled/locales/zh-TW/core/model-selection.md +83 -0
- package/bundled/locales/zh-TW/core/performance-standards.md +84 -0
- package/bundled/locales/zh-TW/core/pipeline-integration-standards.md +238 -0
- package/bundled/locales/zh-TW/core/project-context-memory.md +79 -0
- package/bundled/locales/zh-TW/core/requirement-engineering.md +79 -0
- package/bundled/locales/zh-TW/core/security-standards.md +74 -0
- package/bundled/locales/zh-TW/core/systematic-debugging.md +95 -0
- package/bundled/locales/zh-TW/core/test-governance.md +88 -0
- package/bundled/locales/zh-TW/core/testing-standards.md +309 -86
- package/bundled/locales/zh-TW/core/verification-evidence.md +94 -0
- package/bundled/locales/zh-TW/core/virtual-organization-standards.md +88 -0
- package/bundled/locales/zh-TW/core/workflow-enforcement.md +132 -0
- package/bundled/locales/zh-TW/docs/CHEATSHEET.md +27 -1
- package/bundled/locales/zh-TW/docs/CLI-INIT-OPTIONS.md +9 -1
- package/bundled/locales/zh-TW/docs/FEATURE-REFERENCE.md +37 -9
- package/bundled/locales/zh-TW/docs/USER-MANUAL.md +652 -0
- package/bundled/locales/zh-TW/integrations/github-copilot/copilot-instructions.md +1 -1
- package/bundled/locales/zh-TW/integrations/openspec/AGENTS.md +29 -4
- package/bundled/locales/zh-TW/integrations/spec-kit/AGENTS.md +142 -71
- package/bundled/locales/zh-TW/skills/ac-coverage-assistant/SKILL.md +127 -0
- package/bundled/locales/zh-TW/skills/ai-friendly-architecture/SKILL.md +1 -4
- package/bundled/locales/zh-TW/skills/ai-instruction-standards/SKILL.md +1 -4
- package/bundled/locales/zh-TW/skills/api-design-assistant/SKILL.md +97 -0
- package/bundled/locales/zh-TW/skills/atdd-assistant/SKILL.md +1 -4
- package/bundled/locales/zh-TW/skills/audit-assistant/SKILL.md +1 -4
- package/bundled/locales/zh-TW/skills/bdd-assistant/SKILL.md +1 -4
- package/bundled/locales/zh-TW/skills/brainstorm-assistant/SKILL.md +1 -4
- package/bundled/locales/zh-TW/skills/changelog-guide/SKILL.md +1 -4
- package/bundled/locales/zh-TW/skills/checkin-assistant/SKILL.md +1 -4
- package/bundled/locales/zh-TW/skills/ci-cd-assistant/SKILL.md +79 -0
- package/bundled/locales/zh-TW/skills/code-review-assistant/SKILL.md +1 -4
- package/bundled/locales/zh-TW/skills/commands/ac-coverage.md +95 -0
- package/bundled/locales/zh-TW/skills/commands/api-design.md +92 -0
- package/bundled/locales/zh-TW/skills/commands/atdd.md +167 -0
- package/bundled/locales/zh-TW/skills/commands/audit.md +75 -0
- package/bundled/locales/zh-TW/skills/commands/bdd.md +1 -1
- package/bundled/locales/zh-TW/skills/commands/brainstorm.md +91 -0
- package/bundled/locales/zh-TW/skills/commands/changelog.md +67 -0
- package/bundled/locales/zh-TW/skills/commands/check.md +223 -0
- package/bundled/locales/zh-TW/skills/commands/checkin.md +65 -0
- package/bundled/locales/zh-TW/skills/commands/ci-cd.md +75 -0
- package/bundled/locales/zh-TW/skills/commands/commit.md +85 -0
- package/bundled/locales/zh-TW/skills/commands/config.md +211 -0
- package/bundled/locales/zh-TW/skills/commands/coverage.md +78 -0
- package/bundled/locales/zh-TW/skills/commands/database.md +76 -0
- package/bundled/locales/zh-TW/skills/commands/derive-all.md +62 -0
- package/bundled/locales/zh-TW/skills/commands/derive-atdd.md +58 -0
- package/bundled/locales/zh-TW/skills/commands/derive-bdd.md +54 -0
- package/bundled/locales/zh-TW/skills/commands/derive-tdd.md +55 -0
- package/bundled/locales/zh-TW/skills/commands/derive.md +79 -0
- package/bundled/locales/zh-TW/skills/commands/dev-workflow.md +120 -0
- package/bundled/locales/zh-TW/skills/commands/discover.md +87 -0
- package/bundled/locales/zh-TW/skills/commands/docgen.md +68 -0
- package/bundled/locales/zh-TW/skills/commands/docs.md +66 -0
- package/bundled/locales/zh-TW/skills/commands/durable.md +85 -0
- package/bundled/locales/zh-TW/skills/commands/guide.md +51 -0
- package/bundled/locales/zh-TW/skills/commands/incident.md +90 -0
- package/bundled/locales/zh-TW/skills/commands/init.md +273 -0
- package/bundled/locales/zh-TW/skills/commands/methodology.md +1 -1
- package/bundled/locales/zh-TW/skills/commands/metrics.md +71 -0
- package/bundled/locales/zh-TW/skills/commands/migrate.md +90 -0
- package/bundled/locales/zh-TW/skills/commands/pr.md +78 -0
- package/bundled/locales/zh-TW/skills/commands/refactor.md +1 -1
- package/bundled/locales/zh-TW/skills/commands/release.md +63 -0
- package/bundled/locales/zh-TW/skills/commands/requirement.md +61 -0
- package/bundled/locales/zh-TW/skills/commands/reverse-bdd.md +54 -0
- package/bundled/locales/zh-TW/skills/commands/reverse-sdd.md +58 -0
- package/bundled/locales/zh-TW/skills/commands/reverse-tdd.md +58 -0
- package/bundled/locales/zh-TW/skills/commands/reverse.md +70 -0
- package/bundled/locales/zh-TW/skills/commands/review.md +57 -0
- package/bundled/locales/zh-TW/skills/commands/scan.md +74 -0
- package/bundled/locales/zh-TW/skills/commands/sdd-retro.md +47 -0
- package/bundled/locales/zh-TW/skills/commands/sdd.md +362 -0
- package/bundled/locales/zh-TW/skills/commands/security.md +73 -0
- package/bundled/locales/zh-TW/skills/commands/tdd.md +115 -0
- package/bundled/locales/zh-TW/skills/commands/update.md +326 -0
- package/bundled/locales/zh-TW/skills/commit-standards/SKILL.md +2 -6
- package/bundled/locales/zh-TW/skills/database-assistant/SKILL.md +94 -0
- package/bundled/locales/zh-TW/skills/dev-workflow-guide/SKILL.md +140 -0
- package/bundled/locales/zh-TW/skills/docs-generator/SKILL.md +1 -4
- package/bundled/locales/zh-TW/skills/documentation-guide/SKILL.md +1 -4
- package/bundled/locales/zh-TW/skills/durable-execution-assistant/SKILL.md +81 -0
- package/bundled/locales/zh-TW/skills/error-code-guide/SKILL.md +1 -4
- package/bundled/locales/zh-TW/skills/forward-derivation/SKILL.md +1 -4
- package/bundled/locales/zh-TW/skills/git-workflow-guide/SKILL.md +1 -4
- package/bundled/locales/zh-TW/skills/incident-response-assistant/SKILL.md +104 -0
- package/bundled/locales/zh-TW/skills/logging-guide/SKILL.md +1 -4
- package/bundled/locales/zh-TW/skills/methodology-system/SKILL.md +1 -4
- package/bundled/locales/zh-TW/skills/metrics-dashboard-assistant/SKILL.md +64 -0
- package/bundled/locales/zh-TW/skills/migration-assistant/SKILL.md +74 -0
- package/bundled/locales/zh-TW/skills/pr-automation-assistant/SKILL.md +87 -0
- package/bundled/locales/zh-TW/skills/project-discovery/SKILL.md +1 -4
- package/bundled/locales/zh-TW/skills/refactoring-assistant/SKILL.md +1 -4
- package/bundled/locales/zh-TW/skills/release-standards/SKILL.md +1 -4
- package/bundled/locales/zh-TW/skills/requirement-assistant/SKILL.md +1 -4
- package/bundled/locales/zh-TW/skills/reverse-engineer/SKILL.md +1 -4
- package/bundled/locales/zh-TW/skills/security-assistant/SKILL.md +76 -0
- package/bundled/locales/zh-TW/skills/security-scan-assistant/SKILL.md +69 -0
- package/bundled/locales/zh-TW/skills/spec-driven-dev/SKILL.md +74 -14
- package/bundled/locales/zh-TW/skills/spec-driven-dev/guide.md +243 -98
- package/bundled/locales/zh-TW/skills/tdd-assistant/SKILL.md +1 -4
- package/bundled/locales/zh-TW/skills/test-coverage-assistant/SKILL.md +1 -4
- package/bundled/locales/zh-TW/skills/testing-guide/SKILL.md +1 -5
- package/bundled/skills/README.md +11 -0
- package/bundled/skills/ac-coverage-assistant/SKILL.md +127 -0
- package/bundled/skills/ai-collaboration-standards/SKILL.md +10 -0
- package/bundled/skills/ai-friendly-architecture/SKILL.md +10 -0
- package/bundled/skills/ai-instruction-standards/SKILL.md +10 -0
- package/bundled/skills/api-design-assistant/SKILL.md +119 -0
- package/bundled/skills/atdd-assistant/SKILL.md +7 -0
- package/bundled/skills/bdd-assistant/SKILL.md +7 -0
- package/bundled/skills/brainstorm-assistant/SKILL.md +7 -0
- package/bundled/skills/checkin-assistant/SKILL.md +7 -0
- package/bundled/skills/ci-cd-assistant/SKILL.md +97 -0
- package/bundled/skills/code-review-assistant/SKILL.md +7 -0
- package/bundled/skills/commands/README.md +70 -0
- package/bundled/skills/commands/ac-coverage.md +135 -0
- package/bundled/skills/commands/api-design.md +86 -0
- package/bundled/skills/commands/atdd.md +69 -0
- package/bundled/skills/commands/audit.md +69 -0
- package/bundled/skills/commands/bdd.md +101 -0
- package/bundled/skills/commands/brainstorm.md +45 -0
- package/bundled/skills/commands/changelog.md +34 -0
- package/bundled/skills/commands/check.md +52 -1
- package/bundled/skills/commands/checkin.md +46 -0
- package/bundled/skills/commands/ci-cd.md +69 -0
- package/bundled/skills/commands/commit.md +79 -0
- package/bundled/skills/commands/config.md +48 -0
- package/bundled/skills/commands/coverage.md +53 -0
- package/bundled/skills/commands/database.md +70 -0
- package/bundled/skills/commands/derive-all.md +40 -0
- package/bundled/skills/commands/derive-atdd.md +33 -0
- package/bundled/skills/commands/derive-bdd.md +39 -0
- package/bundled/skills/commands/derive-tdd.md +40 -0
- package/bundled/skills/commands/derive.md +47 -0
- package/bundled/skills/commands/dev-workflow.md +104 -7
- package/bundled/skills/commands/discover.md +39 -0
- package/bundled/skills/commands/docgen.md +35 -0
- package/bundled/skills/commands/docs.md +40 -0
- package/bundled/skills/commands/durable.md +79 -0
- package/bundled/skills/commands/incident.md +84 -0
- package/bundled/skills/commands/init.md +55 -0
- package/bundled/skills/commands/methodology.md +72 -0
- package/bundled/skills/commands/metrics.md +65 -0
- package/bundled/skills/commands/migrate.md +84 -0
- package/bundled/skills/commands/pr.md +72 -0
- package/bundled/skills/commands/refactor.md +51 -0
- package/bundled/skills/commands/release.md +60 -0
- package/bundled/skills/commands/requirement.md +38 -0
- package/bundled/skills/commands/reverse-bdd.md +34 -0
- package/bundled/skills/commands/reverse-sdd.md +42 -0
- package/bundled/skills/commands/reverse-tdd.md +40 -0
- package/bundled/skills/commands/reverse.md +41 -0
- package/bundled/skills/commands/review.md +39 -0
- package/bundled/skills/commands/scan.md +68 -0
- package/bundled/skills/commands/sdd-retro.md +48 -0
- package/bundled/skills/commands/sdd.md +220 -0
- package/bundled/skills/commands/security.md +67 -0
- package/bundled/skills/commands/tdd.md +101 -0
- package/bundled/skills/commands/update.md +61 -0
- package/bundled/skills/commit-standards/SKILL.md +8 -2
- package/bundled/skills/database-assistant/SKILL.md +118 -0
- package/bundled/skills/dev-workflow-guide/SKILL.md +53 -7
- package/bundled/skills/dev-workflow-guide/workflow-phases.md +24 -0
- package/bundled/skills/durable-execution-assistant/SKILL.md +116 -0
- package/bundled/skills/forward-derivation/SKILL.md +7 -0
- package/bundled/skills/incident-response-assistant/SKILL.md +132 -0
- package/bundled/skills/methodology-system/SKILL.md +24 -2
- package/bundled/skills/metrics-dashboard-assistant/SKILL.md +109 -0
- package/bundled/skills/migration-assistant/SKILL.md +119 -0
- package/bundled/skills/pr-automation-assistant/SKILL.md +114 -0
- package/bundled/skills/project-discovery/SKILL.md +7 -0
- package/bundled/skills/refactoring-assistant/SKILL.md +7 -0
- package/bundled/skills/release-standards/SKILL.md +7 -0
- package/bundled/skills/requirement-assistant/SKILL.md +7 -0
- package/bundled/skills/reverse-engineer/SKILL.md +7 -0
- package/bundled/skills/security-assistant/SKILL.md +105 -0
- package/bundled/skills/security-scan-assistant/SKILL.md +96 -0
- package/bundled/skills/spec-driven-dev/SKILL.md +84 -4
- package/bundled/skills/spec-driven-dev/guide.md +156 -22
- package/bundled/skills/tdd-assistant/SKILL.md +7 -0
- package/bundled/skills/test-coverage-assistant/SKILL.md +11 -0
- package/bundled/skills/testing-guide/SKILL.md +23 -0
- package/package.json +1 -1
- package/src/commands/check.js +154 -8
- package/src/commands/config.js +231 -104
- package/src/commands/init.js +23 -3
- package/src/commands/update.js +250 -25
- package/src/config/ai-agent-paths.js +16 -0
- package/src/config/workflow-definitions.js +184 -0
- package/src/core/constants.js +6 -0
- package/src/flows/init-flow.js +23 -6
- package/src/i18n/messages.js +51 -3
- package/src/installers/integration-installer.js +67 -2
- package/src/installers/manifest-installer.js +1 -0
- package/src/installers/standards-installer.js +3 -2
- package/src/prompts/init.js +50 -3
- package/src/reconciler/manifest-migrator.js +2 -2
- package/src/reconciler/plan-executor.js +11 -0
- package/src/utils/integration-generator.js +327 -14
- package/src/utils/workflow-gate.js +292 -0
- package/standards-registry.json +160 -5
package/src/commands/config.js
CHANGED
|
@@ -27,6 +27,7 @@ import {
|
|
|
27
27
|
promptManageAITools,
|
|
28
28
|
promptContentModeChange,
|
|
29
29
|
handleAgentsMdSharing,
|
|
30
|
+
promptAgentsMd,
|
|
30
31
|
promptMethodology,
|
|
31
32
|
promptSkillsInstallLocation,
|
|
32
33
|
promptCommandsInstallation,
|
|
@@ -148,10 +149,21 @@ export async function configCommand(action, key, value, options) {
|
|
|
148
149
|
return;
|
|
149
150
|
}
|
|
150
151
|
|
|
151
|
-
// Handle 'init' action
|
|
152
|
+
// Handle 'init' action — backward compatible
|
|
152
153
|
if (action === 'init') {
|
|
153
|
-
|
|
154
|
-
|
|
154
|
+
if (options.vibeMode) {
|
|
155
|
+
await initVibeMode(options);
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
// Treat as no-action: route to flat menu or limited menu
|
|
159
|
+
const projectPath = process.cwd();
|
|
160
|
+
const initialized = isInitialized(projectPath);
|
|
161
|
+
if (initialized) {
|
|
162
|
+
return runProjectConfiguration(options);
|
|
163
|
+
} else {
|
|
164
|
+
await handleLimitedConfig(options);
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
155
167
|
}
|
|
156
168
|
|
|
157
169
|
// No action: check for --type (direct project configuration) or show interactive menu
|
|
@@ -168,80 +180,38 @@ export async function configCommand(action, key, value, options) {
|
|
|
168
180
|
return;
|
|
169
181
|
}
|
|
170
182
|
|
|
171
|
-
// No arguments at all:
|
|
183
|
+
// No arguments at all: route based on initialization state
|
|
172
184
|
const projectPath = process.cwd();
|
|
173
185
|
const initialized = isInitialized(projectPath);
|
|
174
186
|
|
|
175
|
-
// Set language from manifest (same pattern as runProjectConfiguration)
|
|
176
|
-
if (initialized && !isLanguageExplicitlySet()) {
|
|
177
|
-
const manifest = readManifest(projectPath);
|
|
178
|
-
if (manifest) {
|
|
179
|
-
const uiLang = manifest.options?.display_language || 'en';
|
|
180
|
-
setLanguage(uiLang);
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
const menuChoices = [];
|
|
185
|
-
|
|
186
187
|
if (initialized) {
|
|
187
|
-
menuChoices.push({
|
|
188
|
-
name: t('config.menuProjectSettings', 'Project settings (level, AI tools, Skills, format, workflow...)'),
|
|
189
|
-
value: 'project'
|
|
190
|
-
});
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
menuChoices.push({
|
|
194
|
-
name: t('config.menuPreferences', 'Preferences (UI language, HITL threshold, Vibe Coding)'),
|
|
195
|
-
value: 'preferences'
|
|
196
|
-
});
|
|
197
|
-
|
|
198
|
-
menuChoices.push({
|
|
199
|
-
name: t('config.menuShowConfig', 'Show current configuration (JSON)'),
|
|
200
|
-
value: 'show'
|
|
201
|
-
});
|
|
202
|
-
|
|
203
|
-
const { menuChoice } = await inquirer.prompt([
|
|
204
|
-
{
|
|
205
|
-
type: 'list',
|
|
206
|
-
name: 'menuChoice',
|
|
207
|
-
message: t('config.menuQuestion', 'What would you like to configure?'),
|
|
208
|
-
choices: menuChoices
|
|
209
|
-
}
|
|
210
|
-
]);
|
|
211
|
-
|
|
212
|
-
if (menuChoice === 'project') {
|
|
213
188
|
return runProjectConfiguration(options);
|
|
214
|
-
} else
|
|
215
|
-
await
|
|
216
|
-
return;
|
|
217
|
-
} else if (menuChoice === 'show') {
|
|
218
|
-
console.log(chalk.bold('Current Configuration:'));
|
|
219
|
-
console.log(JSON.stringify(currentConfig, null, 2));
|
|
189
|
+
} else {
|
|
190
|
+
await handleLimitedConfig(options);
|
|
220
191
|
return;
|
|
221
192
|
}
|
|
222
|
-
|
|
223
|
-
return;
|
|
224
193
|
}
|
|
225
194
|
|
|
226
195
|
console.error(chalk.red(`Unknown action: ${action}`));
|
|
227
196
|
}
|
|
228
197
|
|
|
229
198
|
/**
|
|
230
|
-
* Handle config
|
|
199
|
+
* Handle limited config menu when project is not initialized.
|
|
200
|
+
* Shows only: Display Language (global), Vibe Coding, Show config.
|
|
231
201
|
* @param {Object} options - Command options
|
|
232
202
|
*/
|
|
233
|
-
async function
|
|
203
|
+
async function handleLimitedConfig(options) {
|
|
204
|
+
// Set language from global config if available
|
|
205
|
+
if (!isLanguageExplicitlySet()) {
|
|
206
|
+
const globalLang = config.get('ui.language') || 'en';
|
|
207
|
+
setLanguage(globalLang);
|
|
208
|
+
}
|
|
209
|
+
|
|
234
210
|
console.log('');
|
|
235
211
|
console.log(chalk.bold(t('config.initTitle', 'UDS Configuration Setup')));
|
|
212
|
+
console.log(chalk.gray(t('config.notInitializedHint', 'Project not initialized. Run `uds init` for full configuration.')));
|
|
236
213
|
console.log('');
|
|
237
214
|
|
|
238
|
-
// Check for --vibe-mode flag
|
|
239
|
-
if (options.vibeMode) {
|
|
240
|
-
await initVibeMode(options);
|
|
241
|
-
return;
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
// Default init: show menu
|
|
245
215
|
const { initType } = await inquirer.prompt([
|
|
246
216
|
{
|
|
247
217
|
type: 'list',
|
|
@@ -257,12 +227,8 @@ async function handleConfigInit(options) {
|
|
|
257
227
|
value: 'vibe'
|
|
258
228
|
},
|
|
259
229
|
{
|
|
260
|
-
name: t('config.
|
|
261
|
-
value: '
|
|
262
|
-
},
|
|
263
|
-
{
|
|
264
|
-
name: t('config.customMode', 'Custom - Set individual options'),
|
|
265
|
-
value: 'custom'
|
|
230
|
+
name: t('config.menuShowConfig', 'Show current configuration (JSON)'),
|
|
231
|
+
value: 'show'
|
|
266
232
|
}
|
|
267
233
|
]
|
|
268
234
|
}
|
|
@@ -273,16 +239,21 @@ async function handleConfigInit(options) {
|
|
|
273
239
|
return;
|
|
274
240
|
} else if (initType === 'vibe') {
|
|
275
241
|
await initVibeMode(options);
|
|
276
|
-
} else if (initType === '
|
|
277
|
-
|
|
278
|
-
console.log(chalk.
|
|
279
|
-
|
|
280
|
-
console.log(chalk.gray(t('config.customHint', 'Use: uds config set <key> <value>')));
|
|
242
|
+
} else if (initType === 'show') {
|
|
243
|
+
const currentConfig = config.init();
|
|
244
|
+
console.log(chalk.bold('Current Configuration:'));
|
|
245
|
+
console.log(JSON.stringify(currentConfig, null, 2));
|
|
281
246
|
}
|
|
282
247
|
}
|
|
283
248
|
|
|
284
249
|
/**
|
|
285
|
-
* Handle display language change
|
|
250
|
+
* Handle display language change with cascade:
|
|
251
|
+
* 1. Update manifest + setLanguage
|
|
252
|
+
* 2. Auto-prompt commit_language
|
|
253
|
+
* 3. If skills/commands installed → confirm reinstall with new locale
|
|
254
|
+
* 4. If AI tools → confirm regenerate integrations
|
|
255
|
+
* 5. Copy commit_language option file if changed
|
|
256
|
+
* 6. Write manifest once at end
|
|
286
257
|
*/
|
|
287
258
|
async function handleDisplayLanguageChange() {
|
|
288
259
|
const projectPath = process.cwd();
|
|
@@ -306,37 +277,91 @@ async function handleDisplayLanguageChange() {
|
|
|
306
277
|
return;
|
|
307
278
|
}
|
|
308
279
|
|
|
280
|
+
// Save to global config regardless of initialization
|
|
281
|
+
config.set('ui.language', newLang, 'global');
|
|
282
|
+
|
|
309
283
|
if (!initialized) {
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
console.log(chalk.
|
|
284
|
+
// Not initialized: save to global config only
|
|
285
|
+
setLanguage(newLang);
|
|
286
|
+
console.log(chalk.green(t('config.languageUpdated', 'Display language updated!')));
|
|
313
287
|
return;
|
|
314
288
|
}
|
|
315
289
|
|
|
316
290
|
const manifest = readManifest(projectPath);
|
|
317
|
-
if (manifest)
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
291
|
+
if (!manifest) return;
|
|
292
|
+
|
|
293
|
+
// Update manifest display_language and switch UI
|
|
294
|
+
manifest.options = manifest.options || {};
|
|
295
|
+
manifest.options.display_language = newLang;
|
|
296
|
+
setLanguage(newLang);
|
|
297
|
+
|
|
298
|
+
// Cascade 1: Auto-prompt commit_language
|
|
299
|
+
const oldCommitLang = manifest.options.commit_language;
|
|
300
|
+
const newCommitLang = await promptCommitLanguage(newLang);
|
|
301
|
+
manifest.options.commit_language = newCommitLang;
|
|
302
|
+
|
|
303
|
+
// Copy commit_language option file if changed
|
|
304
|
+
if (newCommitLang !== oldCommitLang) {
|
|
305
|
+
const standards = getAllStandards();
|
|
306
|
+
const formatsToUse = manifest.format === 'both' ? ['ai', 'human'] : [manifest.format || 'human'];
|
|
307
|
+
for (const std of standards) {
|
|
308
|
+
if (std.id === 'commit-message' && std.options) {
|
|
309
|
+
for (const targetFormat of formatsToUse) {
|
|
310
|
+
const option = findOption(std, 'commit_language', newCommitLang);
|
|
311
|
+
if (option) {
|
|
312
|
+
const sourcePath = getOptionSource(option, targetFormat);
|
|
313
|
+
await copyStandard(sourcePath, '.standards/options', projectPath);
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
}
|
|
322
319
|
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
320
|
+
// Cascade 2: Reinstall skills/commands with new locale if installed
|
|
321
|
+
const hasSkillInstalls = manifest.skills?.installations?.length > 0;
|
|
322
|
+
const hasCommandInstalls = manifest.commands?.installations?.length > 0;
|
|
323
|
+
if (hasSkillInstalls || hasCommandInstalls) {
|
|
324
|
+
const { confirm } = await inquirer.prompt([{
|
|
325
|
+
type: 'confirm',
|
|
326
|
+
name: 'confirm',
|
|
327
|
+
message: t('config.reinstallWithNewLocale', 'Reinstall Skills/Commands with new language?'),
|
|
328
|
+
default: true
|
|
329
|
+
}]);
|
|
331
330
|
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
331
|
+
if (confirm) {
|
|
332
|
+
const cmdLocale = displayLanguageToLocale(newLang);
|
|
333
|
+
if (hasSkillInstalls) {
|
|
334
|
+
const spinner = ora(t('config.reinstallingSkills', 'Reinstalling Skills...')).start();
|
|
335
|
+
await installSkillsToMultipleAgents(manifest.skills.installations, null, projectPath, cmdLocale);
|
|
336
|
+
spinner.succeed(t('config.skillsReinstalled', 'Skills reinstalled'));
|
|
337
337
|
}
|
|
338
|
+
if (hasCommandInstalls) {
|
|
339
|
+
const spinner = ora(t('config.reinstallingCommands', 'Reinstalling Commands...')).start();
|
|
340
|
+
await installCommandsToMultipleAgents(manifest.commands.installations, null, projectPath, cmdLocale);
|
|
341
|
+
spinner.succeed(t('config.commandsReinstalled', 'Commands reinstalled'));
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
// Cascade 3: Regenerate integrations if AI tools configured
|
|
347
|
+
if (manifest.aiTools?.length > 0) {
|
|
348
|
+
const { confirm } = await inquirer.prompt([{
|
|
349
|
+
type: 'confirm',
|
|
350
|
+
name: 'confirm',
|
|
351
|
+
message: t('config.regenerateForLanguage', 'Regenerate AI tool integrations with new language?'),
|
|
352
|
+
default: true
|
|
353
|
+
}]);
|
|
354
|
+
|
|
355
|
+
if (confirm) {
|
|
356
|
+
const spinner = ora(t('config.applyingPreset', 'Applying...')).start();
|
|
357
|
+
regenerateIntegrations(projectPath, manifest);
|
|
358
|
+
spinner.succeed(t('config.integrationsRegenerated', 'Integrations regenerated'));
|
|
338
359
|
}
|
|
339
360
|
}
|
|
361
|
+
|
|
362
|
+
// Single write at the end
|
|
363
|
+
writeManifest(manifest, projectPath);
|
|
364
|
+
console.log(chalk.green(t('config.languageUpdated', 'Display language updated!')));
|
|
340
365
|
}
|
|
341
366
|
|
|
342
367
|
/**
|
|
@@ -453,6 +478,9 @@ export async function runProjectConfiguration(options) {
|
|
|
453
478
|
|
|
454
479
|
console.log();
|
|
455
480
|
console.log(chalk.cyan(msgObj.currentConfig));
|
|
481
|
+
const langNames = { en: 'English', 'zh-tw': '繁體中文', 'zh-cn': '简体中文' };
|
|
482
|
+
const displayLang = manifest.options?.display_language || 'en';
|
|
483
|
+
console.log(chalk.gray(` ${t('config.displayLanguageLabel', 'Display Language')}: ${langNames[displayLang] || displayLang}`));
|
|
456
484
|
console.log(chalk.gray(` ${common.format}: ${manifest.format || 'human'}`));
|
|
457
485
|
console.log(chalk.gray(` ${common.contentMode}: ${manifest.contentMode || 'minimal'}`));
|
|
458
486
|
console.log(chalk.gray(` ${common.aiTools}: ${manifest.aiTools?.length > 0 ? manifest.aiTools.join(', ') : common.none}`));
|
|
@@ -482,31 +510,49 @@ export async function runProjectConfiguration(options) {
|
|
|
482
510
|
if (!configType) {
|
|
483
511
|
const inq = await import('inquirer');
|
|
484
512
|
|
|
485
|
-
// Build
|
|
513
|
+
// Build flat menu matching init step order
|
|
486
514
|
const baseChoices = [
|
|
487
|
-
{ name:
|
|
488
|
-
{ name: msgObj.optionWorkflow, value: 'workflow' },
|
|
489
|
-
{ name: msgObj.optionMergeStrategy, value: 'merge_strategy' },
|
|
490
|
-
{ name: msgObj.optionCommitLanguage, value: 'commit_language' },
|
|
491
|
-
{ name: msgObj.optionTestLevels, value: 'test_levels' },
|
|
515
|
+
{ name: t('config.displayLanguageOption', 'Display Language - Change UI language'), value: 'display_language' },
|
|
492
516
|
new inq.default.Separator(),
|
|
493
517
|
{ name: chalk.cyan(msgObj.optionAITools), value: 'ai_tools' },
|
|
494
518
|
{ name: chalk.cyan(msgObj.optionSkills || 'Manage Skills installations'), value: 'skills' },
|
|
495
519
|
{ name: chalk.cyan(msgObj.optionCommands || 'Manage Commands installations'), value: 'commands' },
|
|
496
|
-
new inq.default.Separator()
|
|
497
|
-
{ name: chalk.cyan(msgObj.optionContentMode), value: 'content_mode' }
|
|
520
|
+
new inq.default.Separator()
|
|
498
521
|
];
|
|
499
522
|
|
|
500
|
-
//
|
|
523
|
+
// Format, Merge Strategy, Content Mode: only show with -E flag (advanced)
|
|
524
|
+
if (options.experimental) {
|
|
525
|
+
baseChoices.push({ name: `${msgObj.optionFormat} ${chalk.yellow(msgObj.experimental)}`, value: 'format' });
|
|
526
|
+
}
|
|
527
|
+
|
|
528
|
+
baseChoices.push(
|
|
529
|
+
{ name: msgObj.optionWorkflow, value: 'workflow' }
|
|
530
|
+
);
|
|
531
|
+
|
|
532
|
+
if (options.experimental) {
|
|
533
|
+
baseChoices.push({ name: `${msgObj.optionMergeStrategy} ${chalk.yellow(msgObj.experimental)}`, value: 'merge_strategy' });
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
baseChoices.push(
|
|
537
|
+
{ name: msgObj.optionCommitLanguage, value: 'commit_language' }
|
|
538
|
+
);
|
|
539
|
+
|
|
540
|
+
// Test Levels, Content Mode and Methodology: only with -E flag (advanced)
|
|
501
541
|
if (options.experimental) {
|
|
502
542
|
baseChoices.push(
|
|
543
|
+
{ name: `${msgObj.optionTestLevels} ${chalk.yellow(msgObj.experimental)}`, value: 'test_levels' },
|
|
544
|
+
new inq.default.Separator(),
|
|
545
|
+
{ name: `${chalk.cyan(msgObj.optionContentMode)} ${chalk.yellow(msgObj.experimental)}`, value: 'content_mode' },
|
|
503
546
|
{ name: `${chalk.cyan(msgObj.optionMethodology)} ${chalk.yellow(msgObj.experimental)}`, value: 'methodology' }
|
|
504
547
|
);
|
|
505
548
|
}
|
|
506
549
|
|
|
507
550
|
baseChoices.push(
|
|
508
551
|
new inq.default.Separator(),
|
|
509
|
-
{ name:
|
|
552
|
+
{ name: t('config.vibeMode', 'Vibe Coding Mode'), value: 'vibe_coding' },
|
|
553
|
+
new inq.default.Separator(),
|
|
554
|
+
{ name: msgObj.optionAll, value: 'all' },
|
|
555
|
+
{ name: t('config.menuShowConfig', 'Show current configuration (JSON)'), value: 'show' }
|
|
510
556
|
);
|
|
511
557
|
|
|
512
558
|
const { type } = await inq.default.prompt([
|
|
@@ -520,6 +566,26 @@ export async function runProjectConfiguration(options) {
|
|
|
520
566
|
configType = type;
|
|
521
567
|
}
|
|
522
568
|
|
|
569
|
+
// Handle display_language (flat menu item)
|
|
570
|
+
if (configType === 'display_language') {
|
|
571
|
+
await handleDisplayLanguageChange();
|
|
572
|
+
process.exit(0);
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
// Handle vibe_coding (flat menu item)
|
|
576
|
+
if (configType === 'vibe_coding') {
|
|
577
|
+
await initVibeMode(options);
|
|
578
|
+
process.exit(0);
|
|
579
|
+
}
|
|
580
|
+
|
|
581
|
+
// Handle show (flat menu item)
|
|
582
|
+
if (configType === 'show') {
|
|
583
|
+
const currentConfig = config.init();
|
|
584
|
+
console.log(chalk.bold('Current Configuration:'));
|
|
585
|
+
console.log(JSON.stringify(currentConfig, null, 2));
|
|
586
|
+
process.exit(0);
|
|
587
|
+
}
|
|
588
|
+
|
|
523
589
|
// Collect new options
|
|
524
590
|
const newOptions = { ...manifest.options };
|
|
525
591
|
let newFormat = manifest.format;
|
|
@@ -536,6 +602,15 @@ export async function runProjectConfiguration(options) {
|
|
|
536
602
|
const toolsWithSharing = handleAgentsMdSharing(result.tools);
|
|
537
603
|
newAITools = [...new Set([...newAITools, ...toolsWithSharing])];
|
|
538
604
|
needsIntegrationRegeneration = true;
|
|
605
|
+
|
|
606
|
+
// Prompt for AGENTS.md universal output if no codex/opencode in final set
|
|
607
|
+
const hasAgentsMdTool = newAITools.includes('codex') || newAITools.includes('opencode');
|
|
608
|
+
if (!hasAgentsMdTool && !manifest.generateAgentsMd) {
|
|
609
|
+
const wantAgentsMd = await promptAgentsMd(newAITools);
|
|
610
|
+
if (wantAgentsMd) {
|
|
611
|
+
manifest.generateAgentsMd = true;
|
|
612
|
+
}
|
|
613
|
+
}
|
|
539
614
|
} else if (result.action === 'remove' && result.tools.length > 0) {
|
|
540
615
|
newAITools = newAITools.filter(tool => !result.tools.includes(tool));
|
|
541
616
|
|
|
@@ -585,8 +660,26 @@ export async function runProjectConfiguration(options) {
|
|
|
585
660
|
newMethodology = await promptMethodology();
|
|
586
661
|
}
|
|
587
662
|
|
|
663
|
+
// For 'all': prompt display_language first, then format and the rest
|
|
664
|
+
let allDisplayLanguageChanged = false;
|
|
665
|
+
if (configType === 'all') {
|
|
666
|
+
const oldDisplayLang = manifest.options?.display_language || 'en';
|
|
667
|
+
const newDisplayLang = await promptDisplayLanguage();
|
|
668
|
+
if (newDisplayLang !== oldDisplayLang) {
|
|
669
|
+
newOptions.display_language = newDisplayLang;
|
|
670
|
+
manifest.options = manifest.options || {};
|
|
671
|
+
manifest.options.display_language = newDisplayLang;
|
|
672
|
+
setLanguage(newDisplayLang);
|
|
673
|
+
config.set('ui.language', newDisplayLang, 'global');
|
|
674
|
+
allDisplayLanguageChanged = true;
|
|
675
|
+
} else {
|
|
676
|
+
newOptions.display_language = oldDisplayLang;
|
|
677
|
+
}
|
|
678
|
+
}
|
|
679
|
+
|
|
588
680
|
// Handle traditional options
|
|
589
|
-
|
|
681
|
+
// Format: only prompt with -E or direct --type format (advanced setting)
|
|
682
|
+
if (configType === 'format' || (configType === 'all' && options.experimental)) {
|
|
590
683
|
newFormat = await promptFormat();
|
|
591
684
|
}
|
|
592
685
|
|
|
@@ -594,7 +687,8 @@ export async function runProjectConfiguration(options) {
|
|
|
594
687
|
newOptions.workflow = await promptGitWorkflow();
|
|
595
688
|
}
|
|
596
689
|
|
|
597
|
-
|
|
690
|
+
// Merge strategy: only prompt with -E or direct --type merge_strategy (advanced setting)
|
|
691
|
+
if (configType === 'merge_strategy' || (configType === 'all' && options.experimental)) {
|
|
598
692
|
newOptions.merge_strategy = await promptMergeStrategy();
|
|
599
693
|
}
|
|
600
694
|
|
|
@@ -603,10 +697,24 @@ export async function runProjectConfiguration(options) {
|
|
|
603
697
|
newOptions.commit_language = await promptCommitLanguage(displayLanguage);
|
|
604
698
|
}
|
|
605
699
|
|
|
606
|
-
|
|
700
|
+
// Test levels: only prompt with -E or direct --type test_levels (advanced setting)
|
|
701
|
+
if (configType === 'test_levels' || (configType === 'all' && options.experimental)) {
|
|
607
702
|
newOptions.test_levels = await promptTestLevels();
|
|
608
703
|
}
|
|
609
704
|
|
|
705
|
+
// Content mode: only prompt with -E or direct --type content_mode (advanced setting)
|
|
706
|
+
if (configType === 'content_mode') {
|
|
707
|
+
newContentMode = await promptContentModeChange(manifest.contentMode || 'minimal');
|
|
708
|
+
if (newContentMode !== manifest.contentMode) {
|
|
709
|
+
needsIntegrationRegeneration = true;
|
|
710
|
+
}
|
|
711
|
+
} else if (configType === 'all' && options.experimental) {
|
|
712
|
+
newContentMode = await promptContentModeChange(manifest.contentMode || 'minimal');
|
|
713
|
+
if (newContentMode !== manifest.contentMode) {
|
|
714
|
+
needsIntegrationRegeneration = true;
|
|
715
|
+
}
|
|
716
|
+
}
|
|
717
|
+
|
|
610
718
|
// Show changes
|
|
611
719
|
console.log();
|
|
612
720
|
console.log(chalk.cyan(msgObj.newConfig));
|
|
@@ -844,6 +952,25 @@ export async function runProjectConfiguration(options) {
|
|
|
844
952
|
}
|
|
845
953
|
}
|
|
846
954
|
|
|
955
|
+
// For 'all' flow: if display_language changed, reinstall skills/commands with new locale
|
|
956
|
+
if (configType === 'all' && allDisplayLanguageChanged) {
|
|
957
|
+
const hasSkillInstalls = manifest.skills?.installations?.length > 0;
|
|
958
|
+
const hasCommandInstalls = manifest.commands?.installations?.length > 0;
|
|
959
|
+
if (hasSkillInstalls || hasCommandInstalls) {
|
|
960
|
+
const cmdLocale = displayLanguageToLocale(newOptions.display_language);
|
|
961
|
+
if (hasSkillInstalls) {
|
|
962
|
+
const skillSpinner = ora(t('config.reinstallingSkills', 'Reinstalling Skills...')).start();
|
|
963
|
+
await installSkillsToMultipleAgents(manifest.skills.installations, null, projectPath, cmdLocale);
|
|
964
|
+
skillSpinner.succeed(t('config.skillsReinstalled', 'Skills reinstalled'));
|
|
965
|
+
}
|
|
966
|
+
if (hasCommandInstalls) {
|
|
967
|
+
const cmdSpinner = ora(t('config.reinstallingCommands', 'Reinstalling Commands...')).start();
|
|
968
|
+
await installCommandsToMultipleAgents(manifest.commands.installations, null, projectPath, cmdLocale);
|
|
969
|
+
cmdSpinner.succeed(t('config.commandsReinstalled', 'Commands reinstalled'));
|
|
970
|
+
}
|
|
971
|
+
}
|
|
972
|
+
}
|
|
973
|
+
|
|
847
974
|
console.log();
|
|
848
975
|
|
|
849
976
|
// Exit explicitly to prevent hanging due to inquirer's readline interface
|
package/src/commands/init.js
CHANGED
|
@@ -11,7 +11,7 @@ import { detectAll } from '../utils/detector.js';
|
|
|
11
11
|
import { promptConfirm } from '../prompts/init.js';
|
|
12
12
|
import { runInitFlow } from '../flows/init-flow.js';
|
|
13
13
|
import { installStandards } from '../installers/standards-installer.js';
|
|
14
|
-
import { installIntegrations } from '../installers/integration-installer.js';
|
|
14
|
+
import { installIntegrations, generateUniversalAgentsMd } from '../installers/integration-installer.js';
|
|
15
15
|
import { installSkills, installCommands } from '../installers/skills-installer.js';
|
|
16
16
|
import { writeFinalManifest } from '../installers/manifest-installer.js';
|
|
17
17
|
import {
|
|
@@ -94,6 +94,18 @@ export async function initCommand(options) {
|
|
|
94
94
|
// 2. Install Integrations
|
|
95
95
|
const integrationResults = await installIntegrations(config, projectPath);
|
|
96
96
|
|
|
97
|
+
// 2.5. Generate universal AGENTS.md if requested
|
|
98
|
+
const agentsMdResult = await generateUniversalAgentsMd(config, integrationResults, projectPath);
|
|
99
|
+
if (agentsMdResult.path) {
|
|
100
|
+
integrationResults.integrations.push(agentsMdResult.path);
|
|
101
|
+
if (agentsMdResult.blockHashInfo) {
|
|
102
|
+
integrationResults.integrationBlockHashes[agentsMdResult.path] = {
|
|
103
|
+
...agentsMdResult.blockHashInfo,
|
|
104
|
+
installedAt: new Date().toISOString()
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
97
109
|
// 3. Install Skills & Commands
|
|
98
110
|
const skillsResults = {
|
|
99
111
|
skills: [],
|
|
@@ -289,6 +301,13 @@ function buildNonInteractiveConfig(options, detected, projectPath) {
|
|
|
289
301
|
|
|
290
302
|
skillsConfig.locale = displayLanguageToLocale(displayLanguage);
|
|
291
303
|
|
|
304
|
+
// AGENTS.md: default to true in --yes mode unless codex/opencode selected or --no-agents-md
|
|
305
|
+
// When codex/opencode is selected, they already generate AGENTS.md — no need for universal output
|
|
306
|
+
const hasAgentsMdTool = aiToolsNormalized.includes('codex') || aiToolsNormalized.includes('opencode');
|
|
307
|
+
const generateAgentsMd = hasAgentsMdTool
|
|
308
|
+
? false // codex/opencode handles AGENTS.md, skip universal output
|
|
309
|
+
: (options.agentsMd !== undefined ? !!options.agentsMd : true);
|
|
310
|
+
|
|
292
311
|
return {
|
|
293
312
|
languages: options.lang ? [options.lang] : Object.keys(detected.languages).filter(k => detected.languages[k]),
|
|
294
313
|
frameworks: options.framework ? [options.framework] : Object.keys(detected.frameworks).filter(k => detected.frameworks[k]),
|
|
@@ -298,13 +317,14 @@ function buildNonInteractiveConfig(options, detected, projectPath) {
|
|
|
298
317
|
workflow: options.workflow || 'github-flow',
|
|
299
318
|
merge_strategy: options.mergeStrategy || 'squash',
|
|
300
319
|
commit_language: options.commitLang || 'english',
|
|
301
|
-
test_levels: options.testLevels ? options.testLevels.split(',') : ['unit-testing', 'integration-testing']
|
|
320
|
+
test_levels: options.testLevels ? options.testLevels.split(',') : ['unit-testing', 'integration-testing', 'system-testing', 'e2e-testing']
|
|
302
321
|
},
|
|
303
322
|
skillsConfig,
|
|
304
323
|
aiTools: aiToolsNormalized,
|
|
305
324
|
integrations: [...aiToolsNormalized],
|
|
306
325
|
contentMode: skillsConfig.contentMode || 'minimal',
|
|
307
|
-
methodology: null
|
|
326
|
+
methodology: null,
|
|
327
|
+
generateAgentsMd
|
|
308
328
|
};
|
|
309
329
|
}
|
|
310
330
|
|