context-first-cli 1.0.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,224 @@
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.featureCommands = void 0;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const promises_1 = __importDefault(require("fs/promises"));
10
+ const inquirer_1 = __importDefault(require("inquirer"));
11
+ const config_1 = require("../utils/config");
12
+ const git_1 = require("../utils/git");
13
+ exports.featureCommands = {
14
+ start: async (issueId, options) => {
15
+ console.log(chalk_1.default.blue.bold(`\nπŸš€ Starting feature workspace for: ${issueId}\n`));
16
+ // Find configuration
17
+ const configResult = await (0, config_1.findConfig)();
18
+ if (!configResult) {
19
+ (0, config_1.exitWithError)('No .contextrc.json found. Run "context-cli init" first.');
20
+ }
21
+ const { config, configDir } = configResult;
22
+ console.log(chalk_1.default.gray(`βœ“ Found configuration in ${configDir}`));
23
+ // Determine orchestrator path
24
+ const orchestratorPath = path_1.default.join(configDir, '.context-orchestrator');
25
+ // Clone orchestrator if needed
26
+ if (!(await (0, config_1.pathExists)(orchestratorPath))) {
27
+ console.log(chalk_1.default.blue('\nπŸ“¦ Cloning orchestrator repository...'));
28
+ try {
29
+ await (0, git_1.ensureRepoCloned)(config.orchestratorRepo, orchestratorPath);
30
+ }
31
+ catch (error) {
32
+ (0, config_1.exitWithError)(`Failed to clone orchestrator: ${error.message}`);
33
+ }
34
+ }
35
+ else {
36
+ console.log(chalk_1.default.gray('βœ“ Orchestrator repository already cloned'));
37
+ }
38
+ // Load manifest
39
+ const manifest = await (0, config_1.loadManifest)(orchestratorPath);
40
+ if (!manifest) {
41
+ (0, config_1.exitWithError)('Could not load context-manifest.json from orchestrator');
42
+ }
43
+ console.log(chalk_1.default.gray(`βœ“ Loaded manifest for project: ${manifest.project}`));
44
+ // Determine which repositories to include
45
+ let repoIds;
46
+ if (options.repos) {
47
+ repoIds = options.repos.split(',').map(r => r.trim());
48
+ }
49
+ else {
50
+ // Interactive selection
51
+ const { selectedRepos } = await inquirer_1.default.prompt([
52
+ {
53
+ type: 'checkbox',
54
+ name: 'selectedRepos',
55
+ message: 'Select repositories to include in this workspace:',
56
+ choices: manifest.repositories.map(repo => ({
57
+ name: `${repo.id} - ${repo.description}`,
58
+ value: repo.id,
59
+ checked: repo.role === 'application', // Auto-select application repos
60
+ })),
61
+ validate: (answer) => {
62
+ if (answer.length === 0) {
63
+ return 'You must select at least one repository';
64
+ }
65
+ return true;
66
+ },
67
+ },
68
+ ]);
69
+ repoIds = selectedRepos;
70
+ }
71
+ // Create workspace directory
72
+ const workspacesDir = (0, config_1.getWorkspacesDir)();
73
+ await (0, config_1.ensureDir)(workspacesDir);
74
+ const workspacePath = path_1.default.join(workspacesDir, issueId);
75
+ if (await (0, config_1.pathExists)(workspacePath)) {
76
+ (0, config_1.exitWithError)(`Workspace for ${issueId} already exists at ${workspacePath}`);
77
+ }
78
+ await (0, config_1.ensureDir)(workspacePath);
79
+ console.log(chalk_1.default.green(`\nβœ“ Created workspace directory: ${workspacePath}`));
80
+ // Ensure main repositories are cloned
81
+ console.log(chalk_1.default.blue('\nπŸ“¦ Ensuring main repositories are cloned...'));
82
+ const mainReposDir = path_1.default.join(configDir, '.context-repos');
83
+ await (0, config_1.ensureDir)(mainReposDir);
84
+ const selectedRepos = manifest.repositories.filter(repo => repoIds.includes(repo.id));
85
+ for (const repo of selectedRepos) {
86
+ const mainRepoPath = path_1.default.join(mainReposDir, repo.id);
87
+ if (!(await (0, config_1.pathExists)(mainRepoPath))) {
88
+ console.log(chalk_1.default.blue(`\n Cloning ${repo.id}...`));
89
+ try {
90
+ await (0, git_1.ensureRepoCloned)(repo.url, mainRepoPath);
91
+ }
92
+ catch (error) {
93
+ (0, config_1.exitWithError)(`Failed to clone ${repo.id}: ${error.message}`);
94
+ }
95
+ }
96
+ else {
97
+ console.log(chalk_1.default.gray(` βœ“ ${repo.id} already cloned`));
98
+ }
99
+ }
100
+ // Create worktrees
101
+ console.log(chalk_1.default.blue('\n🌳 Creating worktrees...'));
102
+ const branchName = `feature/${issueId}`;
103
+ for (const repo of selectedRepos) {
104
+ const mainRepoPath = path_1.default.join(mainReposDir, repo.id);
105
+ const worktreePath = path_1.default.join(workspacePath, repo.id);
106
+ console.log(chalk_1.default.blue(`\n Creating worktree for ${repo.id}...`));
107
+ try {
108
+ await (0, git_1.createWorktree)(mainRepoPath, worktreePath, branchName);
109
+ }
110
+ catch (error) {
111
+ console.log(chalk_1.default.yellow(` Warning: ${error.message}`));
112
+ }
113
+ }
114
+ // Save workspace metadata
115
+ const metadata = {
116
+ issueId,
117
+ repositories: repoIds,
118
+ createdAt: new Date().toISOString(),
119
+ lastUpdated: new Date().toISOString(),
120
+ status: 'active',
121
+ };
122
+ await (0, config_1.saveWorkspaceMetadata)(workspacePath, metadata);
123
+ console.log(chalk_1.default.green.bold('\nβœ… Workspace created successfully!'));
124
+ console.log(chalk_1.default.blue('\nπŸ“ Workspace location:'));
125
+ console.log(chalk_1.default.white(` ${workspacePath}`));
126
+ console.log(chalk_1.default.blue('\nπŸ’‘ Next steps:'));
127
+ console.log(chalk_1.default.gray(` cd ${workspacePath}`));
128
+ console.log(chalk_1.default.gray(' code .'));
129
+ console.log(chalk_1.default.gray(' # Start working on your feature!'));
130
+ },
131
+ list: async () => {
132
+ console.log(chalk_1.default.blue.bold('\nπŸ“‹ Active Feature Workspaces\n'));
133
+ const workspacesDir = (0, config_1.getWorkspacesDir)();
134
+ if (!(await (0, config_1.pathExists)(workspacesDir))) {
135
+ console.log(chalk_1.default.yellow('No workspaces found. Create one with "context-cli feature:start <issue-id>"'));
136
+ return;
137
+ }
138
+ const entries = await promises_1.default.readdir(workspacesDir, { withFileTypes: true });
139
+ const workspaceDirs = entries.filter(e => e.isDirectory()).map(e => e.name);
140
+ if (workspaceDirs.length === 0) {
141
+ console.log(chalk_1.default.yellow('No workspaces found.'));
142
+ return;
143
+ }
144
+ const workspaces = [];
145
+ for (const issueId of workspaceDirs) {
146
+ const workspacePath = path_1.default.join(workspacesDir, issueId);
147
+ const metadata = await (0, config_1.loadWorkspaceMetadata)(workspacePath);
148
+ workspaces.push({ issueId, metadata });
149
+ }
150
+ console.log(chalk_1.default.bold('Issue ID | Repositories | Created | Status'));
151
+ console.log(chalk_1.default.gray('─'.repeat(75)));
152
+ for (const { issueId, metadata } of workspaces) {
153
+ if (metadata) {
154
+ const repos = metadata.repositories.join(', ');
155
+ const created = new Date(metadata.createdAt).toLocaleDateString();
156
+ const status = metadata.status === 'active' ? chalk_1.default.green('active') : chalk_1.default.gray('archived');
157
+ console.log(`${chalk_1.default.cyan(issueId.padEnd(14))} | ${repos.padEnd(22)} | ${created.padEnd(14)} | ${status}`);
158
+ }
159
+ else {
160
+ console.log(`${chalk_1.default.cyan(issueId.padEnd(14))} | ${chalk_1.default.gray('(no metadata)')}`);
161
+ }
162
+ }
163
+ console.log(chalk_1.default.gray('\nπŸ’‘ Use "context-cli feature:switch <issue-id>" to switch to a workspace'));
164
+ },
165
+ switch: async (issueId) => {
166
+ const workspacesDir = (0, config_1.getWorkspacesDir)();
167
+ const workspacePath = path_1.default.join(workspacesDir, issueId);
168
+ if (!(await (0, config_1.pathExists)(workspacePath))) {
169
+ (0, config_1.exitWithError)(`Workspace for ${issueId} not found. Use "context-cli feature:list" to see available workspaces.`);
170
+ }
171
+ console.log(chalk_1.default.green(`\nβœ“ Workspace found: ${issueId}`));
172
+ console.log(chalk_1.default.blue('\nπŸ’‘ To switch to this workspace, run:'));
173
+ console.log(chalk_1.default.white(` cd ${workspacePath}`));
174
+ },
175
+ end: async (issueId, options) => {
176
+ console.log(chalk_1.default.blue.bold(`\n🧹 Ending feature workspace: ${issueId}\n`));
177
+ const workspacesDir = (0, config_1.getWorkspacesDir)();
178
+ const workspacePath = path_1.default.join(workspacesDir, issueId);
179
+ if (!(await (0, config_1.pathExists)(workspacePath))) {
180
+ (0, config_1.exitWithError)(`Workspace for ${issueId} not found.`);
181
+ }
182
+ const metadata = await (0, config_1.loadWorkspaceMetadata)(workspacePath);
183
+ if (!metadata) {
184
+ (0, config_1.exitWithError)('Could not load workspace metadata');
185
+ }
186
+ // Confirm deletion
187
+ if (!options.force) {
188
+ const { confirm } = await inquirer_1.default.prompt([
189
+ {
190
+ type: 'confirm',
191
+ name: 'confirm',
192
+ message: `Are you sure you want to end workspace ${issueId}? This will remove all worktrees.`,
193
+ default: false,
194
+ },
195
+ ]);
196
+ if (!confirm) {
197
+ console.log(chalk_1.default.yellow('βœ‹ Operation cancelled'));
198
+ return;
199
+ }
200
+ }
201
+ // Find configuration to locate main repos
202
+ const configResult = await (0, config_1.findConfig)();
203
+ if (!configResult) {
204
+ (0, config_1.exitWithError)('No .contextrc.json found');
205
+ }
206
+ const { configDir } = configResult;
207
+ const mainReposDir = path_1.default.join(configDir, '.context-repos');
208
+ // Remove worktrees
209
+ console.log(chalk_1.default.blue('🌳 Removing worktrees...'));
210
+ for (const repoId of metadata.repositories) {
211
+ const mainRepoPath = path_1.default.join(mainReposDir, repoId);
212
+ const worktreePath = path_1.default.join(workspacePath, repoId);
213
+ if (await (0, config_1.pathExists)(mainRepoPath)) {
214
+ console.log(chalk_1.default.gray(` Removing worktree for ${repoId}...`));
215
+ await (0, git_1.removeWorktree)(mainRepoPath, worktreePath);
216
+ }
217
+ }
218
+ // Remove workspace directory
219
+ console.log(chalk_1.default.blue('\nπŸ—‘οΈ Removing workspace directory...'));
220
+ await promises_1.default.rm(workspacePath, { recursive: true, force: true });
221
+ console.log(chalk_1.default.green.bold('\nβœ… Workspace ended successfully!'));
222
+ },
223
+ };
224
+ //# sourceMappingURL=feature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feature.js","sourceRoot":"","sources":["../../src/commands/feature.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function initCommand(): Promise<void>;
2
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAWA,wBAAsB,WAAW,kBA2FhC"}
@@ -0,0 +1,95 @@
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.initCommand = initCommand;
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 initCommand() {
12
+ console.log(chalk_1.default.blue.bold('\nπŸš€ Initializing Context-First in this project\n'));
13
+ try {
14
+ // Check if already initialized
15
+ const configPath = path_1.default.join(process.cwd(), '.contextrc.json');
16
+ const exists = await promises_1.default.access(configPath).then(() => true).catch(() => false);
17
+ if (exists) {
18
+ const { overwrite } = await inquirer_1.default.prompt([
19
+ {
20
+ type: 'confirm',
21
+ name: 'overwrite',
22
+ message: 'Configuration file already exists. Overwrite?',
23
+ default: false,
24
+ },
25
+ ]);
26
+ if (!overwrite) {
27
+ console.log(chalk_1.default.yellow('βœ‹ Initialization cancelled'));
28
+ return;
29
+ }
30
+ }
31
+ // Prompt for configuration
32
+ const answers = await inquirer_1.default.prompt([
33
+ {
34
+ type: 'input',
35
+ name: 'orchestratorRepo',
36
+ message: 'Git URL of your Orchestrator repository:',
37
+ validate: (input) => {
38
+ if (!input.trim()) {
39
+ return 'Orchestrator repository URL is required';
40
+ }
41
+ return true;
42
+ },
43
+ },
44
+ {
45
+ type: 'list',
46
+ name: 'aiProvider',
47
+ message: 'Which AI provider will you use?',
48
+ choices: [
49
+ { name: 'Claude', value: 'claude' },
50
+ { name: 'Cursor', value: 'cursor' },
51
+ { name: 'Custom', value: 'custom' },
52
+ ],
53
+ default: 'claude',
54
+ },
55
+ {
56
+ type: 'input',
57
+ name: 'customCommandsDir',
58
+ message: 'Custom commands directory path:',
59
+ when: (answers) => answers.aiProvider === 'custom',
60
+ default: '.ai/commands',
61
+ },
62
+ ]);
63
+ // Determine commands directory based on AI provider
64
+ let commandsDir;
65
+ if (answers.aiProvider === 'custom' && answers.customCommandsDir) {
66
+ commandsDir = answers.customCommandsDir;
67
+ }
68
+ else {
69
+ commandsDir = `.${answers.aiProvider}/commands`;
70
+ }
71
+ // Create configuration object
72
+ const config = {
73
+ orchestratorRepo: answers.orchestratorRepo,
74
+ aiProvider: answers.aiProvider,
75
+ commandsDir: commandsDir,
76
+ version: '1.0.0',
77
+ createdAt: new Date().toISOString(),
78
+ };
79
+ // Write configuration file
80
+ await promises_1.default.writeFile(configPath, JSON.stringify(config, null, 2), 'utf-8');
81
+ console.log(chalk_1.default.green('\nβœ… Configuration saved to .contextrc.json'));
82
+ console.log(chalk_1.default.gray('\nConfiguration:'));
83
+ console.log(chalk_1.default.gray(` Orchestrator: ${config.orchestratorRepo}`));
84
+ console.log(chalk_1.default.gray(` AI Provider: ${config.aiProvider}`));
85
+ console.log(chalk_1.default.gray(` Commands Directory: ${config.commandsDir}`));
86
+ console.log(chalk_1.default.blue('\nπŸ’‘ Next steps:'));
87
+ console.log(chalk_1.default.gray(' 1. Run "context-cli link" to create command delegation files'));
88
+ console.log(chalk_1.default.gray(' 2. Run "context-cli feature:start <issue-id>" to begin working on a feature'));
89
+ }
90
+ catch (error) {
91
+ console.error(chalk_1.default.red('\n❌ Error during initialization:'), error);
92
+ process.exit(1);
93
+ }
94
+ }
95
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function scaffoldOrchestratorCommand(): Promise<void>;
2
+ //# sourceMappingURL=scaffold-orchestrator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffold-orchestrator.d.ts","sourceRoot":"","sources":["../../src/commands/scaffold-orchestrator.ts"],"names":[],"mappings":"AAWA,wBAAsB,2BAA2B,kBA0FhD"}
@@ -0,0 +1,203 @@
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.scaffoldOrchestratorCommand = scaffoldOrchestratorCommand;
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 scaffoldOrchestratorCommand() {
12
+ console.log(chalk_1.default.blue.bold('\nπŸ—οΈ Scaffolding a new Orchestrator repository\n'));
13
+ try {
14
+ const answers = await inquirer_1.default.prompt([
15
+ {
16
+ type: 'input',
17
+ name: 'projectName',
18
+ message: 'Project name (will be used as directory name):',
19
+ validate: (input) => {
20
+ if (!input.trim()) {
21
+ return 'Project name is required';
22
+ }
23
+ if (!/^[a-z0-9-]+$/.test(input)) {
24
+ return 'Project name must contain only lowercase letters, numbers, and hyphens';
25
+ }
26
+ return true;
27
+ },
28
+ },
29
+ {
30
+ type: 'input',
31
+ name: 'description',
32
+ message: 'Project description:',
33
+ default: 'Orchestrator for Context-First development',
34
+ },
35
+ {
36
+ type: 'list',
37
+ name: 'taskManager',
38
+ message: 'Which task management system will you use?',
39
+ choices: [
40
+ { name: 'Jira', value: 'jira' },
41
+ { name: 'Linear', value: 'linear' },
42
+ { name: 'GitHub Issues', value: 'github' },
43
+ { name: 'None (manual)', value: 'none' },
44
+ ],
45
+ default: 'jira',
46
+ },
47
+ ]);
48
+ const targetDir = path_1.default.join(process.cwd(), answers.projectName);
49
+ // Check if directory already exists
50
+ const exists = await promises_1.default.access(targetDir).then(() => true).catch(() => false);
51
+ if (exists) {
52
+ console.log(chalk_1.default.red(`\n❌ Directory "${answers.projectName}" already exists`));
53
+ return;
54
+ }
55
+ // Create directory structure
56
+ await promises_1.default.mkdir(targetDir, { recursive: true });
57
+ await promises_1.default.mkdir(path_1.default.join(targetDir, 'commands', 'definitions', 'product'), { recursive: true });
58
+ await promises_1.default.mkdir(path_1.default.join(targetDir, 'commands', 'definitions', 'engineer'), { recursive: true });
59
+ await promises_1.default.mkdir(path_1.default.join(targetDir, 'commands', 'definitions', 'feature'), { recursive: true });
60
+ await promises_1.default.mkdir(path_1.default.join(targetDir, 'scripts', 'worktree'), { recursive: true });
61
+ await promises_1.default.mkdir(path_1.default.join(targetDir, 'sessions'), { recursive: true });
62
+ // Create README.md
63
+ const readme = generateReadme(answers);
64
+ await promises_1.default.writeFile(path_1.default.join(targetDir, 'README.md'), readme, 'utf-8');
65
+ // Create ai.properties.md template
66
+ const aiProperties = generateAiProperties(answers);
67
+ await promises_1.default.writeFile(path_1.default.join(targetDir, 'ai.properties.md'), aiProperties, 'utf-8');
68
+ // Create context-manifest.json
69
+ const manifest = generateManifest(answers);
70
+ await promises_1.default.writeFile(path_1.default.join(targetDir, 'context-manifest.json'), JSON.stringify(manifest, null, 2), 'utf-8');
71
+ // Create .gitignore
72
+ const gitignore = `node_modules/\n.env\n.ia.env\nsessions/*/\n*.log\n`;
73
+ await promises_1.default.writeFile(path_1.default.join(targetDir, '.gitignore'), gitignore, 'utf-8');
74
+ console.log(chalk_1.default.green(`\nβœ… Orchestrator scaffolded successfully at: ${targetDir}`));
75
+ console.log(chalk_1.default.blue('\nπŸ“ Structure created:'));
76
+ console.log(chalk_1.default.gray(' commands/definitions/ - Command definitions for AI'));
77
+ console.log(chalk_1.default.gray(' scripts/worktree/ - Worktree management scripts'));
78
+ console.log(chalk_1.default.gray(' sessions/ - Feature session data'));
79
+ console.log(chalk_1.default.gray(' ai.properties.md - Configuration template'));
80
+ console.log(chalk_1.default.gray(' context-manifest.json - Repository manifest'));
81
+ console.log(chalk_1.default.blue('\nπŸ’‘ Next steps:'));
82
+ console.log(chalk_1.default.gray(` 1. cd ${answers.projectName}`));
83
+ console.log(chalk_1.default.gray(' 2. Edit ai.properties.md with your project paths'));
84
+ console.log(chalk_1.default.gray(' 3. Edit context-manifest.json to define your repositories'));
85
+ console.log(chalk_1.default.gray(' 4. Initialize as a Git repository and push to remote'));
86
+ }
87
+ catch (error) {
88
+ console.error(chalk_1.default.red('\n❌ Error during scaffolding:'), error);
89
+ process.exit(1);
90
+ }
91
+ }
92
+ function generateReadme(answers) {
93
+ return `# ${answers.projectName}
94
+
95
+ ${answers.description}
96
+
97
+ ## πŸ“š Documentation
98
+
99
+ This orchestrator manages the Context-First development methodology for the project.
100
+
101
+ ## πŸ—οΈ Structure
102
+
103
+ \`\`\`
104
+ ${answers.projectName}/
105
+ β”œβ”€β”€ commands/
106
+ β”‚ └── definitions/ # Command definitions for AI
107
+ β”‚ β”œβ”€β”€ product/ # Product commands
108
+ β”‚ β”œβ”€β”€ engineer/ # Engineering commands
109
+ β”‚ └── feature/ # Feature management commands
110
+ β”œβ”€β”€ scripts/
111
+ β”‚ └── worktree/ # Worktree management scripts
112
+ β”œβ”€β”€ sessions/ # Feature session data
113
+ β”œβ”€β”€ ai.properties.md # Configuration
114
+ └── context-manifest.json # Repository manifest
115
+ \`\`\`
116
+
117
+ ## βš™οΈ Configuration
118
+
119
+ Edit \`ai.properties.md\` to configure:
120
+ - Project paths
121
+ - Task manager credentials (${answers.taskManager})
122
+ - Branch conventions
123
+ - Repository-specific commands
124
+
125
+ ## πŸš€ Usage
126
+
127
+ 1. Configure \`ai.properties.md\` with your project paths
128
+ 2. Define your repositories in \`context-manifest.json\`
129
+ 3. Use \`context-cli\` to manage features and workspaces
130
+
131
+ ## πŸ“ License
132
+
133
+ MIT
134
+ `;
135
+ }
136
+ function generateAiProperties(answers) {
137
+ return `# ${answers.projectName} - Orchestrator Configuration
138
+
139
+ ## Paths dos Projetos
140
+ base_path=/path/to/your/workspace
141
+ meta_specs_path=/path/to/your/meta-specs
142
+ backend_path=/path/to/your/backend
143
+ frontend_path=/path/to/your/frontend
144
+
145
+ ## ConfiguraΓ§Γ£o ${answers.taskManager === 'jira' ? 'Jira' : answers.taskManager === 'linear' ? 'Linear' : 'Task Manager'}
146
+ task_management_system=${answers.taskManager}
147
+ ${answers.taskManager === 'jira' ? `jira_site=https://your-org.atlassian.net
148
+ jira_cloud_id=your-cloud-id
149
+ jira_project_key=PROJ
150
+ jira_project_id=10000` : ''}
151
+ ${answers.taskManager === 'linear' ? `linear_api_key=your-api-key
152
+ linear_team_id=your-team-id` : ''}
153
+ ${answers.taskManager === 'github' ? `github_org=your-org
154
+ github_repo=your-repo` : ''}
155
+
156
+ ## ConvenΓ§Γ΅es de Branch
157
+ branch_prefix=feature
158
+ branch_pattern=feature/{slug}
159
+
160
+ ## Comandos por RepositΓ³rio
161
+
162
+ ### Backend
163
+ backend.lint_command=npm run lint
164
+ backend.test_unit_command=npm run test:unit
165
+ backend.test_integration_command=npm run test:integration
166
+ backend.build_command=npm run build
167
+
168
+ ### Frontend
169
+ frontend.lint_command=npm run lint
170
+ frontend.test_unit_command=npm run test:unit
171
+ frontend.build_command=npm run build
172
+ `;
173
+ }
174
+ function generateManifest(answers) {
175
+ return {
176
+ version: '1.0',
177
+ project: answers.projectName,
178
+ description: answers.description,
179
+ repositories: [
180
+ {
181
+ id: 'metaspecs',
182
+ role: 'specs-provider',
183
+ url: 'git@github.com:your-org/your-metaspecs.git',
184
+ description: 'MetaSpecs repository with technical and business specifications',
185
+ },
186
+ {
187
+ id: 'backend',
188
+ role: 'application',
189
+ url: 'git@github.com:your-org/your-backend.git',
190
+ dependsOn: ['metaspecs'],
191
+ description: 'Backend application',
192
+ },
193
+ {
194
+ id: 'frontend',
195
+ role: 'application',
196
+ url: 'git@github.com:your-org/your-frontend.git',
197
+ dependsOn: ['metaspecs', 'backend'],
198
+ description: 'Frontend application',
199
+ },
200
+ ],
201
+ };
202
+ }
203
+ //# sourceMappingURL=scaffold-orchestrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffold-orchestrator.js","sourceRoot":"","sources":["../../src/commands/scaffold-orchestrator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function statusCommand(): Promise<void>;
2
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAUA,wBAAsB,aAAa,kBAuClC"}