@boshu2/vibe-check 1.3.0 → 1.3.1
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 +36 -2
- package/dist/cli.js +1 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/index.d.ts +1 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +3 -1
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/watch.d.ts +3 -0
- package/dist/commands/watch.d.ts.map +1 -0
- package/dist/commands/watch.js +182 -0
- package/dist/commands/watch.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -22,10 +22,43 @@ npx @boshu2/vibe-check
|
|
|
22
22
|
# Check your recent work
|
|
23
23
|
vibe-check --since "1 week ago"
|
|
24
24
|
|
|
25
|
-
#
|
|
26
|
-
vibe-check
|
|
25
|
+
# Watch mode - catch spirals in real-time
|
|
26
|
+
vibe-check watch
|
|
27
27
|
```
|
|
28
28
|
|
|
29
|
+
## Watch Mode (Real-Time Detection)
|
|
30
|
+
|
|
31
|
+
Catch spirals as they happen, not after:
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
vibe-check watch
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
VIBE-CHECK WATCH MODE
|
|
39
|
+
Monitoring /path/to/repo
|
|
40
|
+
Polling every 5s - Ctrl+C to stop
|
|
41
|
+
|
|
42
|
+
────────────────────────────────────────────────────────────
|
|
43
|
+
09:15 fix(auth) handle token refresh
|
|
44
|
+
09:18 fix(auth) add retry logic
|
|
45
|
+
09:22 fix(auth) increase timeout
|
|
46
|
+
|
|
47
|
+
⚠️ SPIRAL DETECTED
|
|
48
|
+
Component: auth
|
|
49
|
+
Fixes: 3 commits, 7 min
|
|
50
|
+
|
|
51
|
+
Consider:
|
|
52
|
+
• Step back and write a test
|
|
53
|
+
• Check the docs or ask for help
|
|
54
|
+
• Take a 5-minute break
|
|
55
|
+
────────────────────────────────────────────────────────────
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Options:
|
|
59
|
+
- `--quiet` - Only show warnings, not all commits
|
|
60
|
+
- `--interval <ms>` - Poll frequency (default: 5000ms)
|
|
61
|
+
|
|
29
62
|
## Example Output
|
|
30
63
|
|
|
31
64
|
```
|
|
@@ -135,6 +168,7 @@ Options:
|
|
|
135
168
|
-v, --verbose Verbose output
|
|
136
169
|
|
|
137
170
|
Commands:
|
|
171
|
+
watch Real-time spiral detection
|
|
138
172
|
start --level <n> Start session with declared level (0-5)
|
|
139
173
|
profile View your gamification profile
|
|
140
174
|
init-hook Install pre-push git hook
|
package/dist/cli.js
CHANGED
|
@@ -15,6 +15,7 @@ program.addCommand((0, commands_1.createAnalyzeCommand)());
|
|
|
15
15
|
program.addCommand((0, commands_1.createStartCommand)());
|
|
16
16
|
program.addCommand((0, commands_1.createProfileCommand)());
|
|
17
17
|
program.addCommand((0, commands_1.createInitHookCommand)());
|
|
18
|
+
program.addCommand((0, commands_1.createWatchCommand)());
|
|
18
19
|
// Default behavior: if no subcommand, run analyze with passed options
|
|
19
20
|
// This maintains backwards compatibility with v1.x usage
|
|
20
21
|
program
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,yCAAmJ;AAEnJ,8DAA8D;AAC9D,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAE/C,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,YAAY,CAAC;KAClB,WAAW,CAAC,6CAA6C,CAAC;KAC1D,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,kBAAkB;AAClB,OAAO,CAAC,UAAU,CAAC,IAAA,+BAAoB,GAAE,CAAC,CAAC;AAC3C,OAAO,CAAC,UAAU,CAAC,IAAA,6BAAkB,GAAE,CAAC,CAAC;AACzC,OAAO,CAAC,UAAU,CAAC,IAAA,+BAAoB,GAAE,CAAC,CAAC;AAC3C,OAAO,CAAC,UAAU,CAAC,IAAA,gCAAqB,GAAE,CAAC,CAAC;AAC5C,OAAO,CAAC,UAAU,CAAC,IAAA,6BAAkB,GAAE,CAAC,CAAC;AAEzC,sEAAsE;AACtE,yDAAyD;AACzD,OAAO;KACJ,MAAM,CAAC,gBAAgB,EAAE,8CAA8C,CAAC;KACxE,MAAM,CAAC,gBAAgB,EAAE,sCAAsC,CAAC;KAChE,MAAM,CAAC,qBAAqB,EAAE,yCAAyC,EAAE,UAAU,CAAC;KACpF,MAAM,CAAC,mBAAmB,EAAE,iBAAiB,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;KAC7D,MAAM,CAAC,eAAe,EAAE,qBAAqB,EAAE,KAAK,CAAC;KACrD,MAAM,CAAC,SAAS,EAAE,4CAA4C,EAAE,KAAK,CAAC;KACtE,MAAM,CAAC,qBAAqB,EAAE,4BAA4B,CAAC;KAC3D,MAAM,CAAC,cAAc,EAAE,mCAAmC,EAAE,KAAK,CAAC;KAClE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,wDAAwD;IACxD,MAAM,IAAA,qBAAU,EAAC;QACf,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
package/dist/commands/index.d.ts
CHANGED
|
@@ -2,4 +2,5 @@ export { createAnalyzeCommand, runAnalyze, AnalyzeOptions } from './analyze';
|
|
|
2
2
|
export { createStartCommand } from './start';
|
|
3
3
|
export { createProfileCommand } from './profile';
|
|
4
4
|
export { createInitHookCommand } from './init-hook';
|
|
5
|
+
export { createWatchCommand } from './watch';
|
|
5
6
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC"}
|
package/dist/commands/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createInitHookCommand = exports.createProfileCommand = exports.createStartCommand = exports.runAnalyze = exports.createAnalyzeCommand = void 0;
|
|
3
|
+
exports.createWatchCommand = exports.createInitHookCommand = exports.createProfileCommand = exports.createStartCommand = exports.runAnalyze = exports.createAnalyzeCommand = void 0;
|
|
4
4
|
var analyze_1 = require("./analyze");
|
|
5
5
|
Object.defineProperty(exports, "createAnalyzeCommand", { enumerable: true, get: function () { return analyze_1.createAnalyzeCommand; } });
|
|
6
6
|
Object.defineProperty(exports, "runAnalyze", { enumerable: true, get: function () { return analyze_1.runAnalyze; } });
|
|
@@ -10,4 +10,6 @@ var profile_1 = require("./profile");
|
|
|
10
10
|
Object.defineProperty(exports, "createProfileCommand", { enumerable: true, get: function () { return profile_1.createProfileCommand; } });
|
|
11
11
|
var init_hook_1 = require("./init-hook");
|
|
12
12
|
Object.defineProperty(exports, "createInitHookCommand", { enumerable: true, get: function () { return init_hook_1.createInitHookCommand; } });
|
|
13
|
+
var watch_1 = require("./watch");
|
|
14
|
+
Object.defineProperty(exports, "createWatchCommand", { enumerable: true, get: function () { return watch_1.createWatchCommand; } });
|
|
13
15
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":";;;AAAA,qCAA6E;AAApE,+GAAA,oBAAoB,OAAA;AAAE,qGAAA,UAAU,OAAA;AACzC,iCAA6C;AAApC,2GAAA,kBAAkB,OAAA;AAC3B,qCAAiD;AAAxC,+GAAA,oBAAoB,OAAA;AAC7B,yCAAoD;AAA3C,kHAAA,qBAAqB,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":";;;AAAA,qCAA6E;AAApE,+GAAA,oBAAoB,OAAA;AAAE,qGAAA,UAAU,OAAA;AACzC,iCAA6C;AAApC,2GAAA,kBAAkB,OAAA;AAC3B,qCAAiD;AAAxC,+GAAA,oBAAoB,OAAA;AAC7B,yCAAoD;AAA3C,kHAAA,qBAAqB,OAAA;AAC9B,iCAA6C;AAApC,2GAAA,kBAAkB,OAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../src/commands/watch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAepC,wBAAgB,kBAAkB,IAAI,OAAO,CAW5C"}
|
|
@@ -0,0 +1,182 @@
|
|
|
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.createWatchCommand = createWatchCommand;
|
|
7
|
+
const commander_1 = require("commander");
|
|
8
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
9
|
+
const git_1 = require("../git");
|
|
10
|
+
const SPIRAL_THRESHOLD = 3; // commits before warning
|
|
11
|
+
const POLL_INTERVAL = 5000; // 5 seconds
|
|
12
|
+
const RECENT_WINDOW = 10; // track last N commits
|
|
13
|
+
function createWatchCommand() {
|
|
14
|
+
const cmd = new commander_1.Command('watch')
|
|
15
|
+
.description('Watch for spiral patterns in real-time')
|
|
16
|
+
.option('-r, --repo <path>', 'Repository path', process.cwd())
|
|
17
|
+
.option('-i, --interval <ms>', 'Poll interval in milliseconds', '5000')
|
|
18
|
+
.option('-q, --quiet', 'Only show warnings, not all commits', false)
|
|
19
|
+
.action(async (options) => {
|
|
20
|
+
await runWatch(options);
|
|
21
|
+
});
|
|
22
|
+
return cmd;
|
|
23
|
+
}
|
|
24
|
+
async function runWatch(options) {
|
|
25
|
+
const interval = parseInt(options.interval, 10) || POLL_INTERVAL;
|
|
26
|
+
if (!(await (0, git_1.isGitRepo)(options.repo))) {
|
|
27
|
+
console.error(chalk_1.default.red(`Not a git repository: ${options.repo}`));
|
|
28
|
+
process.exit(1);
|
|
29
|
+
}
|
|
30
|
+
console.log('');
|
|
31
|
+
console.log(chalk_1.default.bold.cyan('VIBE-CHECK WATCH MODE'));
|
|
32
|
+
console.log(chalk_1.default.gray(`Monitoring ${options.repo}`));
|
|
33
|
+
console.log(chalk_1.default.gray(`Polling every ${interval / 1000}s - Ctrl+C to stop`));
|
|
34
|
+
console.log('');
|
|
35
|
+
console.log(chalk_1.default.cyan('─'.repeat(60)));
|
|
36
|
+
const state = {
|
|
37
|
+
lastCommitHash: null,
|
|
38
|
+
recentCommits: [],
|
|
39
|
+
spiralWarnings: new Map(),
|
|
40
|
+
};
|
|
41
|
+
// Get initial state
|
|
42
|
+
const initialCommits = await (0, git_1.getCommits)(options.repo, '1 hour ago');
|
|
43
|
+
if (initialCommits.length > 0) {
|
|
44
|
+
state.lastCommitHash = initialCommits[0].hash;
|
|
45
|
+
state.recentCommits = initialCommits.slice(0, RECENT_WINDOW);
|
|
46
|
+
if (!options.quiet) {
|
|
47
|
+
console.log(chalk_1.default.gray(` Loaded ${initialCommits.length} recent commits`));
|
|
48
|
+
console.log('');
|
|
49
|
+
}
|
|
50
|
+
// Check for existing spirals
|
|
51
|
+
checkForSpirals(state, options.quiet);
|
|
52
|
+
}
|
|
53
|
+
// Poll for new commits
|
|
54
|
+
const poll = async () => {
|
|
55
|
+
try {
|
|
56
|
+
const commits = await (0, git_1.getCommits)(options.repo, '1 hour ago');
|
|
57
|
+
if (commits.length === 0)
|
|
58
|
+
return;
|
|
59
|
+
const latestHash = commits[0].hash;
|
|
60
|
+
// Check if there are new commits
|
|
61
|
+
if (latestHash !== state.lastCommitHash) {
|
|
62
|
+
// Find new commits
|
|
63
|
+
const newCommits = [];
|
|
64
|
+
for (const commit of commits) {
|
|
65
|
+
if (commit.hash === state.lastCommitHash)
|
|
66
|
+
break;
|
|
67
|
+
newCommits.push(commit);
|
|
68
|
+
}
|
|
69
|
+
if (newCommits.length > 0) {
|
|
70
|
+
// Add new commits to recent list
|
|
71
|
+
state.recentCommits = [
|
|
72
|
+
...newCommits,
|
|
73
|
+
...state.recentCommits,
|
|
74
|
+
].slice(0, RECENT_WINDOW);
|
|
75
|
+
state.lastCommitHash = latestHash;
|
|
76
|
+
// Display new commits
|
|
77
|
+
for (const commit of newCommits.reverse()) {
|
|
78
|
+
displayCommit(commit, options.quiet);
|
|
79
|
+
}
|
|
80
|
+
// Check for spirals
|
|
81
|
+
checkForSpirals(state, options.quiet);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
// Silently ignore polling errors
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
// Start polling
|
|
90
|
+
setInterval(poll, interval);
|
|
91
|
+
// Keep process alive
|
|
92
|
+
process.on('SIGINT', () => {
|
|
93
|
+
console.log('');
|
|
94
|
+
console.log(chalk_1.default.gray('Watch mode stopped.'));
|
|
95
|
+
process.exit(0);
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
function displayCommit(commit, quiet) {
|
|
99
|
+
if (quiet && commit.type !== 'fix')
|
|
100
|
+
return;
|
|
101
|
+
const time = commit.date.toLocaleTimeString('en-US', {
|
|
102
|
+
hour: '2-digit',
|
|
103
|
+
minute: '2-digit'
|
|
104
|
+
});
|
|
105
|
+
const typeColors = {
|
|
106
|
+
feat: chalk_1.default.green,
|
|
107
|
+
fix: chalk_1.default.yellow,
|
|
108
|
+
docs: chalk_1.default.blue,
|
|
109
|
+
chore: chalk_1.default.gray,
|
|
110
|
+
refactor: chalk_1.default.magenta,
|
|
111
|
+
test: chalk_1.default.cyan,
|
|
112
|
+
style: chalk_1.default.gray,
|
|
113
|
+
other: chalk_1.default.white,
|
|
114
|
+
};
|
|
115
|
+
const colorFn = typeColors[commit.type] || chalk_1.default.white;
|
|
116
|
+
const scope = commit.scope ? `(${commit.scope})` : '';
|
|
117
|
+
const shortMsg = commit.message.length > 50
|
|
118
|
+
? commit.message.slice(0, 47) + '...'
|
|
119
|
+
: commit.message;
|
|
120
|
+
console.log(` ${chalk_1.default.gray(time)} ${colorFn(commit.type)}${chalk_1.default.gray(scope)} ${shortMsg}`);
|
|
121
|
+
}
|
|
122
|
+
function checkForSpirals(state, quiet) {
|
|
123
|
+
// Group recent commits by component (scope or first word of message)
|
|
124
|
+
const byComponent = new Map();
|
|
125
|
+
for (const commit of state.recentCommits) {
|
|
126
|
+
if (commit.type !== 'fix')
|
|
127
|
+
continue;
|
|
128
|
+
const component = commit.scope || extractComponent(commit.message);
|
|
129
|
+
if (!component)
|
|
130
|
+
continue;
|
|
131
|
+
const existing = byComponent.get(component) || [];
|
|
132
|
+
existing.push(commit);
|
|
133
|
+
byComponent.set(component, existing);
|
|
134
|
+
}
|
|
135
|
+
// Check for spirals (3+ consecutive fixes on same component)
|
|
136
|
+
for (const [component, fixes] of byComponent) {
|
|
137
|
+
if (fixes.length >= SPIRAL_THRESHOLD) {
|
|
138
|
+
const prevWarnings = state.spiralWarnings.get(component) || 0;
|
|
139
|
+
// Only warn if this is new or escalating
|
|
140
|
+
if (fixes.length > prevWarnings) {
|
|
141
|
+
state.spiralWarnings.set(component, fixes.length);
|
|
142
|
+
displaySpiralWarning(component, fixes);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
function extractComponent(message) {
|
|
148
|
+
// Try to extract component from commit message
|
|
149
|
+
// e.g., "fix auth flow" -> "auth"
|
|
150
|
+
// e.g., "fix: handle null case" -> null (too generic)
|
|
151
|
+
const words = message.toLowerCase()
|
|
152
|
+
.replace(/^fix[:\s]*/, '')
|
|
153
|
+
.split(/\s+/);
|
|
154
|
+
const skipWords = new Set([
|
|
155
|
+
'the', 'a', 'an', 'for', 'in', 'on', 'to', 'with', 'and', 'or',
|
|
156
|
+
'bug', 'issue', 'error', 'problem', 'handle', 'add', 'remove',
|
|
157
|
+
'update', 'change', 'null', 'undefined', 'case', 'typo'
|
|
158
|
+
]);
|
|
159
|
+
for (const word of words) {
|
|
160
|
+
if (word.length > 2 && !skipWords.has(word)) {
|
|
161
|
+
return word;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return null;
|
|
165
|
+
}
|
|
166
|
+
function displaySpiralWarning(component, fixes) {
|
|
167
|
+
const duration = fixes.length > 1
|
|
168
|
+
? Math.round((fixes[0].date.getTime() - fixes[fixes.length - 1].date.getTime()) / 60000)
|
|
169
|
+
: 0;
|
|
170
|
+
console.log('');
|
|
171
|
+
console.log(chalk_1.default.bold.yellow(' ⚠️ SPIRAL DETECTED'));
|
|
172
|
+
console.log(chalk_1.default.yellow(` Component: ${component}`));
|
|
173
|
+
console.log(chalk_1.default.yellow(` Fixes: ${fixes.length} commits${duration > 0 ? `, ${duration} min` : ''}`));
|
|
174
|
+
console.log('');
|
|
175
|
+
console.log(chalk_1.default.gray(' Consider:'));
|
|
176
|
+
console.log(chalk_1.default.gray(' • Step back and write a test'));
|
|
177
|
+
console.log(chalk_1.default.gray(' • Check the docs or ask for help'));
|
|
178
|
+
console.log(chalk_1.default.gray(' • Take a 5-minute break'));
|
|
179
|
+
console.log('');
|
|
180
|
+
console.log(chalk_1.default.cyan('─'.repeat(60)));
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=watch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../../src/commands/watch.ts"],"names":[],"mappings":"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"}
|