@cxtmanager/core 1.0.9 → 1.0.11

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 (45) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +11 -8
  3. package/dist/__tests__/context-manager.test.d.ts +2 -0
  4. package/dist/__tests__/context-manager.test.d.ts.map +1 -0
  5. package/dist/__tests__/context-manager.test.js +137 -0
  6. package/dist/__tests__/context-manager.test.js.map +1 -0
  7. package/dist/__tests__/file-watcher.test.d.ts +2 -0
  8. package/dist/__tests__/file-watcher.test.d.ts.map +1 -0
  9. package/dist/__tests__/file-watcher.test.js +84 -0
  10. package/dist/__tests__/file-watcher.test.js.map +1 -0
  11. package/dist/__tests__/git-repository.test.d.ts +2 -0
  12. package/dist/__tests__/git-repository.test.d.ts.map +1 -0
  13. package/dist/__tests__/git-repository.test.js +152 -0
  14. package/dist/__tests__/git-repository.test.js.map +1 -0
  15. package/dist/__tests__/plan-manager.test.d.ts +2 -0
  16. package/dist/__tests__/plan-manager.test.d.ts.map +1 -0
  17. package/dist/__tests__/plan-manager.test.js +170 -0
  18. package/dist/__tests__/plan-manager.test.js.map +1 -0
  19. package/dist/__tests__/plan-templates.test.d.ts +2 -0
  20. package/dist/__tests__/plan-templates.test.d.ts.map +1 -0
  21. package/dist/__tests__/plan-templates.test.js +93 -0
  22. package/dist/__tests__/plan-templates.test.js.map +1 -0
  23. package/dist/__tests__/validation-engine.test.d.ts +2 -0
  24. package/dist/__tests__/validation-engine.test.d.ts.map +1 -0
  25. package/dist/__tests__/validation-engine.test.js +167 -0
  26. package/dist/__tests__/validation-engine.test.js.map +1 -0
  27. package/dist/context-manager.d.ts +6 -6
  28. package/dist/context-manager.d.ts.map +1 -1
  29. package/dist/context-manager.js +108 -124
  30. package/dist/context-manager.js.map +1 -1
  31. package/dist/plan-manager.d.ts +3 -3
  32. package/dist/plan-manager.d.ts.map +1 -1
  33. package/dist/plan-manager.js +17 -7
  34. package/dist/plan-manager.js.map +1 -1
  35. package/dist/plan-templates.d.ts +4 -4
  36. package/dist/plan-templates.d.ts.map +1 -1
  37. package/dist/plan-templates.js +9 -40
  38. package/dist/plan-templates.js.map +1 -1
  39. package/dist/types.d.ts +24 -14
  40. package/dist/types.d.ts.map +1 -1
  41. package/dist/validation-engine.d.ts +5 -5
  42. package/dist/validation-engine.d.ts.map +1 -1
  43. package/dist/validation-engine.js +106 -82
  44. package/dist/validation-engine.js.map +1 -1
  45. package/package.json +2 -2
@@ -0,0 +1,170 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const plan_manager_1 = require("../plan-manager");
37
+ const git_repository_1 = require("../git-repository");
38
+ const fs = __importStar(require("fs-extra"));
39
+ const path = __importStar(require("path"));
40
+ const os = __importStar(require("os"));
41
+ describe('PlanManager', () => {
42
+ let testDir;
43
+ let gitRepo;
44
+ let manager;
45
+ let config;
46
+ beforeEach(async () => {
47
+ testDir = path.join(os.tmpdir(), `cxtmanager-plan-test-${Date.now()}`);
48
+ await fs.ensureDir(testDir);
49
+ // Initialize git repo
50
+ gitRepo = new git_repository_1.GitRepository(testDir);
51
+ await gitRepo.ensureGitRepo();
52
+ // Set git user for commits
53
+ const { execSync } = require('child_process');
54
+ execSync('git config user.name "Test User"', { cwd: testDir });
55
+ execSync('git config user.email "test@example.com"', { cwd: testDir });
56
+ // Create .cxt directory
57
+ const cxtDir = path.join(testDir, '.cxt');
58
+ await fs.ensureDir(cxtDir);
59
+ // Default config
60
+ config = {
61
+ version: '1.0.0',
62
+ mode: 'blank',
63
+ git_integration: {
64
+ enabled: true,
65
+ hooks: {},
66
+ silent_mode: true,
67
+ auto_install_hooks: false,
68
+ track_in_git: true
69
+ },
70
+ plan_management: {
71
+ backup_on_switch: true,
72
+ auto_commit_ai_changes: false,
73
+ archive_completed: false
74
+ },
75
+ mcp: {
76
+ enabled: false,
77
+ sources: {
78
+ local_files: {
79
+ enabled: true,
80
+ readme: true,
81
+ package_json: true,
82
+ git_history: true
83
+ }
84
+ }
85
+ },
86
+ context: {
87
+ auto_sync: false,
88
+ health_checks: true,
89
+ ai_attribution: true,
90
+ update_mode: 'manual',
91
+ drift_detection: true,
92
+ warn_threshold: 3,
93
+ content_quality: {
94
+ min_content_length: 100,
95
+ min_content_lines: 3,
96
+ empty_section_warning: true,
97
+ short_content_warning: 200
98
+ },
99
+ show_in_changed_files: true,
100
+ auto_commit_context_updates: false
101
+ },
102
+ created: new Date().toISOString()
103
+ };
104
+ manager = new plan_manager_1.PlanManager(cxtDir, gitRepo, config);
105
+ });
106
+ afterEach(async () => {
107
+ if (await fs.pathExists(testDir)) {
108
+ await fs.remove(testDir);
109
+ }
110
+ });
111
+ describe('createBlankPlan - respects init mode', () => {
112
+ it('should create blank plan when config.mode is blank', async () => {
113
+ config.mode = 'blank';
114
+ manager = new plan_manager_1.PlanManager(path.join(testDir, '.cxt'), gitRepo, config);
115
+ await manager.createBlankPlan();
116
+ const planPath = path.join(testDir, '.cxt', 'plan.md');
117
+ expect(await fs.pathExists(planPath)).toBe(true);
118
+ const content = await fs.readFile(planPath, 'utf-8');
119
+ expect(content).toContain('# Development Plan');
120
+ expect(content).not.toContain('GUIDANCE');
121
+ expect(content).not.toContain('##');
122
+ });
123
+ it('should create template plan when config.mode is template', async () => {
124
+ config.mode = 'template';
125
+ manager = new plan_manager_1.PlanManager(path.join(testDir, '.cxt'), gitRepo, config);
126
+ await manager.createBlankPlan('template');
127
+ const planPath = path.join(testDir, '.cxt', 'plan.md');
128
+ expect(await fs.pathExists(planPath)).toBe(true);
129
+ const content = await fs.readFile(planPath, 'utf-8');
130
+ expect(content).toContain('# Current Branch Implementation');
131
+ expect(content).toContain('GUIDANCE');
132
+ expect(content).toContain('##');
133
+ });
134
+ it('should respect plan_management.plan_template_style override', async () => {
135
+ config.mode = 'template'; // Init was template
136
+ config.plan_management.plan_template_style = 'blank'; // But override to blank
137
+ manager = new plan_manager_1.PlanManager(path.join(testDir, '.cxt'), gitRepo, config);
138
+ await manager.createBlankPlan();
139
+ const planPath = path.join(testDir, '.cxt', 'plan.md');
140
+ const content = await fs.readFile(planPath, 'utf-8');
141
+ // Should use blank despite init mode being template
142
+ expect(content).toContain('# Development Plan');
143
+ expect(content).not.toContain('GUIDANCE');
144
+ expect(content).not.toContain('##');
145
+ });
146
+ it('should use config.mode when plan_template_style is not set', async () => {
147
+ config.mode = 'blank';
148
+ config.plan_management.plan_template_style = undefined;
149
+ manager = new plan_manager_1.PlanManager(path.join(testDir, '.cxt'), gitRepo, config);
150
+ await manager.createBlankPlan();
151
+ const planPath = path.join(testDir, '.cxt', 'plan.md');
152
+ const content = await fs.readFile(planPath, 'utf-8');
153
+ // Should use config.mode (blank)
154
+ expect(content).toContain('# Development Plan');
155
+ expect(content).not.toContain('GUIDANCE');
156
+ });
157
+ it('should use template when template mode is set', async () => {
158
+ config.mode = 'template';
159
+ manager = new plan_manager_1.PlanManager(path.join(testDir, '.cxt'), gitRepo, config);
160
+ await manager.createBlankPlan();
161
+ const planPath = path.join(testDir, '.cxt', 'plan.md');
162
+ const content = await fs.readFile(planPath, 'utf-8');
163
+ // Should use template (structured with guidance)
164
+ expect(content).toContain('# Current Branch Implementation');
165
+ expect(content).toContain('GUIDANCE');
166
+ expect(content).toContain('##');
167
+ });
168
+ });
169
+ });
170
+ //# sourceMappingURL=plan-manager.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-manager.test.js","sourceRoot":"","sources":["../../src/__tests__/plan-manager.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=plan-templates.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-templates.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/plan-templates.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const plan_templates_1 = require("../plan-templates");
4
+ describe('PlanTemplates', () => {
5
+ describe('getBlank', () => {
6
+ it('should return a template string', () => {
7
+ const template = plan_templates_1.PlanTemplates.getBlank();
8
+ expect(typeof template).toBe('string');
9
+ expect(template.length).toBeGreaterThan(0);
10
+ });
11
+ it('should include branch name when provided', () => {
12
+ const template = plan_templates_1.PlanTemplates.getBlank('feature/test');
13
+ expect(template).toContain('feature/test');
14
+ });
15
+ it('should include date when provided', () => {
16
+ const date = '2025-12-05';
17
+ const template = plan_templates_1.PlanTemplates.getBlank(undefined, date);
18
+ expect(template).toContain(date);
19
+ });
20
+ it('should NOT include guidance comments', () => {
21
+ const template = plan_templates_1.PlanTemplates.getBlank();
22
+ expect(template).not.toContain('GUIDANCE');
23
+ expect(template).not.toContain('<!--');
24
+ expect(template).not.toContain('-->');
25
+ });
26
+ it('should NOT include section headers', () => {
27
+ const template = plan_templates_1.PlanTemplates.getBlank();
28
+ expect(template).not.toContain('##');
29
+ });
30
+ it('should only include title and metadata', () => {
31
+ const template = plan_templates_1.PlanTemplates.getBlank();
32
+ expect(template).toContain('# Development Plan');
33
+ expect(template).toContain('*This file contains');
34
+ // Should be shorter than template (no structure)
35
+ const structured = plan_templates_1.PlanTemplates.getTemplate();
36
+ expect(template.length).toBeLessThan(structured.length);
37
+ });
38
+ });
39
+ describe('getTemplate', () => {
40
+ it('should return a template string', () => {
41
+ const template = plan_templates_1.PlanTemplates.getTemplate();
42
+ expect(typeof template).toBe('string');
43
+ expect(template.length).toBeGreaterThan(0);
44
+ });
45
+ it('should be longer than blank template', () => {
46
+ const blank = plan_templates_1.PlanTemplates.getBlank();
47
+ const template = plan_templates_1.PlanTemplates.getTemplate();
48
+ expect(template.length).toBeGreaterThan(blank.length);
49
+ });
50
+ it('should include branch name when provided', () => {
51
+ const template = plan_templates_1.PlanTemplates.getTemplate('feature/test');
52
+ expect(template).toContain('feature/test');
53
+ });
54
+ it('should include date when provided', () => {
55
+ const date = '2025-12-05';
56
+ const template = plan_templates_1.PlanTemplates.getTemplate(undefined, date);
57
+ expect(template).toContain(date);
58
+ });
59
+ it('should include section headers', () => {
60
+ const template = plan_templates_1.PlanTemplates.getTemplate();
61
+ expect(template).toContain('##');
62
+ });
63
+ it('should include guidance comments', () => {
64
+ const template = plan_templates_1.PlanTemplates.getTemplate();
65
+ expect(template).toContain('GUIDANCE');
66
+ expect(template).toContain('What\'s Being Built');
67
+ expect(template).toContain('Implementation Approach');
68
+ });
69
+ });
70
+ describe('template consistency', () => {
71
+ it('should have consistent structure for both templates', () => {
72
+ const blank = plan_templates_1.PlanTemplates.getBlank();
73
+ const template = plan_templates_1.PlanTemplates.getTemplate();
74
+ // Both should have title
75
+ expect(blank).toMatch(/^#/);
76
+ expect(template).toMatch(/^#/);
77
+ // Both should be valid markdown
78
+ expect(blank.trim().length).toBeGreaterThan(0);
79
+ expect(template.trim().length).toBeGreaterThan(0);
80
+ });
81
+ it('should have blank template with minimal structure', () => {
82
+ const blank = plan_templates_1.PlanTemplates.getBlank();
83
+ const template = plan_templates_1.PlanTemplates.getTemplate();
84
+ // Blank should have title
85
+ expect(blank).toMatch(/^#/);
86
+ // Blank should be shorter (no sections)
87
+ expect(blank.length).toBeLessThan(template.length);
88
+ // Blank should not have section headers
89
+ expect(blank).not.toContain('##');
90
+ });
91
+ });
92
+ });
93
+ //# sourceMappingURL=plan-templates.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-templates.test.js","sourceRoot":"","sources":["../../src/__tests__/plan-templates.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=validation-engine.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation-engine.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/validation-engine.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,167 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const validation_engine_1 = require("../validation-engine");
37
+ const fs = __importStar(require("fs-extra"));
38
+ const path = __importStar(require("path"));
39
+ const os = __importStar(require("os"));
40
+ describe('ValidationEngine', () => {
41
+ let testDir;
42
+ let validationEngine;
43
+ beforeEach(() => {
44
+ testDir = path.join(os.tmpdir(), `cxtmanager-validation-test-${Date.now()}`);
45
+ fs.ensureDirSync(testDir);
46
+ validationEngine = new validation_engine_1.ValidationEngine(testDir);
47
+ });
48
+ afterEach(async () => {
49
+ if (await fs.pathExists(testDir)) {
50
+ await fs.remove(testDir);
51
+ }
52
+ });
53
+ describe('validate', () => {
54
+ it('should return health status with no issues when files are aligned', async () => {
55
+ // Create aligned context files
56
+ const cxtDir = path.join(testDir, '.cxt');
57
+ await fs.ensureDir(cxtDir);
58
+ const contextContent = `# Project Context
59
+ ## Goals
60
+ - Build a great product
61
+ `;
62
+ const planContent = `# Implementation Plan
63
+ ## Goals
64
+ - Build a great product
65
+ `;
66
+ const guardrailContent = `# Guardrails
67
+ ## Rules
68
+ - Follow best practices
69
+ `;
70
+ await fs.writeFile(path.join(cxtDir, 'context.md'), contextContent);
71
+ await fs.writeFile(path.join(cxtDir, 'plan.md'), planContent);
72
+ await fs.writeFile(path.join(cxtDir, 'guardrail.md'), guardrailContent);
73
+ const health = await validationEngine.checkHealth();
74
+ expect(health).toBeDefined();
75
+ expect(health.overall).toBeDefined();
76
+ expect(Array.isArray(health.issues)).toBe(true);
77
+ expect(Array.isArray(health.suggestions)).toBe(true);
78
+ });
79
+ it('should detect empty files', async () => {
80
+ // ValidationEngine expects files directly in cxtPath, not in .cxt subdirectory
81
+ await fs.ensureDir(testDir);
82
+ // Create an empty file (just structure, no actual content)
83
+ // Only header and metadata - no user content
84
+ const emptyContent = `# Project Context
85
+
86
+ *Last Updated: 2025-01-15*
87
+ `;
88
+ await fs.writeFile(path.join(testDir, 'context.md'), emptyContent);
89
+ // Also create plan.md and guardrail.md so validation runs
90
+ await fs.writeFile(path.join(testDir, 'plan.md'), '# Plan\n');
91
+ await fs.writeFile(path.join(testDir, 'guardrail.md'), '# Guardrails\n');
92
+ const health = await validationEngine.checkHealth();
93
+ // Validation engine should detect empty content
94
+ expect(health).toBeDefined();
95
+ expect(health.overall).toBeDefined();
96
+ expect(Array.isArray(health.issues)).toBe(true);
97
+ // Should have issues for empty content
98
+ // The message should be "File is empty or contains only structure"
99
+ const emptyIssues = health.issues.filter(issue => issue.message.includes('empty') ||
100
+ issue.message.includes('very little content') ||
101
+ issue.message.includes('File is empty'));
102
+ expect(emptyIssues.length).toBeGreaterThan(0);
103
+ });
104
+ it('should detect short content files', async () => {
105
+ // ValidationEngine expects files directly in cxtPath, not in .cxt subdirectory
106
+ await fs.ensureDir(testDir);
107
+ // Create a file with very little content (below 100 chars, 3 lines)
108
+ const shortContent = `# Project Context
109
+
110
+ This is a short description.
111
+ `;
112
+ await fs.writeFile(path.join(testDir, 'context.md'), shortContent);
113
+ // Also create plan.md and guardrail.md so validation runs
114
+ await fs.writeFile(path.join(testDir, 'plan.md'), '# Plan\n');
115
+ await fs.writeFile(path.join(testDir, 'guardrail.md'), '# Guardrails\n');
116
+ const health = await validationEngine.checkHealth();
117
+ // Validation engine should detect short content
118
+ expect(health).toBeDefined();
119
+ expect(health.overall).toBeDefined();
120
+ expect(Array.isArray(health.issues)).toBe(true);
121
+ // Should have issues for short content
122
+ // The message should be "File has very little content"
123
+ const shortIssues = health.issues.filter(issue => issue.message.includes('very little content') ||
124
+ issue.message.includes('short') ||
125
+ issue.message.includes('File has very little'));
126
+ expect(shortIssues.length).toBeGreaterThan(0);
127
+ });
128
+ it('should check alignment between context and plan', async () => {
129
+ const cxtDir = path.join(testDir, '.cxt');
130
+ await fs.ensureDir(cxtDir);
131
+ const contextContent = `# Project Context
132
+ ## Goals
133
+ - Goal A
134
+ - Goal B
135
+ `;
136
+ const planContent = `# Implementation Plan
137
+ ## Goals
138
+ - Goal X (different from context)
139
+ - Goal Y
140
+ `;
141
+ await fs.writeFile(path.join(cxtDir, 'context.md'), contextContent);
142
+ await fs.writeFile(path.join(cxtDir, 'plan.md'), planContent);
143
+ const health = await validationEngine.checkHealth();
144
+ // Should return health status with alignment information
145
+ expect(health).toBeDefined();
146
+ expect(health.alignments).toBeDefined();
147
+ expect(health.alignments.contextToPlan).toBeDefined();
148
+ // May or may not detect alignment issues depending on implementation
149
+ });
150
+ });
151
+ describe('getAlignmentStatus', () => {
152
+ it('should return aligned status for matching content', async () => {
153
+ const cxtDir = path.join(testDir, '.cxt');
154
+ await fs.ensureDir(cxtDir);
155
+ const content = `# Test Content
156
+ ## Section
157
+ - Item 1
158
+ - Item 2
159
+ `;
160
+ await fs.writeFile(path.join(cxtDir, 'context.md'), content);
161
+ await fs.writeFile(path.join(cxtDir, 'plan.md'), content);
162
+ const health = await validationEngine.checkHealth();
163
+ expect(health.alignments.contextToPlan).toBeDefined();
164
+ });
165
+ });
166
+ });
167
+ //# sourceMappingURL=validation-engine.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation-engine.test.js","sourceRoot":"","sources":["../../src/__tests__/validation-engine.test.ts"],"names":[],"mappings":"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"}
@@ -41,15 +41,15 @@ export declare class ContextManager {
41
41
  private analyzeProject;
42
42
  private analyzeStructure;
43
43
  private detectTechnologies;
44
- private createManualTemplates;
45
- private createBasicContent;
46
- private getManualTemplate;
44
+ private createTemplateFiles;
45
+ private createBlankFiles;
46
+ private getBlankTemplate;
47
+ private getTemplateContent;
47
48
  private createConfig;
48
49
  private getContextFileStatus;
49
50
  /**
50
- * Detect if file content is mostly template/placeholder content
51
- * Returns status and percentage of template content (0-100)
51
+ * Analyze content quality - detect empty, short, or populated content
52
52
  */
53
- private detectContentStatus;
53
+ private analyzeContentQuality;
54
54
  }
55
55
  //# sourceMappingURL=context-manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"context-manager.d.ts","sourceRoot":"","sources":["../src/context-manager.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAmB,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,cAAc,EAAoB,MAAM,SAAS,CAAC;AAE5J,qBAAa,cAAc;IACzB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,MAAM,CAA0B;gBAE5B,WAAW,GAAE,MAAsB;IASzC,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IA+DzC,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC;IAMjC,MAAM,IAAI,OAAO,CAAC,UAAU,CAAC;IAiB7B,QAAQ,CAAC,KAAK,GAAE,OAAe,GAAG,OAAO,CAAC,YAAY,CAAC;IAiB7D;;;OAGG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAU9B,QAAQ,CAAC,MAAM,GAAE,OAAe,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IASpD,UAAU,IAAI,OAAO,CAAC,SAAS,CAAC;IAiBtC;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC;IAI/B,eAAe,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAuB/C;;OAEG;YACW,cAAc;IAQ5B;;OAEG;IACG,QAAQ,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;IASlE;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YAS3B,kBAAkB;YAMlB,cAAc;YA8Bd,gBAAgB;IAiB9B,OAAO,CAAC,kBAAkB;YAkBZ,qBAAqB;YAarB,kBAAkB;IAuEhC,OAAO,CAAC,iBAAiB;YAoJX,YAAY;YAwDZ,oBAAoB;IA8DlC;;;OAGG;IACH,OAAO,CAAC,mBAAmB;CAoE5B"}
1
+ {"version":3,"file":"context-manager.d.ts","sourceRoot":"","sources":["../src/context-manager.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAmB,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,cAAc,EAA+C,MAAM,SAAS,CAAC;AAEvL,qBAAa,cAAc;IACzB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,MAAM,CAA0B;gBAE5B,WAAW,GAAE,MAAsB;IASzC,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IA+DzC,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC;IAMjC,MAAM,IAAI,OAAO,CAAC,UAAU,CAAC;IAiB7B,QAAQ,CAAC,KAAK,GAAE,OAAe,GAAG,OAAO,CAAC,YAAY,CAAC;IAkB7D;;;OAGG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAU9B,QAAQ,CAAC,MAAM,GAAE,OAAe,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IASpD,UAAU,IAAI,OAAO,CAAC,SAAS,CAAC;IAiBtC;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC;IAI/B,eAAe,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAuB/C;;OAEG;YACW,cAAc;IAQ5B;;OAEG;IACG,QAAQ,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;IASlE;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YAS3B,kBAAkB;YAMlB,cAAc;YA8Bd,gBAAgB;IAiB9B,OAAO,CAAC,kBAAkB;YAkBZ,mBAAmB;YAanB,gBAAgB;IAc9B,OAAO,CAAC,gBAAgB;IAyBxB,OAAO,CAAC,kBAAkB;YAoJZ,YAAY;YAyDZ,oBAAoB;IAwElC;;OAEG;IACH,OAAO,CAAC,qBAAqB;CAwF9B"}