yuangs 5.43.0 → 5.45.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/cli.js +2 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/git/auto.d.ts +0 -3
- package/dist/commands/git/auto.js +78 -257
- package/dist/commands/git/auto.js.map +1 -1
- package/dist/commands/git/historySemantic.d.ts +2 -0
- package/dist/commands/git/historySemantic.js +62 -0
- package/dist/commands/git/historySemantic.js.map +1 -0
- package/dist/commands/git/plan.js +4 -2
- package/dist/commands/git/plan.js.map +1 -1
- package/dist/commands/git/resolve.d.ts +2 -0
- package/dist/commands/git/resolve.js +104 -0
- package/dist/commands/git/resolve.js.map +1 -0
- package/dist/commands/git/semanticDiff.d.ts +2 -0
- package/dist/commands/git/semanticDiff.js +51 -0
- package/dist/commands/git/semanticDiff.js.map +1 -0
- package/dist/commands/git/smartCommit.d.ts +2 -0
- package/dist/commands/git/smartCommit.js +110 -0
- package/dist/commands/git/smartCommit.js.map +1 -0
- package/dist/commands/gitCommands.js +8 -0
- package/dist/commands/gitCommands.js.map +1 -1
- package/dist/core/ConfigManager.d.ts +39 -0
- package/dist/core/ConfigManager.js +127 -0
- package/dist/core/ConfigManager.js.map +1 -0
- package/dist/core/GlobalErrorHandler.d.ts +10 -0
- package/dist/core/GlobalErrorHandler.js +65 -0
- package/dist/core/GlobalErrorHandler.js.map +1 -0
- package/dist/core/capability/CapabilityLevel.d.ts +41 -109
- package/dist/core/capability/CapabilityLevel.js +76 -159
- package/dist/core/capability/CapabilityLevel.js.map +1 -1
- package/dist/core/capability/DegradationPolicy.js.map +1 -1
- package/dist/core/capability/Logger.d.ts +41 -0
- package/dist/core/capability/Logger.js +58 -0
- package/dist/core/capability/Logger.js.map +1 -0
- package/dist/core/capability/Pipeline.d.ts +146 -0
- package/dist/core/capability/Pipeline.js +233 -0
- package/dist/core/capability/Pipeline.js.map +1 -0
- package/dist/core/capability/PipelineFactory.d.ts +40 -0
- package/dist/core/capability/PipelineFactory.js +260 -0
- package/dist/core/capability/PipelineFactory.js.map +1 -0
- package/dist/core/capability/index.d.ts +3 -0
- package/dist/core/capability/index.js +3 -0
- package/dist/core/capability/index.js.map +1 -1
- package/dist/core/errors.d.ts +38 -0
- package/dist/core/errors.js +64 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/git/ConflictResolver.d.ts +25 -0
- package/dist/core/git/ConflictResolver.js +121 -0
- package/dist/core/git/ConflictResolver.js.map +1 -0
- package/dist/core/git/GitService.d.ts +11 -1
- package/dist/core/git/GitService.js +37 -1
- package/dist/core/git/GitService.js.map +1 -1
- package/dist/core/git/SmartCommitManager.d.ts +24 -0
- package/dist/core/git/SmartCommitManager.js +137 -0
- package/dist/core/git/SmartCommitManager.js.map +1 -0
- package/dist/core/git/constants.d.ts +4 -0
- package/dist/core/git/constants.js +14 -1
- package/dist/core/git/constants.js.map +1 -1
- package/dist/core/git/semantic/SemanticCommitParser.d.ts +12 -0
- package/dist/core/git/semantic/SemanticCommitParser.js +92 -0
- package/dist/core/git/semantic/SemanticCommitParser.js.map +1 -0
- package/dist/core/git/semantic/SemanticDiffEngine.d.ts +18 -0
- package/dist/core/git/semantic/SemanticDiffEngine.js +152 -0
- package/dist/core/git/semantic/SemanticDiffEngine.js.map +1 -0
- package/dist/core/git/semantic/historyTypes.d.ts +14 -0
- package/dist/core/git/semantic/historyTypes.js +3 -0
- package/dist/core/git/semantic/historyTypes.js.map +1 -0
- package/dist/core/git/semantic/types.d.ts +29 -0
- package/dist/core/git/semantic/types.js +18 -0
- package/dist/core/git/semantic/types.js.map +1 -0
- package/dist/core/metrics/PerformanceMonitor.d.ts +28 -0
- package/dist/core/metrics/PerformanceMonitor.js +64 -0
- package/dist/core/metrics/PerformanceMonitor.js.map +1 -0
- package/dist/utils/CLIComponent.d.ts +26 -0
- package/dist/utils/CLIComponent.js +91 -0
- package/dist/utils/CLIComponent.js.map +1 -0
- package/dist/utils/Logger.d.ts +31 -0
- package/dist/utils/Logger.js +102 -0
- package/dist/utils/Logger.js.map +1 -0
- package/dist/utils/ProgressBar.d.ts +27 -0
- package/dist/utils/ProgressBar.js +103 -0
- package/dist/utils/ProgressBar.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.configManager = exports.ConfigManager = void 0;
|
|
7
|
+
const fs_1 = __importDefault(require("fs"));
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
const js_yaml_1 = __importDefault(require("js-yaml"));
|
|
10
|
+
const errors_1 = require("./errors");
|
|
11
|
+
const Logger_1 = require("../utils/Logger");
|
|
12
|
+
const DEFAULT_CONFIG = {
|
|
13
|
+
git: {
|
|
14
|
+
auto: {
|
|
15
|
+
model: 'Assistant',
|
|
16
|
+
maxTasks: 5,
|
|
17
|
+
minScore: 85,
|
|
18
|
+
autoCommit: false,
|
|
19
|
+
reviewLevel: 'standard',
|
|
20
|
+
},
|
|
21
|
+
reviewThreshold: 7,
|
|
22
|
+
},
|
|
23
|
+
ui: {
|
|
24
|
+
theme: 'auto',
|
|
25
|
+
showProgress: true,
|
|
26
|
+
useEmoji: true,
|
|
27
|
+
},
|
|
28
|
+
ai: {
|
|
29
|
+
defaultModel: 'Assistant',
|
|
30
|
+
temperature: 0.7,
|
|
31
|
+
maxTokens: 2000,
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
const CONFIG_FILES = [
|
|
35
|
+
'.yuangsrc',
|
|
36
|
+
'.yuangsrc.json',
|
|
37
|
+
'.yuangsrc.yaml',
|
|
38
|
+
'.yuangsrc.yml',
|
|
39
|
+
'yuangs.config.json',
|
|
40
|
+
];
|
|
41
|
+
class ConfigManager {
|
|
42
|
+
cwd;
|
|
43
|
+
config = DEFAULT_CONFIG;
|
|
44
|
+
configPath = null;
|
|
45
|
+
constructor(cwd = process.cwd()) {
|
|
46
|
+
this.cwd = cwd;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Initialize and load configuration from disk
|
|
50
|
+
*/
|
|
51
|
+
async init() {
|
|
52
|
+
const configPath = this.findConfigFile();
|
|
53
|
+
if (configPath) {
|
|
54
|
+
this.configPath = configPath;
|
|
55
|
+
await this.loadConfig(configPath);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
findConfigFile() {
|
|
59
|
+
for (const file of CONFIG_FILES) {
|
|
60
|
+
const fullPath = path_1.default.join(this.cwd, file);
|
|
61
|
+
if (fs_1.default.existsSync(fullPath)) {
|
|
62
|
+
return fullPath;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// Check home directory as well
|
|
66
|
+
const homeDir = process.env.HOME || process.env.USERPROFILE;
|
|
67
|
+
if (homeDir) {
|
|
68
|
+
for (const file of CONFIG_FILES) {
|
|
69
|
+
const fullPath = path_1.default.join(homeDir, file);
|
|
70
|
+
if (fs_1.default.existsSync(fullPath)) {
|
|
71
|
+
return fullPath;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
async loadConfig(filePath) {
|
|
78
|
+
try {
|
|
79
|
+
const content = await fs_1.default.promises.readFile(filePath, 'utf8');
|
|
80
|
+
let parsed;
|
|
81
|
+
if (filePath.endsWith('.yaml') || filePath.endsWith('.yml') || !filePath.includes('.')) {
|
|
82
|
+
parsed = js_yaml_1.default.load(content);
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
parsed = JSON.parse(content);
|
|
86
|
+
}
|
|
87
|
+
this.config = this.deepMerge(DEFAULT_CONFIG, parsed || {});
|
|
88
|
+
Logger_1.logger.debug('Config', `Configuration loaded from ${filePath}`);
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
throw new errors_1.ConfigError(`Failed to load config: ${error.message}`, [
|
|
92
|
+
`Check if ${filePath} is a valid JSON or YAML file.`,
|
|
93
|
+
]);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
deepMerge(target, source) {
|
|
97
|
+
const result = { ...target };
|
|
98
|
+
for (const key in source) {
|
|
99
|
+
if (source[key] && typeof source[key] === 'object' && !Array.isArray(source[key])) {
|
|
100
|
+
result[key] = this.deepMerge(target[key] || {}, source[key]);
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
result[key] = source[key];
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return result;
|
|
107
|
+
}
|
|
108
|
+
get(path) {
|
|
109
|
+
const parts = path.split('.');
|
|
110
|
+
let value = this.config;
|
|
111
|
+
for (const part of parts) {
|
|
112
|
+
if (value === undefined || value === null)
|
|
113
|
+
return undefined;
|
|
114
|
+
value = value[part];
|
|
115
|
+
}
|
|
116
|
+
return value;
|
|
117
|
+
}
|
|
118
|
+
getAll() {
|
|
119
|
+
return this.config;
|
|
120
|
+
}
|
|
121
|
+
getConfigPath() {
|
|
122
|
+
return this.configPath;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
exports.ConfigManager = ConfigManager;
|
|
126
|
+
exports.configManager = new ConfigManager();
|
|
127
|
+
//# sourceMappingURL=ConfigManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConfigManager.js","sourceRoot":"","sources":["../../src/core/ConfigManager.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAoB;AACpB,gDAAwB;AACxB,sDAA2B;AAC3B,qCAAuC;AACvC,4CAAyC;AAyBzC,MAAM,cAAc,GAAiB;IACjC,GAAG,EAAE;QACD,IAAI,EAAE;YACF,KAAK,EAAE,WAAW;YAClB,QAAQ,EAAE,CAAC;YACX,QAAQ,EAAE,EAAE;YACZ,UAAU,EAAE,KAAK;YACjB,WAAW,EAAE,UAAU;SAC1B;QACD,eAAe,EAAE,CAAC;KACrB;IACD,EAAE,EAAE;QACA,KAAK,EAAE,MAAM;QACb,YAAY,EAAE,IAAI;QAClB,QAAQ,EAAE,IAAI;KACjB;IACD,EAAE,EAAE;QACA,YAAY,EAAE,WAAW;QACzB,WAAW,EAAE,GAAG;QAChB,SAAS,EAAE,IAAI;KAClB;CACJ,CAAC;AAEF,MAAM,YAAY,GAAG;IACjB,WAAW;IACX,gBAAgB;IAChB,gBAAgB;IAChB,eAAe;IACf,oBAAoB;CACvB,CAAC;AAEF,MAAa,aAAa;IAIF;IAHZ,MAAM,GAAiB,cAAc,CAAC;IACtC,UAAU,GAAkB,IAAI,CAAC;IAEzC,YAAoB,MAAc,OAAO,CAAC,GAAG,EAAE;QAA3B,QAAG,GAAH,GAAG,CAAwB;IAAI,CAAC;IAEpD;;OAEG;IACI,KAAK,CAAC,IAAI;QACb,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACzC,IAAI,UAAU,EAAE,CAAC;YACb,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;YAC7B,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QACtC,CAAC;IACL,CAAC;IAEO,cAAc;QAClB,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;YAC9B,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAC3C,IAAI,YAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC1B,OAAO,QAAQ,CAAC;YACpB,CAAC;QACL,CAAC;QAED,+BAA+B;QAC/B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;QAC5D,IAAI,OAAO,EAAE,CAAC;YACV,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;gBAC9B,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;gBAC1C,IAAI,YAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC1B,OAAO,QAAQ,CAAC;gBACpB,CAAC;YACL,CAAC;QACL,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAEO,KAAK,CAAC,UAAU,CAAC,QAAgB;QACrC,IAAI,CAAC;YACD,MAAM,OAAO,GAAG,MAAM,YAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC7D,IAAI,MAAW,CAAC;YAEhB,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACrF,MAAM,GAAG,iBAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAChC,CAAC;iBAAM,CAAC;gBACJ,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACjC,CAAC;YAED,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC;YAC3D,eAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,6BAA6B,QAAQ,EAAE,CAAC,CAAC;QACpE,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YAClB,MAAM,IAAI,oBAAW,CAAC,0BAA0B,KAAK,CAAC,OAAO,EAAE,EAAE;gBAC7D,YAAY,QAAQ,gCAAgC;aACvD,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAEO,SAAS,CAAC,MAAW,EAAE,MAAW;QACtC,MAAM,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;QAC7B,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;YACvB,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBAChF,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YACjE,CAAC;iBAAM,CAAC;gBACJ,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YAC9B,CAAC;QACL,CAAC;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IAEM,GAAG,CAAI,IAAY;QACtB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,KAAK,GAAQ,IAAI,CAAC,MAAM,CAAC;QAC7B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACvB,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;gBAAE,OAAO,SAAgB,CAAC;YACnE,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;QACD,OAAO,KAAU,CAAC;IACtB,CAAC;IAEM,MAAM;QACT,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAEM,aAAa;QAChB,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;CACJ;AAxFD,sCAwFC;AAEY,QAAA,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.GlobalErrorHandler = void 0;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const errors_1 = require("./errors");
|
|
9
|
+
const Logger_1 = require("../utils/Logger");
|
|
10
|
+
/**
|
|
11
|
+
* Global error handler for the CLI
|
|
12
|
+
*/
|
|
13
|
+
class GlobalErrorHandler {
|
|
14
|
+
/**
|
|
15
|
+
* Standard way to display errors to the user
|
|
16
|
+
*/
|
|
17
|
+
static handleError(error, context) {
|
|
18
|
+
const isYuangsError = error instanceof errors_1.YuangsError;
|
|
19
|
+
// Log the error details
|
|
20
|
+
Logger_1.logger.error(context || 'Global', error.message, {
|
|
21
|
+
code: isYuangsError ? error.code : 'UNKNOWN',
|
|
22
|
+
stack: error.stack
|
|
23
|
+
});
|
|
24
|
+
console.log('\n' + chalk_1.default.red.bold('✕ Error: ') + chalk_1.default.white(error.message));
|
|
25
|
+
if (isYuangsError && error.code) {
|
|
26
|
+
console.log(chalk_1.default.gray(`Code: ${error.code}`));
|
|
27
|
+
}
|
|
28
|
+
if (isYuangsError && error.suggestions && error.suggestions.length > 0) {
|
|
29
|
+
console.log('\n' + chalk_1.default.yellow.bold('💡 Suggestions:'));
|
|
30
|
+
error.suggestions.forEach(suggestion => {
|
|
31
|
+
console.log(chalk_1.default.yellow(` • ${suggestion}`));
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
// Generic suggestions based on common error patterns
|
|
36
|
+
const genericSuggestions = this.getGenericSuggestions(error);
|
|
37
|
+
if (genericSuggestions.length > 0) {
|
|
38
|
+
console.log('\n' + chalk_1.default.cyan.bold('💡 Suggestions:'));
|
|
39
|
+
genericSuggestions.forEach(suggestion => {
|
|
40
|
+
console.log(chalk_1.default.cyan(` • ${suggestion}`));
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
console.log(''); // New line for spacing
|
|
45
|
+
}
|
|
46
|
+
static getGenericSuggestions(error) {
|
|
47
|
+
const message = error.message?.toLowerCase() || '';
|
|
48
|
+
const suggestions = [];
|
|
49
|
+
if (message.includes('not a git repository')) {
|
|
50
|
+
suggestions.push('Run this command inside a Git repository.', 'Use "git init" to create a new repository.');
|
|
51
|
+
}
|
|
52
|
+
else if (message.includes('permission denied') || message.includes('eacces')) {
|
|
53
|
+
suggestions.push('Try running with elevated permissions.', 'Check the file/directory ownership.');
|
|
54
|
+
}
|
|
55
|
+
else if (message.includes('enoent')) {
|
|
56
|
+
suggestions.push('Verify that the file or directory exists.');
|
|
57
|
+
}
|
|
58
|
+
else if (message.includes('network') || message.includes('econn')) {
|
|
59
|
+
suggestions.push('Check your internet connection.', 'Verify if the remote service is up.');
|
|
60
|
+
}
|
|
61
|
+
return suggestions;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
exports.GlobalErrorHandler = GlobalErrorHandler;
|
|
65
|
+
//# sourceMappingURL=GlobalErrorHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GlobalErrorHandler.js","sourceRoot":"","sources":["../../src/core/GlobalErrorHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,125 +1,57 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* -
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* -
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
* -
|
|
14
|
-
* -
|
|
2
|
+
* CapabilityLevel
|
|
3
|
+
* ----------------
|
|
4
|
+
* 定义系统中「能力(Capability)」的智能等级。
|
|
5
|
+
*
|
|
6
|
+
* 该等级用于:
|
|
7
|
+
* - AI Capability 匹配
|
|
8
|
+
* - 模型路由规划
|
|
9
|
+
* - 执行阶段降级决策
|
|
10
|
+
* - todo.md 任务标注
|
|
11
|
+
*
|
|
12
|
+
* 级别说明:
|
|
13
|
+
* - SEMANTIC: 极致语义,理解业务意图和全局架构
|
|
14
|
+
* - STRUCTURAL: 结构分析,理解代码依赖和模块接口
|
|
15
|
+
* - LINE: 行级操作,关注具体逻辑实现
|
|
16
|
+
* - TEXT: 文本处理,简单的替换或格式化
|
|
17
|
+
* - NONE: 无智能要求
|
|
15
18
|
*/
|
|
16
19
|
export declare enum CapabilityLevel {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
/** 极致语义:理解业务、架构和设计意图 */
|
|
21
|
+
SEMANTIC = 4,
|
|
22
|
+
/** 结构分析:理解模块依赖、接口和类结构 */
|
|
23
|
+
STRUCTURAL = 3,
|
|
24
|
+
/** 行级分析:理解具体的代码行逻辑 */
|
|
25
|
+
LINE = 2,
|
|
26
|
+
/** 文本分析:简单的字符串处理和文本替换 */
|
|
27
|
+
TEXT = 1,
|
|
28
|
+
/** 无需智能分析 */
|
|
29
|
+
NONE = 0
|
|
22
30
|
}
|
|
23
31
|
/**
|
|
24
|
-
*
|
|
25
|
-
* @param level 能力等级
|
|
26
|
-
* @returns 字符串表示
|
|
27
|
-
*/
|
|
28
|
-
export declare function capabilityLevelToString(level: CapabilityLevel): string;
|
|
29
|
-
/**
|
|
30
|
-
* 将字符串转换为 CapabilityLevel
|
|
31
|
-
* 用于从配置或 LLM 输出解析能力等级
|
|
32
|
-
*
|
|
33
|
-
* @param str 能力等级字符串(不区分大小写)
|
|
34
|
-
* @returns CapabilityLevel 枚举值,如果字符串无效则返回 undefined
|
|
35
|
-
*
|
|
36
|
-
* @example
|
|
37
|
-
* ```typescript
|
|
38
|
-
* const level = stringToCapabilityLevel('semantic');
|
|
39
|
-
* console.log(level); // CapabilityLevel.SEMANTIC
|
|
40
|
-
*
|
|
41
|
-
* const invalid = stringToCapabilityLevel('INVALID');
|
|
42
|
-
* console.log(invalid); // undefined
|
|
43
|
-
* ```
|
|
32
|
+
* 校验 Capability 降级链是否严格单调递减,且最终降级到 NONE
|
|
44
33
|
*/
|
|
45
|
-
export declare function
|
|
34
|
+
export declare function validateStrictDecreasing(chain: CapabilityLevel[]): boolean;
|
|
46
35
|
/**
|
|
47
|
-
*
|
|
48
|
-
* @param a 第一个能力等级
|
|
49
|
-
* @param b 第二个能力等级
|
|
50
|
-
* @returns 正数表示 a > b,负数表示 a < b,0 表示相等
|
|
36
|
+
* 能力等级的可读标签
|
|
51
37
|
*/
|
|
52
|
-
export declare
|
|
38
|
+
export declare const CapabilityLevelLabel: Record<CapabilityLevel, string>;
|
|
53
39
|
/**
|
|
54
|
-
*
|
|
55
|
-
* @param a 第一个能力等级
|
|
56
|
-
* @param b 第二个能力等级
|
|
57
|
-
* @returns 如果 a > b 返回 true
|
|
58
|
-
*/
|
|
59
|
-
export declare function isCapabilityHigher(a: CapabilityLevel, b: CapabilityLevel): boolean;
|
|
60
|
-
/**
|
|
61
|
-
* 判断能力等级 a 是否低于 b
|
|
62
|
-
* @param a 第一个能力等级
|
|
63
|
-
* @param b 第二个能力等级
|
|
64
|
-
* @returns 如果 a < b 返回 true
|
|
65
|
-
*/
|
|
66
|
-
export declare function isCapabilityLower(a: CapabilityLevel, b: CapabilityLevel): boolean;
|
|
67
|
-
/**
|
|
68
|
-
* 验证能力等级序列的单调性(严格递减)
|
|
69
|
-
* 用于检查 fallbackChain 是否符合从高到低的要求
|
|
70
|
-
*
|
|
71
|
-
* @param levels 能力等级数组
|
|
72
|
-
* @returns 如果序列严格递减返回 true
|
|
73
|
-
*
|
|
74
|
-
* @example
|
|
75
|
-
* ```typescript
|
|
76
|
-
* validateCapabilityMonotonicity([
|
|
77
|
-
* CapabilityLevel.SEMANTIC,
|
|
78
|
-
* CapabilityLevel.STRUCTURAL,
|
|
79
|
-
* CapabilityLevel.NONE
|
|
80
|
-
* ]); // true
|
|
81
|
-
*
|
|
82
|
-
* validateCapabilityMonotonicity([
|
|
83
|
-
* CapabilityLevel.TEXT,
|
|
84
|
-
* CapabilityLevel.SEMANTIC
|
|
85
|
-
* ]); // false
|
|
86
|
-
* ```
|
|
87
|
-
*/
|
|
88
|
-
export declare function validateCapabilityMonotonicity(levels: CapabilityLevel[]): boolean;
|
|
89
|
-
/**
|
|
90
|
-
* 最小能力和降级链接口
|
|
91
|
-
* 定义模块的能力需求和降级路径
|
|
40
|
+
* 最小能力要求配置接口
|
|
92
41
|
*/
|
|
93
42
|
export interface MinCapability {
|
|
94
43
|
minCapability: CapabilityLevel;
|
|
95
44
|
fallbackChain: CapabilityLevel[];
|
|
96
45
|
}
|
|
97
46
|
/**
|
|
98
|
-
*
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
*
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
*
|
|
107
|
-
* @example
|
|
108
|
-
* ```typescript
|
|
109
|
-
* validateFallbackChain({
|
|
110
|
-
* minCapability: CapabilityLevel.SEMANTIC,
|
|
111
|
-
* fallbackChain: [CapabilityLevel.STRUCTURAL, CapabilityLevel.TEXT, CapabilityLevel.NONE]
|
|
112
|
-
* }); // true
|
|
113
|
-
*
|
|
114
|
-
* validateFallbackChain({
|
|
115
|
-
* minCapability: CapabilityLevel.SEMANTIC,
|
|
116
|
-
* fallbackChain: [CapabilityLevel.NONE]
|
|
117
|
-
* }); // true
|
|
118
|
-
*
|
|
119
|
-
* validateFallbackChain({
|
|
120
|
-
* minCapability: CapabilityLevel.SEMANTIC,
|
|
121
|
-
* fallbackChain: [CapabilityLevel.TEXT] // 未以 NONE 结束
|
|
122
|
-
* }); // false
|
|
123
|
-
* ```
|
|
47
|
+
* 从字符串解析 CapabilityLevel (支持标签或数值字符串)
|
|
48
|
+
*/
|
|
49
|
+
export declare function parseCapabilityLevel(value?: string | number, fallback?: CapabilityLevel): CapabilityLevel;
|
|
50
|
+
/**
|
|
51
|
+
* 判断能力是否满足要求
|
|
52
|
+
*/
|
|
53
|
+
export declare function canExecute(current: CapabilityLevel, required: CapabilityLevel): boolean;
|
|
54
|
+
/**
|
|
55
|
+
* 获取能力等级的友好显示名称
|
|
124
56
|
*/
|
|
125
|
-
export declare function
|
|
57
|
+
export declare function describeCapabilityLevel(level: CapabilityLevel): string;
|
|
@@ -1,184 +1,101 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.CapabilityLevel = void 0;
|
|
4
|
-
exports.capabilityLevelToString = capabilityLevelToString;
|
|
5
|
-
exports.stringToCapabilityLevel = stringToCapabilityLevel;
|
|
6
|
-
exports.compareCapabilities = compareCapabilities;
|
|
7
|
-
exports.isCapabilityHigher = isCapabilityHigher;
|
|
8
|
-
exports.isCapabilityLower = isCapabilityLower;
|
|
9
|
-
exports.validateCapabilityMonotonicity = validateCapabilityMonotonicity;
|
|
10
|
-
exports.validateFallbackChain = validateFallbackChain;
|
|
11
2
|
/**
|
|
12
|
-
*
|
|
3
|
+
* CapabilityLevel
|
|
4
|
+
* ----------------
|
|
5
|
+
* 定义系统中「能力(Capability)」的智能等级。
|
|
13
6
|
*
|
|
14
|
-
*
|
|
15
|
-
* -
|
|
16
|
-
* -
|
|
17
|
-
* -
|
|
7
|
+
* 该等级用于:
|
|
8
|
+
* - AI Capability 匹配
|
|
9
|
+
* - 模型路由规划
|
|
10
|
+
* - 执行阶段降级决策
|
|
11
|
+
* - todo.md 任务标注
|
|
18
12
|
*
|
|
19
|
-
*
|
|
20
|
-
* - SEMANTIC
|
|
21
|
-
* - STRUCTURAL
|
|
22
|
-
* - LINE
|
|
23
|
-
* - TEXT
|
|
24
|
-
* - NONE
|
|
13
|
+
* 级别说明:
|
|
14
|
+
* - SEMANTIC: 极致语义,理解业务意图和全局架构
|
|
15
|
+
* - STRUCTURAL: 结构分析,理解代码依赖和模块接口
|
|
16
|
+
* - LINE: 行级操作,关注具体逻辑实现
|
|
17
|
+
* - TEXT: 文本处理,简单的替换或格式化
|
|
18
|
+
* - NONE: 无智能要求
|
|
25
19
|
*/
|
|
20
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
+
exports.CapabilityLevelLabel = exports.CapabilityLevel = void 0;
|
|
22
|
+
exports.validateStrictDecreasing = validateStrictDecreasing;
|
|
23
|
+
exports.parseCapabilityLevel = parseCapabilityLevel;
|
|
24
|
+
exports.canExecute = canExecute;
|
|
25
|
+
exports.describeCapabilityLevel = describeCapabilityLevel;
|
|
26
26
|
var CapabilityLevel;
|
|
27
27
|
(function (CapabilityLevel) {
|
|
28
|
-
|
|
29
|
-
CapabilityLevel[CapabilityLevel["
|
|
30
|
-
|
|
31
|
-
CapabilityLevel[CapabilityLevel["
|
|
32
|
-
|
|
28
|
+
/** 极致语义:理解业务、架构和设计意图 */
|
|
29
|
+
CapabilityLevel[CapabilityLevel["SEMANTIC"] = 4] = "SEMANTIC";
|
|
30
|
+
/** 结构分析:理解模块依赖、接口和类结构 */
|
|
31
|
+
CapabilityLevel[CapabilityLevel["STRUCTURAL"] = 3] = "STRUCTURAL";
|
|
32
|
+
/** 行级分析:理解具体的代码行逻辑 */
|
|
33
|
+
CapabilityLevel[CapabilityLevel["LINE"] = 2] = "LINE";
|
|
34
|
+
/** 文本分析:简单的字符串处理和文本替换 */
|
|
35
|
+
CapabilityLevel[CapabilityLevel["TEXT"] = 1] = "TEXT";
|
|
36
|
+
/** 无需智能分析 */
|
|
37
|
+
CapabilityLevel[CapabilityLevel["NONE"] = 0] = "NONE";
|
|
33
38
|
})(CapabilityLevel || (exports.CapabilityLevel = CapabilityLevel = {}));
|
|
34
39
|
/**
|
|
35
|
-
*
|
|
36
|
-
* @param level 能力等级
|
|
37
|
-
* @returns 字符串表示
|
|
40
|
+
* 校验 Capability 降级链是否严格单调递减,且最终降级到 NONE
|
|
38
41
|
*/
|
|
39
|
-
function
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
return
|
|
45
|
-
case CapabilityLevel.LINE:
|
|
46
|
-
return 'LINE';
|
|
47
|
-
case CapabilityLevel.TEXT:
|
|
48
|
-
return 'TEXT';
|
|
49
|
-
case CapabilityLevel.NONE:
|
|
50
|
-
return 'NONE';
|
|
51
|
-
default:
|
|
52
|
-
// 如果传入未知值,返回其数字表示
|
|
53
|
-
return String(level);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* 将字符串转换为 CapabilityLevel
|
|
58
|
-
* 用于从配置或 LLM 输出解析能力等级
|
|
59
|
-
*
|
|
60
|
-
* @param str 能力等级字符串(不区分大小写)
|
|
61
|
-
* @returns CapabilityLevel 枚举值,如果字符串无效则返回 undefined
|
|
62
|
-
*
|
|
63
|
-
* @example
|
|
64
|
-
* ```typescript
|
|
65
|
-
* const level = stringToCapabilityLevel('semantic');
|
|
66
|
-
* console.log(level); // CapabilityLevel.SEMANTIC
|
|
67
|
-
*
|
|
68
|
-
* const invalid = stringToCapabilityLevel('INVALID');
|
|
69
|
-
* console.log(invalid); // undefined
|
|
70
|
-
* ```
|
|
71
|
-
*/
|
|
72
|
-
function stringToCapabilityLevel(str) {
|
|
73
|
-
const upper = str.toUpperCase();
|
|
74
|
-
switch (upper) {
|
|
75
|
-
case 'SEMANTIC':
|
|
76
|
-
return CapabilityLevel.SEMANTIC;
|
|
77
|
-
case 'STRUCTURAL':
|
|
78
|
-
return CapabilityLevel.STRUCTURAL;
|
|
79
|
-
case 'LINE':
|
|
80
|
-
return CapabilityLevel.LINE;
|
|
81
|
-
case 'TEXT':
|
|
82
|
-
return CapabilityLevel.TEXT;
|
|
83
|
-
case 'NONE':
|
|
84
|
-
return CapabilityLevel.NONE;
|
|
85
|
-
default:
|
|
86
|
-
return undefined;
|
|
42
|
+
function validateStrictDecreasing(chain) {
|
|
43
|
+
if (chain.length === 0)
|
|
44
|
+
return true;
|
|
45
|
+
for (let i = 0; i < chain.length - 1; i++) {
|
|
46
|
+
if (chain[i] <= chain[i + 1])
|
|
47
|
+
return false;
|
|
87
48
|
}
|
|
49
|
+
return chain[chain.length - 1] === CapabilityLevel.NONE;
|
|
88
50
|
}
|
|
89
51
|
/**
|
|
90
|
-
*
|
|
91
|
-
* @param a 第一个能力等级
|
|
92
|
-
* @param b 第二个能力等级
|
|
93
|
-
* @returns 正数表示 a > b,负数表示 a < b,0 表示相等
|
|
94
|
-
*/
|
|
95
|
-
function compareCapabilities(a, b) {
|
|
96
|
-
return a - b;
|
|
97
|
-
}
|
|
98
|
-
/**
|
|
99
|
-
* 判断能力等级 a 是否高于 b
|
|
100
|
-
* @param a 第一个能力等级
|
|
101
|
-
* @param b 第二个能力等级
|
|
102
|
-
* @returns 如果 a > b 返回 true
|
|
52
|
+
* 能力等级的可读标签
|
|
103
53
|
*/
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
54
|
+
exports.CapabilityLevelLabel = {
|
|
55
|
+
[CapabilityLevel.SEMANTIC]: 'semantic',
|
|
56
|
+
[CapabilityLevel.STRUCTURAL]: 'structural',
|
|
57
|
+
[CapabilityLevel.LINE]: 'line',
|
|
58
|
+
[CapabilityLevel.TEXT]: 'text',
|
|
59
|
+
[CapabilityLevel.NONE]: 'none'
|
|
60
|
+
};
|
|
107
61
|
/**
|
|
108
|
-
*
|
|
109
|
-
* @param a 第一个能力等级
|
|
110
|
-
* @param b 第二个能力等级
|
|
111
|
-
* @returns 如果 a < b 返回 true
|
|
62
|
+
* 从字符串解析 CapabilityLevel (支持标签或数值字符串)
|
|
112
63
|
*/
|
|
113
|
-
function
|
|
114
|
-
|
|
64
|
+
function parseCapabilityLevel(value, fallback = CapabilityLevel.NONE) {
|
|
65
|
+
if (value === undefined || value === null)
|
|
66
|
+
return fallback;
|
|
67
|
+
if (typeof value === 'number') {
|
|
68
|
+
return CapabilityLevel[value] !== undefined ? value : fallback;
|
|
69
|
+
}
|
|
70
|
+
const normalized = value.toString().toLowerCase();
|
|
71
|
+
// 1. 尝试按标签匹配
|
|
72
|
+
for (const [level, label] of Object.entries(exports.CapabilityLevelLabel)) {
|
|
73
|
+
if (label === normalized)
|
|
74
|
+
return Number(level);
|
|
75
|
+
}
|
|
76
|
+
// 2. 尝试解析数值字符串
|
|
77
|
+
const numeric = parseInt(normalized);
|
|
78
|
+
if (!isNaN(numeric)) {
|
|
79
|
+
return CapabilityLevel[numeric] !== undefined ? numeric : fallback;
|
|
80
|
+
}
|
|
81
|
+
return fallback;
|
|
115
82
|
}
|
|
116
83
|
/**
|
|
117
|
-
*
|
|
118
|
-
* 用于检查 fallbackChain 是否符合从高到低的要求
|
|
119
|
-
*
|
|
120
|
-
* @param levels 能力等级数组
|
|
121
|
-
* @returns 如果序列严格递减返回 true
|
|
122
|
-
*
|
|
123
|
-
* @example
|
|
124
|
-
* ```typescript
|
|
125
|
-
* validateCapabilityMonotonicity([
|
|
126
|
-
* CapabilityLevel.SEMANTIC,
|
|
127
|
-
* CapabilityLevel.STRUCTURAL,
|
|
128
|
-
* CapabilityLevel.NONE
|
|
129
|
-
* ]); // true
|
|
130
|
-
*
|
|
131
|
-
* validateCapabilityMonotonicity([
|
|
132
|
-
* CapabilityLevel.TEXT,
|
|
133
|
-
* CapabilityLevel.SEMANTIC
|
|
134
|
-
* ]); // false
|
|
135
|
-
* ```
|
|
84
|
+
* 判断能力是否满足要求
|
|
136
85
|
*/
|
|
137
|
-
function
|
|
138
|
-
|
|
139
|
-
return true;
|
|
140
|
-
for (let i = 0; i < levels.length - 1; i++) {
|
|
141
|
-
if (levels[i] <= levels[i + 1]) {
|
|
142
|
-
return false;
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
return true;
|
|
86
|
+
function canExecute(current, required) {
|
|
87
|
+
return current >= required;
|
|
146
88
|
}
|
|
147
89
|
/**
|
|
148
|
-
*
|
|
149
|
-
*
|
|
150
|
-
* 规则:
|
|
151
|
-
* 1. 降级链必须严格递减(从高到低)
|
|
152
|
-
* 2. 降级链必须以 NONE 结束
|
|
153
|
-
*
|
|
154
|
-
* @param minCapability 包含最小能力和降级链的对象
|
|
155
|
-
* @returns 如果降级链有效返回 true
|
|
156
|
-
*
|
|
157
|
-
* @example
|
|
158
|
-
* ```typescript
|
|
159
|
-
* validateFallbackChain({
|
|
160
|
-
* minCapability: CapabilityLevel.SEMANTIC,
|
|
161
|
-
* fallbackChain: [CapabilityLevel.STRUCTURAL, CapabilityLevel.TEXT, CapabilityLevel.NONE]
|
|
162
|
-
* }); // true
|
|
163
|
-
*
|
|
164
|
-
* validateFallbackChain({
|
|
165
|
-
* minCapability: CapabilityLevel.SEMANTIC,
|
|
166
|
-
* fallbackChain: [CapabilityLevel.NONE]
|
|
167
|
-
* }); // true
|
|
168
|
-
*
|
|
169
|
-
* validateFallbackChain({
|
|
170
|
-
* minCapability: CapabilityLevel.SEMANTIC,
|
|
171
|
-
* fallbackChain: [CapabilityLevel.TEXT] // 未以 NONE 结束
|
|
172
|
-
* }); // false
|
|
173
|
-
* ```
|
|
90
|
+
* 获取能力等级的友好显示名称
|
|
174
91
|
*/
|
|
175
|
-
function
|
|
176
|
-
|
|
177
|
-
return
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
return
|
|
92
|
+
function describeCapabilityLevel(level) {
|
|
93
|
+
switch (level) {
|
|
94
|
+
case CapabilityLevel.SEMANTIC: return '极致语义 (Semantic)';
|
|
95
|
+
case CapabilityLevel.STRUCTURAL: return '结构分析 (Structural)';
|
|
96
|
+
case CapabilityLevel.LINE: return '行级分析 (Line)';
|
|
97
|
+
case CapabilityLevel.TEXT: return '文本处理 (Text)';
|
|
98
|
+
default: return '无智能要求 (None)';
|
|
181
99
|
}
|
|
182
|
-
return minCapability.fallbackChain[minCapability.fallbackChain.length - 1] === CapabilityLevel.NONE;
|
|
183
100
|
}
|
|
184
101
|
//# sourceMappingURL=CapabilityLevel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CapabilityLevel.js","sourceRoot":"","sources":["../../../src/core/capability/CapabilityLevel.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"CapabilityLevel.js","sourceRoot":"","sources":["../../../src/core/capability/CapabilityLevel.ts"],"names":[],"mappings":"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"}
|