context-first-cli 1.1.2 → 1.2.1
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/dist/commands/add-repo-metaspec.d.ts +2 -0
- package/dist/commands/add-repo-metaspec.d.ts.map +1 -0
- package/dist/commands/add-repo-metaspec.js +91 -0
- package/dist/commands/add-repo-metaspec.js.map +1 -0
- package/dist/commands/add-repo.d.ts +2 -0
- package/dist/commands/add-repo.d.ts.map +1 -0
- package/dist/commands/add-repo.js +135 -0
- package/dist/commands/add-repo.js.map +1 -0
- package/dist/commands/create-orchestrator.d.ts +2 -0
- package/dist/commands/create-orchestrator.d.ts.map +1 -0
- package/dist/commands/create-orchestrator.js +267 -0
- package/dist/commands/create-orchestrator.js.map +1 -0
- package/dist/index.js +13 -3
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add-repo-metaspec.d.ts","sourceRoot":"","sources":["../../src/commands/add-repo-metaspec.ts"],"names":[],"mappings":"AAoBA,wBAAsB,sBAAsB,kBA4F3C"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.addRepoMetaspecCommand = addRepoMetaspecCommand;
|
|
7
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
8
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
9
|
+
const promises_1 = __importDefault(require("fs/promises"));
|
|
10
|
+
const path_1 = __importDefault(require("path"));
|
|
11
|
+
async function addRepoMetaspecCommand() {
|
|
12
|
+
console.log(chalk_1.default.blue.bold('\n📚 Adding MetaSpecs repository to context-manifest.json\n'));
|
|
13
|
+
try {
|
|
14
|
+
// Check if context-manifest.json exists
|
|
15
|
+
const manifestPath = path_1.default.join(process.cwd(), 'context-manifest.json');
|
|
16
|
+
const exists = await promises_1.default.access(manifestPath).then(() => true).catch(() => false);
|
|
17
|
+
if (!exists) {
|
|
18
|
+
console.log(chalk_1.default.red('\n❌ context-manifest.json not found in current directory'));
|
|
19
|
+
console.log(chalk_1.default.gray('Make sure you are in an orchestrator repository root'));
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
// Read existing manifest
|
|
23
|
+
const manifestContent = await promises_1.default.readFile(manifestPath, 'utf-8');
|
|
24
|
+
const manifest = JSON.parse(manifestContent);
|
|
25
|
+
// Check if metaspecs already exists
|
|
26
|
+
const metaspecsExists = manifest.repositories.some(r => r.role === 'specs-provider' || r.id === 'metaspecs');
|
|
27
|
+
if (metaspecsExists) {
|
|
28
|
+
console.log(chalk_1.default.yellow('\n⚠️ A MetaSpecs repository already exists in the manifest'));
|
|
29
|
+
const { proceed } = await inquirer_1.default.prompt([
|
|
30
|
+
{
|
|
31
|
+
type: 'confirm',
|
|
32
|
+
name: 'proceed',
|
|
33
|
+
message: 'Do you want to replace it?',
|
|
34
|
+
default: false,
|
|
35
|
+
},
|
|
36
|
+
]);
|
|
37
|
+
if (!proceed) {
|
|
38
|
+
console.log(chalk_1.default.gray('\nOperation cancelled'));
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
// Remove existing metaspecs
|
|
42
|
+
manifest.repositories = manifest.repositories.filter(r => r.role !== 'specs-provider' && r.id !== 'metaspecs');
|
|
43
|
+
}
|
|
44
|
+
const answers = await inquirer_1.default.prompt([
|
|
45
|
+
{
|
|
46
|
+
type: 'input',
|
|
47
|
+
name: 'url',
|
|
48
|
+
message: 'MetaSpecs repository URL (Git):',
|
|
49
|
+
validate: (input) => {
|
|
50
|
+
if (!input.trim()) {
|
|
51
|
+
return 'Repository URL is required';
|
|
52
|
+
}
|
|
53
|
+
if (!input.includes('git') && !input.includes('.git')) {
|
|
54
|
+
return 'Please provide a valid Git repository URL';
|
|
55
|
+
}
|
|
56
|
+
return true;
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
type: 'input',
|
|
61
|
+
name: 'description',
|
|
62
|
+
message: 'Repository description:',
|
|
63
|
+
default: 'MetaSpecs repository with technical and business specifications',
|
|
64
|
+
},
|
|
65
|
+
]);
|
|
66
|
+
// Create metaspecs repository entry
|
|
67
|
+
const metaspecsRepo = {
|
|
68
|
+
id: 'metaspecs',
|
|
69
|
+
role: 'specs-provider',
|
|
70
|
+
url: answers.url,
|
|
71
|
+
description: answers.description,
|
|
72
|
+
};
|
|
73
|
+
// Add to beginning of repositories array (metaspecs should be first)
|
|
74
|
+
manifest.repositories.unshift(metaspecsRepo);
|
|
75
|
+
// Write back to file
|
|
76
|
+
await promises_1.default.writeFile(manifestPath, JSON.stringify(manifest, null, 2), 'utf-8');
|
|
77
|
+
console.log(chalk_1.default.green('\n✅ MetaSpecs repository added successfully!'));
|
|
78
|
+
console.log(chalk_1.default.blue('\n📝 Repository details:'));
|
|
79
|
+
console.log(chalk_1.default.gray(` ID: metaspecs`));
|
|
80
|
+
console.log(chalk_1.default.gray(` Role: specs-provider`));
|
|
81
|
+
console.log(chalk_1.default.gray(` URL: ${answers.url}`));
|
|
82
|
+
console.log(chalk_1.default.gray(` Description: ${answers.description}`));
|
|
83
|
+
console.log(chalk_1.default.blue('\n💡 Next step:'));
|
|
84
|
+
console.log(chalk_1.default.gray(' Update ai.properties.md with the local path to your cloned MetaSpecs repository'));
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
console.error(chalk_1.default.red('\n❌ Error adding MetaSpecs repository:'), error);
|
|
88
|
+
process.exit(1);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=add-repo-metaspec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add-repo-metaspec.js","sourceRoot":"","sources":["../../src/commands/add-repo-metaspec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add-repo.d.ts","sourceRoot":"","sources":["../../src/commands/add-repo.ts"],"names":[],"mappings":"AAoBA,wBAAsB,cAAc,kBAyInC"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.addRepoCommand = addRepoCommand;
|
|
7
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
8
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
9
|
+
const promises_1 = __importDefault(require("fs/promises"));
|
|
10
|
+
const path_1 = __importDefault(require("path"));
|
|
11
|
+
async function addRepoCommand() {
|
|
12
|
+
console.log(chalk_1.default.blue.bold('\n📦 Adding a new repository to context-manifest.json\n'));
|
|
13
|
+
try {
|
|
14
|
+
// Check if context-manifest.json exists
|
|
15
|
+
const manifestPath = path_1.default.join(process.cwd(), 'context-manifest.json');
|
|
16
|
+
const exists = await promises_1.default.access(manifestPath).then(() => true).catch(() => false);
|
|
17
|
+
if (!exists) {
|
|
18
|
+
console.log(chalk_1.default.red('\n❌ context-manifest.json not found in current directory'));
|
|
19
|
+
console.log(chalk_1.default.gray('Make sure you are in an orchestrator repository root'));
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
// Read existing manifest
|
|
23
|
+
const manifestContent = await promises_1.default.readFile(manifestPath, 'utf-8');
|
|
24
|
+
const manifest = JSON.parse(manifestContent);
|
|
25
|
+
// Get repository IDs for dependencies
|
|
26
|
+
const existingRepoIds = manifest.repositories.map(r => r.id);
|
|
27
|
+
const answers = await inquirer_1.default.prompt([
|
|
28
|
+
{
|
|
29
|
+
type: 'input',
|
|
30
|
+
name: 'id',
|
|
31
|
+
message: 'Repository ID (unique identifier):',
|
|
32
|
+
validate: (input) => {
|
|
33
|
+
if (!input.trim()) {
|
|
34
|
+
return 'Repository ID is required';
|
|
35
|
+
}
|
|
36
|
+
if (!/^[a-z0-9-]+$/.test(input)) {
|
|
37
|
+
return 'Repository ID must contain only lowercase letters, numbers, and hyphens';
|
|
38
|
+
}
|
|
39
|
+
return true;
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
type: 'input',
|
|
44
|
+
name: 'url',
|
|
45
|
+
message: 'Repository URL (Git):',
|
|
46
|
+
validate: (input) => {
|
|
47
|
+
if (!input.trim()) {
|
|
48
|
+
return 'Repository URL is required';
|
|
49
|
+
}
|
|
50
|
+
if (!input.includes('git') && !input.includes('.git')) {
|
|
51
|
+
return 'Please provide a valid Git repository URL';
|
|
52
|
+
}
|
|
53
|
+
return true;
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
type: 'input',
|
|
58
|
+
name: 'description',
|
|
59
|
+
message: 'Repository description:',
|
|
60
|
+
validate: (input) => {
|
|
61
|
+
if (!input.trim()) {
|
|
62
|
+
return 'Description is required';
|
|
63
|
+
}
|
|
64
|
+
return true;
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
type: 'list',
|
|
69
|
+
name: 'role',
|
|
70
|
+
message: 'Repository role:',
|
|
71
|
+
choices: [
|
|
72
|
+
{ name: 'Application (main code repository)', value: 'application' },
|
|
73
|
+
{ name: 'Library (shared library)', value: 'library' },
|
|
74
|
+
{ name: 'Service (microservice)', value: 'service' },
|
|
75
|
+
{ name: 'Tool (development tool)', value: 'tool' },
|
|
76
|
+
{ name: 'Other', value: 'other' },
|
|
77
|
+
],
|
|
78
|
+
default: 'application',
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
type: 'checkbox',
|
|
82
|
+
name: 'dependsOn',
|
|
83
|
+
message: 'Dependencies (select repositories this one depends on):',
|
|
84
|
+
choices: existingRepoIds.map(id => ({ name: id, value: id })),
|
|
85
|
+
when: () => existingRepoIds.length > 0,
|
|
86
|
+
},
|
|
87
|
+
]);
|
|
88
|
+
// Check if repository already exists
|
|
89
|
+
const existingIndex = manifest.repositories.findIndex(r => r.id === answers.id);
|
|
90
|
+
if (existingIndex !== -1) {
|
|
91
|
+
console.log(chalk_1.default.yellow(`\n⚠️ Repository "${answers.id}" already exists in the manifest`));
|
|
92
|
+
const { proceed } = await inquirer_1.default.prompt([
|
|
93
|
+
{
|
|
94
|
+
type: 'confirm',
|
|
95
|
+
name: 'proceed',
|
|
96
|
+
message: 'Do you want to replace it?',
|
|
97
|
+
default: false,
|
|
98
|
+
},
|
|
99
|
+
]);
|
|
100
|
+
if (!proceed) {
|
|
101
|
+
console.log(chalk_1.default.gray('\nOperation cancelled'));
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
// Remove existing repository
|
|
105
|
+
manifest.repositories.splice(existingIndex, 1);
|
|
106
|
+
}
|
|
107
|
+
// Create new repository entry
|
|
108
|
+
const newRepo = {
|
|
109
|
+
id: answers.id,
|
|
110
|
+
role: answers.role,
|
|
111
|
+
url: answers.url,
|
|
112
|
+
description: answers.description,
|
|
113
|
+
};
|
|
114
|
+
if (answers.dependsOn && answers.dependsOn.length > 0) {
|
|
115
|
+
newRepo.dependsOn = answers.dependsOn;
|
|
116
|
+
}
|
|
117
|
+
// Add to manifest
|
|
118
|
+
manifest.repositories.push(newRepo);
|
|
119
|
+
// Write back to file
|
|
120
|
+
await promises_1.default.writeFile(manifestPath, JSON.stringify(manifest, null, 2), 'utf-8');
|
|
121
|
+
console.log(chalk_1.default.green(`\n✅ Repository "${answers.id}" added successfully!`));
|
|
122
|
+
console.log(chalk_1.default.blue('\n📝 Repository details:'));
|
|
123
|
+
console.log(chalk_1.default.gray(` ID: ${answers.id}`));
|
|
124
|
+
console.log(chalk_1.default.gray(` Role: ${answers.role}`));
|
|
125
|
+
console.log(chalk_1.default.gray(` URL: ${answers.url}`));
|
|
126
|
+
if (newRepo.dependsOn && newRepo.dependsOn.length > 0) {
|
|
127
|
+
console.log(chalk_1.default.gray(` Dependencies: ${newRepo.dependsOn.join(', ')}`));
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
console.error(chalk_1.default.red('\n❌ Error adding repository:'), error);
|
|
132
|
+
process.exit(1);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=add-repo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add-repo.js","sourceRoot":"","sources":["../../src/commands/add-repo.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-orchestrator.d.ts","sourceRoot":"","sources":["../../src/commands/create-orchestrator.ts"],"names":[],"mappings":"AAcA,wBAAsB,yBAAyB,kBAoI9C"}
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.createOrchestratorCommand = createOrchestratorCommand;
|
|
7
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
8
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
9
|
+
const promises_1 = __importDefault(require("fs/promises"));
|
|
10
|
+
const path_1 = __importDefault(require("path"));
|
|
11
|
+
const simple_git_1 = require("simple-git");
|
|
12
|
+
async function createOrchestratorCommand() {
|
|
13
|
+
console.log(chalk_1.default.blue.bold('\n🏗️ Creating a new Orchestrator repository\n'));
|
|
14
|
+
try {
|
|
15
|
+
const answers = await inquirer_1.default.prompt([
|
|
16
|
+
{
|
|
17
|
+
type: 'input',
|
|
18
|
+
name: 'projectName',
|
|
19
|
+
message: 'Project name (will be used as directory name):',
|
|
20
|
+
validate: (input) => {
|
|
21
|
+
if (!input.trim()) {
|
|
22
|
+
return 'Project name is required';
|
|
23
|
+
}
|
|
24
|
+
if (!/^[a-z0-9-]+$/.test(input)) {
|
|
25
|
+
return 'Project name must contain only lowercase letters, numbers, and hyphens';
|
|
26
|
+
}
|
|
27
|
+
return true;
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
type: 'input',
|
|
32
|
+
name: 'description',
|
|
33
|
+
message: 'Project description:',
|
|
34
|
+
default: 'Orchestrator for Context-First development',
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
type: 'input',
|
|
38
|
+
name: 'metaspecsUrl',
|
|
39
|
+
message: 'MetaSpecs repository URL (Git):',
|
|
40
|
+
validate: (input) => {
|
|
41
|
+
if (!input.trim()) {
|
|
42
|
+
return 'MetaSpecs repository URL is required';
|
|
43
|
+
}
|
|
44
|
+
if (!input.includes('git') && !input.includes('.git')) {
|
|
45
|
+
return 'Please provide a valid Git repository URL';
|
|
46
|
+
}
|
|
47
|
+
return true;
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
type: 'list',
|
|
52
|
+
name: 'taskManager',
|
|
53
|
+
message: 'Which task management system will you use?',
|
|
54
|
+
choices: [
|
|
55
|
+
{ name: 'Jira', value: 'jira' },
|
|
56
|
+
{ name: 'Linear', value: 'linear' },
|
|
57
|
+
{ name: 'GitHub Issues', value: 'github' },
|
|
58
|
+
{ name: 'None (manual)', value: 'none' },
|
|
59
|
+
],
|
|
60
|
+
default: 'jira',
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
type: 'confirm',
|
|
64
|
+
name: 'initGit',
|
|
65
|
+
message: 'Initialize Git repository and create initial commit?',
|
|
66
|
+
default: true,
|
|
67
|
+
},
|
|
68
|
+
]);
|
|
69
|
+
const targetDir = path_1.default.join(process.cwd(), answers.projectName);
|
|
70
|
+
// Check if directory already exists
|
|
71
|
+
const exists = await promises_1.default.access(targetDir).then(() => true).catch(() => false);
|
|
72
|
+
if (exists) {
|
|
73
|
+
console.log(chalk_1.default.red(`\n❌ Directory "${answers.projectName}" already exists`));
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
// Create directory structure
|
|
77
|
+
await promises_1.default.mkdir(targetDir, { recursive: true });
|
|
78
|
+
await promises_1.default.mkdir(path_1.default.join(targetDir, '.claude', 'commands', 'products'), { recursive: true });
|
|
79
|
+
await promises_1.default.mkdir(path_1.default.join(targetDir, '.claude', 'commands', 'engineer'), { recursive: true });
|
|
80
|
+
await promises_1.default.mkdir(path_1.default.join(targetDir, '.claude', 'commands', 'quality'), { recursive: true });
|
|
81
|
+
await promises_1.default.mkdir(path_1.default.join(targetDir, '.sessions'), { recursive: true });
|
|
82
|
+
// Create README.md
|
|
83
|
+
const readme = generateReadme(answers);
|
|
84
|
+
await promises_1.default.writeFile(path_1.default.join(targetDir, 'README.md'), readme, 'utf-8');
|
|
85
|
+
// Create ai.properties.md template
|
|
86
|
+
const aiProperties = generateAiProperties(answers);
|
|
87
|
+
await promises_1.default.writeFile(path_1.default.join(targetDir, 'ai.properties.md'), aiProperties, 'utf-8');
|
|
88
|
+
// Create context-manifest.json
|
|
89
|
+
const manifest = generateManifest(answers);
|
|
90
|
+
await promises_1.default.writeFile(path_1.default.join(targetDir, 'context-manifest.json'), JSON.stringify(manifest, null, 2), 'utf-8');
|
|
91
|
+
// Copy command templates
|
|
92
|
+
await copyCommandTemplates(targetDir);
|
|
93
|
+
// Create .gitignore
|
|
94
|
+
const gitignore = `node_modules/
|
|
95
|
+
.env
|
|
96
|
+
.ia.env
|
|
97
|
+
ai.properties.md
|
|
98
|
+
.sessions/*/
|
|
99
|
+
*.log
|
|
100
|
+
`;
|
|
101
|
+
await promises_1.default.writeFile(path_1.default.join(targetDir, '.gitignore'), gitignore, 'utf-8');
|
|
102
|
+
console.log(chalk_1.default.green(`\n✅ Orchestrator created successfully at: ${targetDir}`));
|
|
103
|
+
console.log(chalk_1.default.blue('\n📁 Structure created:'));
|
|
104
|
+
console.log(chalk_1.default.gray(' .claude/commands/ - Command definitions for AI'));
|
|
105
|
+
console.log(chalk_1.default.gray(' .sessions/ - Feature session data'));
|
|
106
|
+
console.log(chalk_1.default.gray(' ai.properties.md - Configuration template (gitignored)'));
|
|
107
|
+
console.log(chalk_1.default.gray(' context-manifest.json - Repository manifest'));
|
|
108
|
+
// Initialize Git if requested
|
|
109
|
+
if (answers.initGit) {
|
|
110
|
+
console.log(chalk_1.default.blue('\n🔧 Initializing Git repository...'));
|
|
111
|
+
const git = (0, simple_git_1.simpleGit)(targetDir);
|
|
112
|
+
await git.init();
|
|
113
|
+
await git.add('.');
|
|
114
|
+
await git.commit('chore: initial commit - orchestrator created by context-cli');
|
|
115
|
+
console.log(chalk_1.default.green('✅ Git repository initialized and initial commit created'));
|
|
116
|
+
}
|
|
117
|
+
console.log(chalk_1.default.blue('\n💡 Next steps:'));
|
|
118
|
+
console.log(chalk_1.default.gray(` 1. cd ${answers.projectName}`));
|
|
119
|
+
console.log(chalk_1.default.gray(' 2. Edit ai.properties.md with your project paths'));
|
|
120
|
+
console.log(chalk_1.default.gray(' 3. Edit context-manifest.json to define your repositories'));
|
|
121
|
+
if (answers.initGit) {
|
|
122
|
+
console.log(chalk_1.default.gray(' 4. Add remote: git remote add origin <your-repo-url>'));
|
|
123
|
+
console.log(chalk_1.default.gray(' 5. Push to remote: git push -u origin main'));
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
console.log(chalk_1.default.gray(' 4. Initialize as a Git repository and push to remote'));
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
console.error(chalk_1.default.red('\n❌ Error during creation:'), error);
|
|
131
|
+
process.exit(1);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
async function copyCommandTemplates(targetDir) {
|
|
135
|
+
const templatesDir = path_1.default.join(__dirname, '..', '..', 'templates', 'commands');
|
|
136
|
+
const targetCommandsDir = path_1.default.join(targetDir, '.claude', 'commands');
|
|
137
|
+
// Copy warm-up.md
|
|
138
|
+
await promises_1.default.copyFile(path_1.default.join(templatesDir, 'warm-up.md'), path_1.default.join(targetCommandsDir, 'warm-up.md'));
|
|
139
|
+
// Copy products commands
|
|
140
|
+
const productsCommands = ['collect.md', 'refine.md', 'spec.md', 'check.md'];
|
|
141
|
+
for (const cmd of productsCommands) {
|
|
142
|
+
await promises_1.default.copyFile(path_1.default.join(templatesDir, 'products', cmd), path_1.default.join(targetCommandsDir, 'products', cmd));
|
|
143
|
+
}
|
|
144
|
+
// Copy engineer commands
|
|
145
|
+
const engineerCommands = ['start.md', 'plan.md', 'work.md', 'pre-pr.md', 'pr.md'];
|
|
146
|
+
for (const cmd of engineerCommands) {
|
|
147
|
+
await promises_1.default.copyFile(path_1.default.join(templatesDir, 'engineer', cmd), path_1.default.join(targetCommandsDir, 'engineer', cmd));
|
|
148
|
+
}
|
|
149
|
+
// Copy quality commands
|
|
150
|
+
const qualityCommands = ['observe.md', 'metrics.md'];
|
|
151
|
+
for (const cmd of qualityCommands) {
|
|
152
|
+
await promises_1.default.copyFile(path_1.default.join(templatesDir, 'quality', cmd), path_1.default.join(targetCommandsDir, 'quality', cmd));
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
function generateReadme(answers) {
|
|
156
|
+
return `# ${answers.projectName}
|
|
157
|
+
|
|
158
|
+
${answers.description}
|
|
159
|
+
|
|
160
|
+
## 📚 Documentation
|
|
161
|
+
|
|
162
|
+
This orchestrator manages the Context-First development methodology for the project.
|
|
163
|
+
|
|
164
|
+
## 🏗️ Structure
|
|
165
|
+
|
|
166
|
+
\`\`\`
|
|
167
|
+
${answers.projectName}/
|
|
168
|
+
├── .claude/
|
|
169
|
+
│ └── commands/ # Command definitions for AI
|
|
170
|
+
│ ├── products/ # Product commands (collect, refine, spec, check)
|
|
171
|
+
│ ├── engineer/ # Engineering commands (start, plan, work, pre-pr, pr)
|
|
172
|
+
│ ├── quality/ # Quality commands (observe, metrics)
|
|
173
|
+
│ └── warm-up.md # Context loading command
|
|
174
|
+
├── .sessions/ # Feature session data (gitignored)
|
|
175
|
+
├── ai.properties.md # Configuration (gitignored - each dev has their own)
|
|
176
|
+
└── context-manifest.json # Repository manifest
|
|
177
|
+
\`\`\`
|
|
178
|
+
|
|
179
|
+
## ⚙️ Configuration
|
|
180
|
+
|
|
181
|
+
Edit \`ai.properties.md\` to configure:
|
|
182
|
+
- Project paths (specific to each developer)
|
|
183
|
+
- Task manager credentials (${answers.taskManager})
|
|
184
|
+
- Branch conventions
|
|
185
|
+
- Repository-specific commands
|
|
186
|
+
|
|
187
|
+
**Note**: \`ai.properties.md\` is gitignored because it contains local paths and credentials specific to each developer.
|
|
188
|
+
|
|
189
|
+
## 🚀 Usage
|
|
190
|
+
|
|
191
|
+
1. Configure \`ai.properties.md\` with your project paths
|
|
192
|
+
2. Define your repositories in \`context-manifest.json\`
|
|
193
|
+
3. Use \`context-cli\` to manage features and workspaces
|
|
194
|
+
|
|
195
|
+
## 📝 License
|
|
196
|
+
|
|
197
|
+
MIT
|
|
198
|
+
`;
|
|
199
|
+
}
|
|
200
|
+
function generateAiProperties(answers) {
|
|
201
|
+
return `# ${answers.projectName} - Orchestrator Configuration
|
|
202
|
+
|
|
203
|
+
## Paths dos Projetos
|
|
204
|
+
base_path=/path/to/your/workspace
|
|
205
|
+
meta_specs_path=/path/to/your/meta-specs
|
|
206
|
+
backend_path=/path/to/your/backend
|
|
207
|
+
frontend_path=/path/to/your/frontend
|
|
208
|
+
|
|
209
|
+
## Configuração ${answers.taskManager === 'jira' ? 'Jira' : answers.taskManager === 'linear' ? 'Linear' : 'Task Manager'}
|
|
210
|
+
task_management_system=${answers.taskManager}
|
|
211
|
+
${answers.taskManager === 'jira' ? `jira_site=https://your-org.atlassian.net
|
|
212
|
+
jira_cloud_id=your-cloud-id
|
|
213
|
+
jira_project_key=PROJ
|
|
214
|
+
jira_project_id=10000` : ''}
|
|
215
|
+
${answers.taskManager === 'linear' ? `linear_api_key=your-api-key
|
|
216
|
+
linear_team_id=your-team-id` : ''}
|
|
217
|
+
${answers.taskManager === 'github' ? `github_org=your-org
|
|
218
|
+
github_repo=your-repo` : ''}
|
|
219
|
+
|
|
220
|
+
## Convenções de Branch
|
|
221
|
+
branch_prefix=feature
|
|
222
|
+
branch_pattern=feature/{slug}
|
|
223
|
+
|
|
224
|
+
## Comandos por Repositório
|
|
225
|
+
|
|
226
|
+
### Backend
|
|
227
|
+
backend.lint_command=npm run lint
|
|
228
|
+
backend.test_unit_command=npm run test:unit
|
|
229
|
+
backend.test_integration_command=npm run test:integration
|
|
230
|
+
backend.build_command=npm run build
|
|
231
|
+
|
|
232
|
+
### Frontend
|
|
233
|
+
frontend.lint_command=npm run lint
|
|
234
|
+
frontend.test_unit_command=npm run test:unit
|
|
235
|
+
frontend.build_command=npm run build
|
|
236
|
+
`;
|
|
237
|
+
}
|
|
238
|
+
function generateManifest(answers) {
|
|
239
|
+
return {
|
|
240
|
+
version: '1.0',
|
|
241
|
+
project: answers.projectName,
|
|
242
|
+
description: answers.description,
|
|
243
|
+
repositories: [
|
|
244
|
+
{
|
|
245
|
+
id: 'metaspecs',
|
|
246
|
+
role: 'specs-provider',
|
|
247
|
+
url: answers.metaspecsUrl,
|
|
248
|
+
description: 'MetaSpecs repository with technical and business specifications',
|
|
249
|
+
},
|
|
250
|
+
{
|
|
251
|
+
id: 'backend',
|
|
252
|
+
role: 'application',
|
|
253
|
+
url: 'git@github.com:your-org/your-backend.git',
|
|
254
|
+
dependsOn: ['metaspecs'],
|
|
255
|
+
description: 'Backend application',
|
|
256
|
+
},
|
|
257
|
+
{
|
|
258
|
+
id: 'frontend',
|
|
259
|
+
role: 'application',
|
|
260
|
+
url: 'git@github.com:your-org/your-frontend.git',
|
|
261
|
+
dependsOn: ['metaspecs', 'backend'],
|
|
262
|
+
description: 'Frontend application',
|
|
263
|
+
},
|
|
264
|
+
],
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
//# sourceMappingURL=create-orchestrator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-orchestrator.js","sourceRoot":"","sources":["../../src/commands/create-orchestrator.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
const commander_1 = require("commander");
|
|
5
5
|
const init_1 = require("./commands/init");
|
|
6
|
-
const
|
|
6
|
+
const create_orchestrator_1 = require("./commands/create-orchestrator");
|
|
7
|
+
const add_repo_1 = require("./commands/add-repo");
|
|
8
|
+
const add_repo_metaspec_1 = require("./commands/add-repo-metaspec");
|
|
7
9
|
const feature_1 = require("./commands/feature");
|
|
8
10
|
const doctor_1 = require("./commands/doctor");
|
|
9
11
|
const status_1 = require("./commands/status");
|
|
@@ -18,9 +20,17 @@ program
|
|
|
18
20
|
.description('Initialize Context-First in an existing project')
|
|
19
21
|
.action(init_1.initCommand);
|
|
20
22
|
program
|
|
21
|
-
.command('
|
|
23
|
+
.command('create:orchestrator')
|
|
22
24
|
.description('Create a new orchestrator repository from a template')
|
|
23
|
-
.action(
|
|
25
|
+
.action(create_orchestrator_1.createOrchestratorCommand);
|
|
26
|
+
program
|
|
27
|
+
.command('add:repo')
|
|
28
|
+
.description('Add a new code repository to context-manifest.json')
|
|
29
|
+
.action(add_repo_1.addRepoCommand);
|
|
30
|
+
program
|
|
31
|
+
.command('add:repo-metaspec')
|
|
32
|
+
.description('Add or update the MetaSpecs repository in context-manifest.json')
|
|
33
|
+
.action(add_repo_metaspec_1.addRepoMetaspecCommand);
|
|
24
34
|
// Feature management commands
|
|
25
35
|
const feature = program.command('feature').description('Manage feature workspaces');
|
|
26
36
|
feature
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AAEpC,0CAA8C;AAC9C,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AAEpC,0CAA8C;AAC9C,wEAA2E;AAC3E,kDAAqD;AACrD,oEAAsE;AACtE,gDAAqD;AACrD,8CAAkD;AAClD,8CAAkD;AAElD,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,aAAa,CAAC;KACnB,WAAW,CAAC,8EAA8E,CAAC;KAC3F,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,iBAAiB;AACjB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,iDAAiD,CAAC;KAC9D,MAAM,CAAC,kBAAW,CAAC,CAAC;AAEvB,OAAO;KACJ,OAAO,CAAC,qBAAqB,CAAC;KAC9B,WAAW,CAAC,sDAAsD,CAAC;KACnE,MAAM,CAAC,+CAAyB,CAAC,CAAC;AAErC,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,oDAAoD,CAAC;KACjE,MAAM,CAAC,yBAAc,CAAC,CAAC;AAE1B,OAAO;KACJ,OAAO,CAAC,mBAAmB,CAAC;KAC5B,WAAW,CAAC,iEAAiE,CAAC;KAC9E,MAAM,CAAC,0CAAsB,CAAC,CAAC;AAElC,8BAA8B;AAC9B,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,2BAA2B,CAAC,CAAC;AAEpF,OAAO;KACJ,OAAO,CAAC,kBAAkB,CAAC;KAC3B,WAAW,CAAC,gCAAgC,CAAC;KAC7C,MAAM,CAAC,qBAAqB,EAAE,iDAAiD,CAAC;KAChF,MAAM,CAAC,yBAAe,CAAC,KAAK,CAAC,CAAC;AAEjC,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,oCAAoC,CAAC;KACjD,MAAM,CAAC,yBAAe,CAAC,IAAI,CAAC,CAAC;AAEhC,OAAO;KACJ,OAAO,CAAC,mBAAmB,CAAC;KAC5B,WAAW,CAAC,yCAAyC,CAAC;KACtD,MAAM,CAAC,yBAAe,CAAC,MAAM,CAAC,CAAC;AAElC,OAAO;KACJ,OAAO,CAAC,gBAAgB,CAAC;KACzB,WAAW,CAAC,oDAAoD,CAAC;KACjE,MAAM,CAAC,aAAa,EAAE,oCAAoC,CAAC;KAC3D,MAAM,CAAC,yBAAe,CAAC,GAAG,CAAC,CAAC;AAE/B,sBAAsB;AACtB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,qCAAqC,CAAC;KAClD,MAAM,CAAC,sBAAa,CAAC,CAAC;AAEzB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,+CAA+C,CAAC;KAC5D,MAAM,CAAC,sBAAa,CAAC,CAAC;AAEzB,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
|
package/package.json
CHANGED