yuangs 5.40.0 → 5.41.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/commands/git/plan.js +64 -10
- package/dist/commands/git/plan.js.map +1 -1
- package/dist/commands/git/review.js +95 -2
- package/dist/commands/git/review.js.map +1 -1
- package/dist/core/capability/CapabilityLevel.d.ts +125 -0
- package/dist/core/capability/CapabilityLevel.js +184 -0
- package/dist/core/capability/CapabilityLevel.js.map +1 -0
- package/dist/core/capability/CostProfile.d.ts +34 -0
- package/dist/core/capability/CostProfile.js +138 -0
- package/dist/core/capability/CostProfile.js.map +1 -0
- package/dist/core/capability/DegradationPolicy.d.ts +26 -0
- package/dist/core/capability/DegradationPolicy.js +65 -0
- package/dist/core/capability/DegradationPolicy.js.map +1 -0
- package/dist/core/capability/index.d.ts +3 -0
- package/dist/core/capability/index.js +20 -0
- package/dist/core/capability/index.js.map +1 -0
- package/dist/core/context/ContextMeta.d.ts +30 -0
- package/dist/core/context/ContextMeta.js +108 -0
- package/dist/core/context/ContextMeta.js.map +1 -0
- package/dist/core/context/index.d.ts +1 -0
- package/dist/core/context/index.js +18 -0
- package/dist/core/context/index.js.map +1 -0
- package/dist/core/git/CodeReviewer.d.ts +11 -0
- package/dist/core/git/CodeReviewer.js +76 -8
- package/dist/core/git/CodeReviewer.js.map +1 -1
- package/dist/core/git/ContextGatherer.d.ts +6 -0
- package/dist/core/git/ContextGatherer.js +38 -3
- package/dist/core/git/ContextGatherer.js.map +1 -1
- package/dist/core/git/GitService.d.ts +13 -0
- package/dist/core/git/GitService.js +50 -0
- package/dist/core/git/GitService.js.map +1 -1
- package/dist/core/security/SecurityScanner.d.ts +39 -0
- package/dist/core/security/SecurityScanner.js +136 -0
- package/dist/core/security/SecurityScanner.js.map +1 -0
- package/dist/core/security/index.d.ts +1 -0
- package/dist/core/security/index.js +18 -0
- package/dist/core/security/index.js.map +1 -0
- package/package.json +2 -1
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { CapabilityLevel } from './CapabilityLevel';
|
|
2
|
+
export interface LanguageWeight {
|
|
3
|
+
extensions: string[];
|
|
4
|
+
weight: number;
|
|
5
|
+
complexity: number;
|
|
6
|
+
}
|
|
7
|
+
export interface CostProfile {
|
|
8
|
+
estimatedTime: number;
|
|
9
|
+
estimatedMemory: number;
|
|
10
|
+
estimatedTokens: number;
|
|
11
|
+
requiredCapability: CapabilityLevel;
|
|
12
|
+
}
|
|
13
|
+
export interface CostProfileOptions {
|
|
14
|
+
languageWeights?: LanguageWeight[];
|
|
15
|
+
baseTimeMultiplier?: number;
|
|
16
|
+
baseMemoryMultiplier?: number;
|
|
17
|
+
baseTokenMultiplier?: number;
|
|
18
|
+
}
|
|
19
|
+
export declare class CostProfileCalculator {
|
|
20
|
+
private languageWeights;
|
|
21
|
+
private baseTimeMultiplier;
|
|
22
|
+
private baseMemoryMultiplier;
|
|
23
|
+
private baseTokenMultiplier;
|
|
24
|
+
constructor(options?: CostProfileOptions);
|
|
25
|
+
getLanguageComplexity(filePath: string): number;
|
|
26
|
+
getLanguageWeight(filePath: string): number;
|
|
27
|
+
getFileExtension(filePath: string): string;
|
|
28
|
+
calculate(filePaths: string[], totalLines: number): CostProfile;
|
|
29
|
+
private calculateTime;
|
|
30
|
+
private calculateMemory;
|
|
31
|
+
private calculateTokens;
|
|
32
|
+
private determineCapabilityLevel;
|
|
33
|
+
}
|
|
34
|
+
export declare const defaultCostProfileCalculator: CostProfileCalculator;
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.defaultCostProfileCalculator = exports.CostProfileCalculator = void 0;
|
|
4
|
+
const CapabilityLevel_1 = require("./CapabilityLevel");
|
|
5
|
+
const DEFAULT_LANGUAGE_WEIGHTS = [
|
|
6
|
+
// C/C++ (C++ 头文件优先,C 仅包含 .c)
|
|
7
|
+
{ extensions: ['.cpp', '.cc', '.cxx', '.hpp', '.h', '.hxx'], weight: 1.5, complexity: 1.5 },
|
|
8
|
+
{ extensions: ['.c'], weight: 1.3, complexity: 1.3 },
|
|
9
|
+
// Go
|
|
10
|
+
{ extensions: ['.go', '.golang'], weight: 1.3, complexity: 1.3 },
|
|
11
|
+
// TypeScript/JavaScript
|
|
12
|
+
{ extensions: ['.ts', '.tsx', '.mts', '.cts'], weight: 1.2, complexity: 1.2 },
|
|
13
|
+
{ extensions: ['.js', '.jsx', '.mjs', '.cjs'], weight: 1.0, complexity: 1.0 },
|
|
14
|
+
// Python
|
|
15
|
+
{ extensions: ['.py'], weight: 1.1, complexity: 1.1 },
|
|
16
|
+
// Java
|
|
17
|
+
{ extensions: ['.java'], weight: 1.4, complexity: 1.4 },
|
|
18
|
+
// Rust
|
|
19
|
+
{ extensions: ['.rs'], weight: 1.4, complexity: 1.4 },
|
|
20
|
+
// Ruby
|
|
21
|
+
{ extensions: ['.rb', '.ruby'], weight: 1.0, complexity: 1.0 },
|
|
22
|
+
// PHP
|
|
23
|
+
{ extensions: ['.php'], weight: 1.0, complexity: 1.0 },
|
|
24
|
+
// C#
|
|
25
|
+
{ extensions: ['.cs'], weight: 1.3, complexity: 1.3 },
|
|
26
|
+
// Swift
|
|
27
|
+
{ extensions: ['.swift'], weight: 1.2, complexity: 1.2 },
|
|
28
|
+
// Kotlin
|
|
29
|
+
{ extensions: ['.kt', '.kts'], weight: 1.2, complexity: 1.2 },
|
|
30
|
+
// Dart
|
|
31
|
+
{ extensions: ['.dart'], weight: 1.1, complexity: 1.1 },
|
|
32
|
+
// Scala
|
|
33
|
+
{ extensions: ['.scala'], weight: 1.4, complexity: 1.4 },
|
|
34
|
+
// Lua
|
|
35
|
+
{ extensions: ['.lua'], weight: 0.9, complexity: 0.9 },
|
|
36
|
+
// Elixir
|
|
37
|
+
{ extensions: ['.ex', '.exs'], weight: 1.1, complexity: 1.1 },
|
|
38
|
+
// OCaml/ReasonML
|
|
39
|
+
{ extensions: ['.ml', '.mli', '.re', '.rei'], weight: 1.3, complexity: 1.3 },
|
|
40
|
+
// Clojure
|
|
41
|
+
{ extensions: ['.clj', '.cljs'], weight: 1.2, complexity: 1.2 },
|
|
42
|
+
// Haskell
|
|
43
|
+
{ extensions: ['.hs'], weight: 1.4, complexity: 1.4 },
|
|
44
|
+
// Shell scripts
|
|
45
|
+
{ extensions: ['.sh', '.bash', '.zsh'], weight: 0.8, complexity: 0.8 },
|
|
46
|
+
// PowerShell
|
|
47
|
+
{ extensions: ['.ps1', '.psm1'], weight: 0.9, complexity: 0.9 },
|
|
48
|
+
// SQL
|
|
49
|
+
{ extensions: ['.sql'], weight: 0.8, complexity: 0.8 },
|
|
50
|
+
];
|
|
51
|
+
class CostProfileCalculator {
|
|
52
|
+
languageWeights;
|
|
53
|
+
baseTimeMultiplier;
|
|
54
|
+
baseMemoryMultiplier;
|
|
55
|
+
baseTokenMultiplier;
|
|
56
|
+
constructor(options = {}) {
|
|
57
|
+
this.languageWeights = options.languageWeights ?? DEFAULT_LANGUAGE_WEIGHTS;
|
|
58
|
+
this.baseTimeMultiplier = options.baseTimeMultiplier ?? 1.0;
|
|
59
|
+
this.baseMemoryMultiplier = options.baseMemoryMultiplier ?? 1.0;
|
|
60
|
+
this.baseTokenMultiplier = options.baseTokenMultiplier ?? 1.0;
|
|
61
|
+
}
|
|
62
|
+
getLanguageComplexity(filePath) {
|
|
63
|
+
const ext = this.getFileExtension(filePath);
|
|
64
|
+
const lang = this.languageWeights.find(l => l.extensions.includes(ext));
|
|
65
|
+
return lang?.complexity ?? 1.0;
|
|
66
|
+
}
|
|
67
|
+
getLanguageWeight(filePath) {
|
|
68
|
+
const ext = this.getFileExtension(filePath);
|
|
69
|
+
const lang = this.languageWeights.find(l => l.extensions.includes(ext));
|
|
70
|
+
return lang?.weight ?? 1.0;
|
|
71
|
+
}
|
|
72
|
+
getFileExtension(filePath) {
|
|
73
|
+
const idx = filePath.lastIndexOf('.');
|
|
74
|
+
return idx === -1 ? '' : filePath.substring(idx).toLowerCase();
|
|
75
|
+
}
|
|
76
|
+
calculate(filePaths, totalLines) {
|
|
77
|
+
if (filePaths.length === 0) {
|
|
78
|
+
return {
|
|
79
|
+
estimatedTime: 0,
|
|
80
|
+
estimatedMemory: 0,
|
|
81
|
+
estimatedTokens: 0,
|
|
82
|
+
requiredCapability: CapabilityLevel_1.CapabilityLevel.NONE,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
let totalComplexity = 0;
|
|
86
|
+
let totalWeight = 0;
|
|
87
|
+
for (const filePath of filePaths) {
|
|
88
|
+
const complexity = this.getLanguageComplexity(filePath);
|
|
89
|
+
const weight = this.getLanguageWeight(filePath);
|
|
90
|
+
totalComplexity += complexity;
|
|
91
|
+
totalWeight += weight;
|
|
92
|
+
}
|
|
93
|
+
const avgComplexity = totalComplexity / filePaths.length;
|
|
94
|
+
const avgWeight = totalWeight / filePaths.length;
|
|
95
|
+
const estimatedTime = this.calculateTime(totalLines, avgComplexity, avgWeight);
|
|
96
|
+
const estimatedMemory = this.calculateMemory(totalLines, avgComplexity);
|
|
97
|
+
const estimatedTokens = this.calculateTokens(totalLines, avgComplexity);
|
|
98
|
+
const requiredCapability = this.determineCapabilityLevel(avgComplexity, totalLines);
|
|
99
|
+
return {
|
|
100
|
+
estimatedTime,
|
|
101
|
+
estimatedMemory,
|
|
102
|
+
estimatedTokens,
|
|
103
|
+
requiredCapability,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
calculateTime(lines, complexity, weight) {
|
|
107
|
+
const baseTime = (lines / 100) * 1000;
|
|
108
|
+
return Math.ceil(baseTime * complexity * weight * this.baseTimeMultiplier);
|
|
109
|
+
}
|
|
110
|
+
calculateMemory(lines, complexity) {
|
|
111
|
+
const baseMemory = lines * 100;
|
|
112
|
+
return Math.ceil(baseMemory * complexity * this.baseMemoryMultiplier);
|
|
113
|
+
}
|
|
114
|
+
calculateTokens(lines, complexity) {
|
|
115
|
+
const baseTokens = lines * 10;
|
|
116
|
+
return Math.ceil(baseTokens * complexity * this.baseTokenMultiplier);
|
|
117
|
+
}
|
|
118
|
+
determineCapabilityLevel(complexity, lines) {
|
|
119
|
+
if (lines > 5000 || complexity > 1.4) {
|
|
120
|
+
return CapabilityLevel_1.CapabilityLevel.SEMANTIC;
|
|
121
|
+
}
|
|
122
|
+
else if (lines > 1000 || complexity > 1.2) {
|
|
123
|
+
return CapabilityLevel_1.CapabilityLevel.STRUCTURAL;
|
|
124
|
+
}
|
|
125
|
+
else if (lines > 100 || complexity > 1.0) {
|
|
126
|
+
return CapabilityLevel_1.CapabilityLevel.LINE;
|
|
127
|
+
}
|
|
128
|
+
else if (lines > 10) {
|
|
129
|
+
return CapabilityLevel_1.CapabilityLevel.TEXT;
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
return CapabilityLevel_1.CapabilityLevel.NONE;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
exports.CostProfileCalculator = CostProfileCalculator;
|
|
137
|
+
exports.defaultCostProfileCalculator = new CostProfileCalculator();
|
|
138
|
+
//# sourceMappingURL=CostProfile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CostProfile.js","sourceRoot":"","sources":["../../../src/core/capability/CostProfile.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { CapabilityLevel, MinCapability } from './CapabilityLevel';
|
|
2
|
+
export interface DecisionInput {
|
|
3
|
+
timeElapsed: number;
|
|
4
|
+
memoryUsed?: number;
|
|
5
|
+
confidence: number;
|
|
6
|
+
}
|
|
7
|
+
export interface DegradationDecision {
|
|
8
|
+
shouldDegrade: boolean;
|
|
9
|
+
targetLevel: CapabilityLevel;
|
|
10
|
+
reason: string;
|
|
11
|
+
}
|
|
12
|
+
export interface DegradationPolicy {
|
|
13
|
+
decide(input: DecisionInput, minCapability: MinCapability): DegradationDecision;
|
|
14
|
+
}
|
|
15
|
+
export declare class ThresholdDegradationPolicy implements DegradationPolicy {
|
|
16
|
+
private timeLimit;
|
|
17
|
+
private confidenceThreshold;
|
|
18
|
+
constructor(options?: {
|
|
19
|
+
timeLimit?: number;
|
|
20
|
+
confidenceThreshold?: number;
|
|
21
|
+
});
|
|
22
|
+
decide(input: DecisionInput, minCapability: MinCapability): DegradationDecision;
|
|
23
|
+
}
|
|
24
|
+
export declare class NoOpDegradationPolicy implements DegradationPolicy {
|
|
25
|
+
decide(input: DecisionInput, minCapability: MinCapability): DegradationDecision;
|
|
26
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NoOpDegradationPolicy = exports.ThresholdDegradationPolicy = void 0;
|
|
4
|
+
const CapabilityLevel_1 = require("./CapabilityLevel");
|
|
5
|
+
class ThresholdDegradationPolicy {
|
|
6
|
+
timeLimit;
|
|
7
|
+
confidenceThreshold;
|
|
8
|
+
constructor(options = {}) {
|
|
9
|
+
this.timeLimit = options.timeLimit ?? 30000;
|
|
10
|
+
this.confidenceThreshold = options.confidenceThreshold ?? 0.7;
|
|
11
|
+
}
|
|
12
|
+
decide(input, minCapability) {
|
|
13
|
+
const reasons = [];
|
|
14
|
+
if (input.timeElapsed > this.timeLimit) {
|
|
15
|
+
reasons.push(`Time elapsed (${input.timeElapsed}ms) exceeds limit (${this.timeLimit}ms)`);
|
|
16
|
+
}
|
|
17
|
+
if (input.confidence < this.confidenceThreshold) {
|
|
18
|
+
reasons.push(`Confidence (${input.confidence.toFixed(2)}) below threshold (${this.confidenceThreshold})`);
|
|
19
|
+
}
|
|
20
|
+
if (reasons.length === 0) {
|
|
21
|
+
return {
|
|
22
|
+
shouldDegrade: false,
|
|
23
|
+
targetLevel: minCapability.minCapability,
|
|
24
|
+
reason: 'All conditions met, no degradation needed',
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
const fallbackChain = [minCapability.minCapability, ...minCapability.fallbackChain];
|
|
28
|
+
for (let i = 0; i < fallbackChain.length; i++) {
|
|
29
|
+
const targetLevel = fallbackChain[i];
|
|
30
|
+
if (i === fallbackChain.length - 1) {
|
|
31
|
+
return {
|
|
32
|
+
shouldDegrade: true,
|
|
33
|
+
targetLevel,
|
|
34
|
+
reason: reasons.join('; ') + `, falling back to final level: ${targetLevel}`,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
const nextLevel = fallbackChain[i + 1];
|
|
38
|
+
const levelDrop = targetLevel - nextLevel;
|
|
39
|
+
if (levelDrop >= 2 || reasons.length >= 2) {
|
|
40
|
+
return {
|
|
41
|
+
shouldDegrade: true,
|
|
42
|
+
targetLevel: nextLevel,
|
|
43
|
+
reason: reasons.join('; ') + `, degrading from ${targetLevel} to ${nextLevel}`,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return {
|
|
48
|
+
shouldDegrade: true,
|
|
49
|
+
targetLevel: CapabilityLevel_1.CapabilityLevel.NONE,
|
|
50
|
+
reason: reasons.join('; ') + ', falling back to NONE',
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
exports.ThresholdDegradationPolicy = ThresholdDegradationPolicy;
|
|
55
|
+
class NoOpDegradationPolicy {
|
|
56
|
+
decide(input, minCapability) {
|
|
57
|
+
return {
|
|
58
|
+
shouldDegrade: false,
|
|
59
|
+
targetLevel: minCapability.minCapability,
|
|
60
|
+
reason: 'No-op policy: never degrades',
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
exports.NoOpDegradationPolicy = NoOpDegradationPolicy;
|
|
65
|
+
//# sourceMappingURL=DegradationPolicy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DegradationPolicy.js","sourceRoot":"","sources":["../../../src/core/capability/DegradationPolicy.ts"],"names":[],"mappings":";;;AAAA,uDAA0F;AAkB1F,MAAa,0BAA0B;IAC3B,SAAS,CAAS;IAClB,mBAAmB,CAAS;IAEpC,YAAY,UAGR,EAAE;QACF,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,KAAK,CAAC;QAC5C,IAAI,CAAC,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,IAAI,GAAG,CAAC;IAClE,CAAC;IAED,MAAM,CAAC,KAAoB,EAAE,aAA4B;QACrD,MAAM,OAAO,GAAa,EAAE,CAAC;QAE7B,IAAI,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YACrC,OAAO,CAAC,IAAI,CAAC,iBAAiB,KAAK,CAAC,WAAW,sBAAsB,IAAI,CAAC,SAAS,KAAK,CAAC,CAAC;QAC9F,CAAC;QAED,IAAI,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC9C,OAAO,CAAC,IAAI,CAAC,eAAe,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,sBAAsB,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC;QAC9G,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO;gBACH,aAAa,EAAE,KAAK;gBACpB,WAAW,EAAE,aAAa,CAAC,aAAa;gBACxC,MAAM,EAAE,2CAA2C;aACtD,CAAC;QACN,CAAC;QAED,MAAM,aAAa,GAAG,CAAC,aAAa,CAAC,aAAa,EAAE,GAAG,aAAa,CAAC,aAAa,CAAC,CAAC;QAEpF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,MAAM,WAAW,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;YACrC,IAAI,CAAC,KAAK,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACjC,OAAO;oBACH,aAAa,EAAE,IAAI;oBACnB,WAAW;oBACX,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,kCAAkC,WAAW,EAAE;iBAC/E,CAAC;YACN,CAAC;YAED,MAAM,SAAS,GAAG,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACvC,MAAM,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC;YAE1C,IAAI,SAAS,IAAI,CAAC,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;gBACxC,OAAO;oBACH,aAAa,EAAE,IAAI;oBACnB,WAAW,EAAE,SAAS;oBACtB,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,oBAAoB,WAAW,OAAO,SAAS,EAAE;iBACjF,CAAC;YACN,CAAC;QACL,CAAC;QAED,OAAO;YACH,aAAa,EAAE,IAAI;YACnB,WAAW,EAAE,iCAAe,CAAC,IAAI;YACjC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,wBAAwB;SACxD,CAAC;IACN,CAAC;CACJ;AA7DD,gEA6DC;AAED,MAAa,qBAAqB;IAC9B,MAAM,CAAC,KAAoB,EAAE,aAA4B;QACrD,OAAO;YACH,aAAa,EAAE,KAAK;YACpB,WAAW,EAAE,aAAa,CAAC,aAAa;YACxC,MAAM,EAAE,8BAA8B;SACzC,CAAC;IACN,CAAC;CACJ;AARD,sDAQC"}
|
|
@@ -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("./CapabilityLevel"), exports);
|
|
18
|
+
__exportStar(require("./DegradationPolicy"), exports);
|
|
19
|
+
__exportStar(require("./CostProfile"), exports);
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/capability/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oDAAkC;AAClC,sDAAoC;AACpC,gDAA8B"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export interface ContextProvenance {
|
|
2
|
+
source: string;
|
|
3
|
+
ref?: string;
|
|
4
|
+
timeRange?: {
|
|
5
|
+
start: string;
|
|
6
|
+
end: string;
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
export interface ClippedInfo {
|
|
10
|
+
reason: string;
|
|
11
|
+
droppedItems: string[];
|
|
12
|
+
}
|
|
13
|
+
export interface ContextMeta {
|
|
14
|
+
confidence: number;
|
|
15
|
+
confidenceReason: string;
|
|
16
|
+
provenance: ContextProvenance;
|
|
17
|
+
clipped?: ClippedInfo;
|
|
18
|
+
timestamp: string;
|
|
19
|
+
version: string;
|
|
20
|
+
}
|
|
21
|
+
export declare class ContextMetaBuilder {
|
|
22
|
+
private meta;
|
|
23
|
+
setConfidence(value: number, reason: string): ContextMetaBuilder;
|
|
24
|
+
setProvenance(source: string, ref?: string, timeRange?: ContextProvenance['timeRange']): ContextMetaBuilder;
|
|
25
|
+
setClipped(reason: string, droppedItems: string[]): ContextMetaBuilder;
|
|
26
|
+
build(): ContextMeta;
|
|
27
|
+
static fromPartial(partial: Partial<ContextMeta>): ContextMeta;
|
|
28
|
+
}
|
|
29
|
+
export declare function toAuditLog(meta: ContextMeta): string;
|
|
30
|
+
export declare function mergeMetas(metas: ContextMeta[]): ContextMeta;
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ContextMetaBuilder = void 0;
|
|
4
|
+
exports.toAuditLog = toAuditLog;
|
|
5
|
+
exports.mergeMetas = mergeMetas;
|
|
6
|
+
class ContextMetaBuilder {
|
|
7
|
+
meta = {
|
|
8
|
+
timestamp: new Date().toISOString(),
|
|
9
|
+
version: '1.0.0',
|
|
10
|
+
};
|
|
11
|
+
setConfidence(value, reason) {
|
|
12
|
+
this.meta.confidence = Math.max(0, Math.min(1, value));
|
|
13
|
+
this.meta.confidenceReason = reason;
|
|
14
|
+
return this;
|
|
15
|
+
}
|
|
16
|
+
setProvenance(source, ref, timeRange) {
|
|
17
|
+
this.meta.provenance = {
|
|
18
|
+
source,
|
|
19
|
+
ref,
|
|
20
|
+
timeRange,
|
|
21
|
+
};
|
|
22
|
+
return this;
|
|
23
|
+
}
|
|
24
|
+
setClipped(reason, droppedItems) {
|
|
25
|
+
this.meta.clipped = {
|
|
26
|
+
reason,
|
|
27
|
+
droppedItems,
|
|
28
|
+
};
|
|
29
|
+
return this;
|
|
30
|
+
}
|
|
31
|
+
build() {
|
|
32
|
+
if (this.meta.confidence === undefined) {
|
|
33
|
+
this.meta.confidence = 0.5;
|
|
34
|
+
this.meta.confidenceReason = 'No explicit confidence set, using default';
|
|
35
|
+
}
|
|
36
|
+
if (this.meta.provenance === undefined) {
|
|
37
|
+
this.meta.provenance = {
|
|
38
|
+
source: 'unknown',
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
return this.meta;
|
|
42
|
+
}
|
|
43
|
+
static fromPartial(partial) {
|
|
44
|
+
const builder = new ContextMetaBuilder();
|
|
45
|
+
if (partial.confidence !== undefined) {
|
|
46
|
+
builder.setConfidence(partial.confidence, partial.confidenceReason || 'Inferred');
|
|
47
|
+
}
|
|
48
|
+
if (partial.provenance) {
|
|
49
|
+
builder.setProvenance(partial.provenance.source, partial.provenance.ref, partial.provenance.timeRange);
|
|
50
|
+
}
|
|
51
|
+
if (partial.clipped) {
|
|
52
|
+
builder.setClipped(partial.clipped.reason, partial.clipped.droppedItems);
|
|
53
|
+
}
|
|
54
|
+
return builder.build();
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
exports.ContextMetaBuilder = ContextMetaBuilder;
|
|
58
|
+
function toAuditLog(meta) {
|
|
59
|
+
const log = [];
|
|
60
|
+
log.push(`Context Audit Log`);
|
|
61
|
+
log.push(`================`);
|
|
62
|
+
log.push(`Timestamp: ${meta.timestamp}`);
|
|
63
|
+
log.push(`Version: ${meta.version}`);
|
|
64
|
+
log.push(`Confidence: ${(meta.confidence * 100).toFixed(1)}%`);
|
|
65
|
+
log.push(`Confidence Reason: ${meta.confidenceReason}`);
|
|
66
|
+
log.push(`Source: ${meta.provenance.source}`);
|
|
67
|
+
if (meta.provenance.ref) {
|
|
68
|
+
log.push(`Reference: ${meta.provenance.ref}`);
|
|
69
|
+
}
|
|
70
|
+
if (meta.provenance.timeRange) {
|
|
71
|
+
log.push(`Time Range: ${meta.provenance.timeRange.start} to ${meta.provenance.timeRange.end}`);
|
|
72
|
+
}
|
|
73
|
+
if (meta.clipped) {
|
|
74
|
+
log.push(`Clipped: Yes (${meta.clipped.reason})`);
|
|
75
|
+
log.push(`Dropped Items (${meta.clipped.droppedItems.length}):`);
|
|
76
|
+
for (const item of meta.clipped.droppedItems) {
|
|
77
|
+
log.push(` - ${item}`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
log.push(`Clipped: No`);
|
|
82
|
+
}
|
|
83
|
+
return log.join('\n');
|
|
84
|
+
}
|
|
85
|
+
function mergeMetas(metas) {
|
|
86
|
+
if (metas.length === 0) {
|
|
87
|
+
return new ContextMetaBuilder().build();
|
|
88
|
+
}
|
|
89
|
+
if (metas.length === 1) {
|
|
90
|
+
return metas[0];
|
|
91
|
+
}
|
|
92
|
+
const avgConfidence = metas.reduce((sum, m) => sum + m.confidence, 0) / metas.length;
|
|
93
|
+
const sources = metas.map(m => m.provenance.source).filter((v, i, a) => a.indexOf(v) === i);
|
|
94
|
+
const allDroppedItems = metas.filter(m => m.clipped).flatMap(m => m.clipped.droppedItems);
|
|
95
|
+
let clippedInfo;
|
|
96
|
+
if (allDroppedItems.length > 0) {
|
|
97
|
+
clippedInfo = {
|
|
98
|
+
reason: 'Merged from multiple contexts with clipped items',
|
|
99
|
+
droppedItems: allDroppedItems,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
return new ContextMetaBuilder()
|
|
103
|
+
.setConfidence(avgConfidence, `Average confidence from ${metas.length} sources`)
|
|
104
|
+
.setProvenance(`merged(${sources.join(',')})`)
|
|
105
|
+
.setClipped('Merged contexts had clipped items', allDroppedItems)
|
|
106
|
+
.build();
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=ContextMeta.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContextMeta.js","sourceRoot":"","sources":["../../../src/core/context/ContextMeta.ts"],"names":[],"mappings":";;;AA0FA,gCA8BC;AAED,gCA0BC;AA7HD,MAAa,kBAAkB;IACnB,IAAI,GAAyB;QACjC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,OAAO,EAAE,OAAO;KACnB,CAAC;IAEF,aAAa,CAAC,KAAa,EAAE,MAAc;QACvC,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QACvD,IAAI,CAAC,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC;QACpC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,aAAa,CAAC,MAAc,EAAE,GAAY,EAAE,SAA0C;QAClF,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG;YACnB,MAAM;YACN,GAAG;YACH,SAAS;SACZ,CAAC;QACF,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,UAAU,CAAC,MAAc,EAAE,YAAsB;QAC7C,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG;YAChB,MAAM;YACN,YAAY;SACf,CAAC;QACF,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,KAAK;QACD,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YACrC,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC,gBAAgB,GAAG,2CAA2C,CAAC;QAC7E,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YACrC,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG;gBACnB,MAAM,EAAE,SAAS;aACpB,CAAC;QACN,CAAC;QAED,OAAO,IAAI,CAAC,IAAmB,CAAC;IACpC,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,OAA6B;QAC5C,MAAM,OAAO,GAAG,IAAI,kBAAkB,EAAE,CAAC;QAEzC,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YACnC,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,gBAAgB,IAAI,UAAU,CAAC,CAAC;QACtF,CAAC;QAED,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACrB,OAAO,CAAC,aAAa,CACjB,OAAO,CAAC,UAAU,CAAC,MAAM,EACzB,OAAO,CAAC,UAAU,CAAC,GAAG,EACtB,OAAO,CAAC,UAAU,CAAC,SAAS,CAC/B,CAAC;QACN,CAAC;QAED,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YAClB,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAC7E,CAAC;QAED,OAAO,OAAO,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;CACJ;AAjED,gDAiEC;AAED,SAAgB,UAAU,CAAC,IAAiB;IACxC,MAAM,GAAG,GAAa,EAAE,CAAC;IAEzB,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAC9B,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC7B,GAAG,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;IACzC,GAAG,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IACrC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC/D,GAAG,CAAC,IAAI,CAAC,sBAAsB,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACxD,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;IAE9C,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;QACtB,GAAG,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC;QAC5B,GAAG,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC;IACnG,CAAC;IAED,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,GAAG,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QAClD,GAAG,CAAC,IAAI,CAAC,kBAAkB,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,IAAI,CAAC,CAAC;QACjE,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;YAC3C,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QAC5B,CAAC;IACL,CAAC;SAAM,CAAC;QACJ,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC5B,CAAC;IAED,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAgB,UAAU,CAAC,KAAoB;IAC3C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,IAAI,kBAAkB,EAAE,CAAC,KAAK,EAAE,CAAC;IAC5C,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;IACrF,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5F,MAAM,eAAe,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAQ,CAAC,YAAY,CAAC,CAAC;IAE3F,IAAI,WAAoC,CAAC;IACzC,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,WAAW,GAAG;YACV,MAAM,EAAE,kDAAkD;YAC1D,YAAY,EAAE,eAAe;SAChC,CAAC;IACN,CAAC;IAED,OAAO,IAAI,kBAAkB,EAAE;SAC1B,aAAa,CAAC,aAAa,EAAE,2BAA2B,KAAK,CAAC,MAAM,UAAU,CAAC;SAC/E,aAAa,CAAC,UAAU,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;SAC7C,UAAU,CAAC,mCAAmC,EAAE,eAAe,CAAC;SAChE,KAAK,EAAE,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './ContextMeta';
|
|
@@ -0,0 +1,18 @@
|
|
|
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("./ContextMeta"), exports);
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/context/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA8B"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { GitService } from './GitService';
|
|
2
2
|
import { ModelRouter } from '../modelRouter/ModelRouter';
|
|
3
|
+
import { CapabilityLevel } from '../capability/CapabilityLevel';
|
|
3
4
|
/**
|
|
4
5
|
* 代码审查级别
|
|
5
6
|
*/
|
|
@@ -53,6 +54,15 @@ export interface ReviewResult {
|
|
|
53
54
|
recommendations: string[];
|
|
54
55
|
/** 审查的文件数 */
|
|
55
56
|
filesReviewed: number;
|
|
57
|
+
/** 置信度 (0-1) */
|
|
58
|
+
confidence: number;
|
|
59
|
+
/** 降级决策 */
|
|
60
|
+
degradation?: {
|
|
61
|
+
applied: boolean;
|
|
62
|
+
originalLevel: CapabilityLevel;
|
|
63
|
+
targetLevel: CapabilityLevel;
|
|
64
|
+
reason: string;
|
|
65
|
+
};
|
|
56
66
|
}
|
|
57
67
|
/**
|
|
58
68
|
* AI 代码审查器
|
|
@@ -61,6 +71,7 @@ export declare class CodeReviewer {
|
|
|
61
71
|
private gitService;
|
|
62
72
|
private router?;
|
|
63
73
|
static readonly VERSION = "v1.0";
|
|
74
|
+
private degradationPolicy;
|
|
64
75
|
constructor(gitService: GitService, router?: ModelRouter | undefined);
|
|
65
76
|
/**
|
|
66
77
|
* 构建审查提示词
|