cortex-tms 2.1.1 → 2.3.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.
Files changed (39) hide show
  1. package/README.md +1 -1
  2. package/dist/__tests__/validate.test.js +2 -0
  3. package/dist/__tests__/validate.test.js.map +1 -1
  4. package/dist/cli.js +2 -0
  5. package/dist/cli.js.map +1 -1
  6. package/dist/commands/init.d.ts.map +1 -1
  7. package/dist/commands/init.js +97 -25
  8. package/dist/commands/init.js.map +1 -1
  9. package/dist/commands/status.d.ts +4 -0
  10. package/dist/commands/status.d.ts.map +1 -0
  11. package/dist/commands/status.js +99 -0
  12. package/dist/commands/status.js.map +1 -0
  13. package/dist/commands/validate.d.ts.map +1 -1
  14. package/dist/commands/validate.js +39 -0
  15. package/dist/commands/validate.js.map +1 -1
  16. package/dist/types/cli.d.ts +6 -1
  17. package/dist/types/cli.d.ts.map +1 -1
  18. package/dist/utils/config.d.ts +1 -1
  19. package/dist/utils/config.d.ts.map +1 -1
  20. package/dist/utils/config.js +10 -1
  21. package/dist/utils/config.js.map +1 -1
  22. package/dist/utils/prompts.d.ts.map +1 -1
  23. package/dist/utils/prompts.js +54 -1
  24. package/dist/utils/prompts.js.map +1 -1
  25. package/dist/utils/status.d.ts +21 -0
  26. package/dist/utils/status.d.ts.map +1 -0
  27. package/dist/utils/status.js +86 -0
  28. package/dist/utils/status.js.map +1 -0
  29. package/dist/utils/templates.d.ts +10 -1
  30. package/dist/utils/templates.d.ts.map +1 -1
  31. package/dist/utils/templates.js +102 -11
  32. package/dist/utils/templates.js.map +1 -1
  33. package/dist/utils/validator.d.ts +1 -0
  34. package/dist/utils/validator.d.ts.map +1 -1
  35. package/dist/utils/validator.js +54 -3
  36. package/dist/utils/validator.js.map +1 -1
  37. package/package.json +1 -1
  38. package/templates/docs/core/ARCHITECTURE.md +51 -1
  39. package/templates/vscode/tms.code-snippets +225 -0
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,UAAU,EACX,MAAM,iBAAiB,CAAC;AAKzB,eAAO,MAAM,cAAc,UAAU,CAAC;AAqBtC,eAAO,MAAM,cAAc,EAAE,YAa5B,CAAC;AAKF,eAAO,MAAM,aAAa,EAAE,WAAW,EA6DtC,CAAC;AAKF,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEjD;AAKD,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAE9C;AAKD,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAwB1E;AAKD,wBAAgB,WAAW,CACzB,UAAU,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI,GACvC,YAAY,CA4Bd;AAKD,wBAAsB,UAAU,CAC9B,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,IAAI,CAAC,CAWf;AAKD,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,YAAY,EACnB,WAAW,CAAC,EAAE,MAAM,GACnB,YAAY,CAuBd;AAKD,wBAAgB,cAAc,CAAC,KAAK,EAAE,YAAY,GAAG,WAAW,GAAG,SAAS,CAE3E;AAKD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,YAAY,GAAG,UAAU,CASvE"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,UAAU,EACX,MAAM,iBAAiB,CAAC;AAKzB,eAAO,MAAM,cAAc,UAAU,CAAC;AAqBtC,eAAO,MAAM,cAAc,EAAE,YAa5B,CAAC;AAKF,eAAO,MAAM,aAAa,EAAE,WAAW,EAqEtC,CAAC;AAKF,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEjD;AAKD,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAE9C;AAKD,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAwB1E;AAKD,wBAAgB,WAAW,CACzB,UAAU,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI,GACvC,YAAY,CA4Bd;AAKD,wBAAsB,UAAU,CAC9B,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,IAAI,CAAC,CAWf;AAKD,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,YAAY,EACnB,WAAW,CAAC,EAAE,MAAM,EACpB,WAAW,CAAC,EAAE,MAAM,EAAE,GACrB,YAAY,CAwBd;AAKD,wBAAgB,cAAc,CAAC,KAAK,EAAE,YAAY,GAAG,WAAW,GAAG,SAAS,CAE3E;AAKD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,YAAY,GAAG,UAAU,CASvE"}
@@ -88,6 +88,14 @@ export const SCOPE_PRESETS = [
88
88
  'TROUBLESHOOTING.md': 600,
89
89
  },
90
90
  },
91
+ {
92
+ name: 'custom',
93
+ displayName: 'Custom',
94
+ description: 'Choose specific files to include (advanced)',
95
+ mandatoryFiles: [],
96
+ optionalFiles: [],
97
+ lineLimits: DEFAULT_LINE_LIMITS,
98
+ },
91
99
  ];
92
100
  export function getConfigPath(cwd) {
93
101
  return join(cwd, '.cortexrc');
@@ -150,7 +158,7 @@ export async function saveConfig(cwd, config) {
150
158
  throw new Error(`Failed to write .cortexrc: ${error instanceof Error ? error.message : 'Unknown error'}`);
151
159
  }
152
160
  }
153
- export function createConfigFromScope(scope, projectName) {
161
+ export function createConfigFromScope(scope, projectName, customFiles) {
154
162
  const preset = SCOPE_PRESETS.find((p) => p.name === scope);
155
163
  if (!preset) {
156
164
  throw new Error(`Unknown scope: ${scope}`);
@@ -166,6 +174,7 @@ export function createConfigFromScope(scope, projectName) {
166
174
  config.metadata = {
167
175
  created: new Date().toISOString(),
168
176
  projectName,
177
+ ...(scope === 'custom' && customFiles && { customFiles }),
169
178
  };
170
179
  }
171
180
  return config;
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/utils/prompts.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAWzE,wBAAsB,cAAc,CAClC,OAAO,EAAE,cAAc,EACvB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,iBAAiB,CAAC,CAqD5B;AAQD,wBAAgB,eAAe,CAC7B,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,cAAc,GACtB,IAAI,CA2BN;AAOD,wBAAsB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAWpD"}
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/utils/prompts.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AA4BzE,wBAAsB,cAAc,CAClC,OAAO,EAAE,cAAc,EACvB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,iBAAiB,CAAC,CA+F5B;AAQD,wBAAgB,eAAe,CAC7B,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,cAAc,GACtB,IAAI,CAqCN;AAOD,wBAAsB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAWpD"}
@@ -1,6 +1,19 @@
1
1
  import inquirer from 'inquirer';
2
2
  import { getDefaultProjectName } from './detection.js';
3
3
  import { SCOPE_PRESETS } from './config.js';
4
+ const AVAILABLE_TEMPLATES = [
5
+ { value: 'NEXT-TASKS.md', name: 'NEXT-TASKS.md - Active sprint tasks (mandatory)' },
6
+ { value: 'CLAUDE.md', name: 'CLAUDE.md - Agent workflow config (mandatory)' },
7
+ { value: '.github/copilot-instructions.md', name: '.github/copilot-instructions.md - AI rules (recommended)' },
8
+ { value: 'FUTURE-ENHANCEMENTS.md', name: 'FUTURE-ENHANCEMENTS.md - Backlog & ideas' },
9
+ { value: 'docs/core/ARCHITECTURE.md', name: 'ARCHITECTURE.md - System design' },
10
+ { value: 'docs/core/PATTERNS.md', name: 'PATTERNS.md - Code conventions' },
11
+ { value: 'docs/core/DOMAIN-LOGIC.md', name: 'DOMAIN-LOGIC.md - Business rules' },
12
+ { value: 'docs/core/DECISIONS.md', name: 'DECISIONS.md - Architecture decisions' },
13
+ { value: 'docs/core/GLOSSARY.md', name: 'GLOSSARY.md - Project terminology' },
14
+ { value: 'docs/core/SCHEMA.md', name: 'SCHEMA.md - Data models' },
15
+ { value: 'docs/core/TROUBLESHOOTING.md', name: 'TROUBLESHOOTING.md - Common issues' },
16
+ ];
4
17
  export async function runInitPrompts(context, cwd) {
5
18
  const defaultName = getDefaultProjectName(cwd);
6
19
  const answers = (await inquirer.prompt([
@@ -36,6 +49,37 @@ export async function runInitPrompts(context, cwd) {
36
49
  default: 'standard',
37
50
  },
38
51
  ]));
52
+ if (answers.scope === 'custom') {
53
+ const { customFiles } = await inquirer.prompt({
54
+ type: 'checkbox',
55
+ name: 'customFiles',
56
+ message: 'Select files to include (use space to select, enter to confirm):',
57
+ choices: AVAILABLE_TEMPLATES,
58
+ default: ['NEXT-TASKS.md', 'CLAUDE.md', '.github/copilot-instructions.md'],
59
+ validate: (input) => {
60
+ if (!input.includes('NEXT-TASKS.md')) {
61
+ return 'You must include NEXT-TASKS.md (mandatory for TMS)';
62
+ }
63
+ if (input.length === 0) {
64
+ return 'You must select at least one file';
65
+ }
66
+ return true;
67
+ },
68
+ });
69
+ answers.customFiles = customFiles;
70
+ }
71
+ const shouldOfferSnippets = answers.scope === 'standard' ||
72
+ answers.scope === 'enterprise' ||
73
+ (answers.scope === 'custom' && (answers.customFiles?.length ?? 0) >= 3);
74
+ if (shouldOfferSnippets) {
75
+ const { installSnippets } = await inquirer.prompt({
76
+ type: 'confirm',
77
+ name: 'installSnippets',
78
+ message: 'Install VS Code snippet library for TMS documentation? (Recommended)',
79
+ default: true,
80
+ });
81
+ answers.installSnippets = installSnippets;
82
+ }
39
83
  if (context.existingFiles.length > 0) {
40
84
  const { overwrite } = await inquirer.prompt([
41
85
  {
@@ -56,13 +100,22 @@ export function showInitSummary(answers, context) {
56
100
  if (answers.description) {
57
101
  console.log(` Description: ${answers.description}`);
58
102
  }
59
- console.log(` Scope: ${preset?.displayName || answers.scope} (${preset?.mandatoryFiles.length || 0} mandatory files)`);
103
+ if (answers.scope === 'custom' && answers.customFiles) {
104
+ console.log(` Scope: ${preset?.displayName || answers.scope} (${answers.customFiles.length} files selected)`);
105
+ console.log(` Files: ${answers.customFiles.join(', ')}`);
106
+ }
107
+ else {
108
+ console.log(` Scope: ${preset?.displayName || answers.scope} (${(preset?.mandatoryFiles.length || 0) + (preset?.optionalFiles.length || 0)} files)`);
109
+ }
60
110
  if (context.isGitRepo) {
61
111
  console.log(` Git: Repository detected āœ“`);
62
112
  }
63
113
  if (context.hasPackageJson) {
64
114
  console.log(` Package Manager: ${context.packageManager !== 'unknown' ? context.packageManager : 'npm (default)'}`);
65
115
  }
116
+ if (answers.installSnippets) {
117
+ console.log(` VS Code Snippets: Will install to .vscode/`);
118
+ }
66
119
  if (answers.overwrite) {
67
120
  console.log(` āš ļø Will overwrite ${context.existingFiles.length} existing files`);
68
121
  }
@@ -1 +1 @@
1
- {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/utils/prompts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/utils/prompts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { CortexConfig } from '../types/cli.js';
2
+ export interface SprintInfo {
3
+ name: string;
4
+ description: string;
5
+ totalTasks: number;
6
+ completedTasks: number;
7
+ inProgressTasks: number;
8
+ todoTasks: number;
9
+ }
10
+ export interface ProjectStatus {
11
+ projectName: string;
12
+ scope: string;
13
+ sprint: SprintInfo | null;
14
+ backlogSize: number;
15
+ config: CortexConfig | null;
16
+ }
17
+ export declare function parseSprintInfo(content: string): SprintInfo | null;
18
+ export declare function countBacklogItems(content: string): number;
19
+ export declare function calculateProgress(sprint: SprintInfo): number;
20
+ export declare function getProjectStatus(cwd: string): Promise<ProjectStatus>;
21
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/utils/status.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAMpD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;CACnB;AAKD,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC;CAC7B;AAaD,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CA8ClE;AAUD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAKzD;AAQD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAK5D;AAWD,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CA2C1E"}
@@ -0,0 +1,86 @@
1
+ import { readFile } from 'fs/promises';
2
+ import { existsSync } from 'fs';
3
+ import { join } from 'path';
4
+ import { loadConfig } from './config.js';
5
+ export function parseSprintInfo(content) {
6
+ const sprintMatch = content.match(/##\s+Active Sprint:\s*(.+?)(?:\n|$)/i);
7
+ if (!sprintMatch) {
8
+ return null;
9
+ }
10
+ const sprintName = sprintMatch[1]?.trim() || '';
11
+ const descMatch = content.match(/\*\*Why this matters\*\*:\s*(.+?)(?:\n|$)/i);
12
+ const description = descMatch?.[1]?.trim() || '';
13
+ const taskLines = content.match(/\|[^|]*\|[^|]*\|[^|]*\|[^|]*\|[^|]*\|/g) || [];
14
+ const dataRows = taskLines.filter((line) => !line.includes('Task') && !line.includes('---'));
15
+ let completedTasks = 0;
16
+ let inProgressTasks = 0;
17
+ let todoTasks = 0;
18
+ for (const row of dataRows) {
19
+ if (row.includes('āœ… Done')) {
20
+ completedTasks++;
21
+ }
22
+ else if (row.includes('šŸ”„ In Progress')) {
23
+ inProgressTasks++;
24
+ }
25
+ else if (row.includes('⬜ Todo')) {
26
+ todoTasks++;
27
+ }
28
+ }
29
+ const totalTasks = completedTasks + inProgressTasks + todoTasks;
30
+ return {
31
+ name: sprintName,
32
+ description,
33
+ totalTasks,
34
+ completedTasks,
35
+ inProgressTasks,
36
+ todoTasks,
37
+ };
38
+ }
39
+ export function countBacklogItems(content) {
40
+ const itemMatches = content.match(/^- \*\*.+?\*\*:/gm) || [];
41
+ return itemMatches.length;
42
+ }
43
+ export function calculateProgress(sprint) {
44
+ if (sprint.totalTasks === 0) {
45
+ return 0;
46
+ }
47
+ return Math.round((sprint.completedTasks / sprint.totalTasks) * 100);
48
+ }
49
+ export async function getProjectStatus(cwd) {
50
+ let config = null;
51
+ try {
52
+ config = await loadConfig(cwd);
53
+ }
54
+ catch {
55
+ }
56
+ const projectName = config?.metadata?.projectName || 'Unknown Project';
57
+ const scope = config?.scope || 'unknown';
58
+ let sprint = null;
59
+ const tasksPath = join(cwd, 'NEXT-TASKS.md');
60
+ if (existsSync(tasksPath)) {
61
+ try {
62
+ const tasksContent = await readFile(tasksPath, 'utf-8');
63
+ sprint = parseSprintInfo(tasksContent);
64
+ }
65
+ catch {
66
+ }
67
+ }
68
+ let backlogSize = 0;
69
+ const backlogPath = join(cwd, 'FUTURE-ENHANCEMENTS.md');
70
+ if (existsSync(backlogPath)) {
71
+ try {
72
+ const backlogContent = await readFile(backlogPath, 'utf-8');
73
+ backlogSize = countBacklogItems(backlogContent);
74
+ }
75
+ catch {
76
+ }
77
+ }
78
+ return {
79
+ projectName,
80
+ scope,
81
+ sprint,
82
+ backlogSize,
83
+ config,
84
+ };
85
+ }
86
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/utils/status.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,23 @@
1
1
  import type { TemplateFile } from '../types/cli.js';
2
+ export type FileStatus = 'CREATE' | 'UPDATE' | 'SKIP' | 'CONFLICT';
3
+ export interface FileChange {
4
+ path: string;
5
+ status: FileStatus;
6
+ reason?: string;
7
+ }
2
8
  export declare function getTemplatesDir(): string;
3
9
  export declare function replacePlaceholders(content: string, replacements: Record<string, string>): string;
4
10
  export declare function processTemplate(sourcePath: string, destPath: string, replacements: Record<string, string>): Promise<void>;
5
11
  export declare function getTemplateFiles(templatesDir: string): Promise<TemplateFile[]>;
6
12
  export declare function copyTemplates(templatesDir: string, destDir: string, replacements: Record<string, string>, options?: {
7
13
  overwrite?: boolean;
8
- scope?: 'nano' | 'standard' | 'enterprise';
14
+ scope?: 'nano' | 'standard' | 'enterprise' | 'custom';
15
+ customFiles?: string[];
16
+ dryRun?: boolean;
9
17
  }): Promise<{
10
18
  copied: number;
11
19
  skipped: number;
20
+ changes?: FileChange[];
12
21
  }>;
13
22
  export declare function generateReplacements(projectName: string, description?: string): Record<string, string>;
14
23
  //# sourceMappingURL=templates.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/utils/templates.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AASpD,wBAAgB,eAAe,IAAI,MAAM,CAGxC;AAcD,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACnC,MAAM,CAUR;AASD,wBAAsB,eAAe,CACnC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACnC,OAAO,CAAC,IAAI,CAAC,CAYf;AAQD,wBAAsB,gBAAgB,CACpC,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,YAAY,EAAE,CAAC,CA2CzB;AAUD,wBAAsB,aAAa,CACjC,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACpC,OAAO,GAAE;IACP,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,YAAY,CAAC;CACvC,GACL,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CA4C9C;AASD,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,MAAM,GACnB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAaxB"}
1
+ {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/utils/templates.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AASpD,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;AAKnE,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAKD,wBAAgB,eAAe,IAAI,MAAM,CAGxC;AAcD,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACnC,MAAM,CAUR;AASD,wBAAsB,eAAe,CACnC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACnC,OAAO,CAAC,IAAI,CAAC,CAYf;AAQD,wBAAsB,gBAAgB,CACpC,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,YAAY,EAAE,CAAC,CA2CzB;AAUD,wBAAsB,aAAa,CACjC,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACpC,OAAO,GAAE;IACP,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,YAAY,GAAG,QAAQ,CAAC;IACtD,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC;CACb,GACL,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,UAAU,EAAE,CAAA;CAAE,CAAC,CAkGtE;AAgFD,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,MAAM,GACnB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAaxB"}
@@ -2,6 +2,7 @@ import fs from 'fs-extra';
2
2
  import { join, relative } from 'path';
3
3
  import { fileURLToPath } from 'url';
4
4
  import { dirname } from 'path';
5
+ import chalk from 'chalk';
5
6
  import { getScopePreset } from './config.js';
6
7
  const __filename = fileURLToPath(import.meta.url);
7
8
  const __dirname = dirname(__filename);
@@ -57,13 +58,19 @@ export async function getTemplateFiles(templatesDir) {
57
58
  return files;
58
59
  }
59
60
  export async function copyTemplates(templatesDir, destDir, replacements, options = {}) {
60
- const { overwrite = false, scope = 'standard' } = options;
61
+ const { overwrite = false, scope = 'standard', customFiles, dryRun = false } = options;
61
62
  const allFiles = await getTemplateFiles(templatesDir);
62
- const preset = getScopePreset(scope);
63
- if (!preset) {
64
- throw new Error(`Unknown scope: ${scope}`);
63
+ let allowedFiles;
64
+ if (scope === 'custom' && customFiles) {
65
+ allowedFiles = customFiles;
66
+ }
67
+ else {
68
+ const preset = getScopePreset(scope);
69
+ if (!preset) {
70
+ throw new Error(`Unknown scope: ${scope}`);
71
+ }
72
+ allowedFiles = [...preset.mandatoryFiles, ...preset.optionalFiles];
65
73
  }
66
- const allowedFiles = [...preset.mandatoryFiles, ...preset.optionalFiles];
67
74
  const filesToCopy = allFiles.filter((f) => {
68
75
  if (f.category === 'example') {
69
76
  return false;
@@ -72,16 +79,100 @@ export async function copyTemplates(templatesDir, destDir, replacements, options
72
79
  });
73
80
  let copied = 0;
74
81
  let skipped = 0;
82
+ const changes = [];
75
83
  for (const file of filesToCopy) {
76
84
  const destPath = join(destDir, file.destination);
77
- if (!overwrite && (await fs.pathExists(destPath))) {
78
- skipped++;
79
- continue;
85
+ const exists = await fs.pathExists(destPath);
86
+ if (dryRun) {
87
+ if (!exists) {
88
+ changes.push({
89
+ path: file.destination,
90
+ status: 'CREATE',
91
+ });
92
+ copied++;
93
+ }
94
+ else if (overwrite) {
95
+ const existingContent = await fs.readFile(destPath, 'utf-8');
96
+ const templateContent = await fs.readFile(file.source, 'utf-8');
97
+ const processedContent = replacePlaceholders(templateContent, replacements);
98
+ if (existingContent !== processedContent) {
99
+ changes.push({
100
+ path: file.destination,
101
+ status: 'UPDATE',
102
+ reason: 'Content differs from template',
103
+ });
104
+ copied++;
105
+ }
106
+ else {
107
+ changes.push({
108
+ path: file.destination,
109
+ status: 'SKIP',
110
+ reason: 'Already up to date',
111
+ });
112
+ skipped++;
113
+ }
114
+ }
115
+ else {
116
+ changes.push({
117
+ path: file.destination,
118
+ status: 'CONFLICT',
119
+ reason: 'File exists (use --force to overwrite)',
120
+ });
121
+ skipped++;
122
+ }
80
123
  }
81
- await processTemplate(file.source, destPath, replacements);
82
- copied++;
124
+ else {
125
+ if (!overwrite && exists) {
126
+ skipped++;
127
+ continue;
128
+ }
129
+ await processTemplate(file.source, destPath, replacements);
130
+ copied++;
131
+ }
132
+ }
133
+ if (dryRun && changes.length > 0) {
134
+ printImpactReport(changes);
135
+ }
136
+ return { copied, skipped, ...(dryRun && { changes }) };
137
+ }
138
+ function printImpactReport(changes) {
139
+ console.log(chalk.bold('\nšŸ“‹ IMPACT ANALYSIS:\n'));
140
+ const byStatus = {
141
+ CREATE: [],
142
+ UPDATE: [],
143
+ SKIP: [],
144
+ CONFLICT: [],
145
+ };
146
+ changes.forEach((change) => {
147
+ byStatus[change.status].push(change);
148
+ });
149
+ const statusConfig = {
150
+ CREATE: { icon: '✨', color: chalk.green, label: 'CREATE' },
151
+ UPDATE: { icon: 'šŸ”„', color: chalk.blue, label: 'UPDATE' },
152
+ CONFLICT: { icon: 'āš ļø ', color: chalk.yellow, label: 'CONFLICT' },
153
+ SKIP: { icon: 'ā­ļø ', color: chalk.gray, label: 'SKIP' },
154
+ };
155
+ for (const status of ['CREATE', 'UPDATE', 'CONFLICT', 'SKIP']) {
156
+ const items = byStatus[status];
157
+ if (items.length === 0)
158
+ continue;
159
+ const config = statusConfig[status];
160
+ console.log(config.color.bold(`${config.icon} ${config.label} (${items.length}):`));
161
+ items.forEach((item) => {
162
+ const reasonText = item.reason ? chalk.gray(` - ${item.reason}`) : '';
163
+ console.log(` ${config.color(item.path)}${reasonText}`);
164
+ });
165
+ console.log();
166
+ }
167
+ const conflicts = byStatus.CONFLICT.length;
168
+ const updates = byStatus.UPDATE.length;
169
+ if (conflicts > 0) {
170
+ console.log(chalk.yellow.bold('āš ļø WARNING:'), chalk.yellow(`${conflicts} file(s) will be skipped due to conflicts. Use --force to overwrite.`));
171
+ }
172
+ if (updates > 0) {
173
+ console.log(chalk.blue.bold('ā„¹ļø INFO:'), chalk.blue(`${updates} file(s) will be updated with new template content. Review changes carefully.`));
83
174
  }
84
- return { copied, skipped };
175
+ console.log(chalk.gray('\nšŸ’” Tip: Run without --dry-run to apply these changes.'));
85
176
  }
86
177
  export function generateReplacements(projectName, description) {
87
178
  const kebabName = projectName
@@ -1 +1 @@
1
- {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/utils/templates.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAKtC,MAAM,UAAU,eAAe;IAE7B,OAAO,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;AAC5C,CAAC;AAcD,MAAM,UAAU,mBAAmB,CACjC,OAAe,EACf,YAAoC;IAEpC,IAAI,MAAM,GAAG,OAAO,CAAC;IAErB,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QAEpD,MAAM,WAAW,GAAG,IAAI,GAAG,GAAG,CAAC;QAC/B,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AASD,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,UAAkB,EAClB,QAAgB,EAChB,YAAoC;IAGpC,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAGvD,MAAM,SAAS,GAAG,mBAAmB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAG7D,MAAM,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAGtC,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AACnD,CAAC;AAQD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,YAAoB;IAEpB,MAAM,KAAK,GAAmB,EAAE,CAAC;IAEjC,KAAK,UAAU,IAAI,CAAC,GAAW,EAAE,OAAe;QAC9C,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAE/D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAEvC,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBAExB,MAAM,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAChC,CAAC;iBAAM,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;gBAE1B,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;gBAGjD,IAAI,QAAQ,GAA6B,MAAM,CAAC;gBAChD,IAAI,YAAY,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;oBACvC,QAAQ,GAAG,UAAU,CAAC;gBACxB,CAAC;qBAAM,IAAI,YAAY,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;oBAC/C,QAAQ,GAAG,SAAS,CAAC;gBACvB,CAAC;gBAGD,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBACrD,MAAM,eAAe,GACnB,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC;oBAClC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC;oBAClC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;gBAEpC,KAAK,CAAC,IAAI,CAAC;oBACT,MAAM,EAAE,QAAQ;oBAChB,WAAW,EAAE,YAAY;oBACzB,eAAe;oBACf,QAAQ;iBACT,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;IACvC,OAAO,KAAK,CAAC;AACf,CAAC;AAUD,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,YAAoB,EACpB,OAAe,EACf,YAAoC,EACpC,UAGI,EAAE;IAEN,MAAM,EAAE,SAAS,GAAG,KAAK,EAAE,KAAK,GAAG,UAAU,EAAE,GAAG,OAAO,CAAC;IAE1D,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,YAAY,CAAC,CAAC;IAGtD,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IAErC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,kBAAkB,KAAK,EAAE,CAAC,CAAC;IAC7C,CAAC;IAGD,MAAM,YAAY,GAAG,CAAC,GAAG,MAAM,CAAC,cAAc,EAAE,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;IAGzE,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QAExC,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC7B,OAAO,KAAK,CAAC;QACf,CAAC;QAGD,OAAO,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAGjD,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;YAClD,OAAO,EAAE,CAAC;YACV,SAAS;QACX,CAAC;QAGD,MAAM,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;QAC3D,MAAM,EAAE,CAAC;IACX,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAC7B,CAAC;AASD,MAAM,UAAU,oBAAoB,CAClC,WAAmB,EACnB,WAAoB;IAGpB,MAAM,SAAS,GAAG,WAAW;SAC1B,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAEzB,OAAO;QACL,cAAc,EAAE,WAAW;QAC3B,cAAc,EAAE,SAAS;QACzB,WAAW,EAAE,WAAW,IAAI,iCAAiC;KAC9D,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/utils/templates.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ export declare const DEFAULT_LINE_LIMITS: LineLimits;
3
3
  export declare const MANDATORY_FILES: MandatoryFile[];
4
4
  export declare function validateFileSizes(cwd: string, limits?: LineLimits): Promise<ValidationCheck[]>;
5
5
  export declare function validateMandatoryFiles(cwd: string): ValidationCheck[];
6
+ export declare function validateConfig(cwd: string): ValidationCheck[];
6
7
  export declare function validatePlaceholders(cwd: string, ignoreFiles?: string[]): Promise<ValidationCheck[]>;
7
8
  export declare function validateArchiveStatus(cwd: string): Promise<ValidationCheck[]>;
8
9
  export declare function validateProject(cwd: string, options?: {
@@ -1 +1 @@
1
- {"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../src/utils/validator.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EAChB,UAAU,EACV,aAAa,EACd,MAAM,iBAAiB,CAAC;AAWzB,eAAO,MAAM,mBAAmB,EAAE,UAUjC,CAAC;AAKF,eAAO,MAAM,eAAe,EAAE,aAAa,EAI1C,CAAC;AA2EF,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,UAAgC,GACvC,OAAO,CAAC,eAAe,EAAE,CAAC,CAkC5B;AAKD,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,EAAE,CAmBrE;AAKD,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,MAAM,EACX,WAAW,GAAE,MAAM,EAAO,GACzB,OAAO,CAAC,eAAe,EAAE,CAAC,CAiD5B;AAKD,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAoDnF;AAKD,wBAAsB,eAAe,CACnC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,UAAU,CAAA;CAAO,GACtD,OAAO,CAAC,gBAAgB,CAAC,CA+C3B"}
1
+ {"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../src/utils/validator.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EAChB,UAAU,EACV,aAAa,EACd,MAAM,iBAAiB,CAAC;AAczB,eAAO,MAAM,mBAAmB,EAAE,UAUjC,CAAC;AAKF,eAAO,MAAM,eAAe,EAAE,aAAa,EAI1C,CAAC;AA8FF,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,UAAgC,GACvC,OAAO,CAAC,eAAe,EAAE,CAAC,CAkC5B;AAKD,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,EAAE,CAuBrE;AA2BD,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,EAAE,CAkB7D;AAKD,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,MAAM,EACX,WAAW,GAAE,MAAM,EAAO,GACzB,OAAO,CAAC,eAAe,EAAE,CAAC,CAiD5B;AAKD,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAoDnF;AAKD,wBAAsB,eAAe,CACnC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,UAAU,CAAA;CAAO,GACtD,OAAO,CAAC,gBAAgB,CAAC,CAiD3B"}
@@ -1,7 +1,8 @@
1
1
  import { readFile } from 'fs/promises';
2
2
  import { existsSync } from 'fs';
3
- import { join } from 'path';
4
- import { loadConfig, mergeConfig, getEffectiveLineLimits, } from './config.js';
3
+ import { join, basename } from 'path';
4
+ import { loadConfig, mergeConfig, getEffectiveLineLimits, saveConfig, createConfigFromScope, } from './config.js';
5
+ import { getTemplatesDir, processTemplate } from './templates.js';
5
6
  export const DEFAULT_LINE_LIMITS = {
6
7
  'NEXT-TASKS.md': 200,
7
8
  'FUTURE-ENHANCEMENTS.md': 500,
@@ -66,6 +67,18 @@ async function countCompletedTasks(filePath) {
66
67
  function hasArchiveDirectory(cwd) {
67
68
  return existsSync(join(cwd, 'docs/archive'));
68
69
  }
70
+ async function fixMissingFile(cwd, file) {
71
+ const templatesDir = getTemplatesDir();
72
+ const sourcePath = join(templatesDir, file);
73
+ const destPath = join(cwd, file);
74
+ const projectName = basename(cwd);
75
+ const replacements = {
76
+ 'Project Name': projectName,
77
+ 'project-name': projectName.toLowerCase().replace(/[^a-z0-9-]/g, '-'),
78
+ Description: `A project powered by Cortex TMS`,
79
+ };
80
+ await processTemplate(sourcePath, destPath, replacements);
81
+ }
69
82
  export async function validateFileSizes(cwd, limits = DEFAULT_LINE_LIMITS) {
70
83
  const checks = [];
71
84
  for (const [filename, limit] of Object.entries(limits)) {
@@ -110,10 +123,46 @@ export function validateMandatoryFiles(cwd) {
110
123
  ? `${file} exists`
111
124
  : `${file} is missing (required for TMS)`,
112
125
  file,
126
+ ...(!exists && {
127
+ fix: async (cwd) => fixMissingFile(cwd, file),
128
+ }),
113
129
  });
114
130
  }
115
131
  return checks;
116
132
  }
133
+ async function fixMissingConfig(cwd) {
134
+ const hasGlossary = existsSync(join(cwd, 'docs/core/GLOSSARY.md'));
135
+ const hasSchema = existsSync(join(cwd, 'docs/core/SCHEMA.md'));
136
+ const hasArchitecture = existsSync(join(cwd, 'docs/core/ARCHITECTURE.md'));
137
+ let scope = 'standard';
138
+ if (hasGlossary || hasSchema) {
139
+ scope = 'enterprise';
140
+ }
141
+ else if (!hasArchitecture) {
142
+ scope = 'nano';
143
+ }
144
+ const projectName = basename(cwd);
145
+ const config = createConfigFromScope(scope, projectName);
146
+ await saveConfig(cwd, config);
147
+ }
148
+ export function validateConfig(cwd) {
149
+ const configPath = join(cwd, '.cortexrc');
150
+ const exists = existsSync(configPath);
151
+ return [
152
+ {
153
+ name: 'Configuration File',
154
+ passed: exists,
155
+ level: exists ? 'info' : 'error',
156
+ message: exists
157
+ ? '.cortexrc configuration exists'
158
+ : '.cortexrc is missing (required for TMS validation)',
159
+ file: '.cortexrc',
160
+ ...(!exists && {
161
+ fix: fixMissingConfig,
162
+ }),
163
+ },
164
+ ];
165
+ }
117
166
  export async function validatePlaceholders(cwd, ignoreFiles = []) {
118
167
  const checks = [];
119
168
  const filesToScan = [
@@ -211,14 +260,16 @@ export async function validateProject(cwd, options = {}) {
211
260
  const config = mergeConfig(userConfig);
212
261
  const limits = options.limits || getEffectiveLineLimits(config);
213
262
  const ignoreFiles = config.validation?.ignoreFiles || [];
214
- const [fileSizeChecks, mandatoryChecks, placeholderChecks, archiveChecks] = await Promise.all([
263
+ const [fileSizeChecks, mandatoryChecks, configChecks, placeholderChecks, archiveChecks] = await Promise.all([
215
264
  validateFileSizes(cwd, limits),
216
265
  Promise.resolve(validateMandatoryFiles(cwd)),
266
+ Promise.resolve(validateConfig(cwd)),
217
267
  validatePlaceholders(cwd, ignoreFiles),
218
268
  validateArchiveStatus(cwd),
219
269
  ]);
220
270
  const checks = [
221
271
  ...mandatoryChecks,
272
+ ...configChecks,
222
273
  ...fileSizeChecks,
223
274
  ...placeholderChecks,
224
275
  ...archiveChecks,