specweave 0.26.13 → 0.27.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.
Files changed (176) hide show
  1. package/CLAUDE.md +73 -1
  2. package/README.md +111 -466
  3. package/dist/plugins/specweave-jira/lib/setup-wizard.d.ts.map +1 -1
  4. package/dist/plugins/specweave-jira/lib/setup-wizard.js +57 -78
  5. package/dist/plugins/specweave-jira/lib/setup-wizard.js.map +1 -1
  6. package/dist/src/cli/commands/import-docs.d.ts.map +1 -1
  7. package/dist/src/cli/commands/import-docs.js +23 -31
  8. package/dist/src/cli/commands/import-docs.js.map +1 -1
  9. package/dist/src/cli/commands/import-external.d.ts.map +1 -1
  10. package/dist/src/cli/commands/import-external.js +6 -10
  11. package/dist/src/cli/commands/import-external.js.map +1 -1
  12. package/dist/src/cli/commands/init-multiproject.d.ts.map +1 -1
  13. package/dist/src/cli/commands/init-multiproject.js +58 -73
  14. package/dist/src/cli/commands/init-multiproject.js.map +1 -1
  15. package/dist/src/cli/commands/init.d.ts +17 -11
  16. package/dist/src/cli/commands/init.d.ts.map +1 -1
  17. package/dist/src/cli/commands/init.js +221 -1874
  18. package/dist/src/cli/commands/init.js.map +1 -1
  19. package/dist/src/cli/commands/install.d.ts.map +1 -1
  20. package/dist/src/cli/commands/install.js +14 -22
  21. package/dist/src/cli/commands/install.js.map +1 -1
  22. package/dist/src/cli/commands/migrate-config.d.ts.map +1 -1
  23. package/dist/src/cli/commands/migrate-config.js +6 -10
  24. package/dist/src/cli/commands/migrate-config.js.map +1 -1
  25. package/dist/src/cli/commands/switch-project.d.ts.map +1 -1
  26. package/dist/src/cli/commands/switch-project.js.map +1 -1
  27. package/dist/src/cli/helpers/ado-area-path-mapper.d.ts.map +1 -1
  28. package/dist/src/cli/helpers/ado-area-path-mapper.js +36 -49
  29. package/dist/src/cli/helpers/ado-area-path-mapper.js.map +1 -1
  30. package/dist/src/cli/helpers/github/increment-profile-selector.d.ts.map +1 -1
  31. package/dist/src/cli/helpers/github/increment-profile-selector.js.map +1 -1
  32. package/dist/src/cli/helpers/github/profile-manager.d.ts.map +1 -1
  33. package/dist/src/cli/helpers/github/profile-manager.js +8 -11
  34. package/dist/src/cli/helpers/github/profile-manager.js.map +1 -1
  35. package/dist/src/cli/helpers/github-repo-selector.d.ts.map +1 -1
  36. package/dist/src/cli/helpers/github-repo-selector.js +26 -50
  37. package/dist/src/cli/helpers/github-repo-selector.js.map +1 -1
  38. package/dist/src/cli/helpers/import-strategy-prompter.d.ts.map +1 -1
  39. package/dist/src/cli/helpers/import-strategy-prompter.js +39 -52
  40. package/dist/src/cli/helpers/import-strategy-prompter.js.map +1 -1
  41. package/dist/src/cli/helpers/init/config-detection.d.ts +40 -0
  42. package/dist/src/cli/helpers/init/config-detection.d.ts.map +1 -0
  43. package/dist/src/cli/helpers/init/config-detection.js +125 -0
  44. package/dist/src/cli/helpers/init/config-detection.js.map +1 -0
  45. package/dist/src/cli/helpers/init/directory-structure.d.ts +26 -0
  46. package/dist/src/cli/helpers/init/directory-structure.d.ts.map +1 -0
  47. package/dist/src/cli/helpers/init/directory-structure.js +190 -0
  48. package/dist/src/cli/helpers/init/directory-structure.js.map +1 -0
  49. package/dist/src/cli/helpers/init/external-import.d.ts +15 -0
  50. package/dist/src/cli/helpers/init/external-import.d.ts.map +1 -0
  51. package/dist/src/cli/helpers/init/external-import.js +251 -0
  52. package/dist/src/cli/helpers/init/external-import.js.map +1 -0
  53. package/dist/src/cli/helpers/init/index.d.ts +15 -0
  54. package/dist/src/cli/helpers/init/index.d.ts.map +1 -0
  55. package/dist/src/cli/helpers/init/index.js +26 -0
  56. package/dist/src/cli/helpers/init/index.js.map +1 -0
  57. package/dist/src/cli/helpers/init/next-steps.d.ts +15 -0
  58. package/dist/src/cli/helpers/init/next-steps.d.ts.map +1 -0
  59. package/dist/src/cli/helpers/init/next-steps.js +72 -0
  60. package/dist/src/cli/helpers/init/next-steps.js.map +1 -0
  61. package/dist/src/cli/helpers/init/path-utils.d.ts +41 -0
  62. package/dist/src/cli/helpers/init/path-utils.d.ts.map +1 -0
  63. package/dist/src/cli/helpers/init/path-utils.js +146 -0
  64. package/dist/src/cli/helpers/init/path-utils.js.map +1 -0
  65. package/dist/src/cli/helpers/init/plugin-installer.d.ts +28 -0
  66. package/dist/src/cli/helpers/init/plugin-installer.d.ts.map +1 -0
  67. package/dist/src/cli/helpers/init/plugin-installer.js +238 -0
  68. package/dist/src/cli/helpers/init/plugin-installer.js.map +1 -0
  69. package/dist/src/cli/helpers/init/repository-setup.d.ts +28 -0
  70. package/dist/src/cli/helpers/init/repository-setup.d.ts.map +1 -0
  71. package/dist/src/cli/helpers/init/repository-setup.js +78 -0
  72. package/dist/src/cli/helpers/init/repository-setup.js.map +1 -0
  73. package/dist/src/cli/helpers/init/smart-reinit.d.ts +30 -0
  74. package/dist/src/cli/helpers/init/smart-reinit.d.ts.map +1 -0
  75. package/dist/src/cli/helpers/init/smart-reinit.js +140 -0
  76. package/dist/src/cli/helpers/init/smart-reinit.js.map +1 -0
  77. package/dist/src/cli/helpers/init/testing-config.d.ts +27 -0
  78. package/dist/src/cli/helpers/init/testing-config.d.ts.map +1 -0
  79. package/dist/src/cli/helpers/init/testing-config.js +131 -0
  80. package/dist/src/cli/helpers/init/testing-config.js.map +1 -0
  81. package/dist/src/cli/helpers/init/types.d.ts +86 -0
  82. package/dist/src/cli/helpers/init/types.d.ts.map +1 -0
  83. package/dist/src/cli/helpers/init/types.js +5 -0
  84. package/dist/src/cli/helpers/init/types.js.map +1 -0
  85. package/dist/src/cli/helpers/issue-tracker/ado-auto-discover.d.ts.map +1 -1
  86. package/dist/src/cli/helpers/issue-tracker/ado-auto-discover.js +10 -12
  87. package/dist/src/cli/helpers/issue-tracker/ado-auto-discover.js.map +1 -1
  88. package/dist/src/cli/helpers/issue-tracker/ado.d.ts.map +1 -1
  89. package/dist/src/cli/helpers/issue-tracker/ado.js +43 -60
  90. package/dist/src/cli/helpers/issue-tracker/ado.js.map +1 -1
  91. package/dist/src/cli/helpers/issue-tracker/github-multi-repo.d.ts.map +1 -1
  92. package/dist/src/cli/helpers/issue-tracker/github-multi-repo.js +193 -230
  93. package/dist/src/cli/helpers/issue-tracker/github-multi-repo.js.map +1 -1
  94. package/dist/src/cli/helpers/issue-tracker/github.d.ts.map +1 -1
  95. package/dist/src/cli/helpers/issue-tracker/github.js +43 -54
  96. package/dist/src/cli/helpers/issue-tracker/github.js.map +1 -1
  97. package/dist/src/cli/helpers/issue-tracker/index.d.ts.map +1 -1
  98. package/dist/src/cli/helpers/issue-tracker/index.js +27 -40
  99. package/dist/src/cli/helpers/issue-tracker/index.js.map +1 -1
  100. package/dist/src/cli/helpers/issue-tracker/jira.d.ts.map +1 -1
  101. package/dist/src/cli/helpers/issue-tracker/jira.js +54 -70
  102. package/dist/src/cli/helpers/issue-tracker/jira.js.map +1 -1
  103. package/dist/src/cli/helpers/smart-filter.d.ts.map +1 -1
  104. package/dist/src/cli/helpers/smart-filter.js +62 -85
  105. package/dist/src/cli/helpers/smart-filter.js.map +1 -1
  106. package/dist/src/core/increment/auto-transition-manager.d.ts +12 -0
  107. package/dist/src/core/increment/auto-transition-manager.d.ts.map +1 -1
  108. package/dist/src/core/increment/auto-transition-manager.js +45 -0
  109. package/dist/src/core/increment/auto-transition-manager.js.map +1 -1
  110. package/dist/src/core/increment/metadata-manager.d.ts.map +1 -1
  111. package/dist/src/core/increment/metadata-manager.js +46 -0
  112. package/dist/src/core/increment/metadata-manager.js.map +1 -1
  113. package/dist/src/core/increment/status-change-sync-trigger.d.ts +12 -0
  114. package/dist/src/core/increment/status-change-sync-trigger.d.ts.map +1 -1
  115. package/dist/src/core/increment/status-change-sync-trigger.js +48 -2
  116. package/dist/src/core/increment/status-change-sync-trigger.js.map +1 -1
  117. package/dist/src/core/living-docs/living-docs-sync.d.ts +13 -0
  118. package/dist/src/core/living-docs/living-docs-sync.d.ts.map +1 -1
  119. package/dist/src/core/living-docs/living-docs-sync.js +40 -0
  120. package/dist/src/core/living-docs/living-docs-sync.js.map +1 -1
  121. package/dist/src/core/repo-structure/repo-bulk-discovery.d.ts.map +1 -1
  122. package/dist/src/core/repo-structure/repo-bulk-discovery.js +63 -83
  123. package/dist/src/core/repo-structure/repo-bulk-discovery.js.map +1 -1
  124. package/dist/src/core/repo-structure/repo-structure-manager.d.ts.map +1 -1
  125. package/dist/src/core/repo-structure/repo-structure-manager.js +339 -424
  126. package/dist/src/core/repo-structure/repo-structure-manager.js.map +1 -1
  127. package/dist/src/core/sync/bidirectional-engine.d.ts.map +1 -1
  128. package/dist/src/core/sync/bidirectional-engine.js +21 -29
  129. package/dist/src/core/sync/bidirectional-engine.js.map +1 -1
  130. package/dist/src/init/InitFlow.js +15 -19
  131. package/dist/src/init/InitFlow.js.map +1 -1
  132. package/dist/src/init/repo/types.d.ts +1 -1
  133. package/dist/src/integrations/ado/area-path-mapper.d.ts.map +1 -1
  134. package/dist/src/integrations/ado/area-path-mapper.js +19 -23
  135. package/dist/src/integrations/ado/area-path-mapper.js.map +1 -1
  136. package/dist/src/utils/external-resource-validator.d.ts.map +1 -1
  137. package/dist/src/utils/external-resource-validator.js +41 -65
  138. package/dist/src/utils/external-resource-validator.js.map +1 -1
  139. package/dist/src/utils/project-detection.d.ts.map +1 -1
  140. package/dist/src/utils/project-detection.js +19 -21
  141. package/dist/src/utils/project-detection.js.map +1 -1
  142. package/dist/src/utils/project-validator.d.ts.map +1 -1
  143. package/dist/src/utils/project-validator.js +5 -7
  144. package/dist/src/utils/project-validator.js.map +1 -1
  145. package/package.json +2 -3
  146. package/plugins/PLUGINS-INDEX.md +120 -0
  147. package/plugins/specweave/agents/tech-lead/AGENT.md +9 -0
  148. package/plugins/specweave/commands/specweave-increment.md +1 -1
  149. package/plugins/specweave/commands/specweave-update-scope.md +2 -2
  150. package/plugins/specweave/hooks/post-user-story-complete.sh +86 -35
  151. package/plugins/specweave/lib/hooks/us-completion-orchestrator.js +62 -1
  152. package/plugins/specweave/lib/hooks/us-completion-orchestrator.ts +106 -3
  153. package/plugins/specweave/lib/vendor/core/increment/auto-transition-manager.d.ts +12 -0
  154. package/plugins/specweave/lib/vendor/core/increment/auto-transition-manager.js +45 -0
  155. package/plugins/specweave/lib/vendor/core/increment/auto-transition-manager.js.map +1 -1
  156. package/plugins/specweave/lib/vendor/core/increment/metadata-manager.js +46 -0
  157. package/plugins/specweave/lib/vendor/core/increment/metadata-manager.js.map +1 -1
  158. package/plugins/specweave/skills/SKILLS-INDEX.md +69 -225
  159. package/plugins/specweave/skills/increment-planner/SKILL.md +10 -5
  160. package/plugins/specweave/skills/specweave-framework/SKILL.md +6 -4
  161. package/plugins/specweave/templates/coding-standards.md.template +36 -0
  162. package/plugins/specweave-ado/commands/specweave-ado-import-projects.md +1 -1
  163. package/plugins/specweave-ado/lib/project-selector.js +56 -67
  164. package/plugins/specweave-ado/lib/project-selector.ts +72 -85
  165. package/plugins/specweave-ado/skills/ado-resource-validator/SKILL.md +1 -1
  166. package/plugins/specweave-github/hooks/.specweave/logs/hooks-debug.log +6 -0
  167. package/plugins/specweave-github/lib/repo-selector.js +55 -66
  168. package/plugins/specweave-github/lib/repo-selector.ts +73 -84
  169. package/plugins/specweave-jira/commands/import-projects.js +3 -5
  170. package/plugins/specweave-jira/commands/import-projects.ts +3 -5
  171. package/plugins/specweave-jira/lib/project-selector.js +60 -71
  172. package/plugins/specweave-jira/lib/project-selector.ts +78 -91
  173. package/plugins/specweave-jira/lib/setup-wizard.js +51 -72
  174. package/plugins/specweave-jira/lib/setup-wizard.ts +56 -74
  175. package/plugins/specweave-release/hooks/.specweave/logs/dora-tracking.log +9 -0
  176. package/src/templates/CLAUDE.md.template +14 -0
@@ -0,0 +1,140 @@
1
+ /**
2
+ * Smart re-initialization logic
3
+ * Handles the case when .specweave/ already exists
4
+ * Consolidates duplicate logic from init.ts
5
+ */
6
+ import * as fs from '../../../utils/fs-native.js';
7
+ import * as path from 'path';
8
+ import chalk from 'chalk';
9
+ import { select, confirm } from '@inquirer/prompts';
10
+ import { countFilesRecursive } from './path-utils.js';
11
+ /**
12
+ * Prompt user for re-initialization action when .specweave/ already exists
13
+ * This consolidates the duplicate logic that appeared twice in init.ts
14
+ *
15
+ * @param options - Configuration options
16
+ * @returns The chosen action and whether to continue with existing project
17
+ */
18
+ export async function promptSmartReinit(options) {
19
+ const { targetDir, isCI, hasForce } = options;
20
+ console.log(chalk.blue('\n📦 Existing SpecWeave project detected!'));
21
+ console.log(chalk.gray(' Found .specweave/ folder with your increments, docs, and configuration.\n'));
22
+ let action;
23
+ if (hasForce) {
24
+ // Force mode: warn about destructive action
25
+ console.log(chalk.red.bold('\n⛔ DANGER: --force DELETES ALL DATA!'));
26
+ console.log(chalk.red(' This will permanently delete:'));
27
+ console.log(chalk.red(' • All increments (.specweave/increments/)'));
28
+ console.log(chalk.red(' • All documentation (.specweave/docs/)'));
29
+ console.log(chalk.red(' • All configuration and history'));
30
+ console.log(chalk.yellow('\n 💡 TIP: Use "specweave init ." (no --force) for safe updates\n'));
31
+ if (isCI) {
32
+ // CI mode: proceed with force deletion without prompting
33
+ console.log(chalk.gray(' → CI mode: Proceeding with force deletion'));
34
+ action = 'fresh';
35
+ }
36
+ else {
37
+ // Interactive: require explicit confirmation
38
+ const confirmDeletion = await confirm({
39
+ message: chalk.red('⚠️ Type "y" to PERMANENTLY DELETE all .specweave/ data:'),
40
+ default: false,
41
+ });
42
+ if (!confirmDeletion) {
43
+ console.log(chalk.green('\n✅ Deletion cancelled. No data lost.'));
44
+ console.log(chalk.gray(' → Run "specweave init ." (without --force) for safe updates'));
45
+ return { action: 'cancel', continueExisting: false };
46
+ }
47
+ action = 'fresh';
48
+ }
49
+ console.log(chalk.yellow('\n 🔄 Force mode: Proceeding with fresh start...'));
50
+ }
51
+ else if (isCI) {
52
+ // CI mode without force: auto-continue
53
+ console.log(chalk.gray(' → CI mode: Continuing with existing project'));
54
+ action = 'continue';
55
+ }
56
+ else {
57
+ // Interactive mode: show choices
58
+ action = await select({
59
+ message: 'What would you like to do?',
60
+ choices: [
61
+ {
62
+ name: '✨ Continue working (keep all existing increments, docs, and history)',
63
+ value: 'continue',
64
+ },
65
+ {
66
+ name: '🔄 Fresh start (delete .specweave/ and start from scratch)',
67
+ value: 'fresh',
68
+ },
69
+ {
70
+ name: '❌ Cancel (exit without changes)',
71
+ value: 'cancel',
72
+ }
73
+ ],
74
+ default: 'continue'
75
+ });
76
+ }
77
+ if (action === 'cancel') {
78
+ console.log(chalk.yellow('\n⏸️ Initialization cancelled. No changes made.'));
79
+ return { action: 'cancel', continueExisting: false };
80
+ }
81
+ if (action === 'fresh') {
82
+ // Handle fresh start
83
+ const freshResult = await handleFreshStart(targetDir, isCI, hasForce);
84
+ return { action: freshResult ? 'fresh' : 'cancel', continueExisting: false };
85
+ }
86
+ // Continue working
87
+ console.log(chalk.green('\n✅ Continuing with existing project'));
88
+ console.log(chalk.gray(' → Keeping all increments, docs, and history'));
89
+ console.log(chalk.gray(' → Config will be updated if needed\n'));
90
+ return { action: 'continue', continueExisting: true };
91
+ }
92
+ /**
93
+ * Handle fresh start action - backup and delete .specweave/
94
+ *
95
+ * @param targetDir - Target directory
96
+ * @param isCI - Whether running in CI mode
97
+ * @param hasForce - Whether --force flag was used
98
+ * @returns true if fresh start succeeded, false if cancelled
99
+ */
100
+ async function handleFreshStart(targetDir, isCI, hasForce) {
101
+ const specweavePath = path.join(targetDir, '.specweave');
102
+ if (!hasForce) {
103
+ if (isCI) {
104
+ // CI mode without force: NEVER allow fresh start
105
+ console.log(chalk.red('\n⛔ ERROR: Cannot start fresh in CI mode without --force flag'));
106
+ console.log(chalk.gray(' → Use "specweave init . --force" if you really want to delete all data'));
107
+ return false;
108
+ }
109
+ // Interactive: ask for confirmation
110
+ console.log(chalk.yellow('\n⚠️ WARNING: This will DELETE all increments, docs, and configuration!'));
111
+ const confirmFresh = await confirm({
112
+ message: 'Are you sure you want to start fresh? (all .specweave/ content will be lost)',
113
+ default: false,
114
+ });
115
+ if (!confirmFresh) {
116
+ console.log(chalk.yellow('\n⏸️ Fresh start cancelled. No changes made.'));
117
+ return false;
118
+ }
119
+ }
120
+ // Create backup before deletion
121
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-').split('T')[0];
122
+ const backupPath = path.join(targetDir, `.specweave.backup-${timestamp}`);
123
+ try {
124
+ console.log(chalk.cyan('\n 📦 Creating backup before deletion...'));
125
+ fs.copySync(specweavePath, backupPath);
126
+ console.log(chalk.green(` ✅ Backup saved: ${path.relative(targetDir, backupPath)}`));
127
+ console.log(chalk.gray(` To restore: mv ${path.basename(backupPath)} .specweave`));
128
+ }
129
+ catch {
130
+ console.log(chalk.yellow(' ⚠️ Could not create backup (proceeding anyway)'));
131
+ }
132
+ // Count files before deletion
133
+ const fileCount = countFilesRecursive(specweavePath);
134
+ // Delete .specweave/
135
+ fs.removeSync(specweavePath);
136
+ console.log(chalk.blue(`\n ♻️ Removed .specweave/ (${fileCount} files deleted)`));
137
+ console.log(chalk.green(' ✅ Starting fresh - will create new .specweave/ structure\n'));
138
+ return true;
139
+ }
140
+ //# sourceMappingURL=smart-reinit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"smart-reinit.js","sourceRoot":"","sources":["../../../../../src/cli/helpers/init/smart-reinit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Testing configuration prompts
3
+ * Handles test mode selection and coverage targets
4
+ */
5
+ import type { TestMode } from './types.js';
6
+ /**
7
+ * Result of testing configuration
8
+ */
9
+ export interface TestingConfigResult {
10
+ testMode: TestMode;
11
+ coverageTarget: number;
12
+ }
13
+ /**
14
+ * Prompt user for testing configuration
15
+ *
16
+ * @returns Testing configuration
17
+ */
18
+ export declare function promptTestingConfig(): Promise<TestingConfigResult>;
19
+ /**
20
+ * Update config.json with testing configuration
21
+ *
22
+ * @param targetDir - Project directory
23
+ * @param testMode - Selected test mode
24
+ * @param coverageTarget - Selected coverage target
25
+ */
26
+ export declare function updateConfigWithTesting(targetDir: string, testMode: TestMode, coverageTarget: number): void;
27
+ //# sourceMappingURL=testing-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testing-config.d.ts","sourceRoot":"","sources":["../../../../../src/cli/helpers/init/testing-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAAE,QAAQ,EAAiB,MAAM,YAAY,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,QAAQ,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,mBAAmB,CAAC,CAiGxE;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,QAAQ,EAClB,cAAc,EAAE,MAAM,GACrB,IAAI,CAqBN"}
@@ -0,0 +1,131 @@
1
+ /**
2
+ * Testing configuration prompts
3
+ * Handles test mode selection and coverage targets
4
+ */
5
+ import * as fs from '../../../utils/fs-native.js';
6
+ import * as path from 'path';
7
+ import chalk from 'chalk';
8
+ import { select, input } from '@inquirer/prompts';
9
+ /**
10
+ * Prompt user for testing configuration
11
+ *
12
+ * @returns Testing configuration
13
+ */
14
+ export async function promptTestingConfig() {
15
+ console.log('');
16
+ console.log(chalk.cyan.bold('🧪 Testing Configuration'));
17
+ console.log(chalk.gray(' Configure your default testing approach and coverage targets'));
18
+ console.log('');
19
+ // Add guidance on which testing approach to choose
20
+ console.log(chalk.white('💡 Which testing approach should you choose?'));
21
+ console.log('');
22
+ console.log(chalk.green(' ✓ TDD (Test-Driven Development)'));
23
+ console.log(chalk.gray(' Best for: Complex business logic, critical features, refactoring'));
24
+ console.log(chalk.gray(' Benefits: Better design, fewer bugs, confidence in changes'));
25
+ console.log(chalk.gray(' Tradeoff: Slower initial development, requires discipline'));
26
+ console.log('');
27
+ console.log(chalk.blue(' ✓ Test-After'));
28
+ console.log(chalk.gray(' Best for: Most projects, rapid prototyping, exploratory work'));
29
+ console.log(chalk.gray(' Benefits: Fast iteration, flexible design, good coverage'));
30
+ console.log(chalk.gray(' Tradeoff: May miss edge cases, harder to test after design'));
31
+ console.log('');
32
+ console.log(chalk.yellow(' ✓ Manual Testing'));
33
+ console.log(chalk.gray(' Best for: Quick prototypes, proof-of-concepts, learning'));
34
+ console.log(chalk.gray(' Benefits: Fastest development, no test maintenance'));
35
+ console.log(chalk.gray(' Tradeoff: No safety net, regressions, hard to refactor'));
36
+ console.log('');
37
+ const testMode = await select({
38
+ message: 'Select your testing approach:',
39
+ choices: [
40
+ {
41
+ name: '🔴 TDD - Write tests first (recommended for production apps)',
42
+ value: 'TDD',
43
+ },
44
+ {
45
+ name: '🔵 Test-After - Implement first, test later (balanced approach)',
46
+ value: 'test-after',
47
+ },
48
+ {
49
+ name: '🟡 Manual - No automated tests (prototypes only)',
50
+ value: 'manual',
51
+ }
52
+ ],
53
+ default: 'test-after'
54
+ });
55
+ let coverageTarget = 80;
56
+ // Only ask for coverage if not manual testing
57
+ if (testMode !== 'manual') {
58
+ const selectedCoverageLevel = await select({
59
+ message: 'Select your coverage target level:',
60
+ choices: [
61
+ {
62
+ name: '70% - Acceptable (core paths covered)',
63
+ value: 70,
64
+ },
65
+ {
66
+ name: '80% - Good (recommended - most paths covered)',
67
+ value: 80,
68
+ },
69
+ {
70
+ name: '90% - Excellent (comprehensive coverage)',
71
+ value: 90,
72
+ },
73
+ {
74
+ name: 'Custom (enter your own value)',
75
+ value: 'custom',
76
+ }
77
+ ],
78
+ default: 80
79
+ });
80
+ if (selectedCoverageLevel === 'custom') {
81
+ const customInput = await input({
82
+ message: 'Enter custom coverage target (70-95):',
83
+ default: '80',
84
+ validate: (val) => {
85
+ const num = parseInt(val, 10);
86
+ if (isNaN(num) || num < 70 || num > 95) {
87
+ return 'Coverage target must be between 70% and 95%';
88
+ }
89
+ return true;
90
+ }
91
+ });
92
+ coverageTarget = parseInt(customInput, 10);
93
+ }
94
+ else {
95
+ coverageTarget = selectedCoverageLevel;
96
+ }
97
+ }
98
+ console.log('');
99
+ console.log(chalk.green(` ✔ Testing: ${testMode}`));
100
+ if (testMode !== 'manual') {
101
+ console.log(chalk.green(` ✔ Coverage Target: ${coverageTarget}%`));
102
+ }
103
+ console.log('');
104
+ return { testMode, coverageTarget };
105
+ }
106
+ /**
107
+ * Update config.json with testing configuration
108
+ *
109
+ * @param targetDir - Project directory
110
+ * @param testMode - Selected test mode
111
+ * @param coverageTarget - Selected coverage target
112
+ */
113
+ export function updateConfigWithTesting(targetDir, testMode, coverageTarget) {
114
+ const configPath = path.join(targetDir, '.specweave', 'config.json');
115
+ if (!fs.existsSync(configPath)) {
116
+ console.error(chalk.red('⚠️ config.json not found, cannot update testing configuration'));
117
+ return;
118
+ }
119
+ const config = fs.readJsonSync(configPath);
120
+ config.testing = {
121
+ defaultTestMode: testMode,
122
+ defaultCoverageTarget: coverageTarget,
123
+ coverageTargets: {
124
+ unit: Math.min(coverageTarget + 5, 95),
125
+ integration: coverageTarget,
126
+ e2e: Math.min(coverageTarget + 10, 100)
127
+ }
128
+ };
129
+ fs.writeJsonSync(configPath, config, { spaces: 2 });
130
+ }
131
+ //# sourceMappingURL=testing-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testing-config.js","sourceRoot":"","sources":["../../../../../src/cli/helpers/init/testing-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Shared types for init command helpers
3
+ */
4
+ import type { Logger } from '../../../utils/logger.js';
5
+ import type { SupportedLanguage } from '../../../core/i18n/types.js';
6
+ /**
7
+ * Options passed to the init command
8
+ */
9
+ export interface InitOptions {
10
+ template?: string;
11
+ adapter?: string;
12
+ techStack?: string;
13
+ language?: string;
14
+ force?: boolean;
15
+ forceRefresh?: boolean;
16
+ logger?: Logger;
17
+ }
18
+ /**
19
+ * Result of smart re-initialization prompt
20
+ */
21
+ export type ReinitAction = 'continue' | 'fresh' | 'cancel';
22
+ /**
23
+ * Repository hosting configuration
24
+ */
25
+ export type RepositoryHosting = 'github-single' | 'github-multirepo' | 'bitbucket-single' | 'bitbucket-multirepo' | 'ado-single' | 'ado-multirepo' | 'local' | 'other-single' | 'other-multirepo';
26
+ /**
27
+ * Detected parent .specweave folder info
28
+ */
29
+ export interface ParentSpecweaveFolder {
30
+ path: string;
31
+ depth: number;
32
+ isHomeDir?: boolean;
33
+ }
34
+ /**
35
+ * GitHub remote detection result
36
+ */
37
+ export interface GitHubRemote {
38
+ owner: string;
39
+ repo: string;
40
+ }
41
+ /**
42
+ * JIRA configuration detection result
43
+ */
44
+ export interface JiraConfig {
45
+ host: string;
46
+ email?: string;
47
+ apiToken?: string;
48
+ }
49
+ /**
50
+ * Azure DevOps configuration detection result
51
+ */
52
+ export interface ADOConfig {
53
+ orgUrl: string;
54
+ project: string;
55
+ pat?: string;
56
+ }
57
+ /**
58
+ * Testing mode configuration
59
+ */
60
+ export type TestMode = 'TDD' | 'test-after' | 'manual';
61
+ /**
62
+ * Testing configuration for config.json
63
+ */
64
+ export interface TestingConfig {
65
+ defaultTestMode: TestMode;
66
+ defaultCoverageTarget: number;
67
+ coverageTargets: {
68
+ unit: number;
69
+ integration: number;
70
+ e2e: number;
71
+ };
72
+ }
73
+ /**
74
+ * Context passed between init steps
75
+ */
76
+ export interface InitContext {
77
+ targetDir: string;
78
+ projectName: string;
79
+ language: SupportedLanguage;
80
+ isCI: boolean;
81
+ continueExisting: boolean;
82
+ usedDotNotation: boolean;
83
+ toolName: string;
84
+ options: InitOptions;
85
+ }
86
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/cli/helpers/init/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAErE;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE3D;;GAEG;AACH,MAAM,MAAM,iBAAiB,GACzB,eAAe,GACf,kBAAkB,GAClB,kBAAkB,GAClB,qBAAqB,GACrB,YAAY,GACZ,eAAe,GACf,OAAO,GACP,cAAc,GACd,iBAAiB,CAAC;AAEtB;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,KAAK,GAAG,YAAY,GAAG,QAAQ,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,eAAe,EAAE,QAAQ,CAAC;IAC1B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,eAAe,EAAE;QACf,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,IAAI,EAAE,OAAO,CAAC;IACd,gBAAgB,EAAE,OAAO,CAAC;IAC1B,eAAe,EAAE,OAAO,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,WAAW,CAAC;CACtB"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Shared types for init command helpers
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../src/cli/helpers/init/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -1 +1 @@
1
- {"version":3,"file":"ado-auto-discover.d.ts","sourceRoot":"","sources":["../../../../../src/cli/helpers/issue-tracker/ado-auto-discover.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,MAAM,WAAW,sBAAsB;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,MAAM,EAAE,CAAC,CAkHnB"}
1
+ {"version":3,"file":"ado-auto-discover.d.ts","sourceRoot":"","sources":["../../../../../src/cli/helpers/issue-tracker/ado-auto-discover.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,MAAM,WAAW,sBAAsB;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,MAAM,EAAE,CAAC,CA8GnB"}
@@ -7,6 +7,7 @@
7
7
  * @module cli/helpers/issue-tracker/ado-auto-discover
8
8
  */
9
9
  import chalk from 'chalk';
10
+ import { checkbox } from '@inquirer/prompts';
10
11
  /**
11
12
  * Auto-discover ADO projects with smart pagination
12
13
  *
@@ -80,18 +81,15 @@ export async function autoDiscoverAdoProjects(options) {
80
81
  const result = await loader.fetchAllProjects(Math.min(50, totalCount));
81
82
  const allProjects = result.projects.map(p => ({ name: p.name, value: p.name }));
82
83
  // Show checkbox (all pre-selected per US-002 CLI-first defaults)
83
- const inquirer = (await import('inquirer')).default;
84
- const selected = await inquirer.prompt([
85
- {
86
- type: 'checkbox',
87
- name: 'projects',
88
- message: 'Select projects to import:',
89
- choices: allProjects,
90
- default: allProjects.map(p => p.value), // All selected by default
91
- pageSize: 20
92
- }
93
- ]);
94
- projectNames = selected.projects;
84
+ projectNames = await checkbox({
85
+ message: 'Select projects to import:',
86
+ choices: allProjects.map(p => ({
87
+ name: p.name,
88
+ value: p.value,
89
+ checked: true // All selected by default (CLI-first)
90
+ })),
91
+ pageSize: 20
92
+ });
95
93
  }
96
94
  else if (strategyResult.strategy === 'manual-entry') {
97
95
  // Manual entry: use provided keys
@@ -1 +1 @@
1
- {"version":3,"file":"ado-auto-discover.js","sourceRoot":"","sources":["../../../../../src/cli/helpers/issue-tracker/ado-auto-discover.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ado-auto-discover.js","sourceRoot":"","sources":["../../../../../src/cli/helpers/issue-tracker/ado-auto-discover.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ado.d.ts","sourceRoot":"","sources":["../../../../../src/cli/helpers/issue-tracker/ado.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAUH,OAAO,KAAK,EACV,sBAAsB,EACtB,mBAAmB,EACnB,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAKpB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAIrE;;;;;GAKG;AACH,wBAAsB,mCAAmC,CACvD,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CA2BrC;AAED;;;;;;;;GAQG;AACH,wBAAsB,4BAA4B,CAChD,QAAQ,EAAE,iBAAiB,EAC3B,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC,CA0IxC;AAED;;;;;;;;;GASG;AACH,wBAAsB,6BAA6B,CACjD,WAAW,EAAE,sBAAsB,EACnC,UAAU,GAAE,MAAU,GACrB,OAAO,CAAC,gBAAgB,CAAC,CA+D3B;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,sBAAsB,GAClC,KAAK,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAevC;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAS9E;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAY7E;AAGD,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"ado.d.ts","sourceRoot":"","sources":["../../../../../src/cli/helpers/issue-tracker/ado.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAUH,OAAO,KAAK,EACV,sBAAsB,EACtB,mBAAmB,EACnB,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAKpB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAIrE;;;;;GAKG;AACH,wBAAsB,mCAAmC,CACvD,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CA2BrC;AAED;;;;;;;;GAQG;AACH,wBAAsB,4BAA4B,CAChD,QAAQ,EAAE,iBAAiB,EAC3B,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC,CA0HxC;AAED;;;;;;;;;GASG;AACH,wBAAsB,6BAA6B,CACjD,WAAW,EAAE,sBAAsB,EACnC,UAAU,GAAE,MAAU,GACrB,OAAO,CAAC,gBAAgB,CAAC,CA+D3B;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,sBAAsB,GAClC,KAAK,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAevC;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAS9E;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAY7E;AAGD,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC"}
@@ -6,7 +6,7 @@
6
6
  * @module cli/helpers/issue-tracker/ado
7
7
  */
8
8
  import chalk from 'chalk';
9
- import inquirer from 'inquirer';
9
+ import { confirm, input, password } from '@inquirer/prompts';
10
10
  import ora from 'ora';
11
11
  import { getAzureDevOpsAuth } from '../../../utils/auth-helpers.js';
12
12
  import { parseEnvFile, readEnvFile } from '../../../utils/env-file.js';
@@ -72,12 +72,10 @@ export async function promptAzureDevOpsCredentials(language, projectRoot) {
72
72
  console.log(chalk.gray(` Teams: ${cachedConfig.teams.join(', ')}`));
73
73
  }
74
74
  console.log('');
75
- const { reuseConfig } = await inquirer.prompt([{
76
- type: 'confirm',
77
- name: 'reuseConfig',
78
- message: 'Use cached configuration?',
79
- default: true
80
- }]);
75
+ const reuseConfig = await confirm({
76
+ message: 'Use cached configuration?',
77
+ default: true
78
+ });
81
79
  if (!reuseConfig) {
82
80
  cachedConfig = null; // User wants to enter new config
83
81
  }
@@ -89,12 +87,10 @@ export async function promptAzureDevOpsCredentials(language, projectRoot) {
89
87
  console.log(chalk.gray(' 2. Click "New Token"'));
90
88
  console.log(chalk.gray(' 3. Scopes: Work Items (Read, Write, Manage), Code (Read), Project (Read)'));
91
89
  console.log(chalk.gray(' 4. Copy the token\n'));
92
- const { continueSetup } = await inquirer.prompt([{
93
- type: 'confirm',
94
- name: 'continueSetup',
95
- message: 'Continue with Azure DevOps setup?',
96
- default: true
97
- }]);
90
+ const continueSetup = await confirm({
91
+ message: 'Continue with Azure DevOps setup?',
92
+ default: true
93
+ });
98
94
  if (!continueSetup) {
99
95
  return null;
100
96
  }
@@ -108,60 +104,47 @@ export async function promptAzureDevOpsCredentials(language, projectRoot) {
108
104
  }
109
105
  else {
110
106
  // Prompt for new configuration
111
- const questions = [
112
- {
113
- type: 'input',
114
- name: 'org',
115
- message: 'Azure DevOps organization name:',
116
- validate: (input) => {
117
- if (!input || input.trim() === '') {
118
- return 'Organization cannot be empty';
119
- }
120
- return true;
107
+ org = await input({
108
+ message: 'Azure DevOps organization name:',
109
+ validate: (value) => {
110
+ if (!value || value.trim() === '') {
111
+ return 'Organization cannot be empty';
121
112
  }
122
- },
123
- {
124
- type: 'input',
125
- name: 'project',
126
- message: 'Project name:',
127
- validate: (input) => {
128
- if (!input || input.trim() === '') {
129
- return 'Project cannot be empty';
130
- }
131
- return true;
113
+ return true;
114
+ }
115
+ });
116
+ project = await input({
117
+ message: 'Project name:',
118
+ validate: (value) => {
119
+ if (!value || value.trim() === '') {
120
+ return 'Project cannot be empty';
132
121
  }
133
- },
134
- {
135
- type: 'input',
136
- name: 'teams',
137
- message: 'Team name(s) (optional, comma-separated):',
138
- default: ''
122
+ return true;
139
123
  }
140
- ];
141
- const answers = await inquirer.prompt(questions);
142
- org = answers.org;
143
- project = answers.project;
144
- teams = answers.teams
145
- ? answers.teams.split(',').map((t) => t.trim()).filter((t) => t.length > 0)
124
+ });
125
+ const teamsInput = await input({
126
+ message: 'Team name(s) (optional, comma-separated):',
127
+ default: ''
128
+ });
129
+ teams = teamsInput
130
+ ? teamsInput.split(',').map((t) => t.trim()).filter((t) => t.length > 0)
146
131
  : [];
147
132
  }
148
133
  // Always prompt for PAT (never cache secrets)
149
- const { pat } = await inquirer.prompt([{
150
- type: 'password',
151
- name: 'pat',
152
- message: 'Paste your Personal Access Token:',
153
- mask: '*',
154
- validate: (input) => {
155
- if (!input || input.length === 0) {
156
- return 'Token cannot be empty';
157
- }
158
- // ADO PATs are typically 52 characters, but fine-grained tokens can be >= 40
159
- if (input.length < 40) {
160
- return 'Azure DevOps tokens should be at least 40 characters';
161
- }
162
- return true;
134
+ const pat = await password({
135
+ message: 'Paste your Personal Access Token:',
136
+ mask: '*',
137
+ validate: (value) => {
138
+ if (!value || value.length === 0) {
139
+ return 'Token cannot be empty';
140
+ }
141
+ // ADO PATs are typically 52 characters, but fine-grained tokens can be >= 40
142
+ if (value.length < 40) {
143
+ return 'Azure DevOps tokens should be at least 40 characters';
163
144
  }
164
- }]);
145
+ return true;
146
+ }
147
+ });
165
148
  // Cache the configuration (NOT the PAT) for future use
166
149
  if (projectRoot) {
167
150
  const { CacheManager } = await import('../../../core/cache/cache-manager.js');