codingbuddy 1.3.1 → 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/agent/agent-prompt.builder.d.ts +5 -0
- package/dist/src/agent/agent-prompt.builder.js +84 -0
- package/dist/src/agent/agent-prompt.builder.js.map +1 -0
- package/dist/src/agent/agent.module.d.ts +2 -0
- package/dist/src/agent/agent.module.js +23 -0
- package/dist/src/agent/agent.module.js.map +1 -0
- package/dist/src/agent/agent.service.d.ts +15 -0
- package/dist/src/agent/agent.service.js +103 -0
- package/dist/src/agent/agent.service.js.map +1 -0
- package/dist/src/agent/agent.types.d.ts +29 -0
- package/dist/src/agent/agent.types.js +31 -0
- package/dist/src/agent/agent.types.js.map +1 -0
- package/dist/src/agent/index.d.ts +4 -0
- package/dist/src/agent/index.js +21 -0
- package/dist/src/agent/index.js.map +1 -0
- package/dist/src/app.module.js +12 -1
- 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 +1 -6
- package/dist/src/cli/index.d.ts +1 -1
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/cli/init/config.generator.d.ts +1 -0
- package/dist/src/cli/init/config.generator.js +10 -2
- package/dist/src/cli/init/config.generator.js.map +1 -1
- package/dist/src/cli/init/init.command.js +19 -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 +7 -0
- package/dist/src/cli/init/prompts/index.js +16 -0
- package/dist/src/cli/init/prompts/index.js.map +1 -0
- 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/prompts/model-prompt.d.ts +8 -0
- package/dist/src/cli/init/prompts/model-prompt.js +36 -0
- package/dist/src/cli/init/prompts/model-prompt.js.map +1 -0
- package/dist/src/cli/init/templates/template.renderer.js +21 -1
- package/dist/src/cli/init/templates/template.renderer.js.map +1 -1
- package/dist/src/cli/init/templates/template.types.d.ts +2 -0
- package/dist/src/config/config.schema.d.ts +9 -0
- package/dist/src/config/config.schema.js +6 -1
- package/dist/src/config/config.schema.js.map +1 -1
- 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/activation-message.builder.d.ts +14 -0
- package/dist/src/keyword/activation-message.builder.js +80 -0
- package/dist/src/keyword/activation-message.builder.js.map +1 -0
- package/dist/src/keyword/keyword.module.js +39 -4
- package/dist/src/keyword/keyword.module.js.map +1 -1
- package/dist/src/keyword/keyword.service.d.ts +18 -3
- package/dist/src/keyword/keyword.service.js +146 -53
- package/dist/src/keyword/keyword.service.js.map +1 -1
- package/dist/src/keyword/keyword.types.d.ts +61 -0
- package/dist/src/keyword/keyword.types.js +83 -1
- package/dist/src/keyword/keyword.types.js.map +1 -1
- package/dist/src/keyword/primary-agent-resolver.d.ts +30 -0
- package/dist/src/keyword/primary-agent-resolver.js +376 -0
- package/dist/src/keyword/primary-agent-resolver.js.map +1 -0
- package/dist/src/keyword/rule-filter.d.ts +3 -0
- package/dist/src/keyword/rule-filter.js +64 -0
- package/dist/src/keyword/rule-filter.js.map +1 -0
- 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-serverless.d.ts +0 -2
- package/dist/src/mcp/mcp-serverless.js +19 -29
- package/dist/src/mcp/mcp-serverless.js.map +1 -1
- package/dist/src/mcp/mcp.module.js +29 -1
- package/dist/src/mcp/mcp.module.js.map +1 -1
- package/dist/src/mcp/mcp.service.d.ts +3 -18
- package/dist/src/mcp/mcp.service.js +13 -216
- package/dist/src/mcp/mcp.service.js.map +1 -1
- package/dist/src/mcp/response.utils.d.ts +10 -0
- package/dist/src/mcp/response.utils.js +16 -0
- package/dist/src/mcp/response.utils.js.map +1 -0
- package/dist/src/model/index.d.ts +4 -0
- package/dist/src/model/index.js +23 -0
- package/dist/src/model/index.js.map +1 -0
- 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.constants.d.ts +4 -0
- package/dist/src/model/model.constants.js +8 -0
- package/dist/src/model/model.constants.js.map +1 -0
- package/dist/src/model/model.resolver.d.ts +7 -0
- package/dist/src/model/model.resolver.js +56 -0
- package/dist/src/model/model.resolver.js.map +1 -0
- package/dist/src/model/model.types.d.ts +17 -0
- package/dist/src/model/model.types.js +11 -0
- package/dist/src/model/model.types.js.map +1 -0
- package/dist/src/rules/agent.schema.d.ts +15 -0
- package/dist/src/rules/agent.schema.js +9 -0
- package/dist/src/rules/agent.schema.js.map +1 -1
- package/dist/src/shared/agent.utils.d.ts +1 -0
- package/dist/src/shared/agent.utils.js +14 -0
- package/dist/src/shared/agent.utils.js.map +1 -0
- 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/language.service.d.ts +9 -0
- package/dist/src/shared/language.service.js +108 -0
- package/dist/src/shared/language.service.js.map +1 -0
- package/dist/src/shared/language.types.d.ts +12 -0
- package/dist/src/shared/language.types.js +3 -0
- package/dist/src/shared/language.types.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 +4 -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
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { DomainChecklist, ChecklistSummary, MatchedTrigger } from '../checklist/checklist.types';
|
|
2
|
+
export type TaskIntent = 'feature_development' | 'bug_fix' | 'refactoring' | 'code_review' | 'testing' | 'documentation' | 'performance_optimization' | 'security_hardening' | 'unknown';
|
|
3
|
+
export type RiskLevel = 'low' | 'medium' | 'high' | 'critical';
|
|
4
|
+
export type ComplexityLevel = 'low' | 'medium' | 'high';
|
|
5
|
+
export interface TaskAnalysis {
|
|
6
|
+
intent: TaskIntent;
|
|
7
|
+
category: string;
|
|
8
|
+
complexity: ComplexityLevel;
|
|
9
|
+
keywords: string[];
|
|
10
|
+
}
|
|
11
|
+
export interface RiskAssessment {
|
|
12
|
+
level: RiskLevel;
|
|
13
|
+
reason: string;
|
|
14
|
+
attentionAreas: string[];
|
|
15
|
+
}
|
|
16
|
+
export interface RecommendedSpecialist {
|
|
17
|
+
name: string;
|
|
18
|
+
reason: string;
|
|
19
|
+
priority: number;
|
|
20
|
+
}
|
|
21
|
+
export interface WorkflowPhase {
|
|
22
|
+
phase: string;
|
|
23
|
+
focus: string[];
|
|
24
|
+
}
|
|
25
|
+
export interface SuggestedWorkflow {
|
|
26
|
+
phases: WorkflowPhase[];
|
|
27
|
+
}
|
|
28
|
+
export interface ContextHints {
|
|
29
|
+
projectType?: string;
|
|
30
|
+
securityLevel?: RiskLevel;
|
|
31
|
+
mustConsider: string[];
|
|
32
|
+
}
|
|
33
|
+
export interface AnalyzeTaskInput {
|
|
34
|
+
prompt: string;
|
|
35
|
+
files?: string[];
|
|
36
|
+
mode?: 'PLAN' | 'ACT' | 'EVAL';
|
|
37
|
+
}
|
|
38
|
+
export interface AnalyzeTaskOutput {
|
|
39
|
+
analysis: TaskAnalysis;
|
|
40
|
+
riskAssessment: RiskAssessment;
|
|
41
|
+
checklists: DomainChecklist[];
|
|
42
|
+
checklistSummary: ChecklistSummary;
|
|
43
|
+
matchedTriggers: MatchedTrigger[];
|
|
44
|
+
recommendedSpecialists: RecommendedSpecialist[];
|
|
45
|
+
suggestedWorkflow: SuggestedWorkflow;
|
|
46
|
+
contextHints: ContextHints;
|
|
47
|
+
}
|
|
48
|
+
export declare const FILE_CATEGORY_PATTERNS: Record<string, string[]>;
|
|
49
|
+
export declare const CATEGORY_RISK_LEVELS: Record<string, RiskLevel>;
|
|
50
|
+
export declare const CATEGORY_SPECIALISTS: Record<string, string[]>;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CATEGORY_SPECIALISTS = exports.CATEGORY_RISK_LEVELS = exports.FILE_CATEGORY_PATTERNS = void 0;
|
|
4
|
+
exports.FILE_CATEGORY_PATTERNS = {
|
|
5
|
+
authentication: [
|
|
6
|
+
'**/auth/**',
|
|
7
|
+
'**/login/**',
|
|
8
|
+
'**/session/**',
|
|
9
|
+
'**/password/**',
|
|
10
|
+
],
|
|
11
|
+
payment: [
|
|
12
|
+
'**/payment/**',
|
|
13
|
+
'**/checkout/**',
|
|
14
|
+
'**/billing/**',
|
|
15
|
+
'**/subscription/**',
|
|
16
|
+
],
|
|
17
|
+
api: ['**/api/**', '**/handler/**', '**/route/**', '**/endpoint/**'],
|
|
18
|
+
ui: ['**/components/**', '**/features/**', '**/widgets/**', '**/page/**'],
|
|
19
|
+
data: ['**/model/**', '**/entity/**', '**/schema/**', '**/database/**'],
|
|
20
|
+
testing: ['**/*.spec.*', '**/*.test.*', '**/test/**', '**/__tests__/**'],
|
|
21
|
+
};
|
|
22
|
+
exports.CATEGORY_RISK_LEVELS = {
|
|
23
|
+
authentication: 'critical',
|
|
24
|
+
payment: 'critical',
|
|
25
|
+
api: 'high',
|
|
26
|
+
data: 'high',
|
|
27
|
+
ui: 'medium',
|
|
28
|
+
testing: 'low',
|
|
29
|
+
};
|
|
30
|
+
exports.CATEGORY_SPECIALISTS = {
|
|
31
|
+
authentication: ['security-specialist', 'test-strategy-specialist'],
|
|
32
|
+
payment: ['security-specialist', 'test-strategy-specialist'],
|
|
33
|
+
api: [
|
|
34
|
+
'security-specialist',
|
|
35
|
+
'performance-specialist',
|
|
36
|
+
'test-strategy-specialist',
|
|
37
|
+
],
|
|
38
|
+
ui: ['accessibility-specialist', 'ui-ux-designer', 'performance-specialist'],
|
|
39
|
+
data: ['architecture-specialist', 'security-specialist'],
|
|
40
|
+
testing: ['test-strategy-specialist', 'code-quality-specialist'],
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=context.types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.types.js","sourceRoot":"","sources":["../../../src/context/context.types.ts"],"names":[],"mappings":";;;AAuHa,QAAA,sBAAsB,GAA6B;IAC9D,cAAc,EAAE;QACd,YAAY;QACZ,aAAa;QACb,eAAe;QACf,gBAAgB;KACjB;IACD,OAAO,EAAE;QACP,eAAe;QACf,gBAAgB;QAChB,eAAe;QACf,oBAAoB;KACrB;IACD,GAAG,EAAE,CAAC,WAAW,EAAE,eAAe,EAAE,aAAa,EAAE,gBAAgB,CAAC;IACpE,EAAE,EAAE,CAAC,kBAAkB,EAAE,gBAAgB,EAAE,eAAe,EAAE,YAAY,CAAC;IACzE,IAAI,EAAE,CAAC,aAAa,EAAE,cAAc,EAAE,cAAc,EAAE,gBAAgB,CAAC;IACvE,OAAO,EAAE,CAAC,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,iBAAiB,CAAC;CACzE,CAAC;AAKW,QAAA,oBAAoB,GAA8B;IAC7D,cAAc,EAAE,UAAU;IAC1B,OAAO,EAAE,UAAU;IACnB,GAAG,EAAE,MAAM;IACX,IAAI,EAAE,MAAM;IACZ,EAAE,EAAE,QAAQ;IACZ,OAAO,EAAE,KAAK;CACf,CAAC;AAKW,QAAA,oBAAoB,GAA6B;IAC5D,cAAc,EAAE,CAAC,qBAAqB,EAAE,0BAA0B,CAAC;IACnE,OAAO,EAAE,CAAC,qBAAqB,EAAE,0BAA0B,CAAC;IAC5D,GAAG,EAAE;QACH,qBAAqB;QACrB,wBAAwB;QACxB,0BAA0B;KAC3B;IACD,EAAE,EAAE,CAAC,0BAA0B,EAAE,gBAAgB,EAAE,wBAAwB,CAAC;IAC5E,IAAI,EAAE,CAAC,yBAAyB,EAAE,qBAAqB,CAAC;IACxD,OAAO,EAAE,CAAC,0BAA0B,EAAE,yBAAyB,CAAC;CACjE,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./context.module"), exports);
|
|
18
|
+
__exportStar(require("./context.service"), exports);
|
|
19
|
+
__exportStar(require("./context.types"), exports);
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/context/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,mDAAiC;AACjC,oDAAkC;AAClC,kDAAgC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { TaskIntent } from './context.types';
|
|
2
|
+
export interface IntentPattern {
|
|
3
|
+
intent: TaskIntent;
|
|
4
|
+
keywords: readonly string[];
|
|
5
|
+
}
|
|
6
|
+
export declare const INTENT_PATTERNS: readonly IntentPattern[];
|
|
7
|
+
export declare function detectIntentFromPatterns(prompt: string): TaskIntent;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.INTENT_PATTERNS = void 0;
|
|
4
|
+
exports.detectIntentFromPatterns = detectIntentFromPatterns;
|
|
5
|
+
exports.INTENT_PATTERNS = [
|
|
6
|
+
{
|
|
7
|
+
intent: 'bug_fix',
|
|
8
|
+
keywords: ['fix', 'bug', 'error', 'issue', 'broken'],
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
intent: 'refactoring',
|
|
12
|
+
keywords: ['refactor', 'clean', 'improve', 'restructure'],
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
intent: 'code_review',
|
|
16
|
+
keywords: ['review', 'check', 'audit', 'inspect'],
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
intent: 'testing',
|
|
20
|
+
keywords: ['test', 'spec', 'coverage', 'unit test'],
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
intent: 'documentation',
|
|
24
|
+
keywords: ['doc', 'readme', 'comment', 'jsdoc'],
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
intent: 'performance_optimization',
|
|
28
|
+
keywords: ['performance', 'optimize', 'speed', 'fast', 'slow', 'latency'],
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
intent: 'security_hardening',
|
|
32
|
+
keywords: ['security', 'vulnerability', 'auth', 'secure', 'xss', 'csrf'],
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
intent: 'feature_development',
|
|
36
|
+
keywords: ['add', 'create', 'implement', 'build', 'new', 'feature'],
|
|
37
|
+
},
|
|
38
|
+
];
|
|
39
|
+
function detectIntentFromPatterns(prompt) {
|
|
40
|
+
const promptLower = prompt.toLowerCase();
|
|
41
|
+
for (const pattern of exports.INTENT_PATTERNS) {
|
|
42
|
+
for (const keyword of pattern.keywords) {
|
|
43
|
+
if (promptLower.includes(keyword)) {
|
|
44
|
+
return pattern.intent;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return 'unknown';
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=intent-patterns.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intent-patterns.js","sourceRoot":"","sources":["../../../src/context/intent-patterns.ts"],"names":[],"mappings":";;;AAwDA,4DAYC;AApDY,QAAA,eAAe,GAA6B;IACvD;QACE,MAAM,EAAE,SAAS;QACjB,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC;KACrD;IACD;QACE,MAAM,EAAE,aAAa;QACrB,QAAQ,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,CAAC;KAC1D;IACD;QACE,MAAM,EAAE,aAAa;QACrB,QAAQ,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC;KAClD;IACD;QACE,MAAM,EAAE,SAAS;QACjB,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC;KACpD;IACD;QACE,MAAM,EAAE,eAAe;QACvB,QAAQ,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC;KAChD;IACD;QACE,MAAM,EAAE,0BAA0B;QAClC,QAAQ,EAAE,CAAC,aAAa,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC;KAC1E;IACD;QACE,MAAM,EAAE,oBAAoB;QAC5B,QAAQ,EAAE,CAAC,UAAU,EAAE,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC;KACzE;IACD;QACE,MAAM,EAAE,qBAAqB;QAC7B,QAAQ,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC;KACpE;CACO,CAAC;AAOX,SAAgB,wBAAwB,CAAC,MAAc;IACrD,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IAEzC,KAAK,MAAM,OAAO,IAAI,uBAAe,EAAE,CAAC;QACtC,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACvC,IAAI,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBAClC,OAAO,OAAO,CAAC,MAAM,CAAC;YACxB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type ActivationMessage } from './keyword.types';
|
|
2
|
+
export declare class ActivationMessageBuilder {
|
|
3
|
+
private activations;
|
|
4
|
+
addAgentActivation(name: string, tier: 'primary' | 'specialist', activatedBy?: string): this;
|
|
5
|
+
addSkillActivation(name: string, activatedBy?: string): this;
|
|
6
|
+
build(): ActivationMessage | undefined;
|
|
7
|
+
private formatActivations;
|
|
8
|
+
private getIcon;
|
|
9
|
+
private getTierLabel;
|
|
10
|
+
reset(): this;
|
|
11
|
+
static forPrimaryAgent(agentName: string, activatedBy?: string): ActivationMessage;
|
|
12
|
+
static forSpecialistAgent(agentName: string, activatedBy?: string): ActivationMessage;
|
|
13
|
+
static forSkill(skillName: string, activatedBy?: string): ActivationMessage;
|
|
14
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ActivationMessageBuilder = void 0;
|
|
4
|
+
class ActivationMessageBuilder {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.activations = [];
|
|
7
|
+
}
|
|
8
|
+
addAgentActivation(name, tier, activatedBy) {
|
|
9
|
+
this.activations.push({
|
|
10
|
+
type: 'agent',
|
|
11
|
+
name,
|
|
12
|
+
tier,
|
|
13
|
+
activatedBy,
|
|
14
|
+
timestamp: new Date().toISOString(),
|
|
15
|
+
});
|
|
16
|
+
return this;
|
|
17
|
+
}
|
|
18
|
+
addSkillActivation(name, activatedBy) {
|
|
19
|
+
this.activations.push({
|
|
20
|
+
type: 'skill',
|
|
21
|
+
name,
|
|
22
|
+
tier: 'specialist',
|
|
23
|
+
activatedBy,
|
|
24
|
+
timestamp: new Date().toISOString(),
|
|
25
|
+
});
|
|
26
|
+
return this;
|
|
27
|
+
}
|
|
28
|
+
build() {
|
|
29
|
+
if (this.activations.length === 0) {
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
const formatted = this.formatActivations();
|
|
33
|
+
return {
|
|
34
|
+
activations: [...this.activations],
|
|
35
|
+
formatted,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
formatActivations() {
|
|
39
|
+
const lines = [];
|
|
40
|
+
for (const activation of this.activations) {
|
|
41
|
+
const icon = this.getIcon(activation);
|
|
42
|
+
const tierLabel = this.getTierLabel(activation.tier);
|
|
43
|
+
const activatedByText = activation.activatedBy
|
|
44
|
+
? ` (by ${activation.activatedBy})`
|
|
45
|
+
: '';
|
|
46
|
+
lines.push(`${icon} ${activation.name} [${tierLabel}]${activatedByText}`);
|
|
47
|
+
}
|
|
48
|
+
return lines.join('\n');
|
|
49
|
+
}
|
|
50
|
+
getIcon(activation) {
|
|
51
|
+
if (activation.type === 'skill') {
|
|
52
|
+
return '⚡';
|
|
53
|
+
}
|
|
54
|
+
return activation.tier === 'primary' ? '🤖' : '👤';
|
|
55
|
+
}
|
|
56
|
+
getTierLabel(tier) {
|
|
57
|
+
return tier === 'primary' ? 'Primary Agent' : 'Specialist';
|
|
58
|
+
}
|
|
59
|
+
reset() {
|
|
60
|
+
this.activations = [];
|
|
61
|
+
return this;
|
|
62
|
+
}
|
|
63
|
+
static forPrimaryAgent(agentName, activatedBy) {
|
|
64
|
+
return new ActivationMessageBuilder()
|
|
65
|
+
.addAgentActivation(agentName, 'primary', activatedBy)
|
|
66
|
+
.build();
|
|
67
|
+
}
|
|
68
|
+
static forSpecialistAgent(agentName, activatedBy) {
|
|
69
|
+
return new ActivationMessageBuilder()
|
|
70
|
+
.addAgentActivation(agentName, 'specialist', activatedBy)
|
|
71
|
+
.build();
|
|
72
|
+
}
|
|
73
|
+
static forSkill(skillName, activatedBy) {
|
|
74
|
+
return new ActivationMessageBuilder()
|
|
75
|
+
.addSkillActivation(skillName, activatedBy)
|
|
76
|
+
.build();
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
exports.ActivationMessageBuilder = ActivationMessageBuilder;
|
|
80
|
+
//# sourceMappingURL=activation-message.builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activation-message.builder.js","sourceRoot":"","sources":["../../../src/keyword/activation-message.builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,20 +8,25 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
exports.KeywordModule = exports.KEYWORD_SERVICE = void 0;
|
|
10
10
|
const common_1 = require("@nestjs/common");
|
|
11
|
+
const config_module_1 = require("../config/config.module");
|
|
12
|
+
const config_service_1 = require("../config/config.service");
|
|
11
13
|
const rules_module_1 = require("../rules/rules.module");
|
|
12
14
|
const rules_service_1 = require("../rules/rules.service");
|
|
15
|
+
const agent_utils_1 = require("../shared/agent.utils");
|
|
13
16
|
const keyword_service_1 = require("./keyword.service");
|
|
17
|
+
const primary_agent_resolver_1 = require("./primary-agent-resolver");
|
|
14
18
|
exports.KEYWORD_SERVICE = 'KEYWORD_SERVICE';
|
|
15
19
|
let KeywordModule = class KeywordModule {
|
|
16
20
|
};
|
|
17
21
|
exports.KeywordModule = KeywordModule;
|
|
18
22
|
exports.KeywordModule = KeywordModule = __decorate([
|
|
19
23
|
(0, common_1.Module)({
|
|
20
|
-
imports: [rules_module_1.RulesModule],
|
|
24
|
+
imports: [rules_module_1.RulesModule, config_module_1.CodingBuddyConfigModule],
|
|
21
25
|
providers: [
|
|
22
26
|
{
|
|
23
27
|
provide: exports.KEYWORD_SERVICE,
|
|
24
|
-
useFactory: (rulesService) => {
|
|
28
|
+
useFactory: (rulesService, configService) => {
|
|
29
|
+
const logger = new common_1.Logger('KeywordModule');
|
|
25
30
|
const loadConfig = async () => {
|
|
26
31
|
const content = await rulesService.getRuleContent('keyword-modes.json');
|
|
27
32
|
return JSON.parse(content);
|
|
@@ -32,9 +37,39 @@ exports.KeywordModule = KeywordModule = __decorate([
|
|
|
32
37
|
const loadAgent = async (agentName) => {
|
|
33
38
|
return rulesService.getAgent(agentName);
|
|
34
39
|
};
|
|
35
|
-
|
|
40
|
+
const getProjectConfig = async () => {
|
|
41
|
+
try {
|
|
42
|
+
const settings = await configService.getSettings();
|
|
43
|
+
if (settings.ai?.primaryAgent) {
|
|
44
|
+
return { primaryAgent: settings.ai.primaryAgent };
|
|
45
|
+
}
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
logger.debug(`Failed to load project config: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
const listPrimaryAgents = async () => {
|
|
54
|
+
const agentNames = await rulesService.listAgents();
|
|
55
|
+
const primaryAgents = [];
|
|
56
|
+
for (const name of agentNames) {
|
|
57
|
+
try {
|
|
58
|
+
const agent = await rulesService.getAgent(name);
|
|
59
|
+
const role = agent.role;
|
|
60
|
+
if (role?.type === 'primary') {
|
|
61
|
+
primaryAgents.push((0, agent_utils_1.normalizeAgentName)(agent.name));
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return primaryAgents;
|
|
68
|
+
};
|
|
69
|
+
const primaryAgentResolver = new primary_agent_resolver_1.PrimaryAgentResolver(getProjectConfig, listPrimaryAgents);
|
|
70
|
+
return new keyword_service_1.KeywordService(loadConfig, loadRule, loadAgent, primaryAgentResolver);
|
|
36
71
|
},
|
|
37
|
-
inject: [rules_service_1.RulesService],
|
|
72
|
+
inject: [rules_service_1.RulesService, config_service_1.ConfigService],
|
|
38
73
|
},
|
|
39
74
|
],
|
|
40
75
|
exports: [exports.KEYWORD_SERVICE],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keyword.module.js","sourceRoot":"","sources":["../../../src/keyword/keyword.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"keyword.module.js","sourceRoot":"","sources":["../../../src/keyword/keyword.module.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,27 @@
|
|
|
1
|
-
import { type Mode, type RuleContent, type ParseModeResult, type KeywordModesConfig } from './keyword.types';
|
|
1
|
+
import { type Mode, type RuleContent, type ParseModeResult, type KeywordModesConfig, type ResolutionContext } from './keyword.types';
|
|
2
|
+
export interface ParseModeOptions {
|
|
3
|
+
recommendedActAgent?: string;
|
|
4
|
+
context?: ResolutionContext;
|
|
5
|
+
}
|
|
6
|
+
import { PrimaryAgentResolver } from './primary-agent-resolver';
|
|
2
7
|
export declare class KeywordService {
|
|
3
8
|
private readonly loadConfigFn;
|
|
4
9
|
private readonly loadRuleFn;
|
|
5
10
|
private readonly loadAgentInfoFn?;
|
|
11
|
+
private readonly logger;
|
|
6
12
|
private configCache;
|
|
7
|
-
|
|
8
|
-
|
|
13
|
+
private readonly primaryAgentResolver?;
|
|
14
|
+
constructor(loadConfigFn: () => Promise<KeywordModesConfig>, loadRuleFn: (path: string) => Promise<string>, loadAgentInfoFn?: ((agentName: string) => Promise<unknown>) | undefined, primaryAgentResolver?: PrimaryAgentResolver);
|
|
15
|
+
parseMode(prompt: string, options?: ParseModeOptions): Promise<ParseModeResult>;
|
|
16
|
+
private extractModeFromPrompt;
|
|
17
|
+
private checkForMultipleKeywords;
|
|
18
|
+
private checkForEmptyContent;
|
|
19
|
+
private buildParseModeResult;
|
|
20
|
+
private getPrimaryAgentTier;
|
|
21
|
+
private getParallelAgentsRecommendation;
|
|
22
|
+
private getActAgentRecommendation;
|
|
9
23
|
loadModeConfig(): Promise<KeywordModesConfig>;
|
|
10
24
|
getRulesForMode(mode: Mode): Promise<RuleContent[]>;
|
|
11
25
|
private getAgentInfo;
|
|
26
|
+
private resolvePrimaryAgent;
|
|
12
27
|
}
|