cortex-tms 2.1.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 (65) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +258 -0
  3. package/bin/cortex-tms.js +34 -0
  4. package/dist/__tests__/init.test.d.ts +2 -0
  5. package/dist/__tests__/init.test.d.ts.map +1 -0
  6. package/dist/__tests__/init.test.js +172 -0
  7. package/dist/__tests__/init.test.js.map +1 -0
  8. package/dist/__tests__/utils/temp-dir.d.ts +6 -0
  9. package/dist/__tests__/utils/temp-dir.d.ts.map +1 -0
  10. package/dist/__tests__/utils/temp-dir.js +34 -0
  11. package/dist/__tests__/utils/temp-dir.js.map +1 -0
  12. package/dist/__tests__/validate.test.d.ts +2 -0
  13. package/dist/__tests__/validate.test.d.ts.map +1 -0
  14. package/dist/__tests__/validate.test.js +207 -0
  15. package/dist/__tests__/validate.test.js.map +1 -0
  16. package/dist/cli.d.ts +3 -0
  17. package/dist/cli.d.ts.map +1 -0
  18. package/dist/cli.js +32 -0
  19. package/dist/cli.js.map +1 -0
  20. package/dist/commands/init.d.ts +4 -0
  21. package/dist/commands/init.d.ts.map +1 -0
  22. package/dist/commands/init.js +121 -0
  23. package/dist/commands/init.js.map +1 -0
  24. package/dist/commands/validate.d.ts +4 -0
  25. package/dist/commands/validate.d.ts.map +1 -0
  26. package/dist/commands/validate.js +151 -0
  27. package/dist/commands/validate.js.map +1 -0
  28. package/dist/types/cli.d.ts +94 -0
  29. package/dist/types/cli.d.ts.map +1 -0
  30. package/dist/types/cli.js +2 -0
  31. package/dist/types/cli.js.map +1 -0
  32. package/dist/utils/config.d.ts +13 -0
  33. package/dist/utils/config.d.ts.map +1 -0
  34. package/dist/utils/config.js +185 -0
  35. package/dist/utils/config.js.map +1 -0
  36. package/dist/utils/detection.d.ts +5 -0
  37. package/dist/utils/detection.d.ts.map +1 -0
  38. package/dist/utils/detection.js +60 -0
  39. package/dist/utils/detection.js.map +1 -0
  40. package/dist/utils/prompts.d.ts +5 -0
  41. package/dist/utils/prompts.d.ts.map +1 -0
  42. package/dist/utils/prompts.js +82 -0
  43. package/dist/utils/prompts.js.map +1 -0
  44. package/dist/utils/templates.d.ts +14 -0
  45. package/dist/utils/templates.d.ts.map +1 -0
  46. package/dist/utils/templates.js +98 -0
  47. package/dist/utils/templates.js.map +1 -0
  48. package/dist/utils/validator.d.ts +12 -0
  49. package/dist/utils/validator.d.ts.map +1 -0
  50. package/dist/utils/validator.js +241 -0
  51. package/dist/utils/validator.js.map +1 -0
  52. package/package.json +69 -0
  53. package/templates/.github/copilot-instructions.md +28 -0
  54. package/templates/CLAUDE.md +18 -0
  55. package/templates/FUTURE-ENHANCEMENTS.md +79 -0
  56. package/templates/NEXT-TASKS.md +20 -0
  57. package/templates/README.md +172 -0
  58. package/templates/docs/archive/v1.0-CHANGELOG.md +0 -0
  59. package/templates/docs/core/ARCHITECTURE.md +102 -0
  60. package/templates/docs/core/DECISIONS.md +83 -0
  61. package/templates/docs/core/DOMAIN-LOGIC.md +8 -0
  62. package/templates/docs/core/GLOSSARY.md +66 -0
  63. package/templates/docs/core/PATTERNS.md +55 -0
  64. package/templates/docs/core/SCHEMA.md +246 -0
  65. package/templates/docs/core/TROUBLESHOOTING.md +325 -0
@@ -0,0 +1,94 @@
1
+ export interface InitPromptAnswers {
2
+ projectName: string;
3
+ description?: string;
4
+ scope: ProjectScope;
5
+ overwrite: boolean;
6
+ }
7
+ export type TemplateSelection = 'all' | 'minimal' | 'core-docs' | 'workflow-files' | 'example-app';
8
+ export interface ProjectContext {
9
+ isGitRepo: boolean;
10
+ hasPackageJson: boolean;
11
+ packageManager: 'npm' | 'pnpm' | 'yarn' | 'bun' | 'unknown';
12
+ existingFiles: string[];
13
+ }
14
+ export interface TemplateFile {
15
+ source: string;
16
+ destination: string;
17
+ hasPlaceholders: boolean;
18
+ category: 'core' | 'workflow' | 'example';
19
+ }
20
+ export interface InitCommandOptions {
21
+ force?: boolean;
22
+ minimal?: boolean;
23
+ verbose?: boolean;
24
+ }
25
+ export interface CliConfig {
26
+ version: string;
27
+ templatesDir: string;
28
+ outputDir: string;
29
+ }
30
+ export interface ValidationCheck {
31
+ name: string;
32
+ passed: boolean;
33
+ level: 'info' | 'warning' | 'error';
34
+ message: string;
35
+ details?: string;
36
+ file?: string;
37
+ line?: number;
38
+ }
39
+ export interface ValidationResult {
40
+ passed: boolean;
41
+ checks: ValidationCheck[];
42
+ summary: {
43
+ total: number;
44
+ passed: number;
45
+ warnings: number;
46
+ errors: number;
47
+ };
48
+ }
49
+ export interface LineLimits {
50
+ 'NEXT-TASKS.md': number;
51
+ 'FUTURE-ENHANCEMENTS.md': number;
52
+ 'ARCHITECTURE.md': number;
53
+ 'PATTERNS.md': number;
54
+ 'DOMAIN-LOGIC.md': number;
55
+ 'DECISIONS.md': number;
56
+ 'GLOSSARY.md': number;
57
+ 'SCHEMA.md': number;
58
+ 'TROUBLESHOOTING.md': number;
59
+ [key: string]: number;
60
+ }
61
+ export type MandatoryFile = 'NEXT-TASKS.md' | '.github/copilot-instructions.md' | 'CLAUDE.md';
62
+ export interface ValidateCommandOptions {
63
+ fix?: boolean;
64
+ strict?: boolean;
65
+ verbose?: boolean;
66
+ }
67
+ export type ProjectScope = 'nano' | 'standard' | 'enterprise';
68
+ export interface CortexConfig {
69
+ version: string;
70
+ scope: ProjectScope;
71
+ paths?: {
72
+ docs?: string;
73
+ tasks?: string;
74
+ archive?: string;
75
+ };
76
+ limits?: Partial<LineLimits>;
77
+ validation?: {
78
+ ignorePatterns?: string[];
79
+ ignoreFiles?: string[];
80
+ };
81
+ metadata?: {
82
+ created?: string;
83
+ projectName?: string;
84
+ };
85
+ }
86
+ export interface ScopePreset {
87
+ name: ProjectScope;
88
+ displayName: string;
89
+ description: string;
90
+ mandatoryFiles: string[];
91
+ optionalFiles: string[];
92
+ lineLimits: Partial<LineLimits>;
93
+ }
94
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/types/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/types/cli.ts"],"names":[],"mappings":""}
@@ -0,0 +1,13 @@
1
+ import type { CortexConfig, ProjectScope, ScopePreset, LineLimits } from '../types/cli.js';
2
+ export declare const CONFIG_VERSION = "1.0.0";
3
+ export declare const DEFAULT_CONFIG: CortexConfig;
4
+ export declare const SCOPE_PRESETS: ScopePreset[];
5
+ export declare function getConfigPath(cwd: string): string;
6
+ export declare function hasConfig(cwd: string): boolean;
7
+ export declare function loadConfig(cwd: string): Promise<CortexConfig | null>;
8
+ export declare function mergeConfig(userConfig: Partial<CortexConfig> | null): CortexConfig;
9
+ export declare function saveConfig(cwd: string, config: CortexConfig): Promise<void>;
10
+ export declare function createConfigFromScope(scope: ProjectScope, projectName?: string): CortexConfig;
11
+ export declare function getScopePreset(scope: ProjectScope): ScopePreset | undefined;
12
+ export declare function getEffectiveLineLimits(config: CortexConfig): LineLimits;
13
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,185 @@
1
+ import { readFile, writeFile } from 'fs/promises';
2
+ import { existsSync } from 'fs';
3
+ import { join } from 'path';
4
+ export const CONFIG_VERSION = '1.0.0';
5
+ const DEFAULT_LINE_LIMITS = {
6
+ 'NEXT-TASKS.md': 200,
7
+ 'FUTURE-ENHANCEMENTS.md': 500,
8
+ 'ARCHITECTURE.md': 500,
9
+ 'PATTERNS.md': 500,
10
+ 'DOMAIN-LOGIC.md': 300,
11
+ 'DECISIONS.md': 400,
12
+ 'GLOSSARY.md': 200,
13
+ 'SCHEMA.md': 600,
14
+ 'TROUBLESHOOTING.md': 400,
15
+ };
16
+ export const DEFAULT_CONFIG = {
17
+ version: CONFIG_VERSION,
18
+ scope: 'standard',
19
+ paths: {
20
+ docs: 'docs/core',
21
+ tasks: 'NEXT-TASKS.md',
22
+ archive: 'docs/archive',
23
+ },
24
+ limits: {},
25
+ validation: {
26
+ ignorePatterns: [],
27
+ ignoreFiles: [],
28
+ },
29
+ };
30
+ export const SCOPE_PRESETS = [
31
+ {
32
+ name: 'nano',
33
+ displayName: 'Nano',
34
+ description: 'Minimal setup for scripts and small tools',
35
+ mandatoryFiles: ['NEXT-TASKS.md', 'CLAUDE.md'],
36
+ optionalFiles: [],
37
+ lineLimits: {
38
+ 'NEXT-TASKS.md': 100,
39
+ },
40
+ },
41
+ {
42
+ name: 'standard',
43
+ displayName: 'Standard',
44
+ description: 'Complete setup for most products (recommended)',
45
+ mandatoryFiles: [
46
+ 'NEXT-TASKS.md',
47
+ 'CLAUDE.md',
48
+ '.github/copilot-instructions.md',
49
+ ],
50
+ optionalFiles: [
51
+ 'FUTURE-ENHANCEMENTS.md',
52
+ 'docs/core/ARCHITECTURE.md',
53
+ 'docs/core/PATTERNS.md',
54
+ 'docs/core/DOMAIN-LOGIC.md',
55
+ 'docs/core/DECISIONS.md',
56
+ 'docs/core/TROUBLESHOOTING.md',
57
+ ],
58
+ lineLimits: DEFAULT_LINE_LIMITS,
59
+ },
60
+ {
61
+ name: 'enterprise',
62
+ displayName: 'Enterprise',
63
+ description: 'Full suite for large, complex repositories',
64
+ mandatoryFiles: [
65
+ 'NEXT-TASKS.md',
66
+ 'CLAUDE.md',
67
+ '.github/copilot-instructions.md',
68
+ ],
69
+ optionalFiles: [
70
+ 'FUTURE-ENHANCEMENTS.md',
71
+ 'docs/core/ARCHITECTURE.md',
72
+ 'docs/core/PATTERNS.md',
73
+ 'docs/core/DOMAIN-LOGIC.md',
74
+ 'docs/core/DECISIONS.md',
75
+ 'docs/core/TROUBLESHOOTING.md',
76
+ 'docs/core/GLOSSARY.md',
77
+ 'docs/core/SCHEMA.md',
78
+ ],
79
+ lineLimits: {
80
+ 'NEXT-TASKS.md': 300,
81
+ 'FUTURE-ENHANCEMENTS.md': 800,
82
+ 'ARCHITECTURE.md': 800,
83
+ 'PATTERNS.md': 800,
84
+ 'DOMAIN-LOGIC.md': 500,
85
+ 'DECISIONS.md': 600,
86
+ 'GLOSSARY.md': 400,
87
+ 'SCHEMA.md': 1000,
88
+ 'TROUBLESHOOTING.md': 600,
89
+ },
90
+ },
91
+ ];
92
+ export function getConfigPath(cwd) {
93
+ return join(cwd, '.cortexrc');
94
+ }
95
+ export function hasConfig(cwd) {
96
+ return existsSync(getConfigPath(cwd));
97
+ }
98
+ export async function loadConfig(cwd) {
99
+ const configPath = getConfigPath(cwd);
100
+ if (!existsSync(configPath)) {
101
+ return null;
102
+ }
103
+ try {
104
+ const content = await readFile(configPath, 'utf-8');
105
+ const config = JSON.parse(content);
106
+ if (config.version !== CONFIG_VERSION) {
107
+ console.warn(`⚠️ Config version mismatch: expected ${CONFIG_VERSION}, got ${config.version}`);
108
+ }
109
+ return config;
110
+ }
111
+ catch (error) {
112
+ throw new Error(`Failed to parse .cortexrc: ${error instanceof Error ? error.message : 'Unknown error'}`);
113
+ }
114
+ }
115
+ export function mergeConfig(userConfig) {
116
+ if (!userConfig) {
117
+ return { ...DEFAULT_CONFIG };
118
+ }
119
+ return {
120
+ version: userConfig.version || DEFAULT_CONFIG.version,
121
+ scope: userConfig.scope || DEFAULT_CONFIG.scope,
122
+ paths: {
123
+ ...DEFAULT_CONFIG.paths,
124
+ ...userConfig.paths,
125
+ },
126
+ limits: {
127
+ ...DEFAULT_CONFIG.limits,
128
+ ...userConfig.limits,
129
+ },
130
+ validation: {
131
+ ignorePatterns: [
132
+ ...(DEFAULT_CONFIG.validation?.ignorePatterns || []),
133
+ ...(userConfig.validation?.ignorePatterns || []),
134
+ ],
135
+ ignoreFiles: [
136
+ ...(DEFAULT_CONFIG.validation?.ignoreFiles || []),
137
+ ...(userConfig.validation?.ignoreFiles || []),
138
+ ],
139
+ },
140
+ ...(userConfig.metadata && { metadata: userConfig.metadata }),
141
+ };
142
+ }
143
+ export async function saveConfig(cwd, config) {
144
+ const configPath = getConfigPath(cwd);
145
+ try {
146
+ const content = JSON.stringify(config, null, 2);
147
+ await writeFile(configPath, content, 'utf-8');
148
+ }
149
+ catch (error) {
150
+ throw new Error(`Failed to write .cortexrc: ${error instanceof Error ? error.message : 'Unknown error'}`);
151
+ }
152
+ }
153
+ export function createConfigFromScope(scope, projectName) {
154
+ const preset = SCOPE_PRESETS.find((p) => p.name === scope);
155
+ if (!preset) {
156
+ throw new Error(`Unknown scope: ${scope}`);
157
+ }
158
+ const config = {
159
+ version: CONFIG_VERSION,
160
+ scope,
161
+ paths: { ...DEFAULT_CONFIG.paths },
162
+ limits: preset.lineLimits,
163
+ validation: { ...DEFAULT_CONFIG.validation },
164
+ };
165
+ if (projectName) {
166
+ config.metadata = {
167
+ created: new Date().toISOString(),
168
+ projectName,
169
+ };
170
+ }
171
+ return config;
172
+ }
173
+ export function getScopePreset(scope) {
174
+ return SCOPE_PRESETS.find((p) => p.name === scope);
175
+ }
176
+ export function getEffectiveLineLimits(config) {
177
+ const preset = getScopePreset(config.scope);
178
+ const presetLimits = preset?.lineLimits || DEFAULT_LINE_LIMITS;
179
+ return {
180
+ ...DEFAULT_LINE_LIMITS,
181
+ ...presetLimits,
182
+ ...config.limits,
183
+ };
184
+ }
185
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { ProjectContext } from '../types/cli.js';
2
+ export declare function detectContext(cwd: string): ProjectContext;
3
+ export declare function getDefaultProjectName(cwd: string): string;
4
+ export declare function isSafeToInitialize(context: ProjectContext): boolean;
5
+ //# sourceMappingURL=detection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detection.d.ts","sourceRoot":"","sources":["../../src/utils/detection.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAQtD,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAyCzD;AAQD,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CASzD;AAQD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAgBnE"}
@@ -0,0 +1,60 @@
1
+ import { existsSync } from 'fs';
2
+ import { join, basename } from 'path';
3
+ export function detectContext(cwd) {
4
+ const isGitRepo = existsSync(join(cwd, '.git'));
5
+ const hasPackageJson = existsSync(join(cwd, 'package.json'));
6
+ let packageManager = 'unknown';
7
+ if (existsSync(join(cwd, 'pnpm-lock.yaml'))) {
8
+ packageManager = 'pnpm';
9
+ }
10
+ else if (existsSync(join(cwd, 'yarn.lock'))) {
11
+ packageManager = 'yarn';
12
+ }
13
+ else if (existsSync(join(cwd, 'package-lock.json'))) {
14
+ packageManager = 'npm';
15
+ }
16
+ else if (existsSync(join(cwd, 'bun.lockb'))) {
17
+ packageManager = 'bun';
18
+ }
19
+ const existingFiles = [];
20
+ const tmsFiles = [
21
+ 'NEXT-TASKS.md',
22
+ 'FUTURE-ENHANCEMENTS.md',
23
+ 'CLAUDE.md',
24
+ 'README.md',
25
+ '.github/copilot-instructions.md',
26
+ 'docs/core/ARCHITECTURE.md',
27
+ 'docs/core/PATTERNS.md',
28
+ 'docs/core/DOMAIN-LOGIC.md',
29
+ ];
30
+ for (const file of tmsFiles) {
31
+ if (existsSync(join(cwd, file))) {
32
+ existingFiles.push(file);
33
+ }
34
+ }
35
+ return {
36
+ isGitRepo,
37
+ hasPackageJson,
38
+ packageManager,
39
+ existingFiles,
40
+ };
41
+ }
42
+ export function getDefaultProjectName(cwd) {
43
+ const dirName = basename(cwd);
44
+ return dirName
45
+ .toLowerCase()
46
+ .replace(/[^a-z0-9-]/g, '-')
47
+ .replace(/-+/g, '-')
48
+ .replace(/^-|-$/g, '');
49
+ }
50
+ export function isSafeToInitialize(context) {
51
+ if (context.existingFiles.length === 0) {
52
+ return true;
53
+ }
54
+ if (context.existingFiles.length === 1 &&
55
+ context.existingFiles[0] === 'README.md') {
56
+ return true;
57
+ }
58
+ return false;
59
+ }
60
+ //# sourceMappingURL=detection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detection.js","sourceRoot":"","sources":["../../src/utils/detection.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAStC,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;IAChD,MAAM,cAAc,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC;IAG7D,IAAI,cAAc,GAAqC,SAAS,CAAC;IACjE,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC,EAAE,CAAC;QAC5C,cAAc,GAAG,MAAM,CAAC;IAC1B,CAAC;SAAM,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC;QAC9C,cAAc,GAAG,MAAM,CAAC;IAC1B,CAAC;SAAM,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC;QACtD,cAAc,GAAG,KAAK,CAAC;IACzB,CAAC;SAAM,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC;QAC9C,cAAc,GAAG,KAAK,CAAC;IACzB,CAAC;IAGD,MAAM,aAAa,GAAa,EAAE,CAAC;IACnC,MAAM,QAAQ,GAAG;QACf,eAAe;QACf,wBAAwB;QACxB,WAAW;QACX,WAAW;QACX,iCAAiC;QACjC,2BAA2B;QAC3B,uBAAuB;QACvB,2BAA2B;KAC5B,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;YAChC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,OAAO;QACL,SAAS;QACT,cAAc;QACd,cAAc;QACd,aAAa;KACd,CAAC;AACJ,CAAC;AAQD,MAAM,UAAU,qBAAqB,CAAC,GAAW;IAC/C,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAG9B,OAAO,OAAO;SACX,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AAC3B,CAAC;AAQD,MAAM,UAAU,kBAAkB,CAAC,OAAuB;IAExD,IAAI,OAAO,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvC,OAAO,IAAI,CAAC;IACd,CAAC;IAGD,IACE,OAAO,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC;QAClC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,WAAW,EACxC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAGD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { InitPromptAnswers, ProjectContext } from '../types/cli.js';
2
+ export declare function runInitPrompts(context: ProjectContext, cwd: string): Promise<InitPromptAnswers>;
3
+ export declare function showInitSummary(answers: InitPromptAnswers, context: ProjectContext): void;
4
+ export declare function confirmInit(): Promise<boolean>;
5
+ //# sourceMappingURL=prompts.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,82 @@
1
+ import inquirer from 'inquirer';
2
+ import { getDefaultProjectName } from './detection.js';
3
+ import { SCOPE_PRESETS } from './config.js';
4
+ export async function runInitPrompts(context, cwd) {
5
+ const defaultName = getDefaultProjectName(cwd);
6
+ const answers = (await inquirer.prompt([
7
+ {
8
+ type: 'input',
9
+ name: 'projectName',
10
+ message: 'What is your project name?',
11
+ default: defaultName,
12
+ validate: (input) => {
13
+ if (!input || input.trim().length === 0) {
14
+ return 'Project name is required';
15
+ }
16
+ if (input.length > 100) {
17
+ return 'Project name must be 100 characters or less';
18
+ }
19
+ return true;
20
+ },
21
+ },
22
+ {
23
+ type: 'input',
24
+ name: 'description',
25
+ message: 'Project description (optional):',
26
+ default: undefined,
27
+ },
28
+ {
29
+ type: 'list',
30
+ name: 'scope',
31
+ message: 'What project scope would you like?',
32
+ choices: SCOPE_PRESETS.map((preset) => ({
33
+ name: `${preset.displayName} - ${preset.description}`,
34
+ value: preset.name,
35
+ })),
36
+ default: 'standard',
37
+ },
38
+ ]));
39
+ if (context.existingFiles.length > 0) {
40
+ const { overwrite } = await inquirer.prompt([
41
+ {
42
+ type: 'confirm',
43
+ name: 'overwrite',
44
+ message: `Warning: ${context.existingFiles.length} TMS file(s) already exist. Overwrite them?`,
45
+ default: false,
46
+ },
47
+ ]);
48
+ return { ...answers, overwrite };
49
+ }
50
+ return { ...answers, overwrite: false };
51
+ }
52
+ export function showInitSummary(answers, context) {
53
+ const preset = SCOPE_PRESETS.find((p) => p.name === answers.scope);
54
+ console.log('\n📋 Summary:');
55
+ console.log(` Project: ${answers.projectName}`);
56
+ if (answers.description) {
57
+ console.log(` Description: ${answers.description}`);
58
+ }
59
+ console.log(` Scope: ${preset?.displayName || answers.scope} (${preset?.mandatoryFiles.length || 0} mandatory files)`);
60
+ if (context.isGitRepo) {
61
+ console.log(` Git: Repository detected ✓`);
62
+ }
63
+ if (context.hasPackageJson) {
64
+ console.log(` Package Manager: ${context.packageManager !== 'unknown' ? context.packageManager : 'npm (default)'}`);
65
+ }
66
+ if (answers.overwrite) {
67
+ console.log(` ⚠️ Will overwrite ${context.existingFiles.length} existing files`);
68
+ }
69
+ console.log();
70
+ }
71
+ export async function confirmInit() {
72
+ const { confirmed } = await inquirer.prompt([
73
+ {
74
+ type: 'confirm',
75
+ name: 'confirmed',
76
+ message: 'Initialize Cortex TMS with these settings?',
77
+ default: true,
78
+ },
79
+ ]);
80
+ return confirmed;
81
+ }
82
+ //# sourceMappingURL=prompts.js.map
@@ -0,0 +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;AAS5C,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAAuB,EACvB,GAAW;IAEX,MAAM,WAAW,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAG/C,MAAM,OAAO,GAAG,CAAC,MAAO,QAAQ,CAAC,MAAc,CAAC;QAC9C;YACE,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,4BAA4B;YACrC,OAAO,EAAE,WAAW;YACpB,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE;gBAC1B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACxC,OAAO,0BAA0B,CAAC;gBACpC,CAAC;gBACD,IAAI,KAAK,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;oBACvB,OAAO,6CAA6C,CAAC;gBACvD,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;SACF;QACD;YACE,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,iCAAiC;YAC1C,OAAO,EAAE,SAAS;SACnB;QACD;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,oCAAoC;YAC7C,OAAO,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBACtC,IAAI,EAAE,GAAG,MAAM,CAAC,WAAW,MAAM,MAAM,CAAC,WAAW,EAAE;gBACrD,KAAK,EAAE,MAAM,CAAC,IAAI;aACnB,CAAC,CAAC;YACH,OAAO,EAAE,UAAU;SACpB;KACF,CAAC,CAAsB,CAAC;IAGzB,IAAI,OAAO,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAyB;YAClE;gBACE,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,YAAY,OAAO,CAAC,aAAa,CAAC,MAAM,6CAA6C;gBAC9F,OAAO,EAAE,KAAK;aACf;SACF,CAAC,CAAC;QAEH,OAAO,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,CAAC;IACnC,CAAC;IAED,OAAO,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAC1C,CAAC;AAQD,MAAM,UAAU,eAAe,CAC7B,OAA0B,EAC1B,OAAuB;IAEvB,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,KAAK,CAAC,CAAC;IAEnE,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC7B,OAAO,CAAC,GAAG,CAAC,cAAc,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IACjD,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,kBAAkB,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,CAAC,GAAG,CACT,YAAY,MAAM,EAAE,WAAW,IAAI,OAAO,CAAC,KAAK,KAAK,MAAM,EAAE,cAAc,CAAC,MAAM,IAAI,CAAC,mBAAmB,CAC3G,CAAC;IAEF,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CACT,sBAAsB,OAAO,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,eAAe,EAAE,CACxG,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,wBAAwB,OAAO,CAAC,aAAa,CAAC,MAAM,iBAAiB,CAAC,CAAC;IACrF,CAAC;IAED,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC;AAOD,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAyB;QAClE;YACE,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,4CAA4C;YACrD,OAAO,EAAE,IAAI;SACd;KACF,CAAC,CAAC;IAEH,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { TemplateFile } from '../types/cli.js';
2
+ export declare function getTemplatesDir(): string;
3
+ export declare function replacePlaceholders(content: string, replacements: Record<string, string>): string;
4
+ export declare function processTemplate(sourcePath: string, destPath: string, replacements: Record<string, string>): Promise<void>;
5
+ export declare function getTemplateFiles(templatesDir: string): Promise<TemplateFile[]>;
6
+ export declare function copyTemplates(templatesDir: string, destDir: string, replacements: Record<string, string>, options?: {
7
+ overwrite?: boolean;
8
+ scope?: 'nano' | 'standard' | 'enterprise';
9
+ }): Promise<{
10
+ copied: number;
11
+ skipped: number;
12
+ }>;
13
+ export declare function generateReplacements(projectName: string, description?: string): Record<string, string>;
14
+ //# sourceMappingURL=templates.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,98 @@
1
+ import fs from 'fs-extra';
2
+ import { join, relative } from 'path';
3
+ import { fileURLToPath } from 'url';
4
+ import { dirname } from 'path';
5
+ import { getScopePreset } from './config.js';
6
+ const __filename = fileURLToPath(import.meta.url);
7
+ const __dirname = dirname(__filename);
8
+ export function getTemplatesDir() {
9
+ return join(__dirname, '../../templates');
10
+ }
11
+ export function replacePlaceholders(content, replacements) {
12
+ let result = content;
13
+ Object.entries(replacements).forEach(([key, value]) => {
14
+ const placeholder = `[${key}]`;
15
+ result = result.replaceAll(placeholder, value);
16
+ });
17
+ return result;
18
+ }
19
+ export async function processTemplate(sourcePath, destPath, replacements) {
20
+ const content = await fs.readFile(sourcePath, 'utf-8');
21
+ const processed = replacePlaceholders(content, replacements);
22
+ await fs.ensureDir(dirname(destPath));
23
+ await fs.writeFile(destPath, processed, 'utf-8');
24
+ }
25
+ export async function getTemplateFiles(templatesDir) {
26
+ const files = [];
27
+ async function walk(dir, baseDir) {
28
+ const entries = await fs.readdir(dir, { withFileTypes: true });
29
+ for (const entry of entries) {
30
+ const fullPath = join(dir, entry.name);
31
+ if (entry.isDirectory()) {
32
+ await walk(fullPath, baseDir);
33
+ }
34
+ else if (entry.isFile()) {
35
+ const relativePath = relative(baseDir, fullPath);
36
+ let category = 'core';
37
+ if (relativePath.startsWith('.github')) {
38
+ category = 'workflow';
39
+ }
40
+ else if (relativePath.startsWith('examples')) {
41
+ category = 'example';
42
+ }
43
+ const content = await fs.readFile(fullPath, 'utf-8');
44
+ const hasPlaceholders = content.includes('[Project Name]') ||
45
+ content.includes('[project-name]') ||
46
+ content.includes('[Description]');
47
+ files.push({
48
+ source: fullPath,
49
+ destination: relativePath,
50
+ hasPlaceholders,
51
+ category,
52
+ });
53
+ }
54
+ }
55
+ }
56
+ await walk(templatesDir, templatesDir);
57
+ return files;
58
+ }
59
+ export async function copyTemplates(templatesDir, destDir, replacements, options = {}) {
60
+ const { overwrite = false, scope = 'standard' } = options;
61
+ const allFiles = await getTemplateFiles(templatesDir);
62
+ const preset = getScopePreset(scope);
63
+ if (!preset) {
64
+ throw new Error(`Unknown scope: ${scope}`);
65
+ }
66
+ const allowedFiles = [...preset.mandatoryFiles, ...preset.optionalFiles];
67
+ const filesToCopy = allFiles.filter((f) => {
68
+ if (f.category === 'example') {
69
+ return false;
70
+ }
71
+ return allowedFiles.includes(f.destination);
72
+ });
73
+ let copied = 0;
74
+ let skipped = 0;
75
+ for (const file of filesToCopy) {
76
+ const destPath = join(destDir, file.destination);
77
+ if (!overwrite && (await fs.pathExists(destPath))) {
78
+ skipped++;
79
+ continue;
80
+ }
81
+ await processTemplate(file.source, destPath, replacements);
82
+ copied++;
83
+ }
84
+ return { copied, skipped };
85
+ }
86
+ export function generateReplacements(projectName, description) {
87
+ const kebabName = projectName
88
+ .toLowerCase()
89
+ .replace(/[^a-z0-9-]/g, '-')
90
+ .replace(/-+/g, '-')
91
+ .replace(/^-|-$/g, '');
92
+ return {
93
+ 'Project Name': projectName,
94
+ 'project-name': kebabName,
95
+ Description: description || `A project powered by Cortex TMS`,
96
+ };
97
+ }
98
+ //# sourceMappingURL=templates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/utils/templates.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { ValidationCheck, ValidationResult, LineLimits, MandatoryFile } from '../types/cli.js';
2
+ export declare const DEFAULT_LINE_LIMITS: LineLimits;
3
+ export declare const MANDATORY_FILES: MandatoryFile[];
4
+ export declare function validateFileSizes(cwd: string, limits?: LineLimits): Promise<ValidationCheck[]>;
5
+ export declare function validateMandatoryFiles(cwd: string): ValidationCheck[];
6
+ export declare function validatePlaceholders(cwd: string, ignoreFiles?: string[]): Promise<ValidationCheck[]>;
7
+ export declare function validateArchiveStatus(cwd: string): Promise<ValidationCheck[]>;
8
+ export declare function validateProject(cwd: string, options?: {
9
+ strict?: boolean;
10
+ limits?: LineLimits;
11
+ }): Promise<ValidationResult>;
12
+ //# sourceMappingURL=validator.d.ts.map
@@ -0,0 +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"}