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.
- package/README.md +1 -1
- package/dist/__tests__/validate.test.js +2 -0
- package/dist/__tests__/validate.test.js.map +1 -1
- package/dist/cli.js +2 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +97 -25
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/status.d.ts +4 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +99 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/validate.d.ts.map +1 -1
- package/dist/commands/validate.js +39 -0
- package/dist/commands/validate.js.map +1 -1
- package/dist/types/cli.d.ts +6 -1
- package/dist/types/cli.d.ts.map +1 -1
- package/dist/utils/config.d.ts +1 -1
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +10 -1
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/prompts.d.ts.map +1 -1
- package/dist/utils/prompts.js +54 -1
- package/dist/utils/prompts.js.map +1 -1
- package/dist/utils/status.d.ts +21 -0
- package/dist/utils/status.d.ts.map +1 -0
- package/dist/utils/status.js +86 -0
- package/dist/utils/status.js.map +1 -0
- package/dist/utils/templates.d.ts +10 -1
- package/dist/utils/templates.d.ts.map +1 -1
- package/dist/utils/templates.js +102 -11
- package/dist/utils/templates.js.map +1 -1
- package/dist/utils/validator.d.ts +1 -0
- package/dist/utils/validator.d.ts.map +1 -1
- package/dist/utils/validator.js +54 -3
- package/dist/utils/validator.js.map +1 -1
- package/package.json +1 -1
- package/templates/docs/core/ARCHITECTURE.md +51 -1
- 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,
|
|
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"}
|
package/dist/utils/config.js
CHANGED
|
@@ -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;
|
package/dist/utils/config.js.map
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/utils/prompts.js
CHANGED
|
@@ -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
|
-
|
|
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":"AAMA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAEhC,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
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":"
|
|
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"}
|
package/dist/utils/templates.js
CHANGED
|
@@ -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
|
-
|
|
63
|
-
if (
|
|
64
|
-
|
|
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
|
-
|
|
78
|
-
|
|
79
|
-
|
|
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
|
-
|
|
82
|
-
|
|
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
|
-
|
|
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;
|
|
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;
|
|
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"}
|
package/dist/utils/validator.js
CHANGED
|
@@ -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,
|