specweave 0.28.17 → 0.28.20

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 (204) hide show
  1. package/dist/plugins/specweave-ado/lib/ado-board-resolver.d.ts +94 -0
  2. package/dist/plugins/specweave-ado/lib/ado-board-resolver.d.ts.map +1 -0
  3. package/dist/plugins/specweave-ado/lib/ado-board-resolver.js +219 -0
  4. package/dist/plugins/specweave-ado/lib/ado-board-resolver.js.map +1 -0
  5. package/dist/plugins/specweave-ado/lib/ado-spec-sync.d.ts +16 -0
  6. package/dist/plugins/specweave-ado/lib/ado-spec-sync.d.ts.map +1 -1
  7. package/dist/plugins/specweave-ado/lib/ado-spec-sync.js +63 -3
  8. package/dist/plugins/specweave-ado/lib/ado-spec-sync.js.map +1 -1
  9. package/dist/plugins/specweave-ado/lib/ado-status-sync.d.ts +12 -3
  10. package/dist/plugins/specweave-ado/lib/ado-status-sync.d.ts.map +1 -1
  11. package/dist/plugins/specweave-ado/lib/ado-status-sync.js +37 -3
  12. package/dist/plugins/specweave-ado/lib/ado-status-sync.js.map +1 -1
  13. package/dist/plugins/specweave-github/lib/github-feature-sync.d.ts +6 -11
  14. package/dist/plugins/specweave-github/lib/github-feature-sync.d.ts.map +1 -1
  15. package/dist/plugins/specweave-github/lib/github-feature-sync.js +6 -11
  16. package/dist/plugins/specweave-github/lib/github-feature-sync.js.map +1 -1
  17. package/dist/plugins/specweave-github/lib/github-increment-sync-cli.d.ts +21 -0
  18. package/dist/plugins/specweave-github/lib/github-increment-sync-cli.d.ts.map +1 -0
  19. package/dist/plugins/specweave-github/lib/github-increment-sync-cli.js +445 -0
  20. package/dist/plugins/specweave-github/lib/github-increment-sync-cli.js.map +1 -0
  21. package/dist/plugins/specweave-github/lib/github-status-sync.d.ts +10 -0
  22. package/dist/plugins/specweave-github/lib/github-status-sync.d.ts.map +1 -1
  23. package/dist/plugins/specweave-github/lib/github-status-sync.js +40 -2
  24. package/dist/plugins/specweave-github/lib/github-status-sync.js.map +1 -1
  25. package/dist/plugins/specweave-github/lib/increment-issue-builder.d.ts +94 -0
  26. package/dist/plugins/specweave-github/lib/increment-issue-builder.d.ts.map +1 -0
  27. package/dist/plugins/specweave-github/lib/increment-issue-builder.js +369 -0
  28. package/dist/plugins/specweave-github/lib/increment-issue-builder.js.map +1 -0
  29. package/dist/plugins/specweave-jira/lib/jira-board-resolver.d.ts +50 -0
  30. package/dist/plugins/specweave-jira/lib/jira-board-resolver.d.ts.map +1 -0
  31. package/dist/plugins/specweave-jira/lib/jira-board-resolver.js +84 -0
  32. package/dist/plugins/specweave-jira/lib/jira-board-resolver.js.map +1 -0
  33. package/dist/plugins/specweave-jira/lib/jira-spec-sync.d.ts +12 -0
  34. package/dist/plugins/specweave-jira/lib/jira-spec-sync.d.ts.map +1 -1
  35. package/dist/plugins/specweave-jira/lib/jira-spec-sync.js +57 -5
  36. package/dist/plugins/specweave-jira/lib/jira-spec-sync.js.map +1 -1
  37. package/dist/plugins/specweave-jira/lib/jira-status-sync.d.ts +5 -1
  38. package/dist/plugins/specweave-jira/lib/jira-status-sync.d.ts.map +1 -1
  39. package/dist/plugins/specweave-jira/lib/jira-status-sync.js +12 -4
  40. package/dist/plugins/specweave-jira/lib/jira-status-sync.js.map +1 -1
  41. package/dist/src/cli/commands/import-external.d.ts.map +1 -1
  42. package/dist/src/cli/commands/import-external.js +12 -7
  43. package/dist/src/cli/commands/import-external.js.map +1 -1
  44. package/dist/src/cli/helpers/init/external-import.d.ts.map +1 -1
  45. package/dist/src/cli/helpers/init/external-import.js +308 -36
  46. package/dist/src/cli/helpers/init/external-import.js.map +1 -1
  47. package/dist/src/cli/helpers/init/jira-ado-auto-detect.d.ts +115 -0
  48. package/dist/src/cli/helpers/init/jira-ado-auto-detect.d.ts.map +1 -0
  49. package/dist/src/cli/helpers/init/jira-ado-auto-detect.js +590 -0
  50. package/dist/src/cli/helpers/init/jira-ado-auto-detect.js.map +1 -0
  51. package/dist/src/cli/helpers/issue-tracker/ado-area-selection.d.ts +65 -0
  52. package/dist/src/cli/helpers/issue-tracker/ado-area-selection.d.ts.map +1 -0
  53. package/dist/src/cli/helpers/issue-tracker/ado-area-selection.js +278 -0
  54. package/dist/src/cli/helpers/issue-tracker/ado-area-selection.js.map +1 -0
  55. package/dist/src/cli/helpers/issue-tracker/jira-board-selection.d.ts +64 -0
  56. package/dist/src/cli/helpers/issue-tracker/jira-board-selection.d.ts.map +1 -0
  57. package/dist/src/cli/helpers/issue-tracker/jira-board-selection.js +251 -0
  58. package/dist/src/cli/helpers/issue-tracker/jira-board-selection.js.map +1 -0
  59. package/dist/src/config/types.d.ts +6 -6
  60. package/dist/src/core/ac-test-validator-cli.js +4 -1
  61. package/dist/src/core/ac-test-validator-cli.js.map +1 -1
  62. package/dist/src/core/ac-test-validator.d.ts.map +1 -1
  63. package/dist/src/core/ac-test-validator.js +4 -1
  64. package/dist/src/core/ac-test-validator.js.map +1 -1
  65. package/dist/src/core/background/index.d.ts +11 -0
  66. package/dist/src/core/background/index.d.ts.map +1 -0
  67. package/dist/src/core/background/index.js +11 -0
  68. package/dist/src/core/background/index.js.map +1 -0
  69. package/dist/src/core/background/job-manager.d.ts +65 -0
  70. package/dist/src/core/background/job-manager.d.ts.map +1 -0
  71. package/dist/src/core/background/job-manager.js +192 -0
  72. package/dist/src/core/background/job-manager.js.map +1 -0
  73. package/dist/src/core/background/types.d.ts +59 -0
  74. package/dist/src/core/background/types.d.ts.map +1 -0
  75. package/dist/src/core/background/types.js +8 -0
  76. package/dist/src/core/background/types.js.map +1 -0
  77. package/dist/src/core/repo-structure/multi-repo-configurator.d.ts +25 -0
  78. package/dist/src/core/repo-structure/multi-repo-configurator.d.ts.map +1 -0
  79. package/dist/src/core/repo-structure/multi-repo-configurator.js +614 -0
  80. package/dist/src/core/repo-structure/multi-repo-configurator.js.map +1 -0
  81. package/dist/src/core/repo-structure/repo-initializer.d.ts +40 -0
  82. package/dist/src/core/repo-structure/repo-initializer.d.ts.map +1 -0
  83. package/dist/src/core/repo-structure/repo-initializer.js +252 -0
  84. package/dist/src/core/repo-structure/repo-initializer.js.map +1 -0
  85. package/dist/src/core/repo-structure/repo-structure-manager.d.ts +3 -37
  86. package/dist/src/core/repo-structure/repo-structure-manager.d.ts.map +1 -1
  87. package/dist/src/core/repo-structure/repo-structure-manager.js +23 -803
  88. package/dist/src/core/repo-structure/repo-structure-manager.js.map +1 -1
  89. package/dist/src/core/types/increment-metadata.d.ts +75 -0
  90. package/dist/src/core/types/increment-metadata.d.ts.map +1 -1
  91. package/dist/src/core/types/spec-metadata.d.ts +2 -0
  92. package/dist/src/core/types/spec-metadata.d.ts.map +1 -1
  93. package/dist/src/core/types/sync-profile.d.ts +137 -5
  94. package/dist/src/core/types/sync-profile.d.ts.map +1 -1
  95. package/dist/src/core/types/sync-profile.js +63 -0
  96. package/dist/src/core/types/sync-profile.js.map +1 -1
  97. package/dist/src/importers/external-importer.d.ts +25 -0
  98. package/dist/src/importers/external-importer.d.ts.map +1 -1
  99. package/dist/src/importers/github-importer.d.ts.map +1 -1
  100. package/dist/src/importers/github-importer.js +5 -3
  101. package/dist/src/importers/github-importer.js.map +1 -1
  102. package/dist/src/importers/import-coordinator.d.ts +20 -0
  103. package/dist/src/importers/import-coordinator.d.ts.map +1 -1
  104. package/dist/src/importers/import-coordinator.js.map +1 -1
  105. package/dist/src/importers/item-converter.d.ts +51 -0
  106. package/dist/src/importers/item-converter.d.ts.map +1 -1
  107. package/dist/src/importers/item-converter.js +39 -12
  108. package/dist/src/importers/item-converter.js.map +1 -1
  109. package/dist/src/init/architecture/types.d.ts +2 -2
  110. package/dist/src/init/compliance/types.d.ts +1 -1
  111. package/dist/src/init/repo/types.d.ts +1 -1
  112. package/dist/src/living-docs/fs-id-allocator.d.ts +72 -3
  113. package/dist/src/living-docs/fs-id-allocator.d.ts.map +1 -1
  114. package/dist/src/living-docs/fs-id-allocator.js +142 -16
  115. package/dist/src/living-docs/fs-id-allocator.js.map +1 -1
  116. package/dist/src/locales/de/cli.json +14 -0
  117. package/dist/src/locales/es/cli.json +14 -0
  118. package/dist/src/locales/fr/cli.json +14 -0
  119. package/dist/src/locales/ja/cli.json +14 -0
  120. package/dist/src/locales/ko/cli.json +14 -0
  121. package/dist/src/locales/pt/cli.json +14 -0
  122. package/dist/src/locales/ru/cli.json +14 -0
  123. package/dist/src/locales/zh/cli.json +14 -0
  124. package/dist/src/utils/chalk-fallback.d.ts +38 -0
  125. package/dist/src/utils/chalk-fallback.d.ts.map +1 -0
  126. package/dist/src/utils/chalk-fallback.js +118 -0
  127. package/dist/src/utils/chalk-fallback.js.map +1 -0
  128. package/dist/src/utils/project-id-generator.d.ts +127 -0
  129. package/dist/src/utils/project-id-generator.d.ts.map +1 -0
  130. package/dist/src/utils/project-id-generator.js +228 -0
  131. package/dist/src/utils/project-id-generator.js.map +1 -0
  132. package/package.json +1 -1
  133. package/plugins/specweave/agents/pm/AGENT.md +202 -0
  134. package/plugins/specweave/commands/specweave-import-external.md +5 -3
  135. package/plugins/specweave/commands/specweave-jobs.md +160 -0
  136. package/plugins/specweave/commands/specweave-sync-docs.md +6 -2
  137. package/plugins/specweave/hooks/pre-task-completion.sh +35 -17
  138. package/plugins/specweave/lib/vendor/core/ac-test-validator-cli.d.ts +16 -0
  139. package/plugins/specweave/lib/vendor/core/ac-test-validator-cli.js +121 -0
  140. package/plugins/specweave/lib/vendor/core/ac-test-validator-cli.js.map +1 -0
  141. package/plugins/specweave/lib/vendor/core/ac-test-validator.d.ts +111 -0
  142. package/plugins/specweave/lib/vendor/core/ac-test-validator.js +295 -0
  143. package/plugins/specweave/lib/vendor/core/ac-test-validator.js.map +1 -0
  144. package/plugins/specweave/lib/vendor/core/types/increment-metadata.d.ts +75 -0
  145. package/plugins/specweave/lib/vendor/utils/chalk-fallback.d.ts +38 -0
  146. package/plugins/specweave/lib/vendor/utils/chalk-fallback.js +118 -0
  147. package/plugins/specweave/lib/vendor/utils/chalk-fallback.js.map +1 -0
  148. package/plugins/specweave/lib/vendor/utils/fs-native.d.ts +179 -0
  149. package/plugins/specweave/lib/vendor/utils/fs-native.js +319 -0
  150. package/plugins/specweave/lib/vendor/utils/fs-native.js.map +1 -0
  151. package/plugins/specweave/skills/code-reviewer/SKILL.md +1 -1
  152. package/plugins/specweave/skills/docs-updater/SKILL.md +61 -0
  153. package/plugins/specweave/skills/increment-planner/SKILL.md +10 -335
  154. package/plugins/specweave/skills/increment-planner/templates/metadata.json +13 -0
  155. package/plugins/specweave/skills/increment-planner/templates/plan.md +50 -0
  156. package/plugins/specweave/skills/increment-planner/templates/spec-multi-project.md +86 -0
  157. package/plugins/specweave/skills/increment-planner/templates/spec-single-project.md +50 -0
  158. package/plugins/specweave/skills/increment-planner/templates/tasks-multi-project.md +86 -0
  159. package/plugins/specweave/skills/increment-planner/templates/tasks-single-project.md +48 -0
  160. package/plugins/specweave-ado/commands/specweave-ado-import-areas.md +358 -0
  161. package/plugins/specweave-ado/lib/ado-spec-sync.js +59 -3
  162. package/plugins/specweave-ado/lib/ado-spec-sync.ts +72 -3
  163. package/plugins/specweave-ado/lib/ado-status-sync.js +35 -3
  164. package/plugins/specweave-ado/lib/ado-status-sync.ts +48 -4
  165. package/plugins/specweave-alternatives/skills/architecture-alternatives/SKILL.md +1 -0
  166. package/plugins/specweave-alternatives/skills/bmad-method/SKILL.md +1 -0
  167. package/plugins/specweave-core/skills/code-quality/SKILL.md +1 -0
  168. package/plugins/specweave-core/skills/design-patterns/SKILL.md +1 -0
  169. package/plugins/specweave-core/skills/software-architecture/SKILL.md +1 -0
  170. package/plugins/specweave-github/commands/specweave-github-cleanup-duplicates.md +14 -10
  171. package/plugins/specweave-github/commands/specweave-github-sync.md +57 -0
  172. package/plugins/specweave-github/hooks/.specweave/logs/hooks-debug.log +74 -0
  173. package/plugins/specweave-github/lib/github-feature-sync.ts +6 -11
  174. package/plugins/specweave-github/lib/github-increment-sync-cli.js +456 -0
  175. package/plugins/specweave-github/lib/github-increment-sync-cli.ts +588 -0
  176. package/plugins/specweave-github/lib/github-status-sync.js +37 -1
  177. package/plugins/specweave-github/lib/github-status-sync.ts +60 -4
  178. package/plugins/specweave-github/lib/increment-issue-builder.js +389 -0
  179. package/plugins/specweave-github/lib/increment-issue-builder.ts +502 -0
  180. package/plugins/specweave-github/skills/github-issue-standard/SKILL.md +19 -24
  181. package/plugins/specweave-infrastructure/agents/observability-engineer/AGENT.md +15 -23
  182. package/plugins/specweave-jira/commands/specweave-jira-import-boards.md +331 -0
  183. package/plugins/specweave-jira/lib/jira-spec-sync.js +53 -5
  184. package/plugins/specweave-jira/lib/jira-spec-sync.ts +87 -7
  185. package/plugins/specweave-jira/lib/jira-status-sync.js +9 -3
  186. package/plugins/specweave-jira/lib/jira-status-sync.ts +15 -6
  187. package/plugins/specweave-ml/agents/data-scientist/AGENT.md +16 -20
  188. package/plugins/specweave-ml/agents/ml-engineer/AGENT.md +18 -19
  189. package/plugins/specweave-ml/skills/{ml-pipeline-workflow → mlops-dag-builder}/SKILL.md +18 -14
  190. package/plugins/specweave-release/hooks/.specweave/logs/dora-tracking.log +111 -0
  191. package/plugins/specweave-ui/skills/browser-automation/SKILL.md +1 -1
  192. package/plugins/specweave-ui/skills/ui-testing/SKILL.md +10 -122
  193. package/dist/plugins/specweave-github/lib/epic-content-builder.d.ts +0 -70
  194. package/dist/plugins/specweave-github/lib/epic-content-builder.d.ts.map +0 -1
  195. package/dist/plugins/specweave-github/lib/epic-content-builder.js +0 -258
  196. package/dist/plugins/specweave-github/lib/epic-content-builder.js.map +0 -1
  197. package/dist/plugins/specweave-github/lib/github-epic-sync.d.ts +0 -83
  198. package/dist/plugins/specweave-github/lib/github-epic-sync.d.ts.map +0 -1
  199. package/dist/plugins/specweave-github/lib/github-epic-sync.js +0 -466
  200. package/dist/plugins/specweave-github/lib/github-epic-sync.js.map +0 -1
  201. package/plugins/specweave-github/lib/epic-content-builder.js +0 -265
  202. package/plugins/specweave-github/lib/epic-content-builder.ts +0 -376
  203. package/plugins/specweave-github/lib/github-epic-sync.js +0 -488
  204. package/plugins/specweave-github/lib/github-epic-sync.ts +0 -715
@@ -0,0 +1,614 @@
1
+ /**
2
+ * Multi-Repository Configuration
3
+ *
4
+ * Extracted from repo-structure-manager.ts to reduce file size and prevent crashes.
5
+ * Handles configuration of multi-repository setups including parent repos and discovery.
6
+ */
7
+ import path from 'path';
8
+ import chalk from 'chalk';
9
+ import { select, input, confirm, number } from '@inquirer/prompts';
10
+ import { Octokit } from '@octokit/rest';
11
+ import { normalizeRepoName, suggestRepoName } from './repo-id-generator.js';
12
+ import { getParentRepoBenefits, getVisibilityPrompt, } from './prompt-consolidator.js';
13
+ import { detectRepositoryHints } from './folder-detector.js';
14
+ import { discoverRepositories } from './repo-bulk-discovery.js';
15
+ /**
16
+ * Save setup state for Ctrl+C recovery
17
+ */
18
+ async function saveSetupState(stateManager, state) {
19
+ try {
20
+ await stateManager.saveState(state);
21
+ }
22
+ catch (error) {
23
+ console.warn(chalk.yellow(`Warning: Failed to save setup state: ${error.message}`));
24
+ }
25
+ }
26
+ /**
27
+ * Configure multi-repository architecture
28
+ * @param options - Configuration options
29
+ */
30
+ export async function configureMultiRepo(options) {
31
+ const { projectPath, githubToken, stateManager, useParent = true, isLocalParent = false, urlType = 'ssh', platform = 'github', provider } = options;
32
+ console.log(chalk.cyan('\n Multi-Repository Configuration\n'));
33
+ console.log(chalk.gray('This creates separate repositories for each service/component.\n'));
34
+ // Show parent repo benefits if using parent approach
35
+ if (useParent) {
36
+ console.log(chalk.blue(getParentRepoBenefits()));
37
+ console.log('');
38
+ }
39
+ const config = {
40
+ architecture: useParent ? 'parent' : 'multi-repo',
41
+ urlType,
42
+ platform,
43
+ provider,
44
+ repositories: []
45
+ };
46
+ // Save state: architecture selected
47
+ await saveSetupState(stateManager, {
48
+ version: '1.0.0',
49
+ architecture: useParent ? 'parent' : 'multi-repo',
50
+ parentRepo: undefined,
51
+ repos: [],
52
+ currentStep: 'architecture-selected',
53
+ timestamp: new Date().toISOString(),
54
+ envCreated: false
55
+ });
56
+ // ========== NEW FLOW: Ask discovery strategy FIRST (before parent questions!) ==========
57
+ // Step 1: Ask how to configure implementation repositories (BEFORE parent questions)
58
+ let discoveryStrategy = 'manual';
59
+ let discoveredRepos = [];
60
+ let owner = '';
61
+ if (!isLocalParent && githubToken && useParent) {
62
+ console.log(chalk.cyan('\n Repository Discovery\n'));
63
+ console.log(chalk.gray('You\'re setting up multiple repositories. We can discover them automatically!\n'));
64
+ const configMethod = await select({
65
+ message: 'How do you want to configure repositories?',
66
+ choices: [
67
+ {
68
+ name: [
69
+ chalk.bold.green(' Bulk Discovery (RECOMMENDED)'),
70
+ chalk.gray(' Automatically discover repos from ' + provider.config.name),
71
+ chalk.gray(' - Select parent from discovered list'),
72
+ chalk.gray(' - Auto-configure implementation repos'),
73
+ chalk.gray(' - Supports: all, pattern, regex filtering'),
74
+ ''
75
+ ].join('\n'),
76
+ value: 'bulk-discovery'
77
+ },
78
+ {
79
+ name: [
80
+ chalk.bold(' Manual Entry'),
81
+ chalk.gray(' Enter each repository manually'),
82
+ chalk.gray(' - Full control over settings'),
83
+ chalk.gray(' - Best for new repos or custom setup'),
84
+ ''
85
+ ].join('\n'),
86
+ value: 'manual'
87
+ }
88
+ ],
89
+ default: 'bulk-discovery'
90
+ });
91
+ discoveryStrategy = configMethod;
92
+ }
93
+ // Step 2: If bulk discovery, discover repos FIRST, then ask which is parent
94
+ if (discoveryStrategy === 'bulk-discovery') {
95
+ // Get owner FIRST (needed for discovery)
96
+ console.log(chalk.cyan('\n Repository Owner\n'));
97
+ owner = await input({
98
+ message: `${provider.config.name} owner/organization:`,
99
+ validate: async (val) => {
100
+ if (!val.trim())
101
+ return 'Owner is required';
102
+ // Validate owner exists on the platform
103
+ if (githubToken) {
104
+ const result = await provider.validateOwner(val, githubToken);
105
+ if (!result.valid) {
106
+ return result.error || `Invalid ${provider.config.name} owner`;
107
+ }
108
+ }
109
+ return true;
110
+ }
111
+ });
112
+ // Discover repositories via pattern matching
113
+ const octokit = new Octokit({ auth: githubToken });
114
+ const isOrg = await provider.isOrganization(owner, githubToken);
115
+ // Retry loop for pattern adjustment
116
+ let discoveryResult = null;
117
+ while (discoveryResult === null) {
118
+ // Discovery-first flow: skip count validation since user discovers THEN selects
119
+ discoveryResult = await discoverRepositories(octokit, owner, isOrg, 0, { skipValidation: true });
120
+ // If null, user selected "go back and adjust pattern", loop will retry
121
+ // If user selected "manual", discoveryResult will be { repositories: [], strategy: 'manual' }
122
+ }
123
+ if (discoveryResult && discoveryResult.strategy !== 'manual') {
124
+ discoveredRepos = discoveryResult.repositories;
125
+ // Now ask: Which repo is the parent?
126
+ console.log(chalk.cyan('\n Select Parent Repository\n'));
127
+ console.log(chalk.gray('Choose which repository will be the parent (contains .specweave/ structure)\n'));
128
+ const parentChoices = [
129
+ ...discoveredRepos.map((repo, index) => ({
130
+ name: `${chalk.bold(repo.name)}\n${chalk.gray(repo.description || '(no description)')}`,
131
+ value: index.toString(),
132
+ short: repo.name
133
+ })),
134
+ {
135
+ name: `${chalk.yellow(' Enter parent manually')} ${chalk.gray('(not in discovered list)')}`,
136
+ value: 'manual',
137
+ short: 'Enter manually'
138
+ }
139
+ ];
140
+ const parentSelection = await select({
141
+ message: 'Which repository is the parent?',
142
+ choices: parentChoices,
143
+ pageSize: 15
144
+ });
145
+ if (parentSelection === 'manual') {
146
+ // User wants to enter parent manually - fall back to old flow
147
+ discoveryStrategy = 'manual';
148
+ discoveredRepos = []; // Clear discovered repos
149
+ }
150
+ else {
151
+ // User selected a parent from discovered list
152
+ const parentIndex = parseInt(parentSelection);
153
+ const selectedParent = discoveredRepos[parentIndex];
154
+ // Fetch full repo details from GitHub API
155
+ let description = selectedParent.description || 'SpecWeave parent repository - specs, docs, and architecture';
156
+ let existingVisibility = selectedParent.private ? 'private' : 'public';
157
+ try {
158
+ const response = await fetch(`https://api.github.com/repos/${owner}/${selectedParent.name}`, {
159
+ headers: {
160
+ 'Authorization': `Bearer ${githubToken}`,
161
+ 'Accept': 'application/vnd.github+json'
162
+ }
163
+ });
164
+ if (response.ok) {
165
+ const data = await response.json();
166
+ description = data.description || description;
167
+ existingVisibility = data.private ? 'private' : 'public';
168
+ }
169
+ }
170
+ catch {
171
+ // Use defaults if fetch fails
172
+ }
173
+ // Set parent config
174
+ config.parentRepo = {
175
+ name: selectedParent.name,
176
+ owner: owner,
177
+ description: description,
178
+ visibility: existingVisibility,
179
+ createOnGitHub: false // Already exists!
180
+ };
181
+ // Remove parent from discovered repos (implementation repos = discovered - parent)
182
+ discoveredRepos.splice(parentIndex, 1);
183
+ console.log(chalk.green(`\n Using existing repository: ${owner}/${selectedParent.name}\n`));
184
+ console.log(chalk.gray(` Implementation repositories: ${discoveredRepos.length}\n`));
185
+ // Save state: parent repo configured
186
+ await saveSetupState(stateManager, {
187
+ version: '1.0.0',
188
+ architecture: useParent ? 'parent' : 'multi-repo',
189
+ parentRepo: config.parentRepo,
190
+ repos: [],
191
+ currentStep: 'parent-repo-configured',
192
+ timestamp: new Date().toISOString(),
193
+ envCreated: false
194
+ });
195
+ // Skip to repository configuration (lines 794+)
196
+ // We'll continue below with discoveredRepos
197
+ }
198
+ }
199
+ else {
200
+ // User selected manual - fall back to old flow
201
+ discoveryStrategy = 'manual';
202
+ }
203
+ }
204
+ // Step 3: Manual flow (existing logic) - only runs if discoveryStrategy === 'manual'
205
+ if (discoveryStrategy === 'manual' && useParent) {
206
+ let parentAnswers;
207
+ if (isLocalParent) {
208
+ // Local parent: Skip GitHub questions, just ask for folder name
209
+ console.log(chalk.blue('\n Local Parent Folder Setup'));
210
+ console.log(chalk.gray('This folder will contain .specweave/ but will NOT be pushed to GitHub.\n'));
211
+ const parentNameAnswer = await input({
212
+ message: 'Parent folder name:',
213
+ default: `${path.basename(projectPath)}`,
214
+ validate: (val) => {
215
+ if (!val.trim())
216
+ return 'Folder name is required';
217
+ return true;
218
+ }
219
+ });
220
+ const ownerForLocalAnswer = await input({
221
+ message: `${provider.config.name} owner/organization for IMPLEMENTATION repos:`,
222
+ validate: async (val) => {
223
+ if (!val.trim())
224
+ return 'Owner is required';
225
+ // Validate owner exists on the platform
226
+ if (githubToken) {
227
+ const result = await provider.validateOwner(val, githubToken);
228
+ if (!result.valid) {
229
+ return result.error || `Invalid ${provider.config.name} owner`;
230
+ }
231
+ }
232
+ return true;
233
+ }
234
+ });
235
+ parentAnswers = {
236
+ parentName: parentNameAnswer,
237
+ owner: ownerForLocalAnswer
238
+ };
239
+ // Set defaults for local parent
240
+ parentAnswers.description = 'Local parent folder (not synced to GitHub)';
241
+ parentAnswers.createOnGitHub = false; // Never create GitHub repo for local parent
242
+ }
243
+ else {
244
+ // GitHub parent: First ask if using existing or creating new
245
+ const parentChoice = await select({
246
+ message: 'Parent repository setup:',
247
+ choices: [
248
+ {
249
+ name: `${chalk.green('Use existing parent repository')}\n${chalk.gray('Connect to an existing GitHub repo that already has .specweave/ structure')}`,
250
+ value: 'existing'
251
+ },
252
+ {
253
+ name: `${chalk.blue('Create new parent repository')}\n${chalk.gray('Create a new GitHub repo for specs, docs, and architecture')}`,
254
+ value: 'new'
255
+ }
256
+ ],
257
+ default: 'new'
258
+ });
259
+ if (parentChoice === 'existing') {
260
+ // Using existing parent repository
261
+ console.log(chalk.cyan('\n Existing Parent Repository\n'));
262
+ // Ask for owner first
263
+ const existingOwner = await input({
264
+ message: `${provider.config.name} owner/organization:`,
265
+ validate: async (val) => {
266
+ if (!val.trim())
267
+ return 'Owner is required';
268
+ // Validate owner exists on the platform
269
+ if (githubToken) {
270
+ const result = await provider.validateOwner(val, githubToken);
271
+ if (!result.valid) {
272
+ return result.error || `Invalid ${provider.config.name} owner`;
273
+ }
274
+ }
275
+ return true;
276
+ }
277
+ });
278
+ const ownerPrompt = { owner: existingOwner };
279
+ // Ask for existing repo name
280
+ const existingParentName = await input({
281
+ message: 'Existing parent repository name:',
282
+ default: `${path.basename(projectPath)}-parent`,
283
+ validate: async (val) => {
284
+ if (!val.trim())
285
+ return 'Repository name is required';
286
+ // Validate repository EXISTS on the platform
287
+ if (githubToken && ownerPrompt.owner) {
288
+ const result = await provider.validateRepository(ownerPrompt.owner, val, githubToken);
289
+ if (!result.exists) {
290
+ return `Repository ${ownerPrompt.owner}/${val} not found on ${provider.config.name}. Please check the name or choose 'Create new'.`;
291
+ }
292
+ }
293
+ return true;
294
+ }
295
+ });
296
+ const repoPrompt = { parentName: existingParentName };
297
+ // Fetch description and visibility from GitHub API (or use defaults)
298
+ let description = 'SpecWeave parent repository - specs, docs, and architecture';
299
+ let existingVisibility = 'private';
300
+ if (githubToken) {
301
+ try {
302
+ const response = await fetch(`https://api.github.com/repos/${ownerPrompt.owner}/${repoPrompt.parentName}`, {
303
+ headers: {
304
+ 'Authorization': `Bearer ${githubToken}`,
305
+ 'Accept': 'application/vnd.github+json'
306
+ }
307
+ });
308
+ if (response.ok) {
309
+ const data = await response.json();
310
+ description = data.description || description;
311
+ existingVisibility = data.private ? 'private' : 'public';
312
+ }
313
+ }
314
+ catch {
315
+ // Use defaults if fetch fails
316
+ }
317
+ }
318
+ parentAnswers = {
319
+ owner: ownerPrompt.owner,
320
+ parentName: repoPrompt.parentName,
321
+ description: description,
322
+ createOnGitHub: false, // Don't create, it already exists!
323
+ visibility: existingVisibility // Use existing visibility from GitHub
324
+ };
325
+ console.log(chalk.green(`\n Using existing repository: ${ownerPrompt.owner}/${repoPrompt.parentName}\n`));
326
+ }
327
+ else {
328
+ // Creating new parent repository
329
+ console.log(chalk.cyan('\n New Parent Repository\n'));
330
+ // Ask for owner (separate prompt to avoid validator issues)
331
+ const newOwner = await input({
332
+ message: `${provider.config.name} owner/organization for ALL repos:`,
333
+ validate: async (val) => {
334
+ if (!val.trim())
335
+ return 'Owner is required';
336
+ // Validate owner exists on the platform
337
+ if (githubToken) {
338
+ const result = await provider.validateOwner(val, githubToken);
339
+ if (!result.valid) {
340
+ return result.error || `Invalid ${provider.config.name} owner`;
341
+ }
342
+ }
343
+ return true;
344
+ }
345
+ });
346
+ const ownerPrompt = { owner: newOwner };
347
+ // Now ask remaining questions, using the owner value
348
+ const newParentName = await input({
349
+ message: 'Parent repository name:',
350
+ default: `${path.basename(projectPath)}-parent`,
351
+ validate: async (val) => {
352
+ if (!val.trim())
353
+ return 'Repository name is required';
354
+ // Validate repository DOESN'T exist
355
+ if (githubToken && ownerPrompt.owner) {
356
+ const result = await provider.validateRepository(ownerPrompt.owner, val, githubToken);
357
+ if (result.exists) {
358
+ return `Repository ${ownerPrompt.owner}/${val} already exists at ${result.url}. Please choose 'Use existing' or pick a different name.`;
359
+ }
360
+ }
361
+ return true;
362
+ }
363
+ });
364
+ const newParentDesc = await input({
365
+ message: 'Parent repository description:',
366
+ default: 'SpecWeave parent repository - specs, docs, and architecture'
367
+ });
368
+ const createParentOnGitHub = await confirm({
369
+ message: 'Create parent repository on GitHub?',
370
+ default: true
371
+ });
372
+ // Merge the answers
373
+ parentAnswers = {
374
+ ...ownerPrompt,
375
+ parentName: newParentName,
376
+ description: newParentDesc,
377
+ createOnGitHub: createParentOnGitHub
378
+ };
379
+ }
380
+ }
381
+ // Ask about visibility for parent repo (only if creating NEW repo on GitHub)
382
+ let parentVisibility = 'private';
383
+ if (!isLocalParent && parentAnswers.createOnGitHub) {
384
+ // Only prompt for visibility when creating a NEW repository
385
+ const parentVisibilityPrompt = getVisibilityPrompt(parentAnswers.parentName);
386
+ parentVisibility = await select({
387
+ message: parentVisibilityPrompt.question,
388
+ choices: parentVisibilityPrompt.options.map(opt => ({
389
+ name: `${opt.label}\n${chalk.gray(opt.description)}`,
390
+ value: opt.value
391
+ })),
392
+ default: parentVisibilityPrompt.default
393
+ });
394
+ }
395
+ else if (!isLocalParent && parentAnswers.visibility) {
396
+ // Use existing repository's visibility (fetched from GitHub API)
397
+ parentVisibility = parentAnswers.visibility;
398
+ }
399
+ config.parentRepo = {
400
+ name: parentAnswers.parentName,
401
+ owner: parentAnswers.owner,
402
+ description: parentAnswers.description,
403
+ visibility: parentVisibility,
404
+ createOnGitHub: parentAnswers.createOnGitHub
405
+ };
406
+ // Save state: parent repo configured
407
+ await saveSetupState(stateManager, {
408
+ version: '1.0.0',
409
+ architecture: useParent ? 'parent' : 'multi-repo',
410
+ parentRepo: config.parentRepo,
411
+ repos: [],
412
+ currentStep: 'parent-repo-configured',
413
+ timestamp: new Date().toISOString(),
414
+ envCreated: false
415
+ });
416
+ }
417
+ // Step 4: Repository count and discovery (skip count question if using bulk discovery)
418
+ let repoCount;
419
+ let bulkDiscoveryStrategy = discoveryStrategy === 'bulk-discovery' ? 'pattern' : 'manual';
420
+ if (discoveryStrategy === 'bulk-discovery' && discoveredRepos.length > 0) {
421
+ // Bulk discovery: repos already discovered, skip count question
422
+ repoCount = discoveredRepos.length;
423
+ console.log(chalk.green(`\n Total repositories: ${repoCount + 1} (1 parent + ${repoCount} implementation)\n`));
424
+ }
425
+ else {
426
+ // Manual entry: ask for count
427
+ // Auto-detect existing folders
428
+ const hints = await detectRepositoryHints(projectPath);
429
+ if (hints.detectedFolders.length > 0) {
430
+ console.log(chalk.green(`\n Detected ${hints.detectedFolders.length} service folder(s):`));
431
+ hints.detectedFolders.forEach(f => console.log(chalk.gray(` - ${f}`)));
432
+ console.log('');
433
+ }
434
+ // Show repository count clarification BEFORE asking
435
+ if (useParent && config.parentRepo) {
436
+ console.log(chalk.cyan('\n Repository Count\n'));
437
+ console.log(chalk.gray('You will create:'));
438
+ if (isLocalParent) {
439
+ console.log(chalk.white(' - 1 parent FOLDER (local only, .specweave/ gitignored)'));
440
+ console.log(chalk.white(' - N implementation repositories (your services/apps on GitHub)'));
441
+ }
442
+ else {
443
+ console.log(chalk.white(' - 1 parent repository (specs, docs, increments)'));
444
+ console.log(chalk.white(' - N implementation repositories (your services/apps)'));
445
+ }
446
+ console.log(chalk.gray('\nNext question asks for: IMPLEMENTATION repositories ONLY (not counting parent)\n'));
447
+ }
448
+ // Ask how many implementation repositories
449
+ const repoCountAnswer = await number({
450
+ message: useParent
451
+ ? ' How many IMPLEMENTATION repositories? (not counting parent)'
452
+ : 'How many repositories?',
453
+ default: hints.suggestedCount, // Use auto-detected count
454
+ validate: (val) => {
455
+ if (val === undefined || val < 1)
456
+ return useParent
457
+ ? 'Need at least 1 implementation repository'
458
+ : 'Need at least 2 repositories';
459
+ if (val > 10)
460
+ return 'Maximum 10 repositories supported';
461
+ return true;
462
+ }
463
+ });
464
+ repoCount = repoCountAnswer ?? hints.suggestedCount;
465
+ // Show summary AFTER for confirmation
466
+ if (useParent && config.parentRepo) {
467
+ if (isLocalParent) {
468
+ console.log(chalk.green(`\n Total repositories to create: ${repoCount} implementation repos`));
469
+ console.log(chalk.gray(` (Parent folder is local only, not counted)\n`));
470
+ }
471
+ else {
472
+ const totalRepos = 1 + repoCount;
473
+ console.log(chalk.green(`\n Total repositories to create: ${totalRepos} (1 parent + ${repoCount} implementation)\n`));
474
+ }
475
+ }
476
+ // Bulk repository discovery for manual flow (old behavior)
477
+ if (githubToken && config.parentRepo && discoveryStrategy === 'manual') {
478
+ const octokit = new Octokit({ auth: githubToken });
479
+ const discoveryOwner = config.parentRepo.owner;
480
+ const isOrg = await provider.isOrganization(discoveryOwner, githubToken);
481
+ // Retry loop for pattern adjustment
482
+ let discoveryResult = null;
483
+ while (discoveryResult === null) {
484
+ discoveryResult = await discoverRepositories(octokit, discoveryOwner, isOrg, repoCount);
485
+ // If null, user selected "go back and adjust pattern", loop will retry
486
+ // If user selected "manual", discoveryResult will be { repositories: [], strategy: 'manual' }
487
+ }
488
+ if (discoveryResult) {
489
+ bulkDiscoveryStrategy = discoveryResult.strategy;
490
+ if (discoveryResult.strategy !== 'manual') {
491
+ discoveredRepos = discoveryResult.repositories;
492
+ // Update repoCount to match discovered repos
493
+ if (discoveredRepos.length !== repoCount) {
494
+ console.log(chalk.yellow(`\n Adjusting repository count from ${repoCount} to ${discoveredRepos.length} (based on discovery)\n`));
495
+ repoCount = discoveredRepos.length;
496
+ }
497
+ }
498
+ }
499
+ }
500
+ }
501
+ // Configure each repository
502
+ console.log(chalk.cyan('\n Configure Each Repository:\n'));
503
+ const usedIds = new Set();
504
+ const configuredRepoNames = []; // Track configured repo names for smart ID generation
505
+ for (let i = 0; i < repoCount; i++) {
506
+ const discoveredRepo = discoveredRepos[i]; // May be undefined if manual
507
+ const isDiscovered = bulkDiscoveryStrategy !== 'manual' && discoveredRepo;
508
+ console.log(chalk.white(`\nRepository ${i + 1} of ${repoCount}:`));
509
+ // Smart suggestion for ALL repos (not just first one!)
510
+ const projectName = path.basename(projectPath);
511
+ const suggestedName = isDiscovered ? discoveredRepo.name : suggestRepoName(projectName, i, repoCount);
512
+ // If discovered, auto-use without confirmation (repos exist on GitHub)
513
+ if (isDiscovered) {
514
+ // Use normalized repo name as ID (repo names are unique in GitHub)
515
+ const repoId = normalizeRepoName(discoveredRepo.name);
516
+ console.log(chalk.green(` Using: ${chalk.bold(discoveredRepo.name)} ${chalk.gray(`(id: ${repoId})`)}`));
517
+ usedIds.add(repoId);
518
+ configuredRepoNames.push(discoveredRepo.name);
519
+ config.repositories.push({
520
+ id: repoId,
521
+ name: discoveredRepo.name,
522
+ owner: discoveredRepo.owner,
523
+ description: discoveredRepo.description || `${discoveredRepo.name} service`,
524
+ path: discoveredRepo.name,
525
+ visibility: discoveredRepo.private ? 'private' : 'public',
526
+ createOnGitHub: false,
527
+ isNested: useParent
528
+ });
529
+ continue;
530
+ }
531
+ // Manual entry (original behavior)
532
+ const repoName = await input({
533
+ message: 'Repository name:',
534
+ default: suggestedName,
535
+ validate: async (val) => {
536
+ if (!val.trim())
537
+ return 'Repository name is required';
538
+ // Validate repository doesn't exist (skip for discovered repos)
539
+ if (!isDiscovered && githubToken && config.parentRepo) {
540
+ const result = await provider.validateRepository(config.parentRepo.owner, val, githubToken);
541
+ if (result.exists) {
542
+ return `Repository ${config.parentRepo.owner}/${val} already exists at ${result.url}`;
543
+ }
544
+ }
545
+ return true;
546
+ }
547
+ });
548
+ const repoDescription = await input({
549
+ message: 'Repository description:',
550
+ default: `${path.basename(repoName)} service`
551
+ });
552
+ // Skip "Create on GitHub?" for discovered repos - they already exist!
553
+ let repoCreateOnGitHub = false;
554
+ if (!isDiscovered) {
555
+ repoCreateOnGitHub = await confirm({
556
+ message: 'Create this repository on GitHub?',
557
+ default: true
558
+ });
559
+ }
560
+ const repoAnswers = {
561
+ name: repoName,
562
+ description: repoDescription,
563
+ createOnGitHub: repoCreateOnGitHub
564
+ };
565
+ // Use normalized repo name as ID (repo names are unique)
566
+ const id = normalizeRepoName(repoAnswers.name);
567
+ console.log(chalk.green(` Repository ID: ${chalk.bold(id)}`));
568
+ usedIds.add(id);
569
+ configuredRepoNames.push(repoAnswers.name);
570
+ // Ask about visibility only if creating a new repository
571
+ let visibility = 'private';
572
+ if (repoAnswers.createOnGitHub) {
573
+ const visibilityPrompt = getVisibilityPrompt(repoAnswers.name);
574
+ visibility = await select({
575
+ message: visibilityPrompt.question,
576
+ choices: visibilityPrompt.options.map(opt => ({
577
+ name: `${opt.label}\n${chalk.gray(opt.description)}`,
578
+ value: opt.value
579
+ })),
580
+ default: visibilityPrompt.default
581
+ });
582
+ }
583
+ config.repositories.push({
584
+ id: id,
585
+ name: repoAnswers.name,
586
+ owner: config.parentRepo?.owner || '',
587
+ description: repoAnswers.description,
588
+ path: repoAnswers.name, // Use full repo name as folder (not short ID)
589
+ visibility: visibility,
590
+ createOnGitHub: repoAnswers.createOnGitHub,
591
+ isNested: useParent
592
+ });
593
+ // Save state after each repo
594
+ await saveSetupState(stateManager, {
595
+ version: '1.0.0',
596
+ architecture: useParent ? 'parent' : 'multi-repo',
597
+ parentRepo: config.parentRepo,
598
+ repos: config.repositories.map(r => ({
599
+ id: r.id,
600
+ repo: r.name,
601
+ owner: r.owner,
602
+ path: r.path,
603
+ visibility: r.visibility,
604
+ displayName: r.name,
605
+ created: false
606
+ })),
607
+ currentStep: `repo-${i + 1}-configured`,
608
+ timestamp: new Date().toISOString(),
609
+ envCreated: false
610
+ });
611
+ }
612
+ return config;
613
+ }
614
+ //# sourceMappingURL=multi-repo-configurator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multi-repo-configurator.js","sourceRoot":"","sources":["../../../../src/core/repo-structure/multi-repo-configurator.ts"],"names":[],"mappings":"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"}