@boshu2/vibe-check 1.8.1 → 2.2.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/.agents/plans/2025-12-27-vibe-check-evolution-plan.md +383 -0
- package/.agents/research/2025-12-27-vibe-check-evolution.md +352 -0
- package/.claude/settings.local.json +9 -3
- package/CHANGELOG.md +43 -0
- package/CLAUDE.md +201 -26
- package/Makefile +4 -4
- package/README.md +95 -0
- package/bin/vibe-check.js +1 -1
- package/claude-progress.json +18 -0
- package/dist/analysis/cross-session-analysis.d.ts +1 -1
- package/dist/analysis/cross-session-analysis.d.ts.map +1 -1
- package/dist/analysis/cross-session-analysis.js +9 -18
- package/dist/analysis/cross-session-analysis.js.map +1 -1
- package/dist/analysis/index.d.ts +1 -1
- package/dist/analysis/index.d.ts.map +1 -1
- package/dist/analysis/index.js +1 -11
- package/dist/analysis/index.js.map +1 -1
- package/dist/analyzers/audit.d.ts +28 -0
- package/dist/analyzers/audit.d.ts.map +1 -0
- package/dist/analyzers/audit.js +86 -0
- package/dist/analyzers/audit.js.map +1 -0
- package/dist/analyzers/eldritch.d.ts +40 -0
- package/dist/analyzers/eldritch.d.ts.map +1 -0
- package/dist/analyzers/eldritch.js +202 -0
- package/dist/analyzers/eldritch.js.map +1 -0
- package/dist/analyzers/modularity.d.ts +67 -0
- package/dist/analyzers/modularity.d.ts.map +1 -0
- package/dist/analyzers/modularity.js +254 -0
- package/dist/analyzers/modularity.js.map +1 -0
- package/dist/analyzers/patterns.d.ts +1 -1
- package/dist/analyzers/patterns.d.ts.map +1 -1
- package/dist/analyzers/patterns.js +4 -10
- package/dist/analyzers/patterns.js.map +1 -1
- package/dist/analyzers/quality.d.ts +1 -1
- package/dist/analyzers/quality.d.ts.map +1 -1
- package/dist/analyzers/quality.js +5 -12
- package/dist/analyzers/quality.js.map +1 -1
- package/dist/analyzers/sessions.d.ts +1 -1
- package/dist/analyzers/sessions.d.ts.map +1 -1
- package/dist/analyzers/sessions.js +1 -4
- package/dist/analyzers/sessions.js.map +1 -1
- package/dist/cli.js +21 -20
- package/dist/cli.js.map +1 -1
- package/dist/commands/analyze.d.ts.map +1 -1
- package/dist/commands/analyze.js +124 -149
- package/dist/commands/analyze.js.map +1 -1
- package/dist/commands/audit.d.ts +3 -0
- package/dist/commands/audit.d.ts.map +1 -0
- package/dist/commands/audit.js +102 -0
- package/dist/commands/audit.js.map +1 -0
- package/dist/commands/cache.js +31 -70
- package/dist/commands/cache.js.map +1 -1
- package/dist/commands/dashboard.d.ts.map +1 -1
- package/dist/commands/dashboard.js +22 -58
- package/dist/commands/dashboard.js.map +1 -1
- package/dist/commands/forensics.d.ts +10 -2
- package/dist/commands/forensics.d.ts.map +1 -1
- package/dist/commands/forensics.js +91 -51
- package/dist/commands/forensics.js.map +1 -1
- package/dist/commands/index.d.ts +15 -13
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +15 -33
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/init-hook.js +26 -32
- package/dist/commands/init-hook.js.map +1 -1
- package/dist/commands/insights.js +39 -45
- package/dist/commands/insights.js.map +1 -1
- package/dist/commands/modularity.d.ts +27 -0
- package/dist/commands/modularity.d.ts.map +1 -0
- package/dist/commands/modularity.js +182 -0
- package/dist/commands/modularity.js.map +1 -0
- package/dist/commands/pipeline.js +39 -78
- package/dist/commands/pipeline.js.map +1 -1
- package/dist/commands/profile.js +68 -74
- package/dist/commands/profile.js.map +1 -1
- package/dist/commands/session.js +88 -129
- package/dist/commands/session.js.map +1 -1
- package/dist/commands/sessions.d.ts +1 -1
- package/dist/commands/sessions.d.ts.map +1 -1
- package/dist/commands/sessions.js +42 -49
- package/dist/commands/sessions.js.map +1 -1
- package/dist/commands/start.js +22 -67
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/timeline.js +74 -81
- package/dist/commands/timeline.js.map +1 -1
- package/dist/commands/watch.js +54 -60
- package/dist/commands/watch.js.map +1 -1
- package/dist/gamification/achievements.d.ts +1 -1
- package/dist/gamification/achievements.d.ts.map +1 -1
- package/dist/gamification/achievements.js +7 -13
- package/dist/gamification/achievements.js.map +1 -1
- package/dist/gamification/index.d.ts +8 -8
- package/dist/gamification/index.d.ts.map +1 -1
- package/dist/gamification/index.js +8 -28
- package/dist/gamification/index.js.map +1 -1
- package/dist/gamification/profile.d.ts +2 -2
- package/dist/gamification/profile.d.ts.map +1 -1
- package/dist/gamification/profile.js +21 -64
- package/dist/gamification/profile.js.map +1 -1
- package/dist/gamification/stats.d.ts +1 -1
- package/dist/gamification/stats.d.ts.map +1 -1
- package/dist/gamification/stats.js +4 -10
- package/dist/gamification/stats.js.map +1 -1
- package/dist/gamification/streaks.d.ts +1 -1
- package/dist/gamification/streaks.d.ts.map +1 -1
- package/dist/gamification/streaks.js +8 -18
- package/dist/gamification/streaks.js.map +1 -1
- package/dist/gamification/types.js +3 -6
- package/dist/gamification/types.js.map +1 -1
- package/dist/gamification/xp.d.ts +1 -1
- package/dist/gamification/xp.d.ts.map +1 -1
- package/dist/gamification/xp.js +29 -38
- package/dist/gamification/xp.js.map +1 -1
- package/dist/git.d.ts +1 -1
- package/dist/git.d.ts.map +1 -1
- package/dist/git.js +23 -29
- package/dist/git.js.map +1 -1
- package/dist/inner-loop/context-amnesia.d.ts +2 -2
- package/dist/inner-loop/context-amnesia.d.ts.map +1 -1
- package/dist/inner-loop/context-amnesia.js +7 -10
- package/dist/inner-loop/context-amnesia.js.map +1 -1
- package/dist/inner-loop/index.d.ts +7 -7
- package/dist/inner-loop/index.d.ts.map +1 -1
- package/dist/inner-loop/index.js +18 -45
- package/dist/inner-loop/index.js.map +1 -1
- package/dist/inner-loop/instruction-drift.d.ts +2 -2
- package/dist/inner-loop/instruction-drift.d.ts.map +1 -1
- package/dist/inner-loop/instruction-drift.js +5 -10
- package/dist/inner-loop/instruction-drift.js.map +1 -1
- package/dist/inner-loop/logging-only.d.ts +2 -2
- package/dist/inner-loop/logging-only.d.ts.map +1 -1
- package/dist/inner-loop/logging-only.js +9 -17
- package/dist/inner-loop/logging-only.js.map +1 -1
- package/dist/inner-loop/tests-passing-lie.d.ts +2 -2
- package/dist/inner-loop/tests-passing-lie.d.ts.map +1 -1
- package/dist/inner-loop/tests-passing-lie.js +12 -17
- package/dist/inner-loop/tests-passing-lie.js.map +1 -1
- package/dist/inner-loop/types.js +1 -4
- package/dist/inner-loop/types.js.map +1 -1
- package/dist/insights/generators.d.ts +4 -4
- package/dist/insights/generators.d.ts.map +1 -1
- package/dist/insights/generators.js +9 -20
- package/dist/insights/generators.js.map +1 -1
- package/dist/insights/index.d.ts +4 -4
- package/dist/insights/index.d.ts.map +1 -1
- package/dist/insights/index.js +23 -27
- package/dist/insights/index.js.map +1 -1
- package/dist/insights/types.js +1 -2
- package/dist/insights/types.js.map +1 -1
- package/dist/metrics/code-stability.d.ts +1 -1
- package/dist/metrics/code-stability.d.ts.map +1 -1
- package/dist/metrics/code-stability.js +1 -4
- package/dist/metrics/code-stability.js.map +1 -1
- package/dist/metrics/cohesion.d.ts +27 -0
- package/dist/metrics/cohesion.d.ts.map +1 -0
- package/dist/metrics/cohesion.js +134 -0
- package/dist/metrics/cohesion.js.map +1 -0
- package/dist/metrics/file-churn.d.ts +1 -1
- package/dist/metrics/file-churn.d.ts.map +1 -1
- package/dist/metrics/file-churn.js +1 -4
- package/dist/metrics/file-churn.js.map +1 -1
- package/dist/metrics/flow.d.ts +1 -1
- package/dist/metrics/flow.d.ts.map +1 -1
- package/dist/metrics/flow.js +1 -4
- package/dist/metrics/flow.js.map +1 -1
- package/dist/metrics/index.d.ts +10 -2
- package/dist/metrics/index.d.ts.map +1 -1
- package/dist/metrics/index.js +51 -20
- package/dist/metrics/index.js.map +1 -1
- package/dist/metrics/investigation.d.ts +25 -0
- package/dist/metrics/investigation.d.ts.map +1 -0
- package/dist/metrics/investigation.js +115 -0
- package/dist/metrics/investigation.js.map +1 -0
- package/dist/metrics/rework.d.ts +1 -1
- package/dist/metrics/rework.d.ts.map +1 -1
- package/dist/metrics/rework.js +1 -4
- package/dist/metrics/rework.js.map +1 -1
- package/dist/metrics/spirals.d.ts +1 -1
- package/dist/metrics/spirals.d.ts.map +1 -1
- package/dist/metrics/spirals.js +5 -10
- package/dist/metrics/spirals.js.map +1 -1
- package/dist/metrics/time-spiral.d.ts +1 -1
- package/dist/metrics/time-spiral.d.ts.map +1 -1
- package/dist/metrics/time-spiral.js +1 -4
- package/dist/metrics/time-spiral.js.map +1 -1
- package/dist/metrics/tracers.d.ts +28 -0
- package/dist/metrics/tracers.d.ts.map +1 -0
- package/dist/metrics/tracers.js +117 -0
- package/dist/metrics/tracers.js.map +1 -0
- package/dist/metrics/trust.d.ts +1 -1
- package/dist/metrics/trust.d.ts.map +1 -1
- package/dist/metrics/trust.js +3 -6
- package/dist/metrics/trust.js.map +1 -1
- package/dist/metrics/velocity-anomaly.d.ts +1 -1
- package/dist/metrics/velocity-anomaly.d.ts.map +1 -1
- package/dist/metrics/velocity-anomaly.js +3 -6
- package/dist/metrics/velocity-anomaly.js.map +1 -1
- package/dist/metrics/velocity.d.ts +1 -1
- package/dist/metrics/velocity.d.ts.map +1 -1
- package/dist/metrics/velocity.js +6 -10
- package/dist/metrics/velocity.js.map +1 -1
- package/dist/output/index.d.ts +4 -4
- package/dist/output/index.d.ts.map +1 -1
- package/dist/output/index.js +10 -18
- package/dist/output/index.js.map +1 -1
- package/dist/output/json.d.ts +1 -1
- package/dist/output/json.d.ts.map +1 -1
- package/dist/output/json.js +1 -4
- package/dist/output/json.js.map +1 -1
- package/dist/output/markdown.d.ts +1 -1
- package/dist/output/markdown.d.ts.map +1 -1
- package/dist/output/markdown.js +5 -8
- package/dist/output/markdown.js.map +1 -1
- package/dist/output/terminal.d.ts +1 -1
- package/dist/output/terminal.d.ts.map +1 -1
- package/dist/output/terminal.js +88 -62
- package/dist/output/terminal.js.map +1 -1
- package/dist/output/timeline-html.d.ts +1 -1
- package/dist/output/timeline-html.d.ts.map +1 -1
- package/dist/output/timeline-html.js +5 -8
- package/dist/output/timeline-html.js.map +1 -1
- package/dist/output/timeline-markdown.d.ts +1 -1
- package/dist/output/timeline-markdown.d.ts.map +1 -1
- package/dist/output/timeline-markdown.js +5 -8
- package/dist/output/timeline-markdown.js.map +1 -1
- package/dist/output/timeline.d.ts +1 -1
- package/dist/output/timeline.d.ts.map +1 -1
- package/dist/output/timeline.js +46 -52
- package/dist/output/timeline.js.map +1 -1
- package/dist/patterns/detour.d.ts +1 -1
- package/dist/patterns/detour.d.ts.map +1 -1
- package/dist/patterns/detour.js +1 -4
- package/dist/patterns/detour.js.map +1 -1
- package/dist/patterns/flow-state.d.ts +1 -1
- package/dist/patterns/flow-state.d.ts.map +1 -1
- package/dist/patterns/flow-state.js +1 -4
- package/dist/patterns/flow-state.js.map +1 -1
- package/dist/patterns/index.d.ts +7 -7
- package/dist/patterns/index.d.ts.map +1 -1
- package/dist/patterns/index.js +7 -21
- package/dist/patterns/index.js.map +1 -1
- package/dist/patterns/intervention-effectiveness.d.ts +1 -1
- package/dist/patterns/intervention-effectiveness.d.ts.map +1 -1
- package/dist/patterns/intervention-effectiveness.js +3 -8
- package/dist/patterns/intervention-effectiveness.js.map +1 -1
- package/dist/patterns/late-night.d.ts +1 -1
- package/dist/patterns/late-night.d.ts.map +1 -1
- package/dist/patterns/late-night.js +1 -4
- package/dist/patterns/late-night.js.map +1 -1
- package/dist/patterns/post-delete-sprint.d.ts +1 -1
- package/dist/patterns/post-delete-sprint.d.ts.map +1 -1
- package/dist/patterns/post-delete-sprint.js +1 -4
- package/dist/patterns/post-delete-sprint.js.map +1 -1
- package/dist/patterns/spiral-regression.d.ts +1 -1
- package/dist/patterns/spiral-regression.d.ts.map +1 -1
- package/dist/patterns/spiral-regression.js +3 -8
- package/dist/patterns/spiral-regression.js.map +1 -1
- package/dist/patterns/thrashing.d.ts +1 -1
- package/dist/patterns/thrashing.d.ts.map +1 -1
- package/dist/patterns/thrashing.js +3 -6
- package/dist/patterns/thrashing.js.map +1 -1
- package/dist/score/index.d.ts +3 -3
- package/dist/score/index.d.ts.map +1 -1
- package/dist/score/index.js +4 -10
- package/dist/score/index.js.map +1 -1
- package/dist/score/weights.js +2 -6
- package/dist/score/weights.js.map +1 -1
- package/dist/sessions/index.js +9 -51
- package/dist/sessions/index.js.map +1 -1
- package/dist/storage/atomic.js +10 -51
- package/dist/storage/atomic.js.map +1 -1
- package/dist/storage/commit-log.d.ts +1 -1
- package/dist/storage/commit-log.d.ts.map +1 -1
- package/dist/storage/commit-log.js +11 -51
- package/dist/storage/commit-log.js.map +1 -1
- package/dist/storage/index.d.ts +5 -5
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +5 -37
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/schema.js +4 -9
- package/dist/storage/schema.js.map +1 -1
- package/dist/storage/spiral-history.js +14 -57
- package/dist/storage/spiral-history.js.map +1 -1
- package/dist/storage/timeline-store.d.ts +2 -2
- package/dist/storage/timeline-store.d.ts.map +1 -1
- package/dist/storage/timeline-store.js +17 -61
- package/dist/storage/timeline-store.js.map +1 -1
- package/dist/types.d.ts +36 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -2
- package/docs/ENHANCEMENT-PLAN.md +379 -0
- package/feature-list.json +6 -0
- package/package.json +8 -7
- package/.claude/skills/typescript-review.md +0 -152
- package/dist/calibration/ece.d.ts +0 -26
- package/dist/calibration/ece.d.ts.map +0 -1
- package/dist/calibration/ece.js +0 -93
- package/dist/calibration/ece.js.map +0 -1
- package/dist/calibration/index.d.ts +0 -3
- package/dist/calibration/index.d.ts.map +0 -1
- package/dist/calibration/index.js +0 -15
- package/dist/calibration/index.js.map +0 -1
- package/dist/calibration/storage.d.ts +0 -34
- package/dist/calibration/storage.d.ts.map +0 -1
- package/dist/calibration/storage.js +0 -188
- package/dist/calibration/storage.js.map +0 -1
- package/dist/commands/intervene.d.ts +0 -15
- package/dist/commands/intervene.d.ts.map +0 -1
- package/dist/commands/intervene.js +0 -183
- package/dist/commands/intervene.js.map +0 -1
- package/dist/commands/learn.d.ts +0 -3
- package/dist/commands/learn.d.ts.map +0 -1
- package/dist/commands/learn.js +0 -161
- package/dist/commands/learn.js.map +0 -1
- package/dist/commands/lesson.d.ts +0 -8
- package/dist/commands/lesson.d.ts.map +0 -1
- package/dist/commands/lesson.js +0 -206
- package/dist/commands/lesson.js.map +0 -1
- package/dist/commands/level.d.ts +0 -3
- package/dist/commands/level.d.ts.map +0 -1
- package/dist/commands/level.js +0 -277
- package/dist/commands/level.js.map +0 -1
- package/dist/gamification/badges.d.ts +0 -29
- package/dist/gamification/badges.d.ts.map +0 -1
- package/dist/gamification/badges.js +0 -114
- package/dist/gamification/badges.js.map +0 -1
- package/dist/gamification/challenges.d.ts +0 -42
- package/dist/gamification/challenges.d.ts.map +0 -1
- package/dist/gamification/challenges.js +0 -184
- package/dist/gamification/challenges.js.map +0 -1
- package/dist/gamification/hall-of-fame.d.ts +0 -17
- package/dist/gamification/hall-of-fame.d.ts.map +0 -1
- package/dist/gamification/hall-of-fame.js +0 -64
- package/dist/gamification/hall-of-fame.js.map +0 -1
- package/dist/gamification/intervention-memory.d.ts +0 -61
- package/dist/gamification/intervention-memory.d.ts.map +0 -1
- package/dist/gamification/intervention-memory.js +0 -229
- package/dist/gamification/intervention-memory.js.map +0 -1
- package/dist/gamification/leaderboards.d.ts +0 -49
- package/dist/gamification/leaderboards.d.ts.map +0 -1
- package/dist/gamification/leaderboards.js +0 -179
- package/dist/gamification/leaderboards.js.map +0 -1
- package/dist/gamification/pattern-memory.d.ts +0 -45
- package/dist/gamification/pattern-memory.d.ts.map +0 -1
- package/dist/gamification/pattern-memory.js +0 -188
- package/dist/gamification/pattern-memory.js.map +0 -1
- package/dist/gamification/share.d.ts +0 -29
- package/dist/gamification/share.d.ts.map +0 -1
- package/dist/gamification/share.js +0 -57
- package/dist/gamification/share.js.map +0 -1
- package/dist/learning/cadence.d.ts +0 -15
- package/dist/learning/cadence.d.ts.map +0 -1
- package/dist/learning/cadence.js +0 -130
- package/dist/learning/cadence.js.map +0 -1
- package/dist/learning/index.d.ts +0 -19
- package/dist/learning/index.d.ts.map +0 -1
- package/dist/learning/index.js +0 -35
- package/dist/learning/index.js.map +0 -1
- package/dist/learning/lessons-storage.d.ts +0 -48
- package/dist/learning/lessons-storage.d.ts.map +0 -1
- package/dist/learning/lessons-storage.js +0 -266
- package/dist/learning/lessons-storage.js.map +0 -1
- package/dist/learning/lessons-types.d.ts +0 -83
- package/dist/learning/lessons-types.d.ts.map +0 -1
- package/dist/learning/lessons-types.js +0 -15
- package/dist/learning/lessons-types.js.map +0 -1
- package/dist/learning/nudges.d.ts +0 -20
- package/dist/learning/nudges.d.ts.map +0 -1
- package/dist/learning/nudges.js +0 -68
- package/dist/learning/nudges.js.map +0 -1
- package/dist/learning/retrospective.d.ts +0 -27
- package/dist/learning/retrospective.d.ts.map +0 -1
- package/dist/learning/retrospective.js +0 -184
- package/dist/learning/retrospective.js.map +0 -1
- package/dist/learning/storage.d.ts +0 -44
- package/dist/learning/storage.d.ts.map +0 -1
- package/dist/learning/storage.js +0 -194
- package/dist/learning/storage.js.map +0 -1
- package/dist/learning/surfacing.d.ts +0 -36
- package/dist/learning/surfacing.d.ts.map +0 -1
- package/dist/learning/surfacing.js +0 -255
- package/dist/learning/surfacing.js.map +0 -1
- package/dist/learning/synthesis.d.ts +0 -17
- package/dist/learning/synthesis.d.ts.map +0 -1
- package/dist/learning/synthesis.js +0 -293
- package/dist/learning/synthesis.js.map +0 -1
- package/dist/learning/types.d.ts +0 -60
- package/dist/learning/types.d.ts.map +0 -1
- package/dist/learning/types.js +0 -17
- package/dist/learning/types.js.map +0 -1
- package/dist/recommend/index.d.ts +0 -3
- package/dist/recommend/index.d.ts.map +0 -1
- package/dist/recommend/index.js +0 -14
- package/dist/recommend/index.js.map +0 -1
- package/dist/recommend/ordered-logistic.d.ts +0 -49
- package/dist/recommend/ordered-logistic.d.ts.map +0 -1
- package/dist/recommend/ordered-logistic.js +0 -153
- package/dist/recommend/ordered-logistic.js.map +0 -1
- package/dist/recommend/questions.d.ts +0 -19
- package/dist/recommend/questions.d.ts.map +0 -1
- package/dist/recommend/questions.js +0 -73
- package/dist/recommend/questions.js.map +0 -1
|
@@ -1,152 +0,0 @@
|
|
|
1
|
-
# TypeScript Code Review Skill
|
|
2
|
-
|
|
3
|
-
**Trigger:** User asks for TypeScript review, type safety audit, or TS best practices check.
|
|
4
|
-
|
|
5
|
-
**Purpose:** Systematic TypeScript code review focusing on type safety, patterns, and idiomatic usage.
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## Review Checklist
|
|
10
|
-
|
|
11
|
-
### 1. Compiler Configuration (tsconfig.json)
|
|
12
|
-
|
|
13
|
-
| Setting | Recommended | Why |
|
|
14
|
-
|---------|-------------|-----|
|
|
15
|
-
| `strict` | `true` | Enables all strict checks |
|
|
16
|
-
| `noImplicitAny` | `true` (via strict) | No silent `any` types |
|
|
17
|
-
| `strictNullChecks` | `true` (via strict) | Catch null/undefined errors |
|
|
18
|
-
| `noUncheckedIndexedAccess` | `true` | Arrays return `T \| undefined` |
|
|
19
|
-
| `exactOptionalPropertyTypes` | `true` | Distinguish `undefined` vs missing |
|
|
20
|
-
| `noImplicitReturns` | `true` | All code paths must return |
|
|
21
|
-
| `noFallthroughCasesInSwitch` | `true` | Prevent switch fallthrough bugs |
|
|
22
|
-
|
|
23
|
-
### 2. Type Safety Issues
|
|
24
|
-
|
|
25
|
-
**Critical (fix immediately):**
|
|
26
|
-
- [ ] Explicit `any` types
|
|
27
|
-
- [ ] Type assertions without validation (`as Type`)
|
|
28
|
-
- [ ] Non-null assertions (`!`) without checks
|
|
29
|
-
- [ ] `@ts-ignore` or `@ts-expect-error` comments
|
|
30
|
-
- [ ] Missing return types on exported functions
|
|
31
|
-
|
|
32
|
-
**Warning (improve when possible):**
|
|
33
|
-
- [ ] Implicit `any` in callbacks
|
|
34
|
-
- [ ] Overly broad types (`object`, `{}`, `Function`)
|
|
35
|
-
- [ ] Missing generics where reuse is possible
|
|
36
|
-
- [ ] Type assertions that could be type guards
|
|
37
|
-
|
|
38
|
-
### 3. Type Design Patterns
|
|
39
|
-
|
|
40
|
-
**Good patterns to look for:**
|
|
41
|
-
```typescript
|
|
42
|
-
// Discriminated unions
|
|
43
|
-
type Result<T> =
|
|
44
|
-
| { success: true; data: T }
|
|
45
|
-
| { success: false; error: string };
|
|
46
|
-
|
|
47
|
-
// Branded types for IDs
|
|
48
|
-
type UserId = string & { readonly brand: unique symbol };
|
|
49
|
-
|
|
50
|
-
// Const assertions for literals
|
|
51
|
-
const STATUSES = ['pending', 'active', 'done'] as const;
|
|
52
|
-
type Status = typeof STATUSES[number];
|
|
53
|
-
|
|
54
|
-
// Type guards
|
|
55
|
-
function isUser(obj: unknown): obj is User {
|
|
56
|
-
return typeof obj === 'object' && obj !== null && 'id' in obj;
|
|
57
|
-
}
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
**Anti-patterns to flag:**
|
|
61
|
-
```typescript
|
|
62
|
-
// ❌ Stringly-typed
|
|
63
|
-
function setStatus(status: string) { }
|
|
64
|
-
|
|
65
|
-
// ✅ Union type
|
|
66
|
-
function setStatus(status: 'pending' | 'active' | 'done') { }
|
|
67
|
-
|
|
68
|
-
// ❌ Optional chaining hiding bugs
|
|
69
|
-
const name = user?.profile?.name ?? 'Unknown';
|
|
70
|
-
|
|
71
|
-
// ✅ Explicit null handling
|
|
72
|
-
if (!user || !user.profile) {
|
|
73
|
-
throw new Error('User profile required');
|
|
74
|
-
}
|
|
75
|
-
const name = user.profile.name;
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
### 4. Interface vs Type
|
|
79
|
-
|
|
80
|
-
| Use Interface | Use Type |
|
|
81
|
-
|---------------|----------|
|
|
82
|
-
| Object shapes | Unions, intersections |
|
|
83
|
-
| Extendable contracts | Computed types |
|
|
84
|
-
| Class implementations | Mapped types |
|
|
85
|
-
| Public API | Internal aliases |
|
|
86
|
-
|
|
87
|
-
### 5. Export Hygiene
|
|
88
|
-
|
|
89
|
-
- [ ] Are internal types exported unnecessarily?
|
|
90
|
-
- [ ] Is there a central `types.ts` for shared types?
|
|
91
|
-
- [ ] Are re-exports organized (`index.ts` barrels)?
|
|
92
|
-
|
|
93
|
-
---
|
|
94
|
-
|
|
95
|
-
## Review Process
|
|
96
|
-
|
|
97
|
-
1. **Check tsconfig.json** - Verify strict settings
|
|
98
|
-
2. **Run `tsc --noEmit`** - Catch all compiler errors
|
|
99
|
-
3. **Search for anti-patterns:**
|
|
100
|
-
```bash
|
|
101
|
-
grep -r ": any" src/
|
|
102
|
-
grep -r "as " src/ | grep -v "import"
|
|
103
|
-
grep -r "@ts-ignore" src/
|
|
104
|
-
grep -r "!" src/ | grep -v "!=" | grep -v "!=="
|
|
105
|
-
```
|
|
106
|
-
4. **Review types.ts** - Check type design
|
|
107
|
-
5. **Sample 3-5 files** - Deep review patterns
|
|
108
|
-
|
|
109
|
-
---
|
|
110
|
-
|
|
111
|
-
## Output Format
|
|
112
|
-
|
|
113
|
-
```markdown
|
|
114
|
-
## TypeScript Review: [Project Name]
|
|
115
|
-
|
|
116
|
-
### Config Score: X/10
|
|
117
|
-
[tsconfig.json findings]
|
|
118
|
-
|
|
119
|
-
### Type Safety Score: X/10
|
|
120
|
-
[Anti-pattern counts and examples]
|
|
121
|
-
|
|
122
|
-
### Type Design Score: X/10
|
|
123
|
-
[Pattern quality assessment]
|
|
124
|
-
|
|
125
|
-
### Top Issues
|
|
126
|
-
1. [Most critical issue]
|
|
127
|
-
2. [Second issue]
|
|
128
|
-
3. [Third issue]
|
|
129
|
-
|
|
130
|
-
### Recommendations
|
|
131
|
-
- [ ] [Actionable fix 1]
|
|
132
|
-
- [ ] [Actionable fix 2]
|
|
133
|
-
- [ ] [Actionable fix 3]
|
|
134
|
-
```
|
|
135
|
-
|
|
136
|
-
---
|
|
137
|
-
|
|
138
|
-
## Quick Fixes
|
|
139
|
-
|
|
140
|
-
```bash
|
|
141
|
-
# Find all `any` types
|
|
142
|
-
grep -rn ": any" src/
|
|
143
|
-
|
|
144
|
-
# Find type assertions
|
|
145
|
-
grep -rn " as [A-Z]" src/
|
|
146
|
-
|
|
147
|
-
# Find non-null assertions
|
|
148
|
-
grep -rn "\![^=]" src/
|
|
149
|
-
|
|
150
|
-
# Run strict type check
|
|
151
|
-
npx tsc --noEmit --strict
|
|
152
|
-
```
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { CalibrationSample } from '../types';
|
|
2
|
-
/**
|
|
3
|
-
* Expected Calibration Error (ECE).
|
|
4
|
-
* Measures how well predicted levels match declared levels.
|
|
5
|
-
*
|
|
6
|
-
* ECE = Σᵢ (nᵢ/N) × |accuracy(binᵢ) - confidence(binᵢ)|
|
|
7
|
-
*/
|
|
8
|
-
export declare function calculateECE(samples: CalibrationSample[]): number;
|
|
9
|
-
/**
|
|
10
|
-
* Assess if a score matches the expected range for a level.
|
|
11
|
-
*/
|
|
12
|
-
export declare function assessOutcome(vibeScore: number, declaredLevel: number): 'correct' | 'too_high' | 'too_low';
|
|
13
|
-
/**
|
|
14
|
-
* Infer the "true" vibe level from an actual vibe score.
|
|
15
|
-
* This is used to generate training labels for the model.
|
|
16
|
-
*
|
|
17
|
-
* Maps score ranges to levels:
|
|
18
|
-
* - 0.90-1.00 → 5 (Elite flow)
|
|
19
|
-
* - 0.80-0.90 → 4 (High flow)
|
|
20
|
-
* - 0.65-0.80 → 3 (Balanced)
|
|
21
|
-
* - 0.50-0.65 → 2 (AI-Augmented)
|
|
22
|
-
* - 0.30-0.50 → 1 (Human-Led)
|
|
23
|
-
* - 0.00-0.30 → 0 (Manual)
|
|
24
|
-
*/
|
|
25
|
-
export declare function inferTrueLevel(vibeScore: number): 0 | 1 | 2 | 3 | 4 | 5;
|
|
26
|
-
//# sourceMappingURL=ece.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ece.d.ts","sourceRoot":"","sources":["../../src/calibration/ece.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAE7C;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,iBAAiB,EAAE,GAAG,MAAM,CAoCjE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,GACpB,SAAS,GAAG,UAAU,GAAG,SAAS,CAmBpC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAOvE"}
|
package/dist/calibration/ece.js
DELETED
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.calculateECE = calculateECE;
|
|
4
|
-
exports.assessOutcome = assessOutcome;
|
|
5
|
-
exports.inferTrueLevel = inferTrueLevel;
|
|
6
|
-
/**
|
|
7
|
-
* Expected Calibration Error (ECE).
|
|
8
|
-
* Measures how well predicted levels match declared levels.
|
|
9
|
-
*
|
|
10
|
-
* ECE = Σᵢ (nᵢ/N) × |accuracy(binᵢ) - confidence(binᵢ)|
|
|
11
|
-
*/
|
|
12
|
-
function calculateECE(samples) {
|
|
13
|
-
if (samples.length === 0)
|
|
14
|
-
return 0;
|
|
15
|
-
// Group by declared level
|
|
16
|
-
const bins = new Map();
|
|
17
|
-
for (let level = 0; level <= 5; level++) {
|
|
18
|
-
bins.set(level, []);
|
|
19
|
-
}
|
|
20
|
-
for (const sample of samples) {
|
|
21
|
-
const levelSamples = bins.get(sample.declaredLevel) || [];
|
|
22
|
-
levelSamples.push(sample);
|
|
23
|
-
bins.set(sample.declaredLevel, levelSamples);
|
|
24
|
-
}
|
|
25
|
-
// Expected score range for each level
|
|
26
|
-
const expectedRanges = {
|
|
27
|
-
5: { min: 0.90, max: 1.00 },
|
|
28
|
-
4: { min: 0.80, max: 0.90 },
|
|
29
|
-
3: { min: 0.65, max: 0.80 },
|
|
30
|
-
2: { min: 0.50, max: 0.70 },
|
|
31
|
-
1: { min: 0.30, max: 0.55 },
|
|
32
|
-
0: { min: 0.00, max: 0.40 },
|
|
33
|
-
};
|
|
34
|
-
let ece = 0;
|
|
35
|
-
for (const [level, levelSamples] of bins) {
|
|
36
|
-
if (levelSamples.length === 0)
|
|
37
|
-
continue;
|
|
38
|
-
const expected = expectedRanges[level];
|
|
39
|
-
const expectedCenter = (expected.min + expected.max) / 2;
|
|
40
|
-
const actualMean = levelSamples.reduce((sum, s) => sum + s.vibeScore, 0) / levelSamples.length;
|
|
41
|
-
ece += (levelSamples.length / samples.length) * Math.abs(actualMean - expectedCenter);
|
|
42
|
-
}
|
|
43
|
-
return Math.round(ece * 1000) / 1000;
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Assess if a score matches the expected range for a level.
|
|
47
|
-
*/
|
|
48
|
-
function assessOutcome(vibeScore, declaredLevel) {
|
|
49
|
-
const expectedRanges = {
|
|
50
|
-
5: { min: 0.90, max: 1.00 },
|
|
51
|
-
4: { min: 0.80, max: 0.90 },
|
|
52
|
-
3: { min: 0.65, max: 0.80 },
|
|
53
|
-
2: { min: 0.50, max: 0.70 },
|
|
54
|
-
1: { min: 0.30, max: 0.55 },
|
|
55
|
-
0: { min: 0.00, max: 0.40 },
|
|
56
|
-
};
|
|
57
|
-
const expected = expectedRanges[declaredLevel];
|
|
58
|
-
if (vibeScore >= expected.min && vibeScore <= expected.max) {
|
|
59
|
-
return 'correct';
|
|
60
|
-
}
|
|
61
|
-
else if (vibeScore > expected.max) {
|
|
62
|
-
return 'too_low'; // Level was too conservative
|
|
63
|
-
}
|
|
64
|
-
else {
|
|
65
|
-
return 'too_high'; // Level was too aggressive
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* Infer the "true" vibe level from an actual vibe score.
|
|
70
|
-
* This is used to generate training labels for the model.
|
|
71
|
-
*
|
|
72
|
-
* Maps score ranges to levels:
|
|
73
|
-
* - 0.90-1.00 → 5 (Elite flow)
|
|
74
|
-
* - 0.80-0.90 → 4 (High flow)
|
|
75
|
-
* - 0.65-0.80 → 3 (Balanced)
|
|
76
|
-
* - 0.50-0.65 → 2 (AI-Augmented)
|
|
77
|
-
* - 0.30-0.50 → 1 (Human-Led)
|
|
78
|
-
* - 0.00-0.30 → 0 (Manual)
|
|
79
|
-
*/
|
|
80
|
-
function inferTrueLevel(vibeScore) {
|
|
81
|
-
if (vibeScore >= 0.90)
|
|
82
|
-
return 5;
|
|
83
|
-
if (vibeScore >= 0.80)
|
|
84
|
-
return 4;
|
|
85
|
-
if (vibeScore >= 0.65)
|
|
86
|
-
return 3;
|
|
87
|
-
if (vibeScore >= 0.50)
|
|
88
|
-
return 2;
|
|
89
|
-
if (vibeScore >= 0.30)
|
|
90
|
-
return 1;
|
|
91
|
-
return 0;
|
|
92
|
-
}
|
|
93
|
-
//# sourceMappingURL=ece.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ece.js","sourceRoot":"","sources":["../../src/calibration/ece.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/calibration/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,SAAS,EAAE,kBAAkB,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACnH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.inferTrueLevel = exports.assessOutcome = exports.calculateECE = exports.forceRetrain = exports.retrain = exports.getCalibrationPath = exports.addSample = exports.saveCalibration = exports.loadCalibration = void 0;
|
|
4
|
-
var storage_1 = require("./storage");
|
|
5
|
-
Object.defineProperty(exports, "loadCalibration", { enumerable: true, get: function () { return storage_1.loadCalibration; } });
|
|
6
|
-
Object.defineProperty(exports, "saveCalibration", { enumerable: true, get: function () { return storage_1.saveCalibration; } });
|
|
7
|
-
Object.defineProperty(exports, "addSample", { enumerable: true, get: function () { return storage_1.addSample; } });
|
|
8
|
-
Object.defineProperty(exports, "getCalibrationPath", { enumerable: true, get: function () { return storage_1.getCalibrationPath; } });
|
|
9
|
-
Object.defineProperty(exports, "retrain", { enumerable: true, get: function () { return storage_1.retrain; } });
|
|
10
|
-
Object.defineProperty(exports, "forceRetrain", { enumerable: true, get: function () { return storage_1.forceRetrain; } });
|
|
11
|
-
var ece_1 = require("./ece");
|
|
12
|
-
Object.defineProperty(exports, "calculateECE", { enumerable: true, get: function () { return ece_1.calculateECE; } });
|
|
13
|
-
Object.defineProperty(exports, "assessOutcome", { enumerable: true, get: function () { return ece_1.assessOutcome; } });
|
|
14
|
-
Object.defineProperty(exports, "inferTrueLevel", { enumerable: true, get: function () { return ece_1.inferTrueLevel; } });
|
|
15
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/calibration/index.ts"],"names":[],"mappings":";;;AAAA,qCAAmH;AAA1G,0GAAA,eAAe,OAAA;AAAE,0GAAA,eAAe,OAAA;AAAE,oGAAA,SAAS,OAAA;AAAE,6GAAA,kBAAkB,OAAA;AAAE,kGAAA,OAAO,OAAA;AAAE,uGAAA,YAAY,OAAA;AAC/F,6BAAoE;AAA3D,mGAAA,YAAY,OAAA;AAAE,oGAAA,aAAa,OAAA;AAAE,qGAAA,cAAc,OAAA"}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { CalibrationState, CalibrationSample } from '../types';
|
|
2
|
-
/**
|
|
3
|
-
* Get calibration file path for a repository.
|
|
4
|
-
*/
|
|
5
|
-
export declare function getCalibrationPath(repoPath: string): string;
|
|
6
|
-
/**
|
|
7
|
-
* Load calibration state from disk.
|
|
8
|
-
*/
|
|
9
|
-
export declare function loadCalibration(repoPath: string): CalibrationState;
|
|
10
|
-
/**
|
|
11
|
-
* Save calibration state to disk.
|
|
12
|
-
*/
|
|
13
|
-
export declare function saveCalibration(repoPath: string, state: CalibrationState): void;
|
|
14
|
-
/**
|
|
15
|
-
* Add a calibration sample and potentially trigger retraining.
|
|
16
|
-
*
|
|
17
|
-
* Retraining is triggered when:
|
|
18
|
-
* 1. Sample count is a multiple of RETRAIN_SAMPLE_INTERVAL, OR
|
|
19
|
-
* 2. ECE exceeds RETRAIN_ECE_THRESHOLD
|
|
20
|
-
*
|
|
21
|
-
* Returns updated state with potentially new weights.
|
|
22
|
-
*/
|
|
23
|
-
export declare function addSample(repoPath: string, sample: CalibrationSample): CalibrationState;
|
|
24
|
-
/**
|
|
25
|
-
* Retrain the model using all accumulated samples.
|
|
26
|
-
*
|
|
27
|
-
* Uses batch partial fit with inferred true levels from vibe scores.
|
|
28
|
-
*/
|
|
29
|
-
export declare function retrain(state: CalibrationState): CalibrationState;
|
|
30
|
-
/**
|
|
31
|
-
* Force retraining (manual trigger).
|
|
32
|
-
*/
|
|
33
|
-
export declare function forceRetrain(repoPath: string): CalibrationState;
|
|
34
|
-
//# sourceMappingURL=storage.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/calibration/storage.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAyB/D;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,CAoBlE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAS/E;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CACvB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,iBAAiB,GACxB,gBAAgB,CAmBlB;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,gBAAgB,GAAG,gBAAgB,CAmCjE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,CAQ/D"}
|
|
@@ -1,188 +0,0 @@
|
|
|
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.getCalibrationPath = getCalibrationPath;
|
|
37
|
-
exports.loadCalibration = loadCalibration;
|
|
38
|
-
exports.saveCalibration = saveCalibration;
|
|
39
|
-
exports.addSample = addSample;
|
|
40
|
-
exports.retrain = retrain;
|
|
41
|
-
exports.forceRetrain = forceRetrain;
|
|
42
|
-
const fs = __importStar(require("fs"));
|
|
43
|
-
const path = __importStar(require("path"));
|
|
44
|
-
const ordered_logistic_1 = require("../recommend/ordered-logistic");
|
|
45
|
-
const ece_1 = require("./ece");
|
|
46
|
-
const CALIBRATION_DIR = '.vibe-check';
|
|
47
|
-
const CALIBRATION_FILE = 'calibration.json';
|
|
48
|
-
/**
|
|
49
|
-
* Retraining triggers for the calibration model.
|
|
50
|
-
*
|
|
51
|
-
* RETRAIN_SAMPLE_INTERVAL (10): Retrain every 10 samples to incorporate
|
|
52
|
-
* new data. Balances learning speed vs. computational cost.
|
|
53
|
-
*
|
|
54
|
-
* RETRAIN_ECE_THRESHOLD (0.15): If Expected Calibration Error exceeds 15%,
|
|
55
|
-
* the model's predictions are poorly calibrated. 15% chosen as "noticeable
|
|
56
|
-
* but not catastrophic" miscalibration.
|
|
57
|
-
*
|
|
58
|
-
* Note: With 14 parameters (9 weights + 5 thresholds), even 10 samples is
|
|
59
|
-
* severely underfitting. 20+ samples recommended for reliability.
|
|
60
|
-
*
|
|
61
|
-
* These values are NOT empirically optimized.
|
|
62
|
-
*/
|
|
63
|
-
const RETRAIN_SAMPLE_INTERVAL = 10;
|
|
64
|
-
const RETRAIN_ECE_THRESHOLD = 0.15;
|
|
65
|
-
/**
|
|
66
|
-
* Get calibration file path for a repository.
|
|
67
|
-
*/
|
|
68
|
-
function getCalibrationPath(repoPath) {
|
|
69
|
-
return path.join(repoPath, CALIBRATION_DIR, CALIBRATION_FILE);
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* Load calibration state from disk.
|
|
73
|
-
*/
|
|
74
|
-
function loadCalibration(repoPath) {
|
|
75
|
-
const filePath = getCalibrationPath(repoPath);
|
|
76
|
-
if (fs.existsSync(filePath)) {
|
|
77
|
-
try {
|
|
78
|
-
const data = fs.readFileSync(filePath, 'utf-8');
|
|
79
|
-
const state = JSON.parse(data);
|
|
80
|
-
// Ensure dates are Date objects
|
|
81
|
-
state.lastUpdated = new Date(state.lastUpdated);
|
|
82
|
-
state.samples = state.samples.map((s) => ({
|
|
83
|
-
...s,
|
|
84
|
-
timestamp: new Date(s.timestamp),
|
|
85
|
-
}));
|
|
86
|
-
return state;
|
|
87
|
-
}
|
|
88
|
-
catch {
|
|
89
|
-
return defaultCalibrationState();
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
return defaultCalibrationState();
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* Save calibration state to disk.
|
|
96
|
-
*/
|
|
97
|
-
function saveCalibration(repoPath, state) {
|
|
98
|
-
const dirPath = path.join(repoPath, CALIBRATION_DIR);
|
|
99
|
-
const filePath = getCalibrationPath(repoPath);
|
|
100
|
-
if (!fs.existsSync(dirPath)) {
|
|
101
|
-
fs.mkdirSync(dirPath, { recursive: true });
|
|
102
|
-
}
|
|
103
|
-
fs.writeFileSync(filePath, JSON.stringify(state, null, 2));
|
|
104
|
-
}
|
|
105
|
-
/**
|
|
106
|
-
* Add a calibration sample and potentially trigger retraining.
|
|
107
|
-
*
|
|
108
|
-
* Retraining is triggered when:
|
|
109
|
-
* 1. Sample count is a multiple of RETRAIN_SAMPLE_INTERVAL, OR
|
|
110
|
-
* 2. ECE exceeds RETRAIN_ECE_THRESHOLD
|
|
111
|
-
*
|
|
112
|
-
* Returns updated state with potentially new weights.
|
|
113
|
-
*/
|
|
114
|
-
function addSample(repoPath, sample) {
|
|
115
|
-
const state = loadCalibration(repoPath);
|
|
116
|
-
state.samples.push(sample);
|
|
117
|
-
state.lastUpdated = new Date();
|
|
118
|
-
// Check if retraining is needed
|
|
119
|
-
const shouldRetrain = state.samples.length % RETRAIN_SAMPLE_INTERVAL === 0 ||
|
|
120
|
-
state.ece > RETRAIN_ECE_THRESHOLD;
|
|
121
|
-
if (shouldRetrain && state.samples.length >= 5) {
|
|
122
|
-
const updatedState = retrain(state);
|
|
123
|
-
saveCalibration(repoPath, updatedState);
|
|
124
|
-
return updatedState;
|
|
125
|
-
}
|
|
126
|
-
// Just save without retraining
|
|
127
|
-
saveCalibration(repoPath, state);
|
|
128
|
-
return state;
|
|
129
|
-
}
|
|
130
|
-
/**
|
|
131
|
-
* Retrain the model using all accumulated samples.
|
|
132
|
-
*
|
|
133
|
-
* Uses batch partial fit with inferred true levels from vibe scores.
|
|
134
|
-
*/
|
|
135
|
-
function retrain(state) {
|
|
136
|
-
if (state.samples.length < 5) {
|
|
137
|
-
return state; // Not enough data
|
|
138
|
-
}
|
|
139
|
-
// Prepare training data: use vibeScore to infer "true" level
|
|
140
|
-
const trainingData = state.samples.map((sample) => ({
|
|
141
|
-
features: sample.features,
|
|
142
|
-
trueLevel: (0, ece_1.inferTrueLevel)(sample.vibeScore),
|
|
143
|
-
}));
|
|
144
|
-
// Start from default model (or could start from current weights)
|
|
145
|
-
const initialModel = {
|
|
146
|
-
weights: [...ordered_logistic_1.DEFAULT_MODEL.weights],
|
|
147
|
-
thresholds: [...ordered_logistic_1.DEFAULT_MODEL.thresholds],
|
|
148
|
-
};
|
|
149
|
-
// Train with multiple epochs for better convergence
|
|
150
|
-
let model = initialModel;
|
|
151
|
-
const epochs = Math.min(10, Math.ceil(50 / state.samples.length));
|
|
152
|
-
for (let epoch = 0; epoch < epochs; epoch++) {
|
|
153
|
-
model = (0, ordered_logistic_1.batchPartialFit)(model, trainingData, 0.05);
|
|
154
|
-
}
|
|
155
|
-
// Calculate new ECE
|
|
156
|
-
const newEce = (0, ece_1.calculateECE)(state.samples);
|
|
157
|
-
return {
|
|
158
|
-
...state,
|
|
159
|
-
weights: model.weights,
|
|
160
|
-
thresholds: model.thresholds,
|
|
161
|
-
ece: newEce,
|
|
162
|
-
lastUpdated: new Date(),
|
|
163
|
-
version: '2.1.0', // Bump version to indicate ML-learned weights
|
|
164
|
-
};
|
|
165
|
-
}
|
|
166
|
-
/**
|
|
167
|
-
* Force retraining (manual trigger).
|
|
168
|
-
*/
|
|
169
|
-
function forceRetrain(repoPath) {
|
|
170
|
-
const state = loadCalibration(repoPath);
|
|
171
|
-
if (state.samples.length < 5) {
|
|
172
|
-
return state;
|
|
173
|
-
}
|
|
174
|
-
const updatedState = retrain(state);
|
|
175
|
-
saveCalibration(repoPath, updatedState);
|
|
176
|
-
return updatedState;
|
|
177
|
-
}
|
|
178
|
-
function defaultCalibrationState() {
|
|
179
|
-
return {
|
|
180
|
-
samples: [],
|
|
181
|
-
weights: ordered_logistic_1.DEFAULT_MODEL.weights,
|
|
182
|
-
thresholds: ordered_logistic_1.DEFAULT_MODEL.thresholds,
|
|
183
|
-
ece: 0,
|
|
184
|
-
lastUpdated: new Date(),
|
|
185
|
-
version: '2.0.0',
|
|
186
|
-
};
|
|
187
|
-
}
|
|
188
|
-
//# sourceMappingURL=storage.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/calibration/storage.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Intervene Command - Record what broke your spiral
|
|
3
|
-
*
|
|
4
|
-
* Usage:
|
|
5
|
-
* vibe-check intervene <type> [options]
|
|
6
|
-
* vibe-check intervene --list
|
|
7
|
-
*
|
|
8
|
-
* Examples:
|
|
9
|
-
* vibe-check intervene TRACER_TEST
|
|
10
|
-
* vibe-check intervene BREAK --pattern SECRETS_AUTH --duration 45
|
|
11
|
-
* vibe-check intervene --list
|
|
12
|
-
*/
|
|
13
|
-
import { Command } from 'commander';
|
|
14
|
-
export declare function createInterveneCommand(): Command;
|
|
15
|
-
//# sourceMappingURL=intervene.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"intervene.d.ts","sourceRoot":"","sources":["../../src/commands/intervene.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuBpC,wBAAgB,sBAAsB,IAAI,OAAO,CAehD"}
|