specweave 0.16.3 ā 0.16.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/fix-marketplace-errors.sh +136 -0
- package/dist/cli/helpers/issue-tracker/github-multi-repo.d.ts +7 -2
- package/dist/cli/helpers/issue-tracker/github-multi-repo.d.ts.map +1 -1
- package/dist/cli/helpers/issue-tracker/github-multi-repo.js +34 -2
- package/dist/cli/helpers/issue-tracker/github-multi-repo.js.map +1 -1
- package/dist/cli/helpers/issue-tracker/github.d.ts +3 -1
- package/dist/cli/helpers/issue-tracker/github.d.ts.map +1 -1
- package/dist/cli/helpers/issue-tracker/github.js +5 -2
- package/dist/cli/helpers/issue-tracker/github.js.map +1 -1
- package/dist/cli/helpers/issue-tracker/index.d.ts.map +1 -1
- package/dist/cli/helpers/issue-tracker/index.js +24 -1
- package/dist/cli/helpers/issue-tracker/index.js.map +1 -1
- package/dist/core/repo-structure/repo-structure-manager.d.ts +82 -0
- package/dist/core/repo-structure/repo-structure-manager.d.ts.map +1 -0
- package/dist/core/repo-structure/repo-structure-manager.js +581 -0
- package/dist/core/repo-structure/repo-structure-manager.js.map +1 -0
- package/package.json +1 -1
- package/plugins/specweave-github/agents/github-task-splitter/AGENT.md +234 -0
- package/plugins/specweave-github/skills/github-multi-project/SKILL.md +249 -0
|
@@ -0,0 +1,581 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Repository Structure Manager
|
|
3
|
+
*
|
|
4
|
+
* Handles various repository architectures for SpecWeave projects:
|
|
5
|
+
* - Single repository
|
|
6
|
+
* - Multi-repository (polyrepo/microservices)
|
|
7
|
+
* - Monorepo (single repo with multiple projects)
|
|
8
|
+
* - Parent repository approach (parent folder with .specweave + nested implementation repos)
|
|
9
|
+
*
|
|
10
|
+
* Provides capabilities to:
|
|
11
|
+
* - Create GitHub repositories via API
|
|
12
|
+
* - Initialize git repositories locally
|
|
13
|
+
* - Configure proper folder structure
|
|
14
|
+
* - Organize specs per project/team
|
|
15
|
+
* - Split tasks between repositories
|
|
16
|
+
*/
|
|
17
|
+
import fs from 'fs-extra';
|
|
18
|
+
import path from 'path';
|
|
19
|
+
import chalk from 'chalk';
|
|
20
|
+
import inquirer from 'inquirer';
|
|
21
|
+
import ora from 'ora';
|
|
22
|
+
import { execSync } from 'child_process';
|
|
23
|
+
import { execFileNoThrowSync } from '../../utils/execFileNoThrow.js';
|
|
24
|
+
export class RepoStructureManager {
|
|
25
|
+
constructor(projectPath, githubToken) {
|
|
26
|
+
this.projectPath = projectPath;
|
|
27
|
+
this.githubToken = githubToken;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Prompt user for repository structure decisions
|
|
31
|
+
*/
|
|
32
|
+
async promptStructure() {
|
|
33
|
+
console.log(chalk.cyan.bold('\nšļø Repository Architecture Setup\n'));
|
|
34
|
+
console.log(chalk.gray('Let\'s configure your repository structure for optimal organization.\n'));
|
|
35
|
+
// Step 1: Ask about architecture type
|
|
36
|
+
const { architecture } = await inquirer.prompt([{
|
|
37
|
+
type: 'list',
|
|
38
|
+
name: 'architecture',
|
|
39
|
+
message: 'What repository architecture do you want to use?',
|
|
40
|
+
choices: [
|
|
41
|
+
{
|
|
42
|
+
name: 'š¦ Single repository (everything in one repo)',
|
|
43
|
+
value: 'single',
|
|
44
|
+
short: 'Single'
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
name: 'šÆ Multi-repository (separate repos for each service)',
|
|
48
|
+
value: 'multi-repo',
|
|
49
|
+
short: 'Multi-repo'
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
name: 'š Monorepo (single repo with multiple projects)',
|
|
53
|
+
value: 'monorepo',
|
|
54
|
+
short: 'Monorepo'
|
|
55
|
+
}
|
|
56
|
+
],
|
|
57
|
+
default: 'single'
|
|
58
|
+
}]);
|
|
59
|
+
switch (architecture) {
|
|
60
|
+
case 'single':
|
|
61
|
+
return this.configureSingleRepo();
|
|
62
|
+
case 'multi-repo':
|
|
63
|
+
return this.configureMultiRepo();
|
|
64
|
+
case 'monorepo':
|
|
65
|
+
return this.configureMonorepo();
|
|
66
|
+
default:
|
|
67
|
+
throw new Error(`Unknown architecture: ${architecture}`);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Configure single repository
|
|
72
|
+
*/
|
|
73
|
+
async configureSingleRepo() {
|
|
74
|
+
console.log(chalk.cyan('\nš¦ Single Repository Configuration\n'));
|
|
75
|
+
// Check if repo already exists
|
|
76
|
+
const hasGit = fs.existsSync(path.join(this.projectPath, '.git'));
|
|
77
|
+
if (hasGit) {
|
|
78
|
+
// Try to detect existing remote
|
|
79
|
+
try {
|
|
80
|
+
const remote = execSync('git remote get-url origin', {
|
|
81
|
+
cwd: this.projectPath,
|
|
82
|
+
encoding: 'utf-8'
|
|
83
|
+
}).trim();
|
|
84
|
+
const match = remote.match(/github\.com[:/]([^/]+)\/(.+?)(\.git)?$/);
|
|
85
|
+
if (match) {
|
|
86
|
+
const owner = match[1];
|
|
87
|
+
const repo = match[2];
|
|
88
|
+
console.log(chalk.green(`ā Existing repository detected: ${owner}/${repo}`));
|
|
89
|
+
const { useExisting } = await inquirer.prompt([{
|
|
90
|
+
type: 'confirm',
|
|
91
|
+
name: 'useExisting',
|
|
92
|
+
message: 'Use existing repository?',
|
|
93
|
+
default: true
|
|
94
|
+
}]);
|
|
95
|
+
if (useExisting) {
|
|
96
|
+
return {
|
|
97
|
+
architecture: 'single',
|
|
98
|
+
repositories: [{
|
|
99
|
+
id: 'main',
|
|
100
|
+
name: repo,
|
|
101
|
+
owner: owner,
|
|
102
|
+
description: `${repo} - SpecWeave project`,
|
|
103
|
+
path: '.',
|
|
104
|
+
createOnGitHub: false,
|
|
105
|
+
isNested: false
|
|
106
|
+
}]
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
// No remote or error, continue with manual config
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
// Manual configuration
|
|
116
|
+
const answers = await inquirer.prompt([
|
|
117
|
+
{
|
|
118
|
+
type: 'input',
|
|
119
|
+
name: 'owner',
|
|
120
|
+
message: 'GitHub owner/organization:',
|
|
121
|
+
validate: (input) => !!input.trim() || 'Owner is required'
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
type: 'input',
|
|
125
|
+
name: 'repo',
|
|
126
|
+
message: 'Repository name:',
|
|
127
|
+
default: path.basename(this.projectPath),
|
|
128
|
+
validate: (input) => !!input.trim() || 'Repository name is required'
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
type: 'input',
|
|
132
|
+
name: 'description',
|
|
133
|
+
message: 'Repository description:',
|
|
134
|
+
default: 'My SpecWeave project'
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
type: 'confirm',
|
|
138
|
+
name: 'createOnGitHub',
|
|
139
|
+
message: 'Create repository on GitHub?',
|
|
140
|
+
default: !hasGit
|
|
141
|
+
}
|
|
142
|
+
]);
|
|
143
|
+
return {
|
|
144
|
+
architecture: 'single',
|
|
145
|
+
repositories: [{
|
|
146
|
+
id: 'main',
|
|
147
|
+
name: answers.repo,
|
|
148
|
+
owner: answers.owner,
|
|
149
|
+
description: answers.description,
|
|
150
|
+
path: '.',
|
|
151
|
+
createOnGitHub: answers.createOnGitHub,
|
|
152
|
+
isNested: false
|
|
153
|
+
}]
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Configure multi-repository architecture
|
|
158
|
+
*/
|
|
159
|
+
async configureMultiRepo() {
|
|
160
|
+
console.log(chalk.cyan('\nšÆ Multi-Repository Configuration\n'));
|
|
161
|
+
console.log(chalk.gray('This creates separate repositories for each service/component.\n'));
|
|
162
|
+
// Ask about parent repository approach
|
|
163
|
+
const { useParent } = await inquirer.prompt([{
|
|
164
|
+
type: 'confirm',
|
|
165
|
+
name: 'useParent',
|
|
166
|
+
message: 'Use parent repository approach? (Recommended)',
|
|
167
|
+
default: true
|
|
168
|
+
}]);
|
|
169
|
+
if (useParent) {
|
|
170
|
+
console.log(chalk.blue('\nš Parent Repository Benefits:'));
|
|
171
|
+
console.log(chalk.gray(' ⢠Central .specweave/ folder for all specs and documentation'));
|
|
172
|
+
console.log(chalk.gray(' ⢠Living docs sync to parent repo (single source of truth)'));
|
|
173
|
+
console.log(chalk.gray(' ⢠Implementation repos stay clean and focused'));
|
|
174
|
+
console.log(chalk.gray(' ⢠Better for enterprise/multi-team projects\n'));
|
|
175
|
+
}
|
|
176
|
+
const config = {
|
|
177
|
+
architecture: useParent ? 'parent' : 'multi-repo',
|
|
178
|
+
repositories: []
|
|
179
|
+
};
|
|
180
|
+
// Configure parent repository if using that approach
|
|
181
|
+
if (useParent) {
|
|
182
|
+
const parentAnswers = await inquirer.prompt([
|
|
183
|
+
{
|
|
184
|
+
type: 'input',
|
|
185
|
+
name: 'owner',
|
|
186
|
+
message: 'GitHub owner/organization for ALL repos:',
|
|
187
|
+
validate: (input) => !!input.trim() || 'Owner is required'
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
type: 'input',
|
|
191
|
+
name: 'parentName',
|
|
192
|
+
message: 'Parent repository name:',
|
|
193
|
+
default: `${path.basename(this.projectPath)}-parent`,
|
|
194
|
+
validate: (input) => !!input.trim() || 'Repository name is required'
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
type: 'input',
|
|
198
|
+
name: 'description',
|
|
199
|
+
message: 'Parent repository description:',
|
|
200
|
+
default: 'SpecWeave parent repository - specs, docs, and architecture'
|
|
201
|
+
},
|
|
202
|
+
{
|
|
203
|
+
type: 'confirm',
|
|
204
|
+
name: 'createOnGitHub',
|
|
205
|
+
message: 'Create parent repository on GitHub?',
|
|
206
|
+
default: true
|
|
207
|
+
}
|
|
208
|
+
]);
|
|
209
|
+
config.parentRepo = {
|
|
210
|
+
name: parentAnswers.parentName,
|
|
211
|
+
owner: parentAnswers.owner,
|
|
212
|
+
description: parentAnswers.description,
|
|
213
|
+
createOnGitHub: parentAnswers.createOnGitHub
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
// Ask how many implementation repositories
|
|
217
|
+
const { repoCount } = await inquirer.prompt([{
|
|
218
|
+
type: 'number',
|
|
219
|
+
name: 'repoCount',
|
|
220
|
+
message: 'How many implementation repositories?',
|
|
221
|
+
default: 3,
|
|
222
|
+
validate: (input) => {
|
|
223
|
+
if (input < 2)
|
|
224
|
+
return 'Multi-repo needs at least 2 repositories';
|
|
225
|
+
if (input > 10)
|
|
226
|
+
return 'Maximum 10 repositories supported';
|
|
227
|
+
return true;
|
|
228
|
+
}
|
|
229
|
+
}]);
|
|
230
|
+
// Configure each repository
|
|
231
|
+
console.log(chalk.cyan('\nš¦ Configure Each Repository:\n'));
|
|
232
|
+
for (let i = 0; i < repoCount; i++) {
|
|
233
|
+
console.log(chalk.white(`\nRepository ${i + 1} of ${repoCount}:`));
|
|
234
|
+
const repoAnswers = await inquirer.prompt([
|
|
235
|
+
{
|
|
236
|
+
type: 'input',
|
|
237
|
+
name: 'id',
|
|
238
|
+
message: 'Repository ID (e.g., frontend, backend, shared):',
|
|
239
|
+
validate: (input) => {
|
|
240
|
+
if (!input.trim())
|
|
241
|
+
return 'ID is required';
|
|
242
|
+
if (config.repositories.some(r => r.id === input)) {
|
|
243
|
+
return 'ID must be unique';
|
|
244
|
+
}
|
|
245
|
+
return true;
|
|
246
|
+
}
|
|
247
|
+
},
|
|
248
|
+
{
|
|
249
|
+
type: 'input',
|
|
250
|
+
name: 'name',
|
|
251
|
+
message: 'Repository name:',
|
|
252
|
+
default: (answers) => `${path.basename(this.projectPath)}-${answers.id}`,
|
|
253
|
+
validate: (input) => !!input.trim() || 'Repository name is required'
|
|
254
|
+
},
|
|
255
|
+
{
|
|
256
|
+
type: 'input',
|
|
257
|
+
name: 'description',
|
|
258
|
+
message: 'Repository description:',
|
|
259
|
+
default: (answers) => `${answers.id} service`
|
|
260
|
+
},
|
|
261
|
+
{
|
|
262
|
+
type: 'confirm',
|
|
263
|
+
name: 'createOnGitHub',
|
|
264
|
+
message: 'Create this repository on GitHub?',
|
|
265
|
+
default: true
|
|
266
|
+
}
|
|
267
|
+
]);
|
|
268
|
+
config.repositories.push({
|
|
269
|
+
id: repoAnswers.id,
|
|
270
|
+
name: repoAnswers.name,
|
|
271
|
+
owner: config.parentRepo?.owner || '',
|
|
272
|
+
description: repoAnswers.description,
|
|
273
|
+
path: useParent ? `services/${repoAnswers.id}` : repoAnswers.id,
|
|
274
|
+
createOnGitHub: repoAnswers.createOnGitHub,
|
|
275
|
+
isNested: useParent
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
return config;
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Configure monorepo
|
|
282
|
+
*/
|
|
283
|
+
async configureMonorepo() {
|
|
284
|
+
console.log(chalk.cyan('\nš Monorepo Configuration\n'));
|
|
285
|
+
console.log(chalk.gray('Single repository with multiple projects/packages.\n'));
|
|
286
|
+
const answers = await inquirer.prompt([
|
|
287
|
+
{
|
|
288
|
+
type: 'input',
|
|
289
|
+
name: 'owner',
|
|
290
|
+
message: 'GitHub owner/organization:',
|
|
291
|
+
validate: (input) => !!input.trim() || 'Owner is required'
|
|
292
|
+
},
|
|
293
|
+
{
|
|
294
|
+
type: 'input',
|
|
295
|
+
name: 'repo',
|
|
296
|
+
message: 'Repository name:',
|
|
297
|
+
default: path.basename(this.projectPath),
|
|
298
|
+
validate: (input) => !!input.trim() || 'Repository name is required'
|
|
299
|
+
},
|
|
300
|
+
{
|
|
301
|
+
type: 'input',
|
|
302
|
+
name: 'description',
|
|
303
|
+
message: 'Repository description:',
|
|
304
|
+
default: 'Monorepo project'
|
|
305
|
+
},
|
|
306
|
+
{
|
|
307
|
+
type: 'input',
|
|
308
|
+
name: 'projects',
|
|
309
|
+
message: 'Project names (comma-separated, e.g., frontend,backend,shared):',
|
|
310
|
+
validate: (input) => {
|
|
311
|
+
const projects = input.split(',').map(p => p.trim()).filter(Boolean);
|
|
312
|
+
if (projects.length < 2) {
|
|
313
|
+
return 'Monorepo should have at least 2 projects';
|
|
314
|
+
}
|
|
315
|
+
return true;
|
|
316
|
+
}
|
|
317
|
+
},
|
|
318
|
+
{
|
|
319
|
+
type: 'confirm',
|
|
320
|
+
name: 'createOnGitHub',
|
|
321
|
+
message: 'Create repository on GitHub?',
|
|
322
|
+
default: !fs.existsSync(path.join(this.projectPath, '.git'))
|
|
323
|
+
}
|
|
324
|
+
]);
|
|
325
|
+
const projects = answers.projects.split(',').map((p) => p.trim());
|
|
326
|
+
return {
|
|
327
|
+
architecture: 'monorepo',
|
|
328
|
+
repositories: [{
|
|
329
|
+
id: 'main',
|
|
330
|
+
name: answers.repo,
|
|
331
|
+
owner: answers.owner,
|
|
332
|
+
description: answers.description,
|
|
333
|
+
path: '.',
|
|
334
|
+
createOnGitHub: answers.createOnGitHub,
|
|
335
|
+
isNested: false
|
|
336
|
+
}],
|
|
337
|
+
monorepoProjects: projects
|
|
338
|
+
};
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* Create repositories on GitHub via API
|
|
342
|
+
*/
|
|
343
|
+
async createGitHubRepositories(config) {
|
|
344
|
+
if (!this.githubToken) {
|
|
345
|
+
console.log(chalk.yellow('\nā ļø No GitHub token available'));
|
|
346
|
+
console.log(chalk.gray(' Skipping GitHub repository creation'));
|
|
347
|
+
console.log(chalk.gray(' You can create repositories manually later\n'));
|
|
348
|
+
return;
|
|
349
|
+
}
|
|
350
|
+
const spinner = ora('Creating GitHub repositories...').start();
|
|
351
|
+
const created = [];
|
|
352
|
+
const failed = [];
|
|
353
|
+
// Create parent repository if needed
|
|
354
|
+
if (config.parentRepo?.createOnGitHub) {
|
|
355
|
+
try {
|
|
356
|
+
await this.createGitHubRepo(config.parentRepo.owner, config.parentRepo.name, config.parentRepo.description);
|
|
357
|
+
created.push(`${config.parentRepo.owner}/${config.parentRepo.name}`);
|
|
358
|
+
}
|
|
359
|
+
catch (error) {
|
|
360
|
+
failed.push(`${config.parentRepo.owner}/${config.parentRepo.name}: ${error.message}`);
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
// Create implementation repositories
|
|
364
|
+
for (const repo of config.repositories) {
|
|
365
|
+
if (repo.createOnGitHub) {
|
|
366
|
+
try {
|
|
367
|
+
await this.createGitHubRepo(repo.owner, repo.name, repo.description);
|
|
368
|
+
created.push(`${repo.owner}/${repo.name}`);
|
|
369
|
+
}
|
|
370
|
+
catch (error) {
|
|
371
|
+
failed.push(`${repo.owner}/${repo.name}: ${error.message}`);
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
spinner.stop();
|
|
376
|
+
if (created.length > 0) {
|
|
377
|
+
console.log(chalk.green('\nā
Created repositories:'));
|
|
378
|
+
created.forEach(repo => {
|
|
379
|
+
console.log(chalk.gray(` ⢠${repo}`));
|
|
380
|
+
});
|
|
381
|
+
}
|
|
382
|
+
if (failed.length > 0) {
|
|
383
|
+
console.log(chalk.red('\nā Failed to create:'));
|
|
384
|
+
failed.forEach(msg => {
|
|
385
|
+
console.log(chalk.gray(` ⢠${msg}`));
|
|
386
|
+
});
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
/**
|
|
390
|
+
* Create a single GitHub repository via API
|
|
391
|
+
*/
|
|
392
|
+
async createGitHubRepo(owner, name, description) {
|
|
393
|
+
// Check if it's an organization or user
|
|
394
|
+
const isOrg = await this.isGitHubOrganization(owner);
|
|
395
|
+
const endpoint = isOrg
|
|
396
|
+
? `https://api.github.com/orgs/${owner}/repos`
|
|
397
|
+
: `https://api.github.com/user/repos`;
|
|
398
|
+
const response = await fetch(endpoint, {
|
|
399
|
+
method: 'POST',
|
|
400
|
+
headers: {
|
|
401
|
+
'Authorization': `Bearer ${this.githubToken}`,
|
|
402
|
+
'Accept': 'application/vnd.github+json',
|
|
403
|
+
'X-GitHub-Api-Version': '2022-11-28'
|
|
404
|
+
},
|
|
405
|
+
body: JSON.stringify({
|
|
406
|
+
name,
|
|
407
|
+
description,
|
|
408
|
+
private: false,
|
|
409
|
+
auto_init: false,
|
|
410
|
+
has_issues: true,
|
|
411
|
+
has_projects: true,
|
|
412
|
+
has_wiki: false
|
|
413
|
+
})
|
|
414
|
+
});
|
|
415
|
+
if (!response.ok) {
|
|
416
|
+
const error = await response.json();
|
|
417
|
+
if (error.errors?.[0]?.message?.includes('already exists')) {
|
|
418
|
+
// Repository already exists, not an error
|
|
419
|
+
return;
|
|
420
|
+
}
|
|
421
|
+
throw new Error(error.message || `Failed to create repository: ${response.status}`);
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
/**
|
|
425
|
+
* Check if a GitHub account is an organization
|
|
426
|
+
*/
|
|
427
|
+
async isGitHubOrganization(account) {
|
|
428
|
+
try {
|
|
429
|
+
const response = await fetch(`https://api.github.com/users/${account}`, {
|
|
430
|
+
headers: {
|
|
431
|
+
'Authorization': `Bearer ${this.githubToken}`,
|
|
432
|
+
'Accept': 'application/vnd.github+json'
|
|
433
|
+
}
|
|
434
|
+
});
|
|
435
|
+
if (response.ok) {
|
|
436
|
+
const data = await response.json();
|
|
437
|
+
return data.type === 'Organization';
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
catch {
|
|
441
|
+
// Assume user if we can't determine
|
|
442
|
+
}
|
|
443
|
+
return false;
|
|
444
|
+
}
|
|
445
|
+
/**
|
|
446
|
+
* Initialize local git repositories
|
|
447
|
+
*/
|
|
448
|
+
async initializeLocalRepos(config) {
|
|
449
|
+
const spinner = ora('Initializing local repositories...').start();
|
|
450
|
+
// Create directory structure based on architecture
|
|
451
|
+
if (config.architecture === 'parent') {
|
|
452
|
+
// Parent repo approach: create services/ directory for nested repos
|
|
453
|
+
const servicesDir = path.join(this.projectPath, 'services');
|
|
454
|
+
if (!fs.existsSync(servicesDir)) {
|
|
455
|
+
fs.mkdirSync(servicesDir, { recursive: true });
|
|
456
|
+
}
|
|
457
|
+
// Initialize parent repo at root
|
|
458
|
+
if (!fs.existsSync(path.join(this.projectPath, '.git'))) {
|
|
459
|
+
execFileNoThrowSync('git', ['init'], { cwd: this.projectPath });
|
|
460
|
+
if (config.parentRepo) {
|
|
461
|
+
const remoteUrl = `https://github.com/${config.parentRepo.owner}/${config.parentRepo.name}.git`;
|
|
462
|
+
execFileNoThrowSync('git', ['remote', 'add', 'origin', remoteUrl], { cwd: this.projectPath });
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
// Initialize nested repos
|
|
466
|
+
for (const repo of config.repositories) {
|
|
467
|
+
const repoPath = path.join(this.projectPath, repo.path);
|
|
468
|
+
// Create directory if needed
|
|
469
|
+
if (!fs.existsSync(repoPath)) {
|
|
470
|
+
fs.mkdirSync(repoPath, { recursive: true });
|
|
471
|
+
}
|
|
472
|
+
// Initialize git
|
|
473
|
+
if (!fs.existsSync(path.join(repoPath, '.git'))) {
|
|
474
|
+
execFileNoThrowSync('git', ['init'], { cwd: repoPath });
|
|
475
|
+
const remoteUrl = `https://github.com/${repo.owner}/${repo.name}.git`;
|
|
476
|
+
execFileNoThrowSync('git', ['remote', 'add', 'origin', remoteUrl], { cwd: repoPath });
|
|
477
|
+
}
|
|
478
|
+
// Create basic structure
|
|
479
|
+
this.createBasicRepoStructure(repoPath, repo.id);
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
else if (config.architecture === 'multi-repo') {
|
|
483
|
+
// Standard multi-repo: repos as subdirectories
|
|
484
|
+
for (const repo of config.repositories) {
|
|
485
|
+
const repoPath = path.join(this.projectPath, repo.path);
|
|
486
|
+
if (!fs.existsSync(repoPath)) {
|
|
487
|
+
fs.mkdirSync(repoPath, { recursive: true });
|
|
488
|
+
}
|
|
489
|
+
if (!fs.existsSync(path.join(repoPath, '.git'))) {
|
|
490
|
+
execFileNoThrowSync('git', ['init'], { cwd: repoPath });
|
|
491
|
+
const remoteUrl = `https://github.com/${repo.owner}/${repo.name}.git`;
|
|
492
|
+
execFileNoThrowSync('git', ['remote', 'add', 'origin', remoteUrl], { cwd: repoPath });
|
|
493
|
+
}
|
|
494
|
+
this.createBasicRepoStructure(repoPath, repo.id);
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
else {
|
|
498
|
+
// Single repo or monorepo
|
|
499
|
+
if (!fs.existsSync(path.join(this.projectPath, '.git'))) {
|
|
500
|
+
execFileNoThrowSync('git', ['init'], { cwd: this.projectPath });
|
|
501
|
+
const repo = config.repositories[0];
|
|
502
|
+
if (repo) {
|
|
503
|
+
const remoteUrl = `https://github.com/${repo.owner}/${repo.name}.git`;
|
|
504
|
+
execFileNoThrowSync('git', ['remote', 'add', 'origin', remoteUrl], { cwd: this.projectPath });
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
// For monorepo, create project directories
|
|
508
|
+
if (config.architecture === 'monorepo' && config.monorepoProjects) {
|
|
509
|
+
for (const project of config.monorepoProjects) {
|
|
510
|
+
const projectPath = path.join(this.projectPath, 'packages', project);
|
|
511
|
+
if (!fs.existsSync(projectPath)) {
|
|
512
|
+
fs.mkdirSync(projectPath, { recursive: true });
|
|
513
|
+
}
|
|
514
|
+
this.createBasicRepoStructure(projectPath, project);
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
spinner.succeed('Local repositories initialized');
|
|
519
|
+
}
|
|
520
|
+
/**
|
|
521
|
+
* Create basic structure for a repository/project
|
|
522
|
+
*/
|
|
523
|
+
createBasicRepoStructure(repoPath, projectId) {
|
|
524
|
+
// Create basic directories
|
|
525
|
+
const dirs = ['src', 'tests', 'docs'];
|
|
526
|
+
for (const dir of dirs) {
|
|
527
|
+
const dirPath = path.join(repoPath, dir);
|
|
528
|
+
if (!fs.existsSync(dirPath)) {
|
|
529
|
+
fs.mkdirSync(dirPath, { recursive: true });
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
// Create README.md
|
|
533
|
+
const readmePath = path.join(repoPath, 'README.md');
|
|
534
|
+
if (!fs.existsSync(readmePath)) {
|
|
535
|
+
const readmeContent = `# ${projectId}\n\n${projectId} service/component.\n\nPart of SpecWeave multi-repository project.\n`;
|
|
536
|
+
fs.writeFileSync(readmePath, readmeContent);
|
|
537
|
+
}
|
|
538
|
+
// Create .gitignore
|
|
539
|
+
const gitignorePath = path.join(repoPath, '.gitignore');
|
|
540
|
+
if (!fs.existsSync(gitignorePath)) {
|
|
541
|
+
const gitignoreContent = `node_modules/\ndist/\n.env\n.DS_Store\n*.log\n`;
|
|
542
|
+
fs.writeFileSync(gitignorePath, gitignoreContent);
|
|
543
|
+
}
|
|
544
|
+
}
|
|
545
|
+
/**
|
|
546
|
+
* Create SpecWeave project structure
|
|
547
|
+
*/
|
|
548
|
+
async createSpecWeaveStructure(config) {
|
|
549
|
+
const specweavePath = path.join(this.projectPath, '.specweave');
|
|
550
|
+
// Create project-specific spec folders
|
|
551
|
+
if (config.architecture === 'monorepo' && config.monorepoProjects) {
|
|
552
|
+
// Monorepo: create project folders
|
|
553
|
+
for (const project of config.monorepoProjects) {
|
|
554
|
+
const projectSpecPath = path.join(specweavePath, 'docs', 'internal', 'projects', project.toLowerCase());
|
|
555
|
+
const subfolders = ['specs', 'modules', 'team', 'architecture', 'legacy'];
|
|
556
|
+
for (const subfolder of subfolders) {
|
|
557
|
+
const folderPath = path.join(projectSpecPath, subfolder);
|
|
558
|
+
if (!fs.existsSync(folderPath)) {
|
|
559
|
+
fs.mkdirSync(folderPath, { recursive: true });
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
console.log(chalk.gray(` ā Created project structure: ${project}`));
|
|
563
|
+
}
|
|
564
|
+
}
|
|
565
|
+
else if (config.architecture === 'multi-repo' || config.architecture === 'parent') {
|
|
566
|
+
// Multi-repo: create folders for each repository
|
|
567
|
+
for (const repo of config.repositories) {
|
|
568
|
+
const projectSpecPath = path.join(specweavePath, 'docs', 'internal', 'projects', repo.id);
|
|
569
|
+
const subfolders = ['specs', 'modules', 'team', 'architecture', 'legacy'];
|
|
570
|
+
for (const subfolder of subfolders) {
|
|
571
|
+
const folderPath = path.join(projectSpecPath, subfolder);
|
|
572
|
+
if (!fs.existsSync(folderPath)) {
|
|
573
|
+
fs.mkdirSync(folderPath, { recursive: true });
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
console.log(chalk.gray(` ā Created project structure: ${repo.id}`));
|
|
577
|
+
}
|
|
578
|
+
}
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
//# sourceMappingURL=repo-structure-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repo-structure-manager.js","sourceRoot":"","sources":["../../../src/core/repo-structure/repo-structure-manager.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "specweave",
|
|
3
|
-
"version": "0.16.
|
|
3
|
+
"version": "0.16.7",
|
|
4
4
|
"description": "Spec-driven development framework for Claude Code. AI-native workflow with living documentation, intelligent agents, and multilingual support (9 languages). Enterprise-grade traceability with permanent specs and temporary increments.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|