codingbuddy 0.0.0-canary.20251218084232.5c876ac → 0.0.0-canary.20251218092617.9981b9d

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 (69) hide show
  1. package/dist/src/analyzer/analyzer.module.d.ts +2 -0
  2. package/dist/src/analyzer/analyzer.module.js +21 -0
  3. package/dist/src/analyzer/analyzer.module.js.map +1 -0
  4. package/dist/src/analyzer/analyzer.service.d.ts +10 -0
  5. package/dist/src/analyzer/analyzer.service.js +73 -0
  6. package/dist/src/analyzer/analyzer.service.js.map +1 -0
  7. package/dist/src/analyzer/analyzer.service.spec.d.ts +1 -0
  8. package/dist/src/analyzer/analyzer.service.spec.js +67 -0
  9. package/dist/src/analyzer/analyzer.service.spec.js.map +1 -0
  10. package/dist/src/analyzer/analyzer.types.d.ts +70 -0
  11. package/dist/src/analyzer/analyzer.types.js +3 -0
  12. package/dist/src/analyzer/analyzer.types.js.map +1 -0
  13. package/dist/src/analyzer/code.sampler.d.ts +7 -0
  14. package/dist/src/analyzer/code.sampler.js +200 -0
  15. package/dist/src/analyzer/code.sampler.js.map +1 -0
  16. package/dist/src/analyzer/code.sampler.spec.d.ts +1 -0
  17. package/dist/src/analyzer/code.sampler.spec.js +153 -0
  18. package/dist/src/analyzer/code.sampler.spec.js.map +1 -0
  19. package/dist/src/analyzer/config.analyzer.d.ts +7 -0
  20. package/dist/src/analyzer/config.analyzer.js +178 -0
  21. package/dist/src/analyzer/config.analyzer.js.map +1 -0
  22. package/dist/src/analyzer/config.analyzer.spec.d.ts +1 -0
  23. package/dist/src/analyzer/config.analyzer.spec.js +146 -0
  24. package/dist/src/analyzer/config.analyzer.spec.js.map +1 -0
  25. package/dist/src/analyzer/directory.analyzer.d.ts +12 -0
  26. package/dist/src/analyzer/directory.analyzer.js +149 -0
  27. package/dist/src/analyzer/directory.analyzer.js.map +1 -0
  28. package/dist/src/analyzer/directory.analyzer.spec.d.ts +1 -0
  29. package/dist/src/analyzer/directory.analyzer.spec.js +119 -0
  30. package/dist/src/analyzer/directory.analyzer.spec.js.map +1 -0
  31. package/dist/src/analyzer/index.d.ts +7 -0
  32. package/dist/src/analyzer/index.js +32 -0
  33. package/dist/src/analyzer/index.js.map +1 -0
  34. package/dist/src/analyzer/package.analyzer.d.ts +12 -0
  35. package/dist/src/analyzer/package.analyzer.js +118 -0
  36. package/dist/src/analyzer/package.analyzer.js.map +1 -0
  37. package/dist/src/analyzer/package.analyzer.spec.d.ts +1 -0
  38. package/dist/src/analyzer/package.analyzer.spec.js +109 -0
  39. package/dist/src/analyzer/package.analyzer.spec.js.map +1 -0
  40. package/dist/src/config/config.loader.d.ts +22 -0
  41. package/dist/src/config/config.loader.js +105 -0
  42. package/dist/src/config/config.loader.js.map +1 -0
  43. package/dist/src/config/config.loader.spec.d.ts +1 -0
  44. package/dist/src/config/config.loader.spec.js +86 -0
  45. package/dist/src/config/config.loader.spec.js.map +1 -0
  46. package/dist/src/config/config.module.d.ts +2 -0
  47. package/dist/src/config/config.module.js +21 -0
  48. package/dist/src/config/config.module.js.map +1 -0
  49. package/dist/src/config/config.schema.d.ts +24 -24
  50. package/dist/src/config/config.service.d.ts +33 -0
  51. package/dist/src/config/config.service.js +126 -0
  52. package/dist/src/config/config.service.js.map +1 -0
  53. package/dist/src/config/context.loader.d.ts +24 -0
  54. package/dist/src/config/context.loader.js +153 -0
  55. package/dist/src/config/context.loader.js.map +1 -0
  56. package/dist/src/config/context.loader.spec.d.ts +1 -0
  57. package/dist/src/config/context.loader.spec.js +123 -0
  58. package/dist/src/config/context.loader.spec.js.map +1 -0
  59. package/dist/src/config/ignore.parser.d.ts +12 -0
  60. package/dist/src/config/ignore.parser.js +134 -0
  61. package/dist/src/config/ignore.parser.js.map +1 -0
  62. package/dist/src/config/ignore.parser.spec.d.ts +1 -0
  63. package/dist/src/config/ignore.parser.spec.js +130 -0
  64. package/dist/src/config/ignore.parser.spec.js.map +1 -0
  65. package/dist/src/config/index.d.ts +9 -0
  66. package/dist/src/config/index.js +26 -1
  67. package/dist/src/config/index.js.map +1 -1
  68. package/dist/tsconfig.tsbuildinfo +1 -1
  69. package/package.json +1 -1
@@ -0,0 +1,126 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var ConfigService_1;
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.ConfigService = void 0;
14
+ const common_1 = require("@nestjs/common");
15
+ const config_loader_1 = require("./config.loader");
16
+ const ignore_parser_1 = require("./ignore.parser");
17
+ const context_loader_1 = require("./context.loader");
18
+ let ConfigService = ConfigService_1 = class ConfigService {
19
+ constructor() {
20
+ this.logger = new common_1.Logger(ConfigService_1.name);
21
+ this.projectConfig = null;
22
+ this.isLoaded = false;
23
+ this.projectRoot = process.env.CODINGBUDDY_PROJECT_ROOT ?? process.cwd();
24
+ }
25
+ async onModuleInit() {
26
+ await this.loadProjectConfig();
27
+ }
28
+ setProjectRoot(root) {
29
+ this.projectRoot = root;
30
+ this.isLoaded = false;
31
+ this.projectConfig = null;
32
+ }
33
+ getProjectRoot() {
34
+ return this.projectRoot;
35
+ }
36
+ async loadProjectConfig() {
37
+ this.logger.log(`Loading project config from: ${this.projectRoot}`);
38
+ let configResult;
39
+ try {
40
+ configResult = await (0, config_loader_1.loadConfig)(this.projectRoot);
41
+ if (configResult.source) {
42
+ this.logger.log(`Loaded config from: ${configResult.source}`);
43
+ }
44
+ else {
45
+ this.logger.log('No config file found, using defaults');
46
+ }
47
+ }
48
+ catch (error) {
49
+ if (error instanceof config_loader_1.ConfigLoadError) {
50
+ this.logger.error(`Config load error: ${error.message}`);
51
+ }
52
+ configResult = { config: {}, source: null, warnings: [] };
53
+ }
54
+ const ignoreResult = await (0, ignore_parser_1.loadIgnoreFile)(this.projectRoot);
55
+ const allIgnorePatterns = [
56
+ ...(0, ignore_parser_1.getDefaultIgnorePatterns)(),
57
+ ...ignoreResult.patterns,
58
+ ];
59
+ if (ignoreResult.source) {
60
+ this.logger.log(`Loaded ignore patterns from: ${ignoreResult.source}`);
61
+ }
62
+ const contextResult = await (0, context_loader_1.loadContextFiles)(this.projectRoot);
63
+ if (contextResult.source) {
64
+ this.logger.log(`Loaded ${contextResult.files.length} context files from: ${contextResult.source}`);
65
+ }
66
+ if (contextResult.errors.length > 0) {
67
+ this.logger.warn(`Context loading errors: ${contextResult.errors.join(', ')}`);
68
+ }
69
+ this.projectConfig = {
70
+ settings: configResult.config,
71
+ ignorePatterns: allIgnorePatterns,
72
+ contextFiles: contextResult.files,
73
+ sources: {
74
+ config: configResult.source,
75
+ ignore: ignoreResult.source,
76
+ context: contextResult.source,
77
+ },
78
+ };
79
+ this.isLoaded = true;
80
+ return this.projectConfig;
81
+ }
82
+ async getProjectConfig() {
83
+ if (!this.isLoaded || !this.projectConfig) {
84
+ return this.loadProjectConfig();
85
+ }
86
+ return this.projectConfig;
87
+ }
88
+ async getSettings() {
89
+ const config = await this.getProjectConfig();
90
+ return config.settings;
91
+ }
92
+ async getIgnorePatterns() {
93
+ const config = await this.getProjectConfig();
94
+ return config.ignorePatterns;
95
+ }
96
+ async shouldIgnorePath(relativePath) {
97
+ const patterns = await this.getIgnorePatterns();
98
+ return (0, ignore_parser_1.shouldIgnore)(relativePath, patterns);
99
+ }
100
+ async getContextFiles() {
101
+ const config = await this.getProjectConfig();
102
+ return config.contextFiles;
103
+ }
104
+ async getFormattedContext() {
105
+ const files = await this.getContextFiles();
106
+ return (0, context_loader_1.formatContextForAI)(files);
107
+ }
108
+ async getLanguage() {
109
+ const settings = await this.getSettings();
110
+ return settings.language;
111
+ }
112
+ async reload() {
113
+ this.isLoaded = false;
114
+ this.projectConfig = null;
115
+ return this.loadProjectConfig();
116
+ }
117
+ isConfigLoaded() {
118
+ return this.isLoaded;
119
+ }
120
+ };
121
+ exports.ConfigService = ConfigService;
122
+ exports.ConfigService = ConfigService = ConfigService_1 = __decorate([
123
+ (0, common_1.Injectable)(),
124
+ __metadata("design:paramtypes", [])
125
+ ], ConfigService);
126
+ //# sourceMappingURL=config.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.service.js","sourceRoot":"","sources":["../../../src/config/config.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ export declare const CONTEXT_DIR_NAME = ".codingbuddy";
2
+ export declare const KNOWN_SUBDIRS: {
3
+ readonly context: "context";
4
+ readonly prompts: "prompts";
5
+ readonly agents: "agents";
6
+ };
7
+ export type ContextFileType = 'context' | 'prompt' | 'agent' | 'other';
8
+ export interface ContextFile {
9
+ path: string;
10
+ content: string;
11
+ type: ContextFileType;
12
+ extension: string;
13
+ }
14
+ export interface ContextLoadResult {
15
+ files: ContextFile[];
16
+ source: string | null;
17
+ errors: string[];
18
+ }
19
+ export declare function getContextFileType(relativePath: string): ContextFileType;
20
+ export declare function isLoadableFile(filePath: string): boolean;
21
+ export declare function loadContextFiles(projectRoot: string): Promise<ContextLoadResult>;
22
+ export declare function getFilesByType(files: ContextFile[], type: ContextFileType): ContextFile[];
23
+ export declare function formatContextForAI(files: ContextFile[]): string;
24
+ export declare function hasContextDir(projectRoot: string): boolean;
@@ -0,0 +1,153 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.KNOWN_SUBDIRS = exports.CONTEXT_DIR_NAME = void 0;
4
+ exports.getContextFileType = getContextFileType;
5
+ exports.isLoadableFile = isLoadableFile;
6
+ exports.loadContextFiles = loadContextFiles;
7
+ exports.getFilesByType = getFilesByType;
8
+ exports.formatContextForAI = formatContextForAI;
9
+ exports.hasContextDir = hasContextDir;
10
+ const fs = require("fs/promises");
11
+ const fs_1 = require("fs");
12
+ const path = require("path");
13
+ exports.CONTEXT_DIR_NAME = '.codingbuddy';
14
+ exports.KNOWN_SUBDIRS = {
15
+ context: 'context',
16
+ prompts: 'prompts',
17
+ agents: 'agents',
18
+ };
19
+ function getContextFileType(relativePath) {
20
+ const parts = relativePath.split('/');
21
+ if (parts[0] === exports.KNOWN_SUBDIRS.context) {
22
+ return 'context';
23
+ }
24
+ if (parts[0] === exports.KNOWN_SUBDIRS.prompts) {
25
+ return 'prompt';
26
+ }
27
+ if (parts[0] === exports.KNOWN_SUBDIRS.agents) {
28
+ return 'agent';
29
+ }
30
+ return 'other';
31
+ }
32
+ function isLoadableFile(filePath) {
33
+ const ext = path.extname(filePath).toLowerCase();
34
+ const loadableExtensions = [
35
+ '.md',
36
+ '.txt',
37
+ '.json',
38
+ '.yaml',
39
+ '.yml',
40
+ '.js',
41
+ '.ts',
42
+ '.jsx',
43
+ '.tsx',
44
+ ];
45
+ return loadableExtensions.includes(ext);
46
+ }
47
+ async function getAllFiles(dirPath, basePath = '') {
48
+ const files = [];
49
+ try {
50
+ const entries = await fs.readdir(dirPath, { withFileTypes: true });
51
+ for (const entry of entries) {
52
+ const relativePath = basePath ? `${basePath}/${entry.name}` : entry.name;
53
+ const fullPath = path.join(dirPath, entry.name);
54
+ if (entry.isDirectory()) {
55
+ const subFiles = await getAllFiles(fullPath, relativePath);
56
+ files.push(...subFiles);
57
+ }
58
+ else if (entry.isFile()) {
59
+ files.push(relativePath);
60
+ }
61
+ }
62
+ }
63
+ catch {
64
+ }
65
+ return files;
66
+ }
67
+ async function loadContextFile(contextDir, relativePath) {
68
+ const fullPath = path.join(contextDir, relativePath);
69
+ try {
70
+ const content = await fs.readFile(fullPath, 'utf-8');
71
+ const extension = path.extname(relativePath).toLowerCase();
72
+ return {
73
+ path: relativePath,
74
+ content,
75
+ type: getContextFileType(relativePath),
76
+ extension,
77
+ };
78
+ }
79
+ catch {
80
+ return null;
81
+ }
82
+ }
83
+ async function loadContextFiles(projectRoot) {
84
+ const contextDir = path.join(projectRoot, exports.CONTEXT_DIR_NAME);
85
+ if (!(0, fs_1.existsSync)(contextDir)) {
86
+ return {
87
+ files: [],
88
+ source: null,
89
+ errors: [],
90
+ };
91
+ }
92
+ const allFiles = await getAllFiles(contextDir);
93
+ const loadableFiles = allFiles.filter(isLoadableFile);
94
+ const files = [];
95
+ const errors = [];
96
+ for (const relativePath of loadableFiles) {
97
+ const file = await loadContextFile(contextDir, relativePath);
98
+ if (file) {
99
+ files.push(file);
100
+ }
101
+ else {
102
+ errors.push(`Failed to load: ${relativePath}`);
103
+ }
104
+ }
105
+ return {
106
+ files,
107
+ source: contextDir,
108
+ errors,
109
+ };
110
+ }
111
+ function getFilesByType(files, type) {
112
+ return files.filter((f) => f.type === type);
113
+ }
114
+ function formatContextForAI(files) {
115
+ if (files.length === 0) {
116
+ return '';
117
+ }
118
+ const sections = [];
119
+ const contextFiles = getFilesByType(files, 'context');
120
+ const promptFiles = getFilesByType(files, 'prompt');
121
+ const agentFiles = getFilesByType(files, 'agent');
122
+ const otherFiles = getFilesByType(files, 'other');
123
+ if (contextFiles.length > 0) {
124
+ sections.push('## Project Context\n');
125
+ for (const file of contextFiles) {
126
+ sections.push(`### ${file.path}\n\n${file.content}\n`);
127
+ }
128
+ }
129
+ if (promptFiles.length > 0) {
130
+ sections.push('## Custom Prompts\n');
131
+ for (const file of promptFiles) {
132
+ sections.push(`### ${file.path}\n\n${file.content}\n`);
133
+ }
134
+ }
135
+ if (agentFiles.length > 0) {
136
+ sections.push('## Custom Agents\n');
137
+ for (const file of agentFiles) {
138
+ sections.push(`### ${file.path}\n\n${file.content}\n`);
139
+ }
140
+ }
141
+ if (otherFiles.length > 0) {
142
+ sections.push('## Additional Files\n');
143
+ for (const file of otherFiles) {
144
+ sections.push(`### ${file.path}\n\n${file.content}\n`);
145
+ }
146
+ }
147
+ return sections.join('\n');
148
+ }
149
+ function hasContextDir(projectRoot) {
150
+ const contextDir = path.join(projectRoot, exports.CONTEXT_DIR_NAME);
151
+ return (0, fs_1.existsSync)(contextDir);
152
+ }
153
+ //# sourceMappingURL=context.loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.loader.js","sourceRoot":"","sources":["../../../src/config/context.loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const context_loader_1 = require("./context.loader");
5
+ (0, vitest_1.describe)('context.loader', () => {
6
+ (0, vitest_1.describe)('getContextFileType', () => {
7
+ (0, vitest_1.it)('should identify context files', () => {
8
+ (0, vitest_1.expect)((0, context_loader_1.getContextFileType)('context/architecture.md')).toBe('context');
9
+ (0, vitest_1.expect)((0, context_loader_1.getContextFileType)('context/deep/nested/file.md')).toBe('context');
10
+ });
11
+ (0, vitest_1.it)('should identify prompt files', () => {
12
+ (0, vitest_1.expect)((0, context_loader_1.getContextFileType)('prompts/review.md')).toBe('prompt');
13
+ (0, vitest_1.expect)((0, context_loader_1.getContextFileType)('prompts/custom/helper.md')).toBe('prompt');
14
+ });
15
+ (0, vitest_1.it)('should identify agent files', () => {
16
+ (0, vitest_1.expect)((0, context_loader_1.getContextFileType)('agents/reviewer.json')).toBe('agent');
17
+ (0, vitest_1.expect)((0, context_loader_1.getContextFileType)('agents/custom/specialist.json')).toBe('agent');
18
+ });
19
+ (0, vitest_1.it)('should identify other files', () => {
20
+ (0, vitest_1.expect)((0, context_loader_1.getContextFileType)('readme.md')).toBe('other');
21
+ (0, vitest_1.expect)((0, context_loader_1.getContextFileType)('config.json')).toBe('other');
22
+ (0, vitest_1.expect)((0, context_loader_1.getContextFileType)('unknown/file.txt')).toBe('other');
23
+ });
24
+ });
25
+ (0, vitest_1.describe)('isLoadableFile', () => {
26
+ (0, vitest_1.it)('should accept markdown files', () => {
27
+ (0, vitest_1.expect)((0, context_loader_1.isLoadableFile)('file.md')).toBe(true);
28
+ (0, vitest_1.expect)((0, context_loader_1.isLoadableFile)('path/to/file.md')).toBe(true);
29
+ });
30
+ (0, vitest_1.it)('should accept text files', () => {
31
+ (0, vitest_1.expect)((0, context_loader_1.isLoadableFile)('file.txt')).toBe(true);
32
+ });
33
+ (0, vitest_1.it)('should accept json and yaml files', () => {
34
+ (0, vitest_1.expect)((0, context_loader_1.isLoadableFile)('config.json')).toBe(true);
35
+ (0, vitest_1.expect)((0, context_loader_1.isLoadableFile)('config.yaml')).toBe(true);
36
+ (0, vitest_1.expect)((0, context_loader_1.isLoadableFile)('config.yml')).toBe(true);
37
+ });
38
+ (0, vitest_1.it)('should accept code files', () => {
39
+ (0, vitest_1.expect)((0, context_loader_1.isLoadableFile)('file.js')).toBe(true);
40
+ (0, vitest_1.expect)((0, context_loader_1.isLoadableFile)('file.ts')).toBe(true);
41
+ (0, vitest_1.expect)((0, context_loader_1.isLoadableFile)('file.jsx')).toBe(true);
42
+ (0, vitest_1.expect)((0, context_loader_1.isLoadableFile)('file.tsx')).toBe(true);
43
+ });
44
+ (0, vitest_1.it)('should reject binary and unknown files', () => {
45
+ (0, vitest_1.expect)((0, context_loader_1.isLoadableFile)('image.png')).toBe(false);
46
+ (0, vitest_1.expect)((0, context_loader_1.isLoadableFile)('doc.pdf')).toBe(false);
47
+ (0, vitest_1.expect)((0, context_loader_1.isLoadableFile)('archive.zip')).toBe(false);
48
+ (0, vitest_1.expect)((0, context_loader_1.isLoadableFile)('noextension')).toBe(false);
49
+ });
50
+ });
51
+ (0, vitest_1.describe)('getFilesByType', () => {
52
+ const mockFiles = [
53
+ { path: 'context/arch.md', content: 'arch', type: 'context', extension: '.md' },
54
+ { path: 'context/api.md', content: 'api', type: 'context', extension: '.md' },
55
+ { path: 'prompts/review.md', content: 'review', type: 'prompt', extension: '.md' },
56
+ { path: 'agents/dev.json', content: '{}', type: 'agent', extension: '.json' },
57
+ { path: 'readme.md', content: 'readme', type: 'other', extension: '.md' },
58
+ ];
59
+ (0, vitest_1.it)('should filter by context type', () => {
60
+ const result = (0, context_loader_1.getFilesByType)(mockFiles, 'context');
61
+ (0, vitest_1.expect)(result).toHaveLength(2);
62
+ (0, vitest_1.expect)(result.map((f) => f.path)).toEqual(['context/arch.md', 'context/api.md']);
63
+ });
64
+ (0, vitest_1.it)('should filter by prompt type', () => {
65
+ const result = (0, context_loader_1.getFilesByType)(mockFiles, 'prompt');
66
+ (0, vitest_1.expect)(result).toHaveLength(1);
67
+ (0, vitest_1.expect)(result[0].path).toBe('prompts/review.md');
68
+ });
69
+ (0, vitest_1.it)('should filter by agent type', () => {
70
+ const result = (0, context_loader_1.getFilesByType)(mockFiles, 'agent');
71
+ (0, vitest_1.expect)(result).toHaveLength(1);
72
+ (0, vitest_1.expect)(result[0].path).toBe('agents/dev.json');
73
+ });
74
+ (0, vitest_1.it)('should filter by other type', () => {
75
+ const result = (0, context_loader_1.getFilesByType)(mockFiles, 'other');
76
+ (0, vitest_1.expect)(result).toHaveLength(1);
77
+ (0, vitest_1.expect)(result[0].path).toBe('readme.md');
78
+ });
79
+ (0, vitest_1.it)('should return empty array for no matches', () => {
80
+ const result = (0, context_loader_1.getFilesByType)([], 'context');
81
+ (0, vitest_1.expect)(result).toEqual([]);
82
+ });
83
+ });
84
+ (0, vitest_1.describe)('formatContextForAI', () => {
85
+ (0, vitest_1.it)('should format context files correctly', () => {
86
+ const files = [
87
+ { path: 'context/arch.md', content: 'Architecture docs', type: 'context', extension: '.md' },
88
+ ];
89
+ const result = (0, context_loader_1.formatContextForAI)(files);
90
+ (0, vitest_1.expect)(result).toContain('## Project Context');
91
+ (0, vitest_1.expect)(result).toContain('### context/arch.md');
92
+ (0, vitest_1.expect)(result).toContain('Architecture docs');
93
+ });
94
+ (0, vitest_1.it)('should group files by type', () => {
95
+ const files = [
96
+ { path: 'context/arch.md', content: 'arch', type: 'context', extension: '.md' },
97
+ { path: 'prompts/review.md', content: 'review', type: 'prompt', extension: '.md' },
98
+ { path: 'agents/dev.json', content: '{}', type: 'agent', extension: '.json' },
99
+ { path: 'readme.md', content: 'readme', type: 'other', extension: '.md' },
100
+ ];
101
+ const result = (0, context_loader_1.formatContextForAI)(files);
102
+ (0, vitest_1.expect)(result).toContain('## Project Context');
103
+ (0, vitest_1.expect)(result).toContain('## Custom Prompts');
104
+ (0, vitest_1.expect)(result).toContain('## Custom Agents');
105
+ (0, vitest_1.expect)(result).toContain('## Additional Files');
106
+ });
107
+ (0, vitest_1.it)('should return empty string for no files', () => {
108
+ const result = (0, context_loader_1.formatContextForAI)([]);
109
+ (0, vitest_1.expect)(result).toBe('');
110
+ });
111
+ (0, vitest_1.it)('should only include sections with files', () => {
112
+ const files = [
113
+ { path: 'context/arch.md', content: 'arch', type: 'context', extension: '.md' },
114
+ ];
115
+ const result = (0, context_loader_1.formatContextForAI)(files);
116
+ (0, vitest_1.expect)(result).toContain('## Project Context');
117
+ (0, vitest_1.expect)(result).not.toContain('## Custom Prompts');
118
+ (0, vitest_1.expect)(result).not.toContain('## Custom Agents');
119
+ (0, vitest_1.expect)(result).not.toContain('## Additional Files');
120
+ });
121
+ });
122
+ });
123
+ //# sourceMappingURL=context.loader.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.loader.spec.js","sourceRoot":"","sources":["../../../src/config/context.loader.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export declare const IGNORE_FILE_NAME = ".codingignore";
2
+ export interface IgnoreParseResult {
3
+ patterns: string[];
4
+ source: string | null;
5
+ }
6
+ export declare function parseIgnoreLine(line: string): string | null;
7
+ export declare function parseIgnoreContent(content: string): string[];
8
+ export declare function loadIgnoreFile(projectRoot: string): Promise<IgnoreParseResult>;
9
+ export declare function patternToRegex(pattern: string): RegExp;
10
+ export declare function shouldIgnore(relativePath: string, patterns: string[]): boolean;
11
+ export declare function filterIgnored(paths: string[], patterns: string[]): string[];
12
+ export declare function getDefaultIgnorePatterns(): string[];
@@ -0,0 +1,134 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IGNORE_FILE_NAME = void 0;
4
+ exports.parseIgnoreLine = parseIgnoreLine;
5
+ exports.parseIgnoreContent = parseIgnoreContent;
6
+ exports.loadIgnoreFile = loadIgnoreFile;
7
+ exports.patternToRegex = patternToRegex;
8
+ exports.shouldIgnore = shouldIgnore;
9
+ exports.filterIgnored = filterIgnored;
10
+ exports.getDefaultIgnorePatterns = getDefaultIgnorePatterns;
11
+ const fs = require("fs/promises");
12
+ const fs_1 = require("fs");
13
+ const path = require("path");
14
+ exports.IGNORE_FILE_NAME = '.codingignore';
15
+ function parseIgnoreLine(line) {
16
+ const trimmed = line.trim();
17
+ if (trimmed === '') {
18
+ return null;
19
+ }
20
+ if (trimmed.startsWith('#')) {
21
+ return null;
22
+ }
23
+ return trimmed;
24
+ }
25
+ function parseIgnoreContent(content) {
26
+ const lines = content.split('\n');
27
+ const patterns = [];
28
+ for (const line of lines) {
29
+ const parsed = parseIgnoreLine(line);
30
+ if (parsed !== null) {
31
+ patterns.push(parsed);
32
+ }
33
+ }
34
+ return patterns;
35
+ }
36
+ async function loadIgnoreFile(projectRoot) {
37
+ const ignorePath = path.join(projectRoot, exports.IGNORE_FILE_NAME);
38
+ if (!(0, fs_1.existsSync)(ignorePath)) {
39
+ return {
40
+ patterns: [],
41
+ source: null,
42
+ };
43
+ }
44
+ try {
45
+ const content = await fs.readFile(ignorePath, 'utf-8');
46
+ const patterns = parseIgnoreContent(content);
47
+ return {
48
+ patterns,
49
+ source: ignorePath,
50
+ };
51
+ }
52
+ catch {
53
+ return {
54
+ patterns: [],
55
+ source: null,
56
+ };
57
+ }
58
+ }
59
+ function patternToRegex(pattern) {
60
+ let regexStr = pattern;
61
+ const isNegated = regexStr.startsWith('!');
62
+ if (isNegated) {
63
+ regexStr = regexStr.slice(1);
64
+ }
65
+ const isDirOnly = regexStr.endsWith('/');
66
+ if (isDirOnly) {
67
+ regexStr = regexStr.slice(0, -1);
68
+ }
69
+ const isRootAnchored = regexStr.startsWith('/');
70
+ if (isRootAnchored) {
71
+ regexStr = regexStr.slice(1);
72
+ }
73
+ const startsWithGlobstar = regexStr.startsWith('**/');
74
+ if (startsWithGlobstar) {
75
+ regexStr = regexStr.slice(3);
76
+ }
77
+ regexStr = regexStr.replace(/[.+^${}()|[\]\\]/g, '\\$&');
78
+ regexStr = regexStr.replace(/\*\*\//g, '(.*/)?');
79
+ regexStr = regexStr.replace(/\*\*$/g, '.*');
80
+ regexStr = regexStr.replace(/\*\*/g, '.*');
81
+ regexStr = regexStr.replace(/\*/g, '[^/]*');
82
+ regexStr = regexStr.replace(/\?/g, '[^/]');
83
+ if (isRootAnchored) {
84
+ regexStr = '^' + regexStr;
85
+ }
86
+ else if (startsWithGlobstar) {
87
+ regexStr = '^(.*/)?' + regexStr;
88
+ }
89
+ else {
90
+ regexStr = '(^|/)' + regexStr;
91
+ }
92
+ if (isDirOnly) {
93
+ regexStr = regexStr + '(/|$)';
94
+ }
95
+ else {
96
+ regexStr = regexStr + '($|/)';
97
+ }
98
+ return new RegExp(regexStr);
99
+ }
100
+ function shouldIgnore(relativePath, patterns) {
101
+ const normalizedPath = relativePath.replace(/\\/g, '/');
102
+ let ignored = false;
103
+ for (const pattern of patterns) {
104
+ const isNegated = pattern.startsWith('!');
105
+ const actualPattern = isNegated ? pattern.slice(1) : pattern;
106
+ const regex = patternToRegex(actualPattern);
107
+ if (regex.test(normalizedPath)) {
108
+ ignored = !isNegated;
109
+ }
110
+ }
111
+ return ignored;
112
+ }
113
+ function filterIgnored(paths, patterns) {
114
+ return paths.filter((p) => !shouldIgnore(p, patterns));
115
+ }
116
+ function getDefaultIgnorePatterns() {
117
+ return [
118
+ 'node_modules/',
119
+ '.git/',
120
+ 'dist/',
121
+ 'build/',
122
+ '.next/',
123
+ '.nuxt/',
124
+ 'coverage/',
125
+ '.nyc_output/',
126
+ '*.log',
127
+ '.DS_Store',
128
+ 'Thumbs.db',
129
+ '.env',
130
+ '.env.*',
131
+ '!.env.example',
132
+ ];
133
+ }
134
+ //# sourceMappingURL=ignore.parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ignore.parser.js","sourceRoot":"","sources":["../../../src/config/ignore.parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};