@hanfour.huang/caliber 0.1.2
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/README.md +667 -0
- package/dist/analyzers/section.d.ts +9 -0
- package/dist/analyzers/section.d.ts.map +1 -0
- package/dist/analyzers/section.js +503 -0
- package/dist/analyzers/section.js.map +1 -0
- package/dist/analyzers/usage.d.ts +3 -0
- package/dist/analyzers/usage.d.ts.map +1 -0
- package/dist/analyzers/usage.js +141 -0
- package/dist/analyzers/usage.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +295 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +19 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +156 -0
- package/dist/config.js.map +1 -0
- package/dist/data-quality.d.ts +3 -0
- package/dist/data-quality.d.ts.map +1 -0
- package/dist/data-quality.js +54 -0
- package/dist/data-quality.js.map +1 -0
- package/dist/extractors/claude-code.d.ts +6 -0
- package/dist/extractors/claude-code.d.ts.map +1 -0
- package/dist/extractors/claude-code.js +216 -0
- package/dist/extractors/claude-code.js.map +1 -0
- package/dist/extractors/codex.d.ts +5 -0
- package/dist/extractors/codex.d.ts.map +1 -0
- package/dist/extractors/codex.js +184 -0
- package/dist/extractors/codex.js.map +1 -0
- package/dist/i18n.d.ts +53 -0
- package/dist/i18n.d.ts.map +1 -0
- package/dist/i18n.js +163 -0
- package/dist/i18n.js.map +1 -0
- package/dist/period.d.ts +5 -0
- package/dist/period.d.ts.map +1 -0
- package/dist/period.js +25 -0
- package/dist/period.js.map +1 -0
- package/dist/reporters/report.d.ts +7 -0
- package/dist/reporters/report.d.ts.map +1 -0
- package/dist/reporters/report.js +440 -0
- package/dist/reporters/report.js.map +1 -0
- package/dist/standard.d.ts +5 -0
- package/dist/standard.d.ts.map +1 -0
- package/dist/standard.js +98 -0
- package/dist/standard.js.map +1 -0
- package/dist/types.d.ts +216 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +3 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +17 -0
- package/dist/utils.js.map +1 -0
- package/package.json +59 -0
- package/templates/eval-standard.json +174 -0
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
export interface ClaudeCodeSession {
|
|
2
|
+
sessionId: string;
|
|
3
|
+
projectPath: string;
|
|
4
|
+
startTime: string;
|
|
5
|
+
durationMinutes: number;
|
|
6
|
+
userMessageCount: number;
|
|
7
|
+
assistantMessageCount: number;
|
|
8
|
+
toolCounts: Record<string, number>;
|
|
9
|
+
languages: Record<string, number>;
|
|
10
|
+
gitCommits: number;
|
|
11
|
+
inputTokens: number;
|
|
12
|
+
outputTokens: number;
|
|
13
|
+
firstPrompt: string;
|
|
14
|
+
userInterruptions: number;
|
|
15
|
+
toolErrors: number;
|
|
16
|
+
toolErrorCategories: Record<string, number>;
|
|
17
|
+
usesTaskAgent: boolean;
|
|
18
|
+
usesMcp: boolean;
|
|
19
|
+
linesAdded: number;
|
|
20
|
+
linesRemoved: number;
|
|
21
|
+
filesModified: number;
|
|
22
|
+
messageHours: number[];
|
|
23
|
+
}
|
|
24
|
+
export interface ClaudeCodeFacet {
|
|
25
|
+
sessionId: string;
|
|
26
|
+
underlyingGoal: string;
|
|
27
|
+
goalCategories: Record<string, number>;
|
|
28
|
+
outcome: string;
|
|
29
|
+
userSatisfactionCounts: Record<string, number>;
|
|
30
|
+
claudeHelpfulness: string;
|
|
31
|
+
sessionType: string;
|
|
32
|
+
frictionCounts: Record<string, number>;
|
|
33
|
+
frictionDetail: string;
|
|
34
|
+
primarySuccess: string;
|
|
35
|
+
briefSummary: string;
|
|
36
|
+
}
|
|
37
|
+
export interface ClaudeCodeCostRecord {
|
|
38
|
+
sessionId: string;
|
|
39
|
+
model: string;
|
|
40
|
+
totalCostUsd: number;
|
|
41
|
+
totalDurationMs: number;
|
|
42
|
+
messageCount: number;
|
|
43
|
+
}
|
|
44
|
+
export interface ClaudeCodeConversationSignal {
|
|
45
|
+
sessionId: string;
|
|
46
|
+
timestamp: string;
|
|
47
|
+
type: string;
|
|
48
|
+
content: string;
|
|
49
|
+
keywords: string[];
|
|
50
|
+
}
|
|
51
|
+
export interface CodexSession {
|
|
52
|
+
id: string;
|
|
53
|
+
createdAt: number;
|
|
54
|
+
updatedAt: number;
|
|
55
|
+
model: string;
|
|
56
|
+
modelProvider: string;
|
|
57
|
+
cwd: string;
|
|
58
|
+
title: string;
|
|
59
|
+
tokensUsed: number;
|
|
60
|
+
gitBranch: string | null;
|
|
61
|
+
gitOriginUrl: string | null;
|
|
62
|
+
firstUserMessage: string;
|
|
63
|
+
cliVersion: string;
|
|
64
|
+
}
|
|
65
|
+
export interface CodexConversationSignal {
|
|
66
|
+
sessionId: string;
|
|
67
|
+
timestamp: string;
|
|
68
|
+
type: string;
|
|
69
|
+
content: string;
|
|
70
|
+
keywords: string[];
|
|
71
|
+
}
|
|
72
|
+
export interface CodexUserMessage {
|
|
73
|
+
timestamp: string;
|
|
74
|
+
text: string;
|
|
75
|
+
}
|
|
76
|
+
export interface CodexSessionInsight {
|
|
77
|
+
sessionId: string;
|
|
78
|
+
userMessages: CodexUserMessage[];
|
|
79
|
+
toolCallCount: number;
|
|
80
|
+
toolCalls: Record<string, number>;
|
|
81
|
+
errorCount: number;
|
|
82
|
+
}
|
|
83
|
+
export interface UsageOverview {
|
|
84
|
+
claudeCode: {
|
|
85
|
+
totalSessions: number;
|
|
86
|
+
totalInputTokens: number;
|
|
87
|
+
totalOutputTokens: number;
|
|
88
|
+
totalCostUsd: number;
|
|
89
|
+
totalDurationMinutes: number;
|
|
90
|
+
activeDays: number;
|
|
91
|
+
models: Record<string, {
|
|
92
|
+
sessions: number;
|
|
93
|
+
tokens: number;
|
|
94
|
+
cost: number;
|
|
95
|
+
}>;
|
|
96
|
+
topProjects: Array<{
|
|
97
|
+
path: string;
|
|
98
|
+
sessions: number;
|
|
99
|
+
tokens: number;
|
|
100
|
+
}>;
|
|
101
|
+
toolUsage: Record<string, number>;
|
|
102
|
+
dailyActivity: Record<string, {
|
|
103
|
+
sessions: number;
|
|
104
|
+
tokens: number;
|
|
105
|
+
}>;
|
|
106
|
+
};
|
|
107
|
+
codex: {
|
|
108
|
+
totalSessions: number;
|
|
109
|
+
totalTokensUsed: number;
|
|
110
|
+
models: Record<string, {
|
|
111
|
+
sessions: number;
|
|
112
|
+
tokens: number;
|
|
113
|
+
}>;
|
|
114
|
+
activeDays: number;
|
|
115
|
+
dailyActivity: Record<string, {
|
|
116
|
+
sessions: number;
|
|
117
|
+
tokens: number;
|
|
118
|
+
}>;
|
|
119
|
+
};
|
|
120
|
+
period: {
|
|
121
|
+
since: string;
|
|
122
|
+
until: string;
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
export interface EvalSectionDef {
|
|
126
|
+
id: string;
|
|
127
|
+
name: string;
|
|
128
|
+
weight: string;
|
|
129
|
+
standard: {
|
|
130
|
+
score: number;
|
|
131
|
+
label: string;
|
|
132
|
+
criteria: string[];
|
|
133
|
+
};
|
|
134
|
+
superior: {
|
|
135
|
+
score: number;
|
|
136
|
+
label: string;
|
|
137
|
+
criteria: string[];
|
|
138
|
+
};
|
|
139
|
+
keywords: string[];
|
|
140
|
+
thresholds: Record<string, number>;
|
|
141
|
+
superiorRules?: {
|
|
142
|
+
mode?: "any" | "grouped";
|
|
143
|
+
strongThresholds?: string[];
|
|
144
|
+
supportThresholds?: string[];
|
|
145
|
+
minStrongMatched?: number;
|
|
146
|
+
minSupportMatched?: number;
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
export interface EvalStandard {
|
|
150
|
+
name: string;
|
|
151
|
+
description?: string;
|
|
152
|
+
sections: EvalSectionDef[];
|
|
153
|
+
noiseFilters?: {
|
|
154
|
+
prefixes?: string[];
|
|
155
|
+
templatePhrases?: string[];
|
|
156
|
+
minLength?: number;
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
export interface CliOptions {
|
|
160
|
+
since?: string;
|
|
161
|
+
until?: string;
|
|
162
|
+
format: "text" | "json" | "markdown" | "html";
|
|
163
|
+
output?: string;
|
|
164
|
+
standard?: string;
|
|
165
|
+
previous?: boolean;
|
|
166
|
+
engineer?: string;
|
|
167
|
+
department?: string;
|
|
168
|
+
}
|
|
169
|
+
export interface ReportMeta {
|
|
170
|
+
engineer?: string;
|
|
171
|
+
department?: string;
|
|
172
|
+
}
|
|
173
|
+
export interface DataQualityWarning {
|
|
174
|
+
source: string;
|
|
175
|
+
severity: "missing" | "partial" | "error";
|
|
176
|
+
message: string;
|
|
177
|
+
}
|
|
178
|
+
export interface EvalReport {
|
|
179
|
+
generatedAt: string;
|
|
180
|
+
period: {
|
|
181
|
+
since: string;
|
|
182
|
+
until: string;
|
|
183
|
+
};
|
|
184
|
+
standardName: string;
|
|
185
|
+
locale: "en" | "zh-TW";
|
|
186
|
+
meta?: ReportMeta;
|
|
187
|
+
usage: UsageOverview;
|
|
188
|
+
sections: EvalSectionResult[];
|
|
189
|
+
dataWarnings: DataQualityWarning[];
|
|
190
|
+
managementSummary: {
|
|
191
|
+
headline: string;
|
|
192
|
+
overallAssessment: string;
|
|
193
|
+
observations: string[];
|
|
194
|
+
recommendations: string[];
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
export interface EvalSectionResult {
|
|
198
|
+
id: string;
|
|
199
|
+
name: string;
|
|
200
|
+
weight: string;
|
|
201
|
+
score: number;
|
|
202
|
+
label: string;
|
|
203
|
+
reason: string;
|
|
204
|
+
metThresholds: string[];
|
|
205
|
+
usageEvidence: string[];
|
|
206
|
+
scoreEvidence: string[];
|
|
207
|
+
signals: Array<{
|
|
208
|
+
type: string;
|
|
209
|
+
description: string;
|
|
210
|
+
sessionId: string;
|
|
211
|
+
detail: string;
|
|
212
|
+
}>;
|
|
213
|
+
metrics: Record<string, number>;
|
|
214
|
+
summary: string;
|
|
215
|
+
}
|
|
216
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,0BAA0B"}
|
package/dist/utils.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,YAAY,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAalF"}
|
package/dist/utils.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export function buildNoiseFilter(standard) {
|
|
2
|
+
const prefixes = standard.noiseFilters?.prefixes ?? [];
|
|
3
|
+
const phrases = standard.noiseFilters?.templatePhrases ?? [];
|
|
4
|
+
const minLen = standard.noiseFilters?.minLength ?? 20;
|
|
5
|
+
return (text) => {
|
|
6
|
+
const trimmed = text.trimStart();
|
|
7
|
+
if (prefixes.some((p) => trimmed.startsWith(p)))
|
|
8
|
+
return true;
|
|
9
|
+
const lower = trimmed.toLowerCase();
|
|
10
|
+
if (phrases.some((p) => lower.includes(p)))
|
|
11
|
+
return true;
|
|
12
|
+
if (trimmed.length < minLen)
|
|
13
|
+
return true;
|
|
14
|
+
return false;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,gBAAgB,CAAC,QAAsB;IACrD,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,EAAE,QAAQ,IAAI,EAAE,CAAC;IACvD,MAAM,OAAO,GAAG,QAAQ,CAAC,YAAY,EAAE,eAAe,IAAI,EAAE,CAAC;IAC7D,MAAM,MAAM,GAAG,QAAQ,CAAC,YAAY,EAAE,SAAS,IAAI,EAAE,CAAC;IAEtD,OAAO,CAAC,IAAY,EAAW,EAAE;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QACjC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QAC7D,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;QACpC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QACxD,IAAI,OAAO,CAAC,MAAM,GAAG,MAAM;YAAE,OAAO,IAAI,CAAC;QACzC,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;AACJ,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@hanfour.huang/caliber",
|
|
3
|
+
"version": "0.1.2",
|
|
4
|
+
"description": "Caliber — AI Development Performance Evaluator. Analyze Claude Code & Codex usage for technical performance review.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"private": false,
|
|
7
|
+
"bin": { "caliber": "./dist/cli.js" },
|
|
8
|
+
"files": ["dist", "templates", "README.md"],
|
|
9
|
+
"repository": { "type": "git", "url": "git+https://github.com/hanfour/caliber.git" },
|
|
10
|
+
"homepage": "https://hanfour.github.io/caliber/",
|
|
11
|
+
"bugs": { "url": "https://github.com/hanfour/caliber/issues" },
|
|
12
|
+
"engines": { "node": ">=20", "pnpm": ">=9" },
|
|
13
|
+
"packageManager": "pnpm@9.15.0",
|
|
14
|
+
"publishConfig": { "access": "public" },
|
|
15
|
+
"scripts": {
|
|
16
|
+
"build": "rm -rf dist && tsc -p tsconfig.json",
|
|
17
|
+
"dev": "tsx src/cli.ts",
|
|
18
|
+
"start": "node dist/cli.js",
|
|
19
|
+
"pretest": "scripts/cleanup-testcontainers.sh",
|
|
20
|
+
"test": "pnpm build && vitest run",
|
|
21
|
+
"test:watch": "vitest",
|
|
22
|
+
"pretest:coverage": "scripts/cleanup-testcontainers.sh",
|
|
23
|
+
"test:coverage": "vitest run --config vitest.coverage.config.ts",
|
|
24
|
+
"prepublishOnly": "pnpm build && pnpm test",
|
|
25
|
+
"lint": "turbo run lint",
|
|
26
|
+
"typecheck": "turbo run typecheck",
|
|
27
|
+
"ws:build": "turbo run build",
|
|
28
|
+
"ws:test": "turbo run test",
|
|
29
|
+
"ws:dev": "turbo run dev --parallel",
|
|
30
|
+
"perf:gateway": "tsx scripts/perf-gateway.ts"
|
|
31
|
+
},
|
|
32
|
+
"keywords": ["claude-code", "codex", "ai", "evaluation", "performance"],
|
|
33
|
+
"license": "MIT",
|
|
34
|
+
"dependencies": {
|
|
35
|
+
"better-sqlite3": "^11.7.0",
|
|
36
|
+
"chalk": "^5.4.1",
|
|
37
|
+
"commander": "^13.1.0",
|
|
38
|
+
"dayjs": "^1.11.13"
|
|
39
|
+
},
|
|
40
|
+
"devDependencies": {
|
|
41
|
+
"@types/autocannon": "^7.12.7",
|
|
42
|
+
"@types/better-sqlite3": "^7.6.12",
|
|
43
|
+
"@types/node": "^22.10.0",
|
|
44
|
+
"@vitest/coverage-v8": "^4.1.4",
|
|
45
|
+
"autocannon": "^8.0.0",
|
|
46
|
+
"tsx": "^4.19.0",
|
|
47
|
+
"turbo": "^2.3.0",
|
|
48
|
+
"typescript": "^5.7.0",
|
|
49
|
+
"vitest": "^4.1.4"
|
|
50
|
+
},
|
|
51
|
+
"pnpm": {
|
|
52
|
+
"overrides": {
|
|
53
|
+
"fast-uri": ">=3.1.2",
|
|
54
|
+
"cookie": ">=0.7.0",
|
|
55
|
+
"uuid": ">=11.1.1",
|
|
56
|
+
"postcss": ">=8.5.10"
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "OneAD R&D AI-Application Evaluation Standard",
|
|
3
|
+
"description": "研發團隊 AI 應用評核標準定義",
|
|
4
|
+
"sections": [
|
|
5
|
+
{
|
|
6
|
+
"id": "interaction",
|
|
7
|
+
"name": "AI Interaction & Decision / AI 交互與決策",
|
|
8
|
+
"weight": "20%",
|
|
9
|
+
"standard": {
|
|
10
|
+
"score": 100,
|
|
11
|
+
"label": "Standard / 標準",
|
|
12
|
+
"criteria": [
|
|
13
|
+
"Actively use AI for coding / 主動使用 AI 開發",
|
|
14
|
+
"Decision notes clearly describe the logic for choosing a specific AI suggestion / 決策筆記能清晰描述選擇邏輯"
|
|
15
|
+
]
|
|
16
|
+
},
|
|
17
|
+
"superior": {
|
|
18
|
+
"score": 120,
|
|
19
|
+
"label": "Superior / 卓越",
|
|
20
|
+
"criteria": [
|
|
21
|
+
"Guide AI through multiple iterations (Option A -> B -> C) / 引導 AI 多次迭代",
|
|
22
|
+
"Identify optimal solution based on system constraints and future scalability / 基於系統限制與擴充性識別最優解"
|
|
23
|
+
]
|
|
24
|
+
},
|
|
25
|
+
"keywords": [
|
|
26
|
+
"option",
|
|
27
|
+
"alternative",
|
|
28
|
+
"instead",
|
|
29
|
+
"compare",
|
|
30
|
+
"approach",
|
|
31
|
+
"let's try",
|
|
32
|
+
"try another",
|
|
33
|
+
"switch to",
|
|
34
|
+
"prefer",
|
|
35
|
+
"trade-off",
|
|
36
|
+
"pros and cons",
|
|
37
|
+
"better approach",
|
|
38
|
+
"refactor",
|
|
39
|
+
"iterate",
|
|
40
|
+
"方案",
|
|
41
|
+
"替代",
|
|
42
|
+
"改用",
|
|
43
|
+
"換一種",
|
|
44
|
+
"比較",
|
|
45
|
+
"取捨",
|
|
46
|
+
"迭代",
|
|
47
|
+
"重構",
|
|
48
|
+
"試試",
|
|
49
|
+
"另一個",
|
|
50
|
+
"優化"
|
|
51
|
+
],
|
|
52
|
+
"thresholds": {
|
|
53
|
+
"iterativeRatio": 0.3,
|
|
54
|
+
"correctionCount": 5,
|
|
55
|
+
"keywordHits": 10,
|
|
56
|
+
"avgToolUses": 15
|
|
57
|
+
},
|
|
58
|
+
"superiorRules": {
|
|
59
|
+
"mode": "grouped",
|
|
60
|
+
"strongThresholds": [
|
|
61
|
+
"iterativeRatio",
|
|
62
|
+
"correctionCount",
|
|
63
|
+
"keywordHits"
|
|
64
|
+
],
|
|
65
|
+
"supportThresholds": [
|
|
66
|
+
"avgToolUses"
|
|
67
|
+
],
|
|
68
|
+
"minStrongMatched": 1,
|
|
69
|
+
"minSupportMatched": 0
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"id": "riskControl",
|
|
74
|
+
"name": "AI Identification & Risk Control / AI 識別與風險控管",
|
|
75
|
+
"weight": "50%",
|
|
76
|
+
"standard": {
|
|
77
|
+
"score": 100,
|
|
78
|
+
"label": "Standard / 標準",
|
|
79
|
+
"criteria": [
|
|
80
|
+
"Catch common AI errors/hallucinations / 抓出常見 AI 錯誤與幻覺",
|
|
81
|
+
"Resulting code is stable and meets basic quality requirements / 代碼穩定符合基本品質要求"
|
|
82
|
+
]
|
|
83
|
+
},
|
|
84
|
+
"superior": {
|
|
85
|
+
"score": 120,
|
|
86
|
+
"label": "Superior / 卓越",
|
|
87
|
+
"criteria": [
|
|
88
|
+
"Identify critical risks (Security, Performance, Memory leaks) / 識別關鍵風險(資安、效能、記憶體溢位)",
|
|
89
|
+
"Produce Technical SOP or Wiki for team knowledge sharing / 將修正轉化為團隊 SOP 或 Wiki"
|
|
90
|
+
]
|
|
91
|
+
},
|
|
92
|
+
"keywords": [
|
|
93
|
+
"security",
|
|
94
|
+
"vulnerability",
|
|
95
|
+
"injection",
|
|
96
|
+
"xss",
|
|
97
|
+
"csrf",
|
|
98
|
+
"authentication",
|
|
99
|
+
"authorization",
|
|
100
|
+
"secret",
|
|
101
|
+
"credential",
|
|
102
|
+
"permission",
|
|
103
|
+
"sanitize",
|
|
104
|
+
"performance",
|
|
105
|
+
"bottleneck",
|
|
106
|
+
"memory leak",
|
|
107
|
+
"optimize",
|
|
108
|
+
"latency",
|
|
109
|
+
"cache invalidat",
|
|
110
|
+
"slow query",
|
|
111
|
+
"timeout",
|
|
112
|
+
"n+1",
|
|
113
|
+
"regression",
|
|
114
|
+
"race condition",
|
|
115
|
+
"deadlock",
|
|
116
|
+
"overflow",
|
|
117
|
+
"null pointer",
|
|
118
|
+
"security review",
|
|
119
|
+
"security audit",
|
|
120
|
+
"risk assessment",
|
|
121
|
+
"threat model",
|
|
122
|
+
"CVE",
|
|
123
|
+
"OWASP",
|
|
124
|
+
"penetration test",
|
|
125
|
+
"production incident",
|
|
126
|
+
"postmortem",
|
|
127
|
+
"安全",
|
|
128
|
+
"漏洞",
|
|
129
|
+
"注入",
|
|
130
|
+
"效能",
|
|
131
|
+
"瓶頸",
|
|
132
|
+
"記憶體洩漏",
|
|
133
|
+
"風險評估",
|
|
134
|
+
"安全審查"
|
|
135
|
+
],
|
|
136
|
+
"thresholds": {
|
|
137
|
+
"securityCount": 3,
|
|
138
|
+
"performanceCount": 3,
|
|
139
|
+
"bugsCaught": 5,
|
|
140
|
+
"frictionSessions": 3,
|
|
141
|
+
"codexErrorSessions": 1
|
|
142
|
+
},
|
|
143
|
+
"superiorRules": {
|
|
144
|
+
"mode": "grouped",
|
|
145
|
+
"strongThresholds": [
|
|
146
|
+
"securityCount",
|
|
147
|
+
"performanceCount",
|
|
148
|
+
"bugsCaught"
|
|
149
|
+
],
|
|
150
|
+
"supportThresholds": [
|
|
151
|
+
"frictionSessions",
|
|
152
|
+
"codexErrorSessions"
|
|
153
|
+
],
|
|
154
|
+
"minStrongMatched": 1,
|
|
155
|
+
"minSupportMatched": 0
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
],
|
|
159
|
+
"noiseFilters": {
|
|
160
|
+
"prefixes": [
|
|
161
|
+
"<task-notification>",
|
|
162
|
+
"<command-name>",
|
|
163
|
+
"<local-command-caveat>",
|
|
164
|
+
"<system-reminder>"
|
|
165
|
+
],
|
|
166
|
+
"templatePhrases": [
|
|
167
|
+
"you are a senior code reviewer",
|
|
168
|
+
"you are a code reviewer",
|
|
169
|
+
"perform a deep, multi-dimensional analysis",
|
|
170
|
+
"review the provided pull request"
|
|
171
|
+
],
|
|
172
|
+
"minLength": 20
|
|
173
|
+
}
|
|
174
|
+
}
|