codingbuddy 2.0.0 → 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.
- package/dist/src/app.module.js +4 -0
- package/dist/src/app.module.js.map +1 -1
- package/dist/src/checklist/checklist.module.d.ts +2 -0
- package/dist/src/checklist/checklist.module.js +29 -0
- package/dist/src/checklist/checklist.module.js.map +1 -0
- package/dist/src/checklist/checklist.schema.d.ts +14 -0
- package/dist/src/checklist/checklist.schema.js +189 -0
- package/dist/src/checklist/checklist.schema.js.map +1 -0
- package/dist/src/checklist/checklist.service.d.ts +21 -0
- package/dist/src/checklist/checklist.service.js +258 -0
- package/dist/src/checklist/checklist.service.js.map +1 -0
- package/dist/src/checklist/checklist.types.d.ts +56 -0
- package/dist/src/checklist/checklist.types.js +24 -0
- package/dist/src/checklist/checklist.types.js.map +1 -0
- package/dist/src/checklist/index.d.ts +3 -0
- package/dist/src/checklist/index.js +20 -0
- package/dist/src/checklist/index.js.map +1 -0
- package/dist/src/cli/cli.types.d.ts +0 -6
- package/dist/src/cli/index.d.ts +1 -1
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/cli/init/init.command.js +10 -1
- package/dist/src/cli/init/init.command.js.map +1 -1
- package/dist/src/cli/init/prompts/agent-prompt.d.ts +9 -0
- package/dist/src/cli/init/prompts/agent-prompt.js +28 -0
- package/dist/src/cli/init/prompts/agent-prompt.js.map +1 -0
- package/dist/src/cli/init/prompts/index.d.ts +5 -0
- package/dist/src/cli/init/prompts/index.js +9 -1
- package/dist/src/cli/init/prompts/index.js.map +1 -1
- package/dist/src/cli/init/prompts/language-prompt.d.ts +8 -0
- package/dist/src/cli/init/prompts/language-prompt.js +30 -0
- package/dist/src/cli/init/prompts/language-prompt.js.map +1 -0
- package/dist/src/cli/init/templates/template.renderer.js +16 -6
- package/dist/src/cli/init/templates/template.renderer.js.map +1 -1
- package/dist/src/cli/init/templates/template.types.d.ts +1 -0
- package/dist/src/context/context.module.d.ts +2 -0
- package/dist/src/context/context.module.js +23 -0
- package/dist/src/context/context.module.js.map +1 -0
- package/dist/src/context/context.service.d.ts +21 -0
- package/dist/src/context/context.service.js +286 -0
- package/dist/src/context/context.service.js.map +1 -0
- package/dist/src/context/context.types.d.ts +50 -0
- package/dist/src/context/context.types.js +42 -0
- package/dist/src/context/context.types.js.map +1 -0
- package/dist/src/context/index.d.ts +3 -0
- package/dist/src/context/index.js +20 -0
- package/dist/src/context/index.js.map +1 -0
- package/dist/src/context/intent-patterns.d.ts +7 -0
- package/dist/src/context/intent-patterns.js +50 -0
- package/dist/src/context/intent-patterns.js.map +1 -0
- package/dist/src/keyword/keyword.service.d.ts +6 -2
- package/dist/src/keyword/keyword.service.js +7 -6
- package/dist/src/keyword/keyword.service.js.map +1 -1
- package/dist/src/keyword/keyword.types.d.ts +15 -2
- package/dist/src/keyword/keyword.types.js +63 -1
- package/dist/src/keyword/keyword.types.js.map +1 -1
- package/dist/src/keyword/primary-agent-resolver.d.ts +6 -0
- package/dist/src/keyword/primary-agent-resolver.js +211 -0
- package/dist/src/keyword/primary-agent-resolver.js.map +1 -1
- package/dist/src/mcp/handlers/agent.handler.d.ts +11 -0
- package/dist/src/mcp/handlers/agent.handler.js +167 -0
- package/dist/src/mcp/handlers/agent.handler.js.map +1 -0
- package/dist/src/mcp/handlers/base.handler.d.ts +15 -0
- package/dist/src/mcp/handlers/base.handler.js +3 -0
- package/dist/src/mcp/handlers/base.handler.js.map +1 -0
- package/dist/src/mcp/handlers/checklist-context.handler.d.ts +13 -0
- package/dist/src/mcp/handlers/checklist-context.handler.js +141 -0
- package/dist/src/mcp/handlers/checklist-context.handler.js.map +1 -0
- package/dist/src/mcp/handlers/config.handler.d.ts +15 -0
- package/dist/src/mcp/handlers/config.handler.js +104 -0
- package/dist/src/mcp/handlers/config.handler.js.map +1 -0
- package/dist/src/mcp/handlers/index.d.ts +8 -0
- package/dist/src/mcp/handlers/index.js +17 -0
- package/dist/src/mcp/handlers/index.js.map +1 -0
- package/dist/src/mcp/handlers/mode.handler.d.ts +16 -0
- package/dist/src/mcp/handlers/mode.handler.js +100 -0
- package/dist/src/mcp/handlers/mode.handler.js.map +1 -0
- package/dist/src/mcp/handlers/rules.handler.d.ts +11 -0
- package/dist/src/mcp/handlers/rules.handler.js +99 -0
- package/dist/src/mcp/handlers/rules.handler.js.map +1 -0
- package/dist/src/mcp/handlers/skill.handler.d.ts +11 -0
- package/dist/src/mcp/handlers/skill.handler.js +111 -0
- package/dist/src/mcp/handlers/skill.handler.js.map +1 -0
- package/dist/src/mcp/mcp.module.js +26 -1
- package/dist/src/mcp/mcp.module.js.map +1 -1
- package/dist/src/mcp/mcp.service.d.ts +3 -25
- package/dist/src/mcp/mcp.service.js +13 -366
- package/dist/src/mcp/mcp.service.js.map +1 -1
- package/dist/src/model/index.d.ts +1 -0
- package/dist/src/model/index.js +3 -0
- package/dist/src/model/index.js.map +1 -1
- package/dist/src/model/model-resolver.service.d.ts +13 -0
- package/dist/src/model/model-resolver.service.js +63 -0
- package/dist/src/model/model-resolver.service.js.map +1 -0
- package/dist/src/model/model.resolver.js +2 -1
- package/dist/src/model/model.resolver.js.map +1 -1
- package/dist/src/shared/filesystem.interface.d.ts +15 -0
- package/dist/src/shared/filesystem.interface.js +14 -0
- package/dist/src/shared/filesystem.interface.js.map +1 -0
- package/dist/src/shared/node-filesystem.service.d.ts +5 -0
- package/dist/src/shared/node-filesystem.service.js +25 -0
- package/dist/src/shared/node-filesystem.service.js.map +1 -0
- package/dist/src/shared/path.utils.js.map +1 -1
- package/dist/src/shared/pattern-matcher.d.ts +11 -0
- package/dist/src/shared/pattern-matcher.js +39 -0
- package/dist/src/shared/pattern-matcher.js.map +1 -0
- package/dist/src/shared/security.utils.d.ts +17 -0
- package/dist/src/shared/security.utils.js +63 -0
- package/dist/src/shared/security.utils.js.map +1 -1
- package/dist/src/shared/validation.constants.d.ts +10 -0
- package/dist/src/shared/validation.constants.js +42 -1
- package/dist/src/shared/validation.constants.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +3 -2
- package/dist/src/config/config.types.d.ts +0 -2
- package/dist/src/config/config.types.js +0 -6
- package/dist/src/config/config.types.js.map +0 -1
package/dist/src/app.module.js
CHANGED
|
@@ -13,6 +13,8 @@ const rules_module_1 = require("./rules/rules.module");
|
|
|
13
13
|
const mcp_module_1 = require("./mcp/mcp.module");
|
|
14
14
|
const keyword_module_1 = require("./keyword/keyword.module");
|
|
15
15
|
const agent_module_1 = require("./agent/agent.module");
|
|
16
|
+
const checklist_module_1 = require("./checklist/checklist.module");
|
|
17
|
+
const context_module_1 = require("./context/context.module");
|
|
16
18
|
let AppModule = class AppModule {
|
|
17
19
|
};
|
|
18
20
|
exports.AppModule = AppModule;
|
|
@@ -24,6 +26,8 @@ exports.AppModule = AppModule = __decorate([
|
|
|
24
26
|
mcp_module_1.McpModule,
|
|
25
27
|
keyword_module_1.KeywordModule,
|
|
26
28
|
agent_module_1.AgentModule,
|
|
29
|
+
checklist_module_1.ChecklistModule,
|
|
30
|
+
context_module_1.ContextModule,
|
|
27
31
|
],
|
|
28
32
|
})
|
|
29
33
|
], AppModule);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.module.js","sourceRoot":"","sources":["../../src/app.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,2CAA8C;AAC9C,uDAAmD;AACnD,iDAA6C;AAC7C,6DAAyD;AACzD,uDAAmD;
|
|
1
|
+
{"version":3,"file":"app.module.js","sourceRoot":"","sources":["../../src/app.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,2CAA8C;AAC9C,uDAAmD;AACnD,iDAA6C;AAC7C,6DAAyD;AACzD,uDAAmD;AACnD,mEAA+D;AAC/D,6DAAyD;AAalD,IAAM,SAAS,GAAf,MAAM,SAAS;CAAG,CAAA;AAAZ,8BAAS;oBAAT,SAAS;IAXrB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,qBAAY,CAAC,OAAO,EAAE;YACtB,0BAAW;YACX,sBAAS;YACT,8BAAa;YACb,0BAAW;YACX,kCAAe;YACf,8BAAa;SACd;KACF,CAAC;GACW,SAAS,CAAG"}
|
|
@@ -0,0 +1,29 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.ChecklistModule = void 0;
|
|
10
|
+
const common_1 = require("@nestjs/common");
|
|
11
|
+
const checklist_service_1 = require("./checklist.service");
|
|
12
|
+
const filesystem_interface_1 = require("../shared/filesystem.interface");
|
|
13
|
+
const node_filesystem_service_1 = require("../shared/node-filesystem.service");
|
|
14
|
+
let ChecklistModule = class ChecklistModule {
|
|
15
|
+
};
|
|
16
|
+
exports.ChecklistModule = ChecklistModule;
|
|
17
|
+
exports.ChecklistModule = ChecklistModule = __decorate([
|
|
18
|
+
(0, common_1.Module)({
|
|
19
|
+
providers: [
|
|
20
|
+
checklist_service_1.ChecklistService,
|
|
21
|
+
{
|
|
22
|
+
provide: filesystem_interface_1.FILE_SYSTEM,
|
|
23
|
+
useClass: node_filesystem_service_1.NodeFileSystemService,
|
|
24
|
+
},
|
|
25
|
+
],
|
|
26
|
+
exports: [checklist_service_1.ChecklistService],
|
|
27
|
+
})
|
|
28
|
+
], ChecklistModule);
|
|
29
|
+
//# sourceMappingURL=checklist.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checklist.module.js","sourceRoot":"","sources":["../../../src/checklist/checklist.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,2DAAuD;AACvD,yEAA6D;AAC7D,+EAA0E;AAYnE,IAAM,eAAe,GAArB,MAAM,eAAe;CAAG,CAAA;AAAlB,0CAAe;0BAAf,eAAe;IAV3B,IAAA,eAAM,EAAC;QACN,SAAS,EAAE;YACT,oCAAgB;YAChB;gBACE,OAAO,EAAE,kCAAW;gBACpB,QAAQ,EAAE,+CAAqB;aAChC;SACF;QACD,OAAO,EAAE,CAAC,oCAAgB,CAAC;KAC5B,CAAC;GACW,eAAe,CAAG"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type ChecklistDefinition, type ChecklistCategory, type ChecklistItem } from './checklist.types';
|
|
2
|
+
export declare class ChecklistSchemaError extends Error {
|
|
3
|
+
readonly path: string;
|
|
4
|
+
readonly value?: unknown | undefined;
|
|
5
|
+
constructor(message: string, path: string, value?: unknown | undefined);
|
|
6
|
+
}
|
|
7
|
+
export interface ValidationResult {
|
|
8
|
+
valid: boolean;
|
|
9
|
+
errors: string[];
|
|
10
|
+
}
|
|
11
|
+
export declare function validateChecklistSchema(data: unknown): ValidationResult;
|
|
12
|
+
export declare function parseAndValidateChecklist(jsonContent: string): ChecklistDefinition;
|
|
13
|
+
export declare function isValidChecklistItem(item: unknown): item is ChecklistItem;
|
|
14
|
+
export declare function isValidChecklistCategory(category: unknown): category is ChecklistCategory;
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ChecklistSchemaError = void 0;
|
|
4
|
+
exports.validateChecklistSchema = validateChecklistSchema;
|
|
5
|
+
exports.parseAndValidateChecklist = parseAndValidateChecklist;
|
|
6
|
+
exports.isValidChecklistItem = isValidChecklistItem;
|
|
7
|
+
exports.isValidChecklistCategory = isValidChecklistCategory;
|
|
8
|
+
const checklist_types_1 = require("./checklist.types");
|
|
9
|
+
const VALID_PRIORITIES = new Set(checklist_types_1.CHECKLIST_PRIORITIES);
|
|
10
|
+
const VALID_DOMAINS = new Set(checklist_types_1.CHECKLIST_DOMAINS);
|
|
11
|
+
class ChecklistSchemaError extends Error {
|
|
12
|
+
constructor(message, path, value) {
|
|
13
|
+
super(`${message} at ${path}`);
|
|
14
|
+
this.path = path;
|
|
15
|
+
this.value = value;
|
|
16
|
+
this.name = 'ChecklistSchemaError';
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.ChecklistSchemaError = ChecklistSchemaError;
|
|
20
|
+
function validateItem(item, path) {
|
|
21
|
+
const errors = [];
|
|
22
|
+
if (!item || typeof item !== 'object') {
|
|
23
|
+
errors.push(`${path}: Expected object, got ${typeof item}`);
|
|
24
|
+
return errors;
|
|
25
|
+
}
|
|
26
|
+
const obj = item;
|
|
27
|
+
if (typeof obj.id !== 'string' || obj.id.trim() === '') {
|
|
28
|
+
errors.push(`${path}.id: Required non-empty string`);
|
|
29
|
+
}
|
|
30
|
+
if (typeof obj.text !== 'string' || obj.text.trim() === '') {
|
|
31
|
+
errors.push(`${path}.text: Required non-empty string`);
|
|
32
|
+
}
|
|
33
|
+
if (typeof obj.priority !== 'string') {
|
|
34
|
+
errors.push(`${path}.priority: Required string`);
|
|
35
|
+
}
|
|
36
|
+
else if (!VALID_PRIORITIES.has(obj.priority)) {
|
|
37
|
+
errors.push(`${path}.priority: Invalid value '${obj.priority}'. Must be one of: ${[...VALID_PRIORITIES].join(', ')}`);
|
|
38
|
+
}
|
|
39
|
+
if (obj.reason !== undefined && typeof obj.reason !== 'string') {
|
|
40
|
+
errors.push(`${path}.reason: Expected string, got ${typeof obj.reason}`);
|
|
41
|
+
}
|
|
42
|
+
if (obj.reference !== undefined && typeof obj.reference !== 'string') {
|
|
43
|
+
errors.push(`${path}.reference: Expected string, got ${typeof obj.reference}`);
|
|
44
|
+
}
|
|
45
|
+
return errors;
|
|
46
|
+
}
|
|
47
|
+
function validateTriggers(triggers, path) {
|
|
48
|
+
const errors = [];
|
|
49
|
+
if (!triggers || typeof triggers !== 'object') {
|
|
50
|
+
errors.push(`${path}: Expected object, got ${typeof triggers}`);
|
|
51
|
+
return errors;
|
|
52
|
+
}
|
|
53
|
+
const obj = triggers;
|
|
54
|
+
if (!Array.isArray(obj.files)) {
|
|
55
|
+
errors.push(`${path}.files: Required array`);
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
obj.files.forEach((file, i) => {
|
|
59
|
+
if (typeof file !== 'string') {
|
|
60
|
+
errors.push(`${path}.files[${i}]: Expected string, got ${typeof file}`);
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
if (obj.imports !== undefined) {
|
|
65
|
+
if (!Array.isArray(obj.imports)) {
|
|
66
|
+
errors.push(`${path}.imports: Expected array`);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
obj.imports.forEach((imp, i) => {
|
|
70
|
+
if (typeof imp !== 'string') {
|
|
71
|
+
errors.push(`${path}.imports[${i}]: Expected string, got ${typeof imp}`);
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
if (obj.patterns !== undefined) {
|
|
77
|
+
if (!Array.isArray(obj.patterns)) {
|
|
78
|
+
errors.push(`${path}.patterns: Expected array`);
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
obj.patterns.forEach((pattern, i) => {
|
|
82
|
+
if (typeof pattern !== 'string') {
|
|
83
|
+
errors.push(`${path}.patterns[${i}]: Expected string, got ${typeof pattern}`);
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return errors;
|
|
89
|
+
}
|
|
90
|
+
function validateCategory(category, path) {
|
|
91
|
+
const errors = [];
|
|
92
|
+
if (!category || typeof category !== 'object') {
|
|
93
|
+
errors.push(`${path}: Expected object, got ${typeof category}`);
|
|
94
|
+
return errors;
|
|
95
|
+
}
|
|
96
|
+
const obj = category;
|
|
97
|
+
if (typeof obj.name !== 'string' || obj.name.trim() === '') {
|
|
98
|
+
errors.push(`${path}.name: Required non-empty string`);
|
|
99
|
+
}
|
|
100
|
+
if (obj.triggers === undefined) {
|
|
101
|
+
errors.push(`${path}.triggers: Required`);
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
errors.push(...validateTriggers(obj.triggers, `${path}.triggers`));
|
|
105
|
+
}
|
|
106
|
+
if (!Array.isArray(obj.items)) {
|
|
107
|
+
errors.push(`${path}.items: Required array`);
|
|
108
|
+
}
|
|
109
|
+
else if (obj.items.length === 0) {
|
|
110
|
+
errors.push(`${path}.items: Must have at least one item`);
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
obj.items.forEach((item, i) => {
|
|
114
|
+
errors.push(...validateItem(item, `${path}.items[${i}]`));
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
return errors;
|
|
118
|
+
}
|
|
119
|
+
function validateChecklistSchema(data) {
|
|
120
|
+
const errors = [];
|
|
121
|
+
if (!data || typeof data !== 'object') {
|
|
122
|
+
return {
|
|
123
|
+
valid: false,
|
|
124
|
+
errors: [`Root: Expected object, got ${typeof data}`],
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
const obj = data;
|
|
128
|
+
if (typeof obj.domain !== 'string') {
|
|
129
|
+
errors.push('domain: Required string');
|
|
130
|
+
}
|
|
131
|
+
else if (!VALID_DOMAINS.has(obj.domain)) {
|
|
132
|
+
errors.push(`domain: Invalid value '${obj.domain}'. Must be one of: ${[...VALID_DOMAINS].join(', ')}`);
|
|
133
|
+
}
|
|
134
|
+
if (typeof obj.icon !== 'string' || obj.icon.trim() === '') {
|
|
135
|
+
errors.push('icon: Required non-empty string');
|
|
136
|
+
}
|
|
137
|
+
if (typeof obj.description !== 'string' || obj.description.trim() === '') {
|
|
138
|
+
errors.push('description: Required non-empty string');
|
|
139
|
+
}
|
|
140
|
+
if (!Array.isArray(obj.categories)) {
|
|
141
|
+
errors.push('categories: Required array');
|
|
142
|
+
}
|
|
143
|
+
else if (obj.categories.length === 0) {
|
|
144
|
+
errors.push('categories: Must have at least one category');
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
obj.categories.forEach((cat, i) => {
|
|
148
|
+
errors.push(...validateCategory(cat, `categories[${i}]`));
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
return {
|
|
152
|
+
valid: errors.length === 0,
|
|
153
|
+
errors,
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
function parseAndValidateChecklist(jsonContent) {
|
|
157
|
+
let data;
|
|
158
|
+
try {
|
|
159
|
+
data = JSON.parse(jsonContent);
|
|
160
|
+
}
|
|
161
|
+
catch (error) {
|
|
162
|
+
throw new ChecklistSchemaError('Invalid JSON syntax', 'root', error instanceof Error ? error.message : String(error));
|
|
163
|
+
}
|
|
164
|
+
const result = validateChecklistSchema(data);
|
|
165
|
+
if (!result.valid) {
|
|
166
|
+
throw new ChecklistSchemaError(`Schema validation failed: ${result.errors.join('; ')}`, 'root', result.errors);
|
|
167
|
+
}
|
|
168
|
+
return data;
|
|
169
|
+
}
|
|
170
|
+
function isValidChecklistItem(item) {
|
|
171
|
+
if (!item || typeof item !== 'object')
|
|
172
|
+
return false;
|
|
173
|
+
const obj = item;
|
|
174
|
+
return (typeof obj.id === 'string' &&
|
|
175
|
+
typeof obj.text === 'string' &&
|
|
176
|
+
typeof obj.priority === 'string' &&
|
|
177
|
+
VALID_PRIORITIES.has(obj.priority));
|
|
178
|
+
}
|
|
179
|
+
function isValidChecklistCategory(category) {
|
|
180
|
+
if (!category || typeof category !== 'object')
|
|
181
|
+
return false;
|
|
182
|
+
const obj = category;
|
|
183
|
+
return (typeof obj.name === 'string' &&
|
|
184
|
+
obj.triggers !== undefined &&
|
|
185
|
+
typeof obj.triggers === 'object' &&
|
|
186
|
+
Array.isArray(obj.items) &&
|
|
187
|
+
obj.items.every(isValidChecklistItem));
|
|
188
|
+
}
|
|
189
|
+
//# sourceMappingURL=checklist.schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checklist.schema.js","sourceRoot":"","sources":["../../../src/checklist/checklist.schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type ChecklistDomain, type GenerateChecklistInput, type GenerateChecklistOutput } from './checklist.types';
|
|
2
|
+
import type { IFileSystem } from '../shared/filesystem.interface';
|
|
3
|
+
export declare class ChecklistService {
|
|
4
|
+
private readonly fileSystem;
|
|
5
|
+
private readonly logger;
|
|
6
|
+
private readonly checklistsDir;
|
|
7
|
+
private checklistCache;
|
|
8
|
+
constructor(fileSystem: IFileSystem);
|
|
9
|
+
private findChecklistsDir;
|
|
10
|
+
generateChecklist(input: GenerateChecklistInput): Promise<GenerateChecklistOutput>;
|
|
11
|
+
private isValidDomain;
|
|
12
|
+
private matchCompiledTriggers;
|
|
13
|
+
private getAllItemsFromChecklist;
|
|
14
|
+
private deduplicateItems;
|
|
15
|
+
private buildDomainChecklists;
|
|
16
|
+
private getHighestPriority;
|
|
17
|
+
private calculateSummary;
|
|
18
|
+
private loadChecklist;
|
|
19
|
+
getAvailableDomains(): ChecklistDomain[];
|
|
20
|
+
clearCache(): void;
|
|
21
|
+
}
|
|
@@ -0,0 +1,258 @@
|
|
|
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 __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
var ChecklistService_1;
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.ChecklistService = void 0;
|
|
17
|
+
const common_1 = require("@nestjs/common");
|
|
18
|
+
const path = require("path");
|
|
19
|
+
const checklist_types_1 = require("./checklist.types");
|
|
20
|
+
const filesystem_interface_1 = require("../shared/filesystem.interface");
|
|
21
|
+
const pattern_matcher_1 = require("../shared/pattern-matcher");
|
|
22
|
+
const checklist_schema_1 = require("./checklist.schema");
|
|
23
|
+
const security_utils_1 = require("../shared/security.utils");
|
|
24
|
+
const CACHE_TTL_MS = 5 * 60 * 1000;
|
|
25
|
+
let ChecklistService = ChecklistService_1 = class ChecklistService {
|
|
26
|
+
constructor(fileSystem) {
|
|
27
|
+
this.fileSystem = fileSystem;
|
|
28
|
+
this.logger = new common_1.Logger(ChecklistService_1.name);
|
|
29
|
+
this.checklistCache = new Map();
|
|
30
|
+
this.checklistsDir = this.findChecklistsDir();
|
|
31
|
+
}
|
|
32
|
+
findChecklistsDir() {
|
|
33
|
+
const candidates = [
|
|
34
|
+
path.resolve(__dirname, '../../../../packages/rules/.ai-rules/checklists'),
|
|
35
|
+
path.resolve(__dirname, '../../../packages/rules/.ai-rules/checklists'),
|
|
36
|
+
path.resolve(__dirname, '../../../../.ai-rules/checklists'),
|
|
37
|
+
path.resolve(__dirname, '../../../.ai-rules/checklists'),
|
|
38
|
+
];
|
|
39
|
+
for (const candidate of candidates) {
|
|
40
|
+
if (this.fileSystem.existsSync(candidate)) {
|
|
41
|
+
return candidate;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
if (process.env.CODINGBUDDY_RULES_DIR) {
|
|
45
|
+
return path.join(process.env.CODINGBUDDY_RULES_DIR, 'checklists');
|
|
46
|
+
}
|
|
47
|
+
return candidates[0];
|
|
48
|
+
}
|
|
49
|
+
async generateChecklist(input) {
|
|
50
|
+
const { files, domains } = input;
|
|
51
|
+
const matchedTriggers = [];
|
|
52
|
+
const domainItems = new Map();
|
|
53
|
+
if (domains && domains.length > 0) {
|
|
54
|
+
const validDomains = domains.filter(d => this.isValidDomain(d));
|
|
55
|
+
const invalidDomains = domains.filter(d => !this.isValidDomain(d));
|
|
56
|
+
if (invalidDomains.length > 0) {
|
|
57
|
+
this.logger.warn(`Invalid domains ignored: ${invalidDomains.join(', ')}. Valid domains: ${checklist_types_1.CHECKLIST_DOMAINS.join(', ')}`);
|
|
58
|
+
}
|
|
59
|
+
const domainResults = await Promise.all(validDomains.map(async (domain) => {
|
|
60
|
+
const checklist = await this.loadChecklist(domain);
|
|
61
|
+
return { domain, checklist };
|
|
62
|
+
}));
|
|
63
|
+
for (const { domain, checklist } of domainResults) {
|
|
64
|
+
matchedTriggers.push({
|
|
65
|
+
domain,
|
|
66
|
+
category: 'all',
|
|
67
|
+
reason: 'explicit',
|
|
68
|
+
match: `Domain explicitly requested: ${domain}`,
|
|
69
|
+
});
|
|
70
|
+
if (checklist) {
|
|
71
|
+
const items = this.getAllItemsFromChecklist(checklist.data);
|
|
72
|
+
domainItems.set(domain, items);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
if (files && files.length > 0) {
|
|
77
|
+
const allDomains = this.getAvailableDomains();
|
|
78
|
+
const domainsToCheck = allDomains.filter(d => !domainItems.has(d));
|
|
79
|
+
const checklistResults = await Promise.all(domainsToCheck.map(async (domain) => {
|
|
80
|
+
const checklist = await this.loadChecklist(domain);
|
|
81
|
+
return { domain, checklist };
|
|
82
|
+
}));
|
|
83
|
+
for (const { domain, checklist } of checklistResults) {
|
|
84
|
+
if (!checklist)
|
|
85
|
+
continue;
|
|
86
|
+
const matchedItems = [];
|
|
87
|
+
for (const compiledCategory of checklist.compiledCategories) {
|
|
88
|
+
const match = this.matchCompiledTriggers(files, compiledCategory);
|
|
89
|
+
if (match) {
|
|
90
|
+
matchedTriggers.push({
|
|
91
|
+
domain,
|
|
92
|
+
category: compiledCategory.name,
|
|
93
|
+
reason: match.reason,
|
|
94
|
+
match: match.match,
|
|
95
|
+
});
|
|
96
|
+
matchedItems.push(...compiledCategory.items);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
if (matchedItems.length > 0) {
|
|
100
|
+
const uniqueItems = this.deduplicateItems(matchedItems);
|
|
101
|
+
domainItems.set(domain, uniqueItems);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
const checklists = await this.buildDomainChecklists(domainItems);
|
|
106
|
+
const summary = this.calculateSummary(checklists);
|
|
107
|
+
return {
|
|
108
|
+
checklists,
|
|
109
|
+
summary,
|
|
110
|
+
matchedTriggers,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
isValidDomain(domain) {
|
|
114
|
+
return checklist_types_1.CHECKLIST_DOMAINS.includes(domain);
|
|
115
|
+
}
|
|
116
|
+
matchCompiledTriggers(files, compiledCategory) {
|
|
117
|
+
for (const file of files) {
|
|
118
|
+
for (const compiledPattern of compiledCategory.compiledFilePatterns) {
|
|
119
|
+
if (compiledPattern.matcher.match(file)) {
|
|
120
|
+
return {
|
|
121
|
+
reason: 'file_pattern',
|
|
122
|
+
match: `${file} matches ${compiledPattern.pattern}`,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return null;
|
|
128
|
+
}
|
|
129
|
+
getAllItemsFromChecklist(checklist) {
|
|
130
|
+
const items = [];
|
|
131
|
+
for (const category of checklist.categories) {
|
|
132
|
+
items.push(...category.items);
|
|
133
|
+
}
|
|
134
|
+
return this.deduplicateItems(items);
|
|
135
|
+
}
|
|
136
|
+
deduplicateItems(items) {
|
|
137
|
+
const seen = new Set();
|
|
138
|
+
return items.filter(item => {
|
|
139
|
+
if (seen.has(item.id))
|
|
140
|
+
return false;
|
|
141
|
+
seen.add(item.id);
|
|
142
|
+
return true;
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
async buildDomainChecklists(domainItems) {
|
|
146
|
+
const entries = Array.from(domainItems.entries());
|
|
147
|
+
const checklistResults = await Promise.all(entries.map(async ([domain, items]) => {
|
|
148
|
+
const checklist = await this.loadChecklist(domain);
|
|
149
|
+
return { domain, items, checklist };
|
|
150
|
+
}));
|
|
151
|
+
const checklists = [];
|
|
152
|
+
for (const { domain, items, checklist } of checklistResults) {
|
|
153
|
+
if (!checklist)
|
|
154
|
+
continue;
|
|
155
|
+
const priority = this.getHighestPriority(items);
|
|
156
|
+
checklists.push({
|
|
157
|
+
domain,
|
|
158
|
+
icon: checklist.data.icon,
|
|
159
|
+
priority,
|
|
160
|
+
items,
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
return checklists.sort((a, b) => checklist_types_1.PRIORITY_VALUES[a.priority] - checklist_types_1.PRIORITY_VALUES[b.priority]);
|
|
164
|
+
}
|
|
165
|
+
getHighestPriority(items) {
|
|
166
|
+
for (const priority of checklist_types_1.CHECKLIST_PRIORITIES) {
|
|
167
|
+
if (items.some(item => item.priority === priority)) {
|
|
168
|
+
return priority;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
return 'low';
|
|
172
|
+
}
|
|
173
|
+
calculateSummary(checklists) {
|
|
174
|
+
let critical = 0;
|
|
175
|
+
let high = 0;
|
|
176
|
+
let medium = 0;
|
|
177
|
+
let low = 0;
|
|
178
|
+
for (const checklist of checklists) {
|
|
179
|
+
for (const item of checklist.items) {
|
|
180
|
+
switch (item.priority) {
|
|
181
|
+
case 'critical':
|
|
182
|
+
critical++;
|
|
183
|
+
break;
|
|
184
|
+
case 'high':
|
|
185
|
+
high++;
|
|
186
|
+
break;
|
|
187
|
+
case 'medium':
|
|
188
|
+
medium++;
|
|
189
|
+
break;
|
|
190
|
+
case 'low':
|
|
191
|
+
low++;
|
|
192
|
+
break;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
return {
|
|
197
|
+
total: critical + high + medium + low,
|
|
198
|
+
critical,
|
|
199
|
+
high,
|
|
200
|
+
medium,
|
|
201
|
+
low,
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
async loadChecklist(domain) {
|
|
205
|
+
const cached = this.checklistCache.get(domain);
|
|
206
|
+
if (cached && Date.now() - cached.timestamp < CACHE_TTL_MS) {
|
|
207
|
+
return cached;
|
|
208
|
+
}
|
|
209
|
+
const pathValidation = (0, security_utils_1.validatePath)(`${domain}.json`, {
|
|
210
|
+
basePath: this.checklistsDir,
|
|
211
|
+
allowAbsolute: false,
|
|
212
|
+
allowedExtensions: ['.json'],
|
|
213
|
+
});
|
|
214
|
+
if (!pathValidation.valid) {
|
|
215
|
+
this.logger.warn(`Path validation failed for domain '${domain}': ${pathValidation.error}`);
|
|
216
|
+
return null;
|
|
217
|
+
}
|
|
218
|
+
const filePath = pathValidation.resolvedPath;
|
|
219
|
+
try {
|
|
220
|
+
const content = await this.fileSystem.readFile(filePath, 'utf-8');
|
|
221
|
+
const checklist = (0, checklist_schema_1.parseAndValidateChecklist)(content);
|
|
222
|
+
const compiledCategories = checklist.categories.map(category => ({
|
|
223
|
+
name: category.name,
|
|
224
|
+
compiledFilePatterns: (0, pattern_matcher_1.compilePatterns)(category.triggers.files),
|
|
225
|
+
items: category.items,
|
|
226
|
+
}));
|
|
227
|
+
const cacheEntry = {
|
|
228
|
+
data: checklist,
|
|
229
|
+
compiledCategories,
|
|
230
|
+
timestamp: Date.now(),
|
|
231
|
+
};
|
|
232
|
+
this.checklistCache.set(domain, cacheEntry);
|
|
233
|
+
return cacheEntry;
|
|
234
|
+
}
|
|
235
|
+
catch (error) {
|
|
236
|
+
if (error instanceof checklist_schema_1.ChecklistSchemaError) {
|
|
237
|
+
this.logger.warn(`Invalid checklist schema for domain '${domain}': ${error.message}`);
|
|
238
|
+
}
|
|
239
|
+
else {
|
|
240
|
+
this.logger.warn(`Failed to load checklist for domain: ${domain}`, error);
|
|
241
|
+
}
|
|
242
|
+
return null;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
getAvailableDomains() {
|
|
246
|
+
return [...checklist_types_1.CHECKLIST_DOMAINS];
|
|
247
|
+
}
|
|
248
|
+
clearCache() {
|
|
249
|
+
this.checklistCache.clear();
|
|
250
|
+
}
|
|
251
|
+
};
|
|
252
|
+
exports.ChecklistService = ChecklistService;
|
|
253
|
+
exports.ChecklistService = ChecklistService = ChecklistService_1 = __decorate([
|
|
254
|
+
(0, common_1.Injectable)(),
|
|
255
|
+
__param(0, (0, common_1.Inject)(filesystem_interface_1.FILE_SYSTEM)),
|
|
256
|
+
__metadata("design:paramtypes", [Object])
|
|
257
|
+
], ChecklistService);
|
|
258
|
+
//# sourceMappingURL=checklist.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checklist.service.js","sourceRoot":"","sources":["../../../src/checklist/checklist.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
export declare const CHECKLIST_PRIORITIES: readonly ["critical", "high", "medium", "low"];
|
|
2
|
+
export declare const CHECKLIST_DOMAINS: readonly ["security", "accessibility", "performance", "testing", "code-quality", "seo"];
|
|
3
|
+
export declare const PRIORITY_VALUES: Record<ChecklistPriority, number>;
|
|
4
|
+
export type ChecklistPriority = (typeof CHECKLIST_PRIORITIES)[number];
|
|
5
|
+
export type ChecklistDomain = (typeof CHECKLIST_DOMAINS)[number];
|
|
6
|
+
export interface ChecklistItem {
|
|
7
|
+
id: string;
|
|
8
|
+
text: string;
|
|
9
|
+
priority: ChecklistPriority;
|
|
10
|
+
reason?: string;
|
|
11
|
+
reference?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface ChecklistCategory {
|
|
14
|
+
name: string;
|
|
15
|
+
triggers: ChecklistTriggers;
|
|
16
|
+
items: ChecklistItem[];
|
|
17
|
+
}
|
|
18
|
+
export interface ChecklistTriggers {
|
|
19
|
+
files: string[];
|
|
20
|
+
imports?: string[];
|
|
21
|
+
patterns?: string[];
|
|
22
|
+
}
|
|
23
|
+
export interface ChecklistDefinition {
|
|
24
|
+
domain: ChecklistDomain;
|
|
25
|
+
icon: string;
|
|
26
|
+
description: string;
|
|
27
|
+
categories: ChecklistCategory[];
|
|
28
|
+
}
|
|
29
|
+
export interface DomainChecklist {
|
|
30
|
+
domain: ChecklistDomain;
|
|
31
|
+
icon: string;
|
|
32
|
+
priority: ChecklistPriority;
|
|
33
|
+
items: ChecklistItem[];
|
|
34
|
+
}
|
|
35
|
+
export interface ChecklistSummary {
|
|
36
|
+
total: number;
|
|
37
|
+
critical: number;
|
|
38
|
+
high: number;
|
|
39
|
+
medium: number;
|
|
40
|
+
low: number;
|
|
41
|
+
}
|
|
42
|
+
export interface GenerateChecklistInput {
|
|
43
|
+
files?: string[];
|
|
44
|
+
domains?: ChecklistDomain[];
|
|
45
|
+
}
|
|
46
|
+
export interface GenerateChecklistOutput {
|
|
47
|
+
checklists: DomainChecklist[];
|
|
48
|
+
summary: ChecklistSummary;
|
|
49
|
+
matchedTriggers: MatchedTrigger[];
|
|
50
|
+
}
|
|
51
|
+
export interface MatchedTrigger {
|
|
52
|
+
domain: ChecklistDomain;
|
|
53
|
+
category: string;
|
|
54
|
+
reason: 'file_pattern' | 'import_detected' | 'code_pattern' | 'explicit';
|
|
55
|
+
match: string;
|
|
56
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PRIORITY_VALUES = exports.CHECKLIST_DOMAINS = exports.CHECKLIST_PRIORITIES = void 0;
|
|
4
|
+
exports.CHECKLIST_PRIORITIES = [
|
|
5
|
+
'critical',
|
|
6
|
+
'high',
|
|
7
|
+
'medium',
|
|
8
|
+
'low',
|
|
9
|
+
];
|
|
10
|
+
exports.CHECKLIST_DOMAINS = [
|
|
11
|
+
'security',
|
|
12
|
+
'accessibility',
|
|
13
|
+
'performance',
|
|
14
|
+
'testing',
|
|
15
|
+
'code-quality',
|
|
16
|
+
'seo',
|
|
17
|
+
];
|
|
18
|
+
exports.PRIORITY_VALUES = {
|
|
19
|
+
critical: 0,
|
|
20
|
+
high: 1,
|
|
21
|
+
medium: 2,
|
|
22
|
+
low: 3,
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=checklist.types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checklist.types.js","sourceRoot":"","sources":["../../../src/checklist/checklist.types.ts"],"names":[],"mappings":";;;AAOa,QAAA,oBAAoB,GAAG;IAClC,UAAU;IACV,MAAM;IACN,QAAQ;IACR,KAAK;CACG,CAAC;AAKE,QAAA,iBAAiB,GAAG;IAC/B,UAAU;IACV,eAAe;IACf,aAAa;IACb,SAAS;IACT,cAAc;IACd,KAAK;CACG,CAAC;AAKE,QAAA,eAAe,GAAsC;IAChE,QAAQ,EAAE,CAAC;IACX,IAAI,EAAE,CAAC;IACP,MAAM,EAAE,CAAC;IACT,GAAG,EAAE,CAAC;CACP,CAAC"}
|