@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.
Files changed (55) hide show
  1. package/README.md +667 -0
  2. package/dist/analyzers/section.d.ts +9 -0
  3. package/dist/analyzers/section.d.ts.map +1 -0
  4. package/dist/analyzers/section.js +503 -0
  5. package/dist/analyzers/section.js.map +1 -0
  6. package/dist/analyzers/usage.d.ts +3 -0
  7. package/dist/analyzers/usage.d.ts.map +1 -0
  8. package/dist/analyzers/usage.js +141 -0
  9. package/dist/analyzers/usage.js.map +1 -0
  10. package/dist/cli.d.ts +3 -0
  11. package/dist/cli.d.ts.map +1 -0
  12. package/dist/cli.js +295 -0
  13. package/dist/cli.js.map +1 -0
  14. package/dist/config.d.ts +19 -0
  15. package/dist/config.d.ts.map +1 -0
  16. package/dist/config.js +156 -0
  17. package/dist/config.js.map +1 -0
  18. package/dist/data-quality.d.ts +3 -0
  19. package/dist/data-quality.d.ts.map +1 -0
  20. package/dist/data-quality.js +54 -0
  21. package/dist/data-quality.js.map +1 -0
  22. package/dist/extractors/claude-code.d.ts +6 -0
  23. package/dist/extractors/claude-code.d.ts.map +1 -0
  24. package/dist/extractors/claude-code.js +216 -0
  25. package/dist/extractors/claude-code.js.map +1 -0
  26. package/dist/extractors/codex.d.ts +5 -0
  27. package/dist/extractors/codex.d.ts.map +1 -0
  28. package/dist/extractors/codex.js +184 -0
  29. package/dist/extractors/codex.js.map +1 -0
  30. package/dist/i18n.d.ts +53 -0
  31. package/dist/i18n.d.ts.map +1 -0
  32. package/dist/i18n.js +163 -0
  33. package/dist/i18n.js.map +1 -0
  34. package/dist/period.d.ts +5 -0
  35. package/dist/period.d.ts.map +1 -0
  36. package/dist/period.js +25 -0
  37. package/dist/period.js.map +1 -0
  38. package/dist/reporters/report.d.ts +7 -0
  39. package/dist/reporters/report.d.ts.map +1 -0
  40. package/dist/reporters/report.js +440 -0
  41. package/dist/reporters/report.js.map +1 -0
  42. package/dist/standard.d.ts +5 -0
  43. package/dist/standard.d.ts.map +1 -0
  44. package/dist/standard.js +98 -0
  45. package/dist/standard.js.map +1 -0
  46. package/dist/types.d.ts +216 -0
  47. package/dist/types.d.ts.map +1 -0
  48. package/dist/types.js +3 -0
  49. package/dist/types.js.map +1 -0
  50. package/dist/utils.d.ts +3 -0
  51. package/dist/utils.d.ts.map +1 -0
  52. package/dist/utils.js +17 -0
  53. package/dist/utils.js.map +1 -0
  54. package/package.json +59 -0
  55. package/templates/eval-standard.json +174 -0
@@ -0,0 +1,503 @@
1
+ // ── Constants ──
2
+ const DEEP_SESSION_MIN_MESSAGES = 10;
3
+ const DEEP_SESSION_MIN_TOOLS = 20;
4
+ const CODEX_ITERATIVE_MIN_MESSAGES = 3;
5
+ const CODEX_DEEP_MIN_TOOL_CALLS = 10;
6
+ const CODEX_DEEP_MIN_TOKENS = 50_000;
7
+ const SECURITY_KEYWORDS = [
8
+ "security",
9
+ "vulnerability",
10
+ "injection",
11
+ "xss",
12
+ "csrf",
13
+ "authentication",
14
+ "authorization",
15
+ "credential",
16
+ "sanitize",
17
+ "security review",
18
+ "risk assessment",
19
+ "安全",
20
+ "漏洞",
21
+ "注入",
22
+ ];
23
+ const PERFORMANCE_KEYWORDS = [
24
+ "performance",
25
+ "bottleneck",
26
+ "memory leak",
27
+ "optimize",
28
+ "latency",
29
+ "cache invalidat",
30
+ "slow query",
31
+ "timeout",
32
+ "n+1",
33
+ "效能",
34
+ "瓶頸",
35
+ "記憶體洩漏",
36
+ ];
37
+ // ── Threshold description ──
38
+ function describeThreshold(key, metrics) {
39
+ const value = metrics[key] ?? 0;
40
+ const labels = {
41
+ iterativeRatio: "iterative evidence ratio reached threshold",
42
+ correctionCount: `${value} active corrections`,
43
+ keywordHits: `${value} decision/risk keyword hits`,
44
+ avgToolUses: `${value} average tool uses per session`,
45
+ securityCount: `${value} security signals`,
46
+ performanceCount: `${value} performance signals`,
47
+ bugsCaught: `${value} AI bugs caught`,
48
+ frictionSessions: `${value} friction sessions`,
49
+ codexErrorSessions: `${value} Codex error-handling sessions`,
50
+ };
51
+ return labels[key] ?? `${key}: ${value}`;
52
+ }
53
+ // ── Superior score determination ──
54
+ function shouldScoreGroupedSuperior(metThresholdKeys, strongThresholds, supportThresholds, minStrongMatched, minSupportMatched) {
55
+ const metStrongCount = strongThresholds.filter((key) => metThresholdKeys.has(key)).length;
56
+ const metSupportCount = supportThresholds.filter((key) => metThresholdKeys.has(key)).length;
57
+ return (metStrongCount >= minStrongMatched && metSupportCount >= minSupportMatched);
58
+ }
59
+ function shouldScoreSuperior(section, metThresholdKeys) {
60
+ const rules = section.superiorRules;
61
+ if (!rules || rules.mode === "any" || !rules.mode) {
62
+ return metThresholdKeys.size > 0;
63
+ }
64
+ if (rules.mode === "grouped") {
65
+ return shouldScoreGroupedSuperior(metThresholdKeys, rules.strongThresholds ?? Object.keys(section.thresholds), rules.supportThresholds ?? [], rules.minStrongMatched ?? 1, rules.minSupportMatched ?? 0);
66
+ }
67
+ return metThresholdKeys.size > 0;
68
+ }
69
+ function collectFacetSignals(facets) {
70
+ const signals = [];
71
+ let iterativeSessions = 0;
72
+ let multiTaskSessions = 0;
73
+ let frictionSessions = 0;
74
+ let bugsCaught = 0;
75
+ for (const [sid, facet] of facets) {
76
+ if (facet.sessionType === "iterative_refinement") {
77
+ iterativeSessions++;
78
+ signals.push({
79
+ type: "iterative_refinement",
80
+ description: "Session shows iterative guidance pattern (A → B → C)",
81
+ sessionId: sid,
82
+ detail: facet.briefSummary,
83
+ });
84
+ }
85
+ if (facet.sessionType === "multi_task") {
86
+ multiTaskSessions++;
87
+ signals.push({
88
+ type: "multi_task",
89
+ description: "Session involves coordinating multiple AI tasks",
90
+ sessionId: sid,
91
+ detail: facet.underlyingGoal,
92
+ });
93
+ }
94
+ if (facet.outcome === "fully_achieved" &&
95
+ (facet.claudeHelpfulness === "very_helpful" ||
96
+ facet.claudeHelpfulness === "extremely_helpful")) {
97
+ signals.push({
98
+ type: "effective_outcome",
99
+ description: "Session fully achieved with high AI helpfulness",
100
+ sessionId: sid,
101
+ detail: `Goal: ${facet.underlyingGoal} | Outcome: ${facet.outcome}`,
102
+ });
103
+ }
104
+ const frictionKeys = Object.keys(facet.frictionCounts);
105
+ if (frictionKeys.length > 0) {
106
+ frictionSessions++;
107
+ if (facet.frictionCounts["buggy_code"]) {
108
+ bugsCaught += facet.frictionCounts["buggy_code"];
109
+ signals.push({
110
+ type: "bugs_caught",
111
+ description: `Caught ${facet.frictionCounts["buggy_code"]} AI-generated bugs`,
112
+ sessionId: sid,
113
+ detail: facet.frictionDetail,
114
+ });
115
+ }
116
+ if (facet.frictionCounts["wrong_approach"]) {
117
+ signals.push({
118
+ type: "wrong_approach_caught",
119
+ description: "Identified and corrected wrong AI approach",
120
+ sessionId: sid,
121
+ detail: facet.frictionDetail,
122
+ });
123
+ }
124
+ }
125
+ if (facet.primarySuccess === "good_debugging") {
126
+ signals.push({
127
+ type: "good_debugging",
128
+ description: "Session recognized for effective debugging",
129
+ sessionId: sid,
130
+ detail: facet.briefSummary,
131
+ });
132
+ }
133
+ }
134
+ return {
135
+ signals,
136
+ iterativeSessions,
137
+ multiTaskSessions,
138
+ frictionSessions,
139
+ bugsCaught,
140
+ };
141
+ }
142
+ function collectClaudeSessionSignals(sessions) {
143
+ const signals = [];
144
+ let totalToolUses = 0;
145
+ let correctionCount = 0;
146
+ for (const s of sessions) {
147
+ const toolCount = Object.values(s.toolCounts).reduce((a, b) => a + b, 0);
148
+ totalToolUses += toolCount;
149
+ correctionCount += s.userInterruptions;
150
+ if (s.userMessageCount >= DEEP_SESSION_MIN_MESSAGES &&
151
+ toolCount >= DEEP_SESSION_MIN_TOOLS) {
152
+ signals.push({
153
+ type: "deep_engagement",
154
+ description: `Deep session: ${s.userMessageCount} user messages, ${toolCount} tool uses`,
155
+ sessionId: s.sessionId,
156
+ detail: s.firstPrompt.slice(0, 150),
157
+ });
158
+ }
159
+ if (s.toolErrors > 0) {
160
+ signals.push({
161
+ type: "tool_errors_handled",
162
+ description: `Handled ${s.toolErrors} tool errors in session`,
163
+ sessionId: s.sessionId,
164
+ detail: Object.entries(s.toolErrorCategories)
165
+ .map(([k, v]) => `${k}: ${v}`)
166
+ .join(", "),
167
+ });
168
+ }
169
+ }
170
+ return { signals, totalToolUses, correctionCount };
171
+ }
172
+ function collectCodexSignals(codexSessions, codexInsights, sectionId, sectionCodexSignalSessionIds) {
173
+ const signals = [];
174
+ let totalToolUses = 0;
175
+ let iterativeSessions = 0;
176
+ let deepSessions = 0;
177
+ let errorSessions = 0;
178
+ let followUpCount = 0;
179
+ let multiTurnSessions = 0;
180
+ for (const session of codexSessions) {
181
+ const insight = codexInsights.get(session.id);
182
+ const userMessageCount = insight?.userMessages.length ?? 0;
183
+ const followUps = Math.max(0, userMessageCount - 1);
184
+ const toolCallCount = insight?.toolCallCount ?? 0;
185
+ const errorCount = insight?.errorCount ?? 0;
186
+ totalToolUses += toolCallCount;
187
+ followUpCount += followUps;
188
+ if (userMessageCount >= 2) {
189
+ multiTurnSessions++;
190
+ signals.push({
191
+ type: "codex_multi_turn",
192
+ description: `Codex thread has ${userMessageCount} user prompts`,
193
+ sessionId: session.id,
194
+ detail: session.title || session.firstUserMessage.slice(0, 150),
195
+ });
196
+ }
197
+ if (userMessageCount >= CODEX_ITERATIVE_MIN_MESSAGES &&
198
+ (sectionId !== "interaction" ||
199
+ sectionCodexSignalSessionIds.has(session.id))) {
200
+ iterativeSessions++;
201
+ signals.push({
202
+ type: "codex_iterative_refinement",
203
+ description: `Codex thread shows iterative guidance with ${userMessageCount} user prompts`,
204
+ sessionId: session.id,
205
+ detail: session.title || session.firstUserMessage.slice(0, 150),
206
+ });
207
+ }
208
+ if (toolCallCount >= CODEX_DEEP_MIN_TOOL_CALLS ||
209
+ session.tokensUsed >= CODEX_DEEP_MIN_TOKENS) {
210
+ deepSessions++;
211
+ signals.push({
212
+ type: "codex_deep_engagement",
213
+ description: `Codex deep thread: ${toolCallCount} tool calls, ${session.tokensUsed.toLocaleString("en-US")} tokens`,
214
+ sessionId: session.id,
215
+ detail: session.title || session.firstUserMessage.slice(0, 150),
216
+ });
217
+ }
218
+ if (errorCount > 0) {
219
+ errorSessions++;
220
+ signals.push({
221
+ type: "codex_tool_errors_handled",
222
+ description: `Codex thread handled ${errorCount} logged errors`,
223
+ sessionId: session.id,
224
+ detail: session.title || session.firstUserMessage.slice(0, 150),
225
+ });
226
+ }
227
+ }
228
+ return {
229
+ signals,
230
+ totalToolUses,
231
+ iterativeSessions,
232
+ deepSessions,
233
+ errorSessions,
234
+ followUpCount,
235
+ multiTurnSessions,
236
+ };
237
+ }
238
+ function collectKeywordSignals(sectionId, claudeSignals, codexSignals) {
239
+ const signals = [];
240
+ let securityCount = 0;
241
+ let performanceCount = 0;
242
+ const matchesCategory = (keyword, categoryKeywords) => {
243
+ const lower = keyword.toLowerCase();
244
+ return categoryKeywords.some((ck) => lower.includes(ck) || ck.includes(lower));
245
+ };
246
+ for (const sig of claudeSignals) {
247
+ const isSecHit = sig.keywords.some((k) => matchesCategory(k, SECURITY_KEYWORDS));
248
+ const isPerfHit = sig.keywords.some((k) => matchesCategory(k, PERFORMANCE_KEYWORDS));
249
+ if (isSecHit)
250
+ securityCount++;
251
+ if (isPerfHit)
252
+ performanceCount++;
253
+ signals.push({
254
+ type: `keyword_${sectionId}`,
255
+ description: `Keyword match: [${sig.keywords.join(", ")}]`,
256
+ sessionId: sig.sessionId,
257
+ detail: sig.content,
258
+ });
259
+ }
260
+ const codexSignalSessionIds = new Set();
261
+ for (const sig of codexSignals) {
262
+ codexSignalSessionIds.add(sig.sessionId);
263
+ const isSecHit = sig.keywords.some((k) => matchesCategory(k, SECURITY_KEYWORDS));
264
+ const isPerfHit = sig.keywords.some((k) => matchesCategory(k, PERFORMANCE_KEYWORDS));
265
+ signals.push({
266
+ type: `codex_keyword_${sectionId}`,
267
+ description: `Codex thread keyword match: [${sig.keywords.join(", ")}]`,
268
+ sessionId: sig.sessionId,
269
+ detail: sig.content,
270
+ });
271
+ }
272
+ return {
273
+ signals,
274
+ securityCount,
275
+ performanceCount,
276
+ codexKeywordSessions: codexSignalSessionIds.size,
277
+ };
278
+ }
279
+ // ── Evidence builders ──
280
+ function buildEvidenceParts(params) {
281
+ const parts = [];
282
+ if (params.iterativeSessions > 0)
283
+ parts.push(`${params.iterativeSessions} iterative refinement sessions`);
284
+ if (params.codexIterativeSessions > 0)
285
+ parts.push(`${params.codexIterativeSessions} Codex iterative threads`);
286
+ if (params.codexMultiTurnSessions > 0)
287
+ parts.push(`${params.codexMultiTurnSessions} Codex multi-turn threads`);
288
+ if (params.multiTaskSessions > 0)
289
+ parts.push(`${params.multiTaskSessions} multi-task sessions`);
290
+ if (params.correctionCount > 0)
291
+ parts.push(`${params.correctionCount} active corrections`);
292
+ if (params.codexFollowUpCount > 0)
293
+ parts.push(`${params.codexFollowUpCount} Codex follow-up prompts`);
294
+ if (params.bugsCaught > 0)
295
+ parts.push(`${params.bugsCaught} AI bugs caught`);
296
+ if (params.securityCount > 0)
297
+ parts.push(`${params.securityCount} security discussions`);
298
+ if (params.performanceCount > 0)
299
+ parts.push(`${params.performanceCount} performance discussions`);
300
+ if (params.codexSignalCount > 0)
301
+ parts.push(`${params.codexSignalCount} Codex keyword signals`);
302
+ if (params.codexDeepSessions > 0)
303
+ parts.push(`${params.codexDeepSessions} deep Codex threads`);
304
+ return parts;
305
+ }
306
+ function buildUsageEvidence(params) {
307
+ const evidence = [];
308
+ if (params.claudeSessionCount > 0)
309
+ evidence.push(`${params.claudeSessionCount} Claude Code sessions in period`);
310
+ if (params.codexSessionCount > 0)
311
+ evidence.push(`${params.codexSessionCount} Codex threads in period`);
312
+ if (params.avgToolUses > 0)
313
+ evidence.push(`Average ${params.avgToolUses} tool uses per session/thread`);
314
+ if (params.codexDeepSessions > 0)
315
+ evidence.push(`${params.codexDeepSessions} deep Codex threads with high tool/token depth`);
316
+ if (params.frictionSessions > 0)
317
+ evidence.push(`${params.frictionSessions} friction sessions were recorded`);
318
+ return evidence;
319
+ }
320
+ function buildScoreEvidence(section, metThresholds, metThresholdKeys, isSuperior, metrics) {
321
+ const evidence = metThresholds.map((key) => describeThreshold(key, metrics));
322
+ if (metThresholdKeys.size > 0 && !isSuperior) {
323
+ const rules = section.superiorRules;
324
+ if (rules?.mode === "grouped") {
325
+ const strong = rules.strongThresholds ?? Object.keys(section.thresholds);
326
+ const support = rules.supportThresholds ?? [];
327
+ const metStrong = strong.filter((k) => metThresholdKeys.has(k));
328
+ const metSupport = support.filter((k) => metThresholdKeys.has(k));
329
+ evidence.push(`Thresholds met [${metThresholds.join(", ")}] but grouped rule requires ` +
330
+ `>=${rules.minStrongMatched ?? 1} strong (met ${metStrong.length}/${strong.length}: [${metStrong.join(", ")}]) ` +
331
+ `and >=${rules.minSupportMatched ?? 0} support (met ${metSupport.length}/${support.length}: [${metSupport.join(", ")}]). ` +
332
+ `Not sufficient for Superior.`);
333
+ }
334
+ }
335
+ return evidence;
336
+ }
337
+ function buildSummary(params) {
338
+ const parts = [];
339
+ parts.push(`${params.totalSessions} sessions analyzed.`);
340
+ if (params.claudeSessionCount > 0)
341
+ parts.push(`${params.claudeSessionCount} Claude Code sessions.`);
342
+ if (params.codexSessionCount > 0)
343
+ parts.push(`${params.codexSessionCount} Codex threads.`);
344
+ if (params.iterativeSessions > 0)
345
+ parts.push(`${params.iterativeSessions} iterative refinement sessions.`);
346
+ if (params.codexIterativeSessions > 0)
347
+ parts.push(`${params.codexIterativeSessions} iterative Codex threads.`);
348
+ if (params.codexMultiTurnSessions > 0)
349
+ parts.push(`${params.codexMultiTurnSessions} multi-turn Codex threads.`);
350
+ if (params.multiTaskSessions > 0)
351
+ parts.push(`${params.multiTaskSessions} multi-task sessions.`);
352
+ if (params.frictionSessions > 0)
353
+ parts.push(`${params.frictionSessions} friction sessions (AI issues caught).`);
354
+ if (params.bugsCaught > 0)
355
+ parts.push(`${params.bugsCaught} AI bugs caught.`);
356
+ if (params.keywordHits > 0)
357
+ parts.push(`${params.keywordHits} keyword signals detected.`);
358
+ if (params.codexFollowUpCount > 0)
359
+ parts.push(`${params.codexFollowUpCount} Codex follow-up prompts.`);
360
+ parts.push(`Avg ${params.avgToolUses} tool uses/session.`);
361
+ return parts.join(" ");
362
+ }
363
+ // ── Main section analyzer ──
364
+ /**
365
+ * Generic section analyzer.
366
+ *
367
+ * Collects evidence from facets, sessions, and conversation signals,
368
+ * then determines standard vs superior score based on section thresholds.
369
+ */
370
+ export function analyzeSection(section, claudeSessions, facets, claudeSignals, codexSessions, codexInsights, codexSignals) {
371
+ const totalSessions = claudeSessions.length + codexSessions.length;
372
+ if (totalSessions === 0) {
373
+ return {
374
+ id: section.id,
375
+ name: section.name,
376
+ weight: section.weight,
377
+ score: section.standard.score,
378
+ label: section.standard.label,
379
+ reason: "No sessions found in the evaluation period.",
380
+ metThresholds: [],
381
+ usageEvidence: [],
382
+ scoreEvidence: [],
383
+ signals: [],
384
+ metrics: {},
385
+ summary: "No sessions found in the evaluation period.",
386
+ };
387
+ }
388
+ // ── Collect signals from all sources ──
389
+ const sectionClaudeSignals = claudeSignals.filter((s) => s.type === section.id);
390
+ const sectionCodexSignals = codexSignals.filter((s) => s.type === section.id);
391
+ const sectionCodexSignalSessionIds = new Set(sectionCodexSignals.map((s) => s.sessionId));
392
+ const facetResult = collectFacetSignals(facets);
393
+ const claudeResult = collectClaudeSessionSignals(claudeSessions);
394
+ const codexResult = collectCodexSignals(codexSessions, codexInsights, section.id, sectionCodexSignalSessionIds);
395
+ const keywordResult = collectKeywordSignals(section.id, sectionClaudeSignals, sectionCodexSignals);
396
+ const collectedSignals = [
397
+ ...facetResult.signals,
398
+ ...claudeResult.signals,
399
+ ...codexResult.signals,
400
+ ...keywordResult.signals,
401
+ ];
402
+ const totalToolUses = claudeResult.totalToolUses + codexResult.totalToolUses;
403
+ const avgToolUses = totalSessions > 0 ? Math.round(totalToolUses / totalSessions) : 0;
404
+ // ── Store metrics ──
405
+ const metrics = {
406
+ sessions: totalSessions,
407
+ claudeSessions: claudeSessions.length,
408
+ codexSessions: codexSessions.length,
409
+ iterativeSessions: facetResult.iterativeSessions,
410
+ codexIterativeSessions: codexResult.iterativeSessions,
411
+ codexMultiTurnSessions: codexResult.multiTurnSessions,
412
+ multiTaskSessions: facetResult.multiTaskSessions,
413
+ correctionCount: claudeResult.correctionCount,
414
+ codexFollowUpCount: codexResult.followUpCount,
415
+ avgToolUses,
416
+ keywordHits: sectionClaudeSignals.length + sectionCodexSignals.length,
417
+ codexKeywordSessions: keywordResult.codexKeywordSessions,
418
+ frictionSessions: facetResult.frictionSessions,
419
+ bugsCaught: facetResult.bugsCaught,
420
+ securityCount: keywordResult.securityCount,
421
+ performanceCount: keywordResult.performanceCount,
422
+ codexDeepSessions: codexResult.deepSessions,
423
+ codexErrorSessions: codexResult.errorSessions,
424
+ };
425
+ // ── Score determination via thresholds ──
426
+ const metThresholdKeys = new Set();
427
+ for (const [key, threshold] of Object.entries(section.thresholds)) {
428
+ if (key === "iterativeRatio") {
429
+ const ratio = totalSessions > 0
430
+ ? (facetResult.iterativeSessions +
431
+ facetResult.multiTaskSessions +
432
+ codexResult.iterativeSessions) /
433
+ totalSessions
434
+ : 0;
435
+ if (ratio >= threshold)
436
+ metThresholdKeys.add(key);
437
+ }
438
+ else if ((metrics[key] ?? 0) >= threshold) {
439
+ metThresholdKeys.add(key);
440
+ }
441
+ }
442
+ const isSuperior = shouldScoreSuperior(section, metThresholdKeys);
443
+ const metThresholds = [...metThresholdKeys];
444
+ const score = isSuperior ? section.superior.score : section.standard.score;
445
+ const label = isSuperior ? section.superior.label : section.standard.label;
446
+ // ── Build evidence and reason ──
447
+ const criteriaList = isSuperior
448
+ ? section.superior.criteria
449
+ : section.standard.criteria;
450
+ const evidenceParts = buildEvidenceParts({
451
+ iterativeSessions: facetResult.iterativeSessions,
452
+ codexIterativeSessions: codexResult.iterativeSessions,
453
+ codexMultiTurnSessions: codexResult.multiTurnSessions,
454
+ multiTaskSessions: facetResult.multiTaskSessions,
455
+ correctionCount: claudeResult.correctionCount,
456
+ codexFollowUpCount: codexResult.followUpCount,
457
+ bugsCaught: facetResult.bugsCaught,
458
+ securityCount: keywordResult.securityCount,
459
+ performanceCount: keywordResult.performanceCount,
460
+ codexSignalCount: sectionCodexSignals.length,
461
+ codexDeepSessions: codexResult.deepSessions,
462
+ });
463
+ const reason = `${label} (${score}%): ` +
464
+ criteriaList[0] +
465
+ (evidenceParts.length > 0
466
+ ? ". Evidence: " + evidenceParts.join("; ")
467
+ : "") +
468
+ ".";
469
+ return {
470
+ id: section.id,
471
+ name: section.name,
472
+ weight: section.weight,
473
+ score,
474
+ label,
475
+ reason,
476
+ metThresholds,
477
+ usageEvidence: buildUsageEvidence({
478
+ claudeSessionCount: claudeSessions.length,
479
+ codexSessionCount: codexSessions.length,
480
+ avgToolUses,
481
+ codexDeepSessions: codexResult.deepSessions,
482
+ frictionSessions: facetResult.frictionSessions,
483
+ }),
484
+ scoreEvidence: buildScoreEvidence(section, metThresholds, metThresholdKeys, isSuperior, metrics),
485
+ signals: collectedSignals,
486
+ metrics,
487
+ summary: buildSummary({
488
+ totalSessions,
489
+ claudeSessionCount: claudeSessions.length,
490
+ codexSessionCount: codexSessions.length,
491
+ iterativeSessions: facetResult.iterativeSessions,
492
+ codexIterativeSessions: codexResult.iterativeSessions,
493
+ codexMultiTurnSessions: codexResult.multiTurnSessions,
494
+ multiTaskSessions: facetResult.multiTaskSessions,
495
+ frictionSessions: facetResult.frictionSessions,
496
+ bugsCaught: facetResult.bugsCaught,
497
+ keywordHits: sectionClaudeSignals.length + sectionCodexSignals.length,
498
+ codexFollowUpCount: codexResult.followUpCount,
499
+ avgToolUses,
500
+ }),
501
+ };
502
+ }
503
+ //# sourceMappingURL=section.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"section.js","sourceRoot":"","sources":["../../src/analyzers/section.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ClaudeCodeSession, ClaudeCodeCostRecord, CodexSession, UsageOverview } from "../types.js";
2
+ export declare function analyzeUsage(claudeSessions: ClaudeCodeSession[], claudeCosts: ClaudeCodeCostRecord[], codexSessions: CodexSession[], since: string, until: string): UsageOverview;
3
+ //# sourceMappingURL=usage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../../src/analyzers/usage.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,iBAAiB,EACjB,oBAAoB,EACpB,YAAY,EACZ,aAAa,EACd,MAAM,aAAa,CAAC;AAiCrB,wBAAgB,YAAY,CAC1B,cAAc,EAAE,iBAAiB,EAAE,EACnC,WAAW,EAAE,oBAAoB,EAAE,EACnC,aAAa,EAAE,YAAY,EAAE,EAC7B,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,GACZ,aAAa,CA6If"}