context-first-cli 1.1.2 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,2 @@
1
+ export declare function addRepoMetaspecCommand(): Promise<void>;
2
+ //# sourceMappingURL=add-repo-metaspec.d.ts.map
@@ -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,2 @@
1
+ export declare function addRepoCommand(): Promise<void>;
2
+ //# sourceMappingURL=add-repo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-repo.d.ts","sourceRoot":"","sources":["../../src/commands/add-repo.ts"],"names":[],"mappings":"AAoBA,wBAAsB,cAAc,kBAqHnC"}
@@ -0,0 +1,119 @@
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
+ if (existingRepoIds.includes(input)) {
40
+ return `Repository ID "${input}" already exists`;
41
+ }
42
+ return true;
43
+ },
44
+ },
45
+ {
46
+ type: 'input',
47
+ name: 'url',
48
+ message: '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
+ validate: (input) => {
64
+ if (!input.trim()) {
65
+ return 'Description is required';
66
+ }
67
+ return true;
68
+ },
69
+ },
70
+ {
71
+ type: 'list',
72
+ name: 'role',
73
+ message: 'Repository role:',
74
+ choices: [
75
+ { name: 'Application (main code repository)', value: 'application' },
76
+ { name: 'Library (shared library)', value: 'library' },
77
+ { name: 'Service (microservice)', value: 'service' },
78
+ { name: 'Tool (development tool)', value: 'tool' },
79
+ { name: 'Other', value: 'other' },
80
+ ],
81
+ default: 'application',
82
+ },
83
+ {
84
+ type: 'checkbox',
85
+ name: 'dependsOn',
86
+ message: 'Dependencies (select repositories this one depends on):',
87
+ choices: existingRepoIds.map(id => ({ name: id, value: id })),
88
+ when: () => existingRepoIds.length > 0,
89
+ },
90
+ ]);
91
+ // Create new repository entry
92
+ const newRepo = {
93
+ id: answers.id,
94
+ role: answers.role,
95
+ url: answers.url,
96
+ description: answers.description,
97
+ };
98
+ if (answers.dependsOn && answers.dependsOn.length > 0) {
99
+ newRepo.dependsOn = answers.dependsOn;
100
+ }
101
+ // Add to manifest
102
+ manifest.repositories.push(newRepo);
103
+ // Write back to file
104
+ await promises_1.default.writeFile(manifestPath, JSON.stringify(manifest, null, 2), 'utf-8');
105
+ console.log(chalk_1.default.green(`\n✅ Repository "${answers.id}" added successfully!`));
106
+ console.log(chalk_1.default.blue('\n📝 Repository details:'));
107
+ console.log(chalk_1.default.gray(` ID: ${answers.id}`));
108
+ console.log(chalk_1.default.gray(` Role: ${answers.role}`));
109
+ console.log(chalk_1.default.gray(` URL: ${answers.url}`));
110
+ if (newRepo.dependsOn && newRepo.dependsOn.length > 0) {
111
+ console.log(chalk_1.default.gray(` Dependencies: ${newRepo.dependsOn.join(', ')}`));
112
+ }
113
+ }
114
+ catch (error) {
115
+ console.error(chalk_1.default.red('\n❌ Error adding repository:'), error);
116
+ process.exit(1);
117
+ }
118
+ }
119
+ //# 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,2 @@
1
+ export declare function createOrchestratorCommand(): Promise<void>;
2
+ //# sourceMappingURL=create-orchestrator.d.ts.map
@@ -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 scaffold_orchestrator_1 = require("./commands/scaffold-orchestrator");
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('scaffold:orchestrator')
23
+ .command('create:orchestrator')
22
24
  .description('Create a new orchestrator repository from a template')
23
- .action(scaffold_orchestrator_1.scaffoldOrchestratorCommand);
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,4EAA+E;AAC/E,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,uBAAuB,CAAC;KAChC,WAAW,CAAC,sDAAsD,CAAC;KACnE,MAAM,CAAC,mDAA2B,CAAC,CAAC;AAEvC,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"}
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "context-first-cli",
3
- "version": "1.1.2",
3
+ "version": "1.2.0",
4
4
  "description": "A generic CLI to manage the Context-First development methodology across any project.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",