@boshu2/vibe-check 1.6.2 → 1.8.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/bundles/actionable-coaching-plan-2025-12-02.md +209 -0
- package/.agents/bundles/automatic-learning-cadence-plan-2025-12-02.md +1297 -0
- package/.agents/bundles/automatic-learning-cadence-research-2025-12-02.md +481 -0
- package/.agents/bundles/dashboard-data-quality-plan.md +458 -0
- package/.agents/bundles/rating-scoring-alignment-plan.md +427 -0
- package/.agents/bundles/rpi-session-capture-plan-2025-12-02.md +693 -0
- package/.agents/bundles/rpi-session-capture-research-2025-12-02.md +433 -0
- package/.agents/bundles/session-integration-plan-2025-12-02.md +144 -0
- package/.agents/plans/git-forensics-enhancement-2025-12-05.md +493 -0
- package/.claude/skills/typescript-review.md +152 -0
- package/CHANGELOG.md +53 -0
- package/CLAUDE.md +79 -3
- package/Makefile +160 -0
- package/README.md +141 -155
- package/SECURITY.md +5 -1
- package/assets/logo-dark.svg +47 -0
- package/assets/logo.svg +47 -0
- package/claude-progress.json +54 -4
- package/claude-progress.txt +114 -0
- package/dashboard/app.js +699 -66
- package/dashboard/chart.min.js +20 -0
- package/dashboard/dashboard-data.js +764 -0
- package/dashboard/dashboard-data.json +182 -71
- package/dashboard/index.html +139 -14
- package/dashboard/styles.css +579 -4
- package/dist/analyzers/patterns.d.ts +62 -0
- package/dist/analyzers/patterns.d.ts.map +1 -0
- package/dist/analyzers/patterns.js +103 -0
- package/dist/analyzers/patterns.js.map +1 -0
- package/dist/analyzers/quality.d.ts +58 -0
- package/dist/analyzers/quality.d.ts.map +1 -0
- package/dist/analyzers/quality.js +114 -0
- package/dist/analyzers/quality.js.map +1 -0
- package/dist/analyzers/sessions.d.ts +45 -0
- package/dist/analyzers/sessions.d.ts.map +1 -0
- package/dist/analyzers/sessions.js +123 -0
- package/dist/analyzers/sessions.js.map +1 -0
- package/dist/cli.js +5 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/analyze.d.ts.map +1 -1
- package/dist/commands/analyze.js +43 -2
- package/dist/commands/analyze.js.map +1 -1
- package/dist/commands/dashboard.js +4 -1
- package/dist/commands/dashboard.js.map +1 -1
- package/dist/commands/forensics.d.ts +29 -0
- package/dist/commands/forensics.d.ts.map +1 -0
- package/dist/commands/forensics.js +213 -0
- package/dist/commands/forensics.js.map +1 -0
- package/dist/commands/index.d.ts +5 -1
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +13 -3
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/insights.d.ts +3 -0
- package/dist/commands/insights.d.ts.map +1 -0
- package/dist/commands/insights.js +120 -0
- package/dist/commands/insights.js.map +1 -0
- package/dist/commands/learn.d.ts +3 -0
- package/dist/commands/learn.d.ts.map +1 -0
- package/dist/commands/learn.js +161 -0
- package/dist/commands/learn.js.map +1 -0
- package/dist/commands/lesson.d.ts +8 -0
- package/dist/commands/lesson.d.ts.map +1 -0
- package/dist/commands/lesson.js +206 -0
- package/dist/commands/lesson.js.map +1 -0
- package/dist/commands/pipeline.d.ts +3 -0
- package/dist/commands/pipeline.d.ts.map +1 -0
- package/dist/commands/pipeline.js +485 -0
- package/dist/commands/pipeline.js.map +1 -0
- package/dist/commands/profile.d.ts +0 -1
- package/dist/commands/profile.d.ts.map +1 -1
- package/dist/commands/profile.js +3 -206
- package/dist/commands/profile.js.map +1 -1
- package/dist/commands/session.d.ts +51 -0
- package/dist/commands/session.d.ts.map +1 -0
- package/dist/commands/session.js +599 -0
- package/dist/commands/session.js.map +1 -0
- package/dist/commands/sessions.d.ts +20 -0
- package/dist/commands/sessions.d.ts.map +1 -0
- package/dist/commands/sessions.js +201 -0
- package/dist/commands/sessions.js.map +1 -0
- package/dist/commands/watch.d.ts.map +1 -1
- package/dist/commands/watch.js +48 -7
- package/dist/commands/watch.js.map +1 -1
- package/dist/gamification/index.d.ts +1 -3
- package/dist/gamification/index.d.ts.map +1 -1
- package/dist/gamification/index.js +2 -5
- package/dist/gamification/index.js.map +1 -1
- package/dist/gamification/pattern-memory.d.ts +1 -1
- package/dist/gamification/pattern-memory.d.ts.map +1 -1
- package/dist/gamification/pattern-memory.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 +2 -15
- package/dist/gamification/profile.js.map +1 -1
- package/dist/gamification/types.d.ts +8 -2
- package/dist/gamification/types.d.ts.map +1 -1
- package/dist/gamification/types.js.map +1 -1
- package/dist/insights/index.d.ts.map +1 -1
- package/dist/insights/index.js +16 -4
- package/dist/insights/index.js.map +1 -1
- package/dist/insights/types.d.ts +14 -0
- package/dist/insights/types.d.ts.map +1 -1
- package/dist/learning/cadence.d.ts +15 -0
- package/dist/learning/cadence.d.ts.map +1 -0
- package/dist/learning/cadence.js +130 -0
- package/dist/learning/cadence.js.map +1 -0
- package/dist/learning/index.d.ts +19 -0
- package/dist/learning/index.d.ts.map +1 -0
- package/dist/learning/index.js +35 -0
- package/dist/learning/index.js.map +1 -0
- package/dist/learning/lessons-storage.d.ts +48 -0
- package/dist/learning/lessons-storage.d.ts.map +1 -0
- package/dist/learning/lessons-storage.js +266 -0
- package/dist/learning/lessons-storage.js.map +1 -0
- package/dist/learning/lessons-types.d.ts +83 -0
- package/dist/learning/lessons-types.d.ts.map +1 -0
- package/dist/learning/lessons-types.js +15 -0
- package/dist/learning/lessons-types.js.map +1 -0
- package/dist/learning/nudges.d.ts +20 -0
- package/dist/learning/nudges.d.ts.map +1 -0
- package/dist/learning/nudges.js +68 -0
- package/dist/learning/nudges.js.map +1 -0
- package/dist/learning/retrospective.d.ts +27 -0
- package/dist/learning/retrospective.d.ts.map +1 -0
- package/dist/learning/retrospective.js +184 -0
- package/dist/learning/retrospective.js.map +1 -0
- package/dist/learning/storage.d.ts +44 -0
- package/dist/learning/storage.d.ts.map +1 -0
- package/dist/learning/storage.js +194 -0
- package/dist/learning/storage.js.map +1 -0
- package/dist/learning/surfacing.d.ts +36 -0
- package/dist/learning/surfacing.d.ts.map +1 -0
- package/dist/learning/surfacing.js +255 -0
- package/dist/learning/surfacing.js.map +1 -0
- package/dist/learning/synthesis.d.ts +17 -0
- package/dist/learning/synthesis.d.ts.map +1 -0
- package/dist/learning/synthesis.js +293 -0
- package/dist/learning/synthesis.js.map +1 -0
- package/dist/learning/types.d.ts +60 -0
- package/dist/learning/types.d.ts.map +1 -0
- package/dist/learning/types.js +17 -0
- package/dist/learning/types.js.map +1 -0
- package/dist/storage/index.d.ts +1 -0
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +11 -1
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/spiral-history.d.ts +62 -0
- package/dist/storage/spiral-history.d.ts.map +1 -0
- package/dist/storage/spiral-history.js +265 -0
- package/dist/storage/spiral-history.js.map +1 -0
- package/docs/ARCHITECTURE.md +2 -10
- package/docs/GAMIFICATION.md +19 -266
- package/docs/METRICS.md +528 -0
- package/docs/VIBE-ECOSYSTEM.md +12 -78
- package/feature-list.json +141 -68
- package/package.json +1 -1
|
@@ -0,0 +1,599 @@
|
|
|
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
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.createSessionCommand = createSessionCommand;
|
|
40
|
+
exports.runSessionStartCli = runSessionStartCli;
|
|
41
|
+
exports.runSessionEndCli = runSessionEndCli;
|
|
42
|
+
const commander_1 = require("commander");
|
|
43
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
44
|
+
const fs = __importStar(require("fs"));
|
|
45
|
+
const path = __importStar(require("path"));
|
|
46
|
+
const git_1 = require("../git");
|
|
47
|
+
const metrics_1 = require("../metrics");
|
|
48
|
+
const file_churn_1 = require("../metrics/file-churn");
|
|
49
|
+
const time_spiral_1 = require("../metrics/time-spiral");
|
|
50
|
+
const velocity_anomaly_1 = require("../metrics/velocity-anomaly");
|
|
51
|
+
const code_stability_1 = require("../metrics/code-stability");
|
|
52
|
+
const score_1 = require("../score");
|
|
53
|
+
const spiral_history_1 = require("../storage/spiral-history");
|
|
54
|
+
// Session file stored in .vibe-check/active-session.json
|
|
55
|
+
const ACTIVE_SESSION_FILE = '.vibe-check/active-session.json';
|
|
56
|
+
// Known failure patterns and their detection criteria
|
|
57
|
+
const FAILURE_PATTERNS = [
|
|
58
|
+
{
|
|
59
|
+
id: 'debug_spiral',
|
|
60
|
+
name: 'Debug Spiral',
|
|
61
|
+
detect: (metrics, spirals) => spirals >= 2,
|
|
62
|
+
avoided: (metrics, spirals) => spirals === 0 && metrics.rework_ratio < 30,
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
id: 'context_amnesia',
|
|
66
|
+
name: 'Context Amnesia',
|
|
67
|
+
detect: (metrics) => metrics.rework_ratio > 50,
|
|
68
|
+
avoided: (metrics) => metrics.rework_ratio < 20,
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
id: 'velocity_crash',
|
|
72
|
+
name: 'Velocity Crash',
|
|
73
|
+
detect: (metrics) => metrics.iteration_velocity < 1,
|
|
74
|
+
avoided: (metrics) => metrics.iteration_velocity > 3,
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
id: 'trust_erosion',
|
|
78
|
+
name: 'Trust Erosion',
|
|
79
|
+
detect: (metrics) => metrics.trust_pass_rate < 60,
|
|
80
|
+
avoided: (metrics) => metrics.trust_pass_rate > 85,
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
id: 'flow_disruption',
|
|
84
|
+
name: 'Flow Disruption',
|
|
85
|
+
detect: (metrics) => metrics.flow_efficiency < 50,
|
|
86
|
+
avoided: (metrics) => metrics.flow_efficiency > 80,
|
|
87
|
+
},
|
|
88
|
+
];
|
|
89
|
+
function getActiveSessionPath(repoPath) {
|
|
90
|
+
return path.join(repoPath, ACTIVE_SESSION_FILE);
|
|
91
|
+
}
|
|
92
|
+
function loadActiveSession(repoPath) {
|
|
93
|
+
const sessionPath = getActiveSessionPath(repoPath);
|
|
94
|
+
if (!fs.existsSync(sessionPath)) {
|
|
95
|
+
return null;
|
|
96
|
+
}
|
|
97
|
+
try {
|
|
98
|
+
return JSON.parse(fs.readFileSync(sessionPath, 'utf-8'));
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
function saveActiveSession(session, repoPath) {
|
|
105
|
+
const sessionPath = getActiveSessionPath(repoPath);
|
|
106
|
+
const dir = path.dirname(sessionPath);
|
|
107
|
+
if (!fs.existsSync(dir)) {
|
|
108
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
109
|
+
}
|
|
110
|
+
fs.writeFileSync(sessionPath, JSON.stringify(session, null, 2));
|
|
111
|
+
}
|
|
112
|
+
function clearActiveSession(repoPath) {
|
|
113
|
+
const sessionPath = getActiveSessionPath(repoPath);
|
|
114
|
+
if (fs.existsSync(sessionPath)) {
|
|
115
|
+
fs.unlinkSync(sessionPath);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
function generateSessionId() {
|
|
119
|
+
const now = new Date();
|
|
120
|
+
const date = now.toISOString().slice(0, 10);
|
|
121
|
+
const seq = String(Math.floor(Math.random() * 1000)).padStart(3, '0');
|
|
122
|
+
return `${date}-${seq}`;
|
|
123
|
+
}
|
|
124
|
+
function detectFailurePatterns(metrics, spiralCount) {
|
|
125
|
+
const hit = [];
|
|
126
|
+
const avoided = [];
|
|
127
|
+
for (const pattern of FAILURE_PATTERNS) {
|
|
128
|
+
if (pattern.detect(metrics, spiralCount)) {
|
|
129
|
+
hit.push(pattern.name);
|
|
130
|
+
}
|
|
131
|
+
else if (pattern.avoided(metrics, spiralCount)) {
|
|
132
|
+
avoided.push(pattern.name);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return { hit, avoided };
|
|
136
|
+
}
|
|
137
|
+
function generateLearnings(metrics, patternsHit, patternsAvoided, spiralCount) {
|
|
138
|
+
const learnings = [];
|
|
139
|
+
// Generate learnings based on what went well
|
|
140
|
+
if (patternsAvoided.includes('Debug Spiral')) {
|
|
141
|
+
learnings.push('Test-first approach prevented spirals');
|
|
142
|
+
}
|
|
143
|
+
if (patternsAvoided.includes('Context Amnesia')) {
|
|
144
|
+
learnings.push('Good documentation/commit hygiene maintained context');
|
|
145
|
+
}
|
|
146
|
+
if (metrics.trust_pass_rate > 90) {
|
|
147
|
+
learnings.push('High trust indicates appropriate vibe level choice');
|
|
148
|
+
}
|
|
149
|
+
if (metrics.flow_efficiency > 85) {
|
|
150
|
+
learnings.push('Flow state maintained - environment was well-prepared');
|
|
151
|
+
}
|
|
152
|
+
// Generate learnings based on what went wrong
|
|
153
|
+
if (patternsHit.includes('Debug Spiral')) {
|
|
154
|
+
learnings.push('Consider adding tracer tests before next similar task');
|
|
155
|
+
}
|
|
156
|
+
if (patternsHit.includes('Context Amnesia')) {
|
|
157
|
+
learnings.push('Break work into smaller, documented chunks');
|
|
158
|
+
}
|
|
159
|
+
if (spiralCount > 0) {
|
|
160
|
+
learnings.push(`${spiralCount} spiral(s) detected - review trigger patterns`);
|
|
161
|
+
}
|
|
162
|
+
return learnings;
|
|
163
|
+
}
|
|
164
|
+
function createSessionCommand() {
|
|
165
|
+
const cmd = new commander_1.Command('session')
|
|
166
|
+
.description('Session lifecycle integration for claude-progress.json');
|
|
167
|
+
// vibe-check session start
|
|
168
|
+
cmd
|
|
169
|
+
.command('start')
|
|
170
|
+
.description('Start a new session and capture baseline metrics')
|
|
171
|
+
.option('-l, --level <number>', 'Declared vibe level (0-5)', parseInt)
|
|
172
|
+
.option('-r, --repo <path>', 'Repository path', process.cwd())
|
|
173
|
+
.option('-f, --format <type>', 'Output format: terminal, json', 'terminal')
|
|
174
|
+
.action(async (options) => {
|
|
175
|
+
await runSessionStart(options);
|
|
176
|
+
});
|
|
177
|
+
// vibe-check session end
|
|
178
|
+
cmd
|
|
179
|
+
.command('end')
|
|
180
|
+
.description('End session and output metrics for claude-progress.json')
|
|
181
|
+
.option('-r, --repo <path>', 'Repository path', process.cwd())
|
|
182
|
+
.option('-f, --format <type>', 'Output format: terminal, json', 'json')
|
|
183
|
+
.action(async (options) => {
|
|
184
|
+
await runSessionEnd(options);
|
|
185
|
+
});
|
|
186
|
+
// vibe-check session status
|
|
187
|
+
cmd
|
|
188
|
+
.command('status')
|
|
189
|
+
.description('Show current session status')
|
|
190
|
+
.option('-r, --repo <path>', 'Repository path', process.cwd())
|
|
191
|
+
.action(async (options) => {
|
|
192
|
+
await runSessionStatus(options);
|
|
193
|
+
});
|
|
194
|
+
return cmd;
|
|
195
|
+
}
|
|
196
|
+
async function runSessionStart(options) {
|
|
197
|
+
const { level, repo, format } = options;
|
|
198
|
+
if (!(await (0, git_1.isGitRepo)(repo))) {
|
|
199
|
+
console.error(chalk_1.default.red(`Not a git repository: ${repo}`));
|
|
200
|
+
process.exit(1);
|
|
201
|
+
}
|
|
202
|
+
// Check for existing session
|
|
203
|
+
const existing = loadActiveSession(repo);
|
|
204
|
+
if (existing) {
|
|
205
|
+
if (format === 'json') {
|
|
206
|
+
console.log(JSON.stringify({ error: 'Session already active', session: existing }));
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
console.log(chalk_1.default.yellow(`\nSession already active since ${existing.startedAt}`));
|
|
210
|
+
console.log(chalk_1.default.gray(`Run 'vibe-check session end' to complete it first.\n`));
|
|
211
|
+
}
|
|
212
|
+
process.exit(1);
|
|
213
|
+
}
|
|
214
|
+
// Capture baseline from last week
|
|
215
|
+
const commits = await (0, git_1.getCommits)(repo, '1 week ago');
|
|
216
|
+
let baseline = null;
|
|
217
|
+
if (commits.length >= 5) {
|
|
218
|
+
const result = (0, metrics_1.analyzeCommits)(commits);
|
|
219
|
+
baseline = {
|
|
220
|
+
trustPassRate: result.metrics.trustPassRate.value,
|
|
221
|
+
reworkRatio: result.metrics.reworkRatio.value,
|
|
222
|
+
iterationVelocity: result.metrics.iterationVelocity.value,
|
|
223
|
+
debugSpiralDuration: result.metrics.debugSpiralDuration.value,
|
|
224
|
+
flowEfficiency: result.metrics.flowEfficiency.value,
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
// Create new session
|
|
228
|
+
const session = {
|
|
229
|
+
id: generateSessionId(),
|
|
230
|
+
startedAt: new Date().toISOString(),
|
|
231
|
+
vibeLevel: level,
|
|
232
|
+
baseline,
|
|
233
|
+
};
|
|
234
|
+
saveActiveSession(session, repo);
|
|
235
|
+
if (format === 'json') {
|
|
236
|
+
console.log(JSON.stringify({
|
|
237
|
+
session_id: session.id,
|
|
238
|
+
started_at: session.startedAt,
|
|
239
|
+
vibe_level: session.vibeLevel ?? null,
|
|
240
|
+
baseline: session.baseline ? {
|
|
241
|
+
trust_pass_rate: session.baseline.trustPassRate,
|
|
242
|
+
rework_ratio: session.baseline.reworkRatio,
|
|
243
|
+
iteration_velocity: session.baseline.iterationVelocity,
|
|
244
|
+
debug_spiral_duration_min: session.baseline.debugSpiralDuration,
|
|
245
|
+
flow_efficiency: session.baseline.flowEfficiency,
|
|
246
|
+
} : null,
|
|
247
|
+
}, null, 2));
|
|
248
|
+
}
|
|
249
|
+
else {
|
|
250
|
+
console.log('');
|
|
251
|
+
console.log(chalk_1.default.bold.cyan('SESSION STARTED'));
|
|
252
|
+
console.log('');
|
|
253
|
+
console.log(` ID: ${session.id}`);
|
|
254
|
+
console.log(` Started: ${new Date(session.startedAt).toLocaleTimeString()}`);
|
|
255
|
+
if (level !== undefined) {
|
|
256
|
+
console.log(` Vibe Level: ${level}`);
|
|
257
|
+
}
|
|
258
|
+
console.log('');
|
|
259
|
+
if (baseline) {
|
|
260
|
+
console.log(chalk_1.default.gray(' Baseline (last 7 days):'));
|
|
261
|
+
console.log(chalk_1.default.gray(` Trust: ${Math.round(baseline.trustPassRate)}%`));
|
|
262
|
+
console.log(chalk_1.default.gray(` Rework: ${Math.round(baseline.reworkRatio)}%`));
|
|
263
|
+
console.log(chalk_1.default.gray(` Velocity: ${baseline.iterationVelocity.toFixed(1)}/hr`));
|
|
264
|
+
}
|
|
265
|
+
else {
|
|
266
|
+
console.log(chalk_1.default.gray(' No baseline yet (need 5+ commits from last week)'));
|
|
267
|
+
}
|
|
268
|
+
console.log('');
|
|
269
|
+
console.log(chalk_1.default.gray(` Run 'vibe-check session end' when done.\n`));
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
async function runSessionEnd(options) {
|
|
273
|
+
const { repo, format } = options;
|
|
274
|
+
if (!(await (0, git_1.isGitRepo)(repo))) {
|
|
275
|
+
console.error(chalk_1.default.red(`Not a git repository: ${repo}`));
|
|
276
|
+
process.exit(1);
|
|
277
|
+
}
|
|
278
|
+
// Load active session
|
|
279
|
+
const session = loadActiveSession(repo);
|
|
280
|
+
if (!session) {
|
|
281
|
+
if (format === 'json') {
|
|
282
|
+
console.log(JSON.stringify({ error: 'No active session' }));
|
|
283
|
+
}
|
|
284
|
+
else {
|
|
285
|
+
console.log(chalk_1.default.yellow('\nNo active session found.'));
|
|
286
|
+
console.log(chalk_1.default.gray(`Run 'vibe-check session start' first.\n`));
|
|
287
|
+
}
|
|
288
|
+
process.exit(1);
|
|
289
|
+
}
|
|
290
|
+
// Get commits since session start
|
|
291
|
+
const commits = await (0, git_1.getCommits)(repo, session.startedAt);
|
|
292
|
+
if (commits.length === 0) {
|
|
293
|
+
if (format === 'json') {
|
|
294
|
+
console.log(JSON.stringify({
|
|
295
|
+
error: 'No commits in session',
|
|
296
|
+
session_id: session.id,
|
|
297
|
+
started_at: session.startedAt,
|
|
298
|
+
}));
|
|
299
|
+
}
|
|
300
|
+
else {
|
|
301
|
+
console.log(chalk_1.default.yellow('\nNo commits found during this session.'));
|
|
302
|
+
console.log(chalk_1.default.gray(`Session started: ${session.startedAt}\n`));
|
|
303
|
+
}
|
|
304
|
+
// Clear the session anyway
|
|
305
|
+
clearActiveSession(repo);
|
|
306
|
+
process.exit(0);
|
|
307
|
+
}
|
|
308
|
+
// Analyze commits
|
|
309
|
+
const result = (0, metrics_1.analyzeCommits)(commits);
|
|
310
|
+
const spiralCount = result.fixChains.filter(fc => fc.isSpiral).length;
|
|
311
|
+
// Record detected spirals to history for personalized coaching
|
|
312
|
+
for (const chain of result.fixChains.filter(fc => fc.isSpiral)) {
|
|
313
|
+
(0, spiral_history_1.appendSpiral)(chain.pattern || 'OTHER', chain.component, chain.duration, chain.commits);
|
|
314
|
+
}
|
|
315
|
+
// Get enhanced metrics if possible
|
|
316
|
+
let vibeScoreValue;
|
|
317
|
+
try {
|
|
318
|
+
const fileStats = await (0, git_1.getFileStats)(repo, session.startedAt);
|
|
319
|
+
const fileChurn = (0, file_churn_1.calculateFileChurn)(commits, fileStats.filesPerCommit);
|
|
320
|
+
const timeSpiral = (0, time_spiral_1.calculateTimeSpiral)(commits);
|
|
321
|
+
const velocityAnomaly = (0, velocity_anomaly_1.calculateVelocityAnomaly)(commits);
|
|
322
|
+
const codeStability = (0, code_stability_1.calculateCodeStability)(commits, fileStats.lineStats);
|
|
323
|
+
const vibeScore = (0, score_1.calculateVibeScore)({
|
|
324
|
+
fileChurn,
|
|
325
|
+
timeSpiral,
|
|
326
|
+
velocityAnomaly,
|
|
327
|
+
codeStability,
|
|
328
|
+
});
|
|
329
|
+
vibeScoreValue = Math.round(vibeScore.value * 100);
|
|
330
|
+
}
|
|
331
|
+
catch {
|
|
332
|
+
// Enhanced metrics not available
|
|
333
|
+
}
|
|
334
|
+
// Build metrics output
|
|
335
|
+
const metrics = {
|
|
336
|
+
trust_pass_rate: Math.round(result.metrics.trustPassRate.value),
|
|
337
|
+
rework_ratio: Math.round(result.metrics.reworkRatio.value),
|
|
338
|
+
iteration_velocity: parseFloat(result.metrics.iterationVelocity.value.toFixed(1)),
|
|
339
|
+
debug_spiral_duration_min: Math.round(result.metrics.debugSpiralDuration.value),
|
|
340
|
+
flow_efficiency: Math.round(result.metrics.flowEfficiency.value),
|
|
341
|
+
};
|
|
342
|
+
if (vibeScoreValue !== undefined) {
|
|
343
|
+
metrics.vibe_score = vibeScoreValue;
|
|
344
|
+
}
|
|
345
|
+
// Detect failure patterns
|
|
346
|
+
const patterns = detectFailurePatterns(metrics, spiralCount);
|
|
347
|
+
// Generate learnings
|
|
348
|
+
const learnings = generateLearnings(metrics, patterns.hit, patterns.avoided, spiralCount);
|
|
349
|
+
// Compare to baseline
|
|
350
|
+
let baselineComparison = null;
|
|
351
|
+
if (session.baseline) {
|
|
352
|
+
const trustDelta = metrics.trust_pass_rate - session.baseline.trustPassRate;
|
|
353
|
+
const reworkDelta = metrics.rework_ratio - session.baseline.reworkRatio;
|
|
354
|
+
let verdict;
|
|
355
|
+
let message;
|
|
356
|
+
if (trustDelta > 5 && reworkDelta < 5) {
|
|
357
|
+
verdict = 'above';
|
|
358
|
+
message = 'Better than your baseline - great session!';
|
|
359
|
+
}
|
|
360
|
+
else if (trustDelta < -10 || reworkDelta > 10) {
|
|
361
|
+
verdict = 'below';
|
|
362
|
+
message = 'Rougher than usual - consider what caused friction';
|
|
363
|
+
}
|
|
364
|
+
else {
|
|
365
|
+
verdict = 'normal';
|
|
366
|
+
message = 'Typical session for you';
|
|
367
|
+
}
|
|
368
|
+
baselineComparison = {
|
|
369
|
+
trust_delta: Math.round(trustDelta),
|
|
370
|
+
rework_delta: Math.round(reworkDelta),
|
|
371
|
+
verdict,
|
|
372
|
+
message,
|
|
373
|
+
};
|
|
374
|
+
}
|
|
375
|
+
// Build final output
|
|
376
|
+
const output = {
|
|
377
|
+
session_id: session.id,
|
|
378
|
+
started_at: session.startedAt,
|
|
379
|
+
ended_at: new Date().toISOString(),
|
|
380
|
+
vibe_level: session.vibeLevel ?? null,
|
|
381
|
+
metrics,
|
|
382
|
+
commits: commits.length,
|
|
383
|
+
retro: {
|
|
384
|
+
failure_patterns_hit: patterns.hit,
|
|
385
|
+
failure_patterns_avoided: patterns.avoided,
|
|
386
|
+
spirals_detected: spiralCount,
|
|
387
|
+
learnings,
|
|
388
|
+
},
|
|
389
|
+
baseline_comparison: baselineComparison,
|
|
390
|
+
};
|
|
391
|
+
// Clear the session
|
|
392
|
+
clearActiveSession(repo);
|
|
393
|
+
if (format === 'json') {
|
|
394
|
+
console.log(JSON.stringify(output, null, 2));
|
|
395
|
+
}
|
|
396
|
+
else {
|
|
397
|
+
console.log('');
|
|
398
|
+
console.log(chalk_1.default.bold.cyan('SESSION COMPLETE'));
|
|
399
|
+
console.log('');
|
|
400
|
+
console.log(` ID: ${output.session_id}`);
|
|
401
|
+
console.log(` Duration: ${Math.round((new Date(output.ended_at).getTime() - new Date(output.started_at).getTime()) / 60000)} min`);
|
|
402
|
+
console.log(` Commits: ${output.commits}`);
|
|
403
|
+
if (output.vibe_level !== null) {
|
|
404
|
+
console.log(` Vibe Level: ${output.vibe_level}`);
|
|
405
|
+
}
|
|
406
|
+
console.log('');
|
|
407
|
+
console.log(chalk_1.default.bold(' Metrics:'));
|
|
408
|
+
console.log(` Trust Pass Rate: ${metrics.trust_pass_rate}%`);
|
|
409
|
+
console.log(` Rework Ratio: ${metrics.rework_ratio}%`);
|
|
410
|
+
console.log(` Iteration Velocity: ${metrics.iteration_velocity}/hr`);
|
|
411
|
+
console.log(` Flow Efficiency: ${metrics.flow_efficiency}%`);
|
|
412
|
+
if (metrics.vibe_score !== undefined) {
|
|
413
|
+
console.log(` VibeScore: ${metrics.vibe_score}%`);
|
|
414
|
+
}
|
|
415
|
+
console.log('');
|
|
416
|
+
if (patterns.hit.length > 0) {
|
|
417
|
+
console.log(chalk_1.default.yellow(' ⚠ Failure Patterns Hit:'));
|
|
418
|
+
for (const p of patterns.hit) {
|
|
419
|
+
console.log(chalk_1.default.yellow(` - ${p}`));
|
|
420
|
+
}
|
|
421
|
+
console.log('');
|
|
422
|
+
}
|
|
423
|
+
if (patterns.avoided.length > 0) {
|
|
424
|
+
console.log(chalk_1.default.green(' ✓ Patterns Avoided:'));
|
|
425
|
+
for (const p of patterns.avoided) {
|
|
426
|
+
console.log(chalk_1.default.green(` - ${p}`));
|
|
427
|
+
}
|
|
428
|
+
console.log('');
|
|
429
|
+
}
|
|
430
|
+
if (learnings.length > 0) {
|
|
431
|
+
console.log(chalk_1.default.gray(' Learnings:'));
|
|
432
|
+
for (const l of learnings) {
|
|
433
|
+
console.log(chalk_1.default.gray(` • ${l}`));
|
|
434
|
+
}
|
|
435
|
+
console.log('');
|
|
436
|
+
}
|
|
437
|
+
// Personalized coaching based on spiral history
|
|
438
|
+
if (spiralCount > 0) {
|
|
439
|
+
const spiralPatterns = result.fixChains
|
|
440
|
+
.filter(fc => fc.isSpiral && fc.pattern)
|
|
441
|
+
.map(fc => fc.pattern);
|
|
442
|
+
const uniquePatterns = [...new Set(spiralPatterns)];
|
|
443
|
+
if (uniquePatterns.length > 0) {
|
|
444
|
+
console.log(chalk_1.default.bold.cyan(' COACHING (based on your history):'));
|
|
445
|
+
console.log('');
|
|
446
|
+
for (const pattern of uniquePatterns.slice(0, 2)) {
|
|
447
|
+
const advice = (0, spiral_history_1.getAdvice)(pattern);
|
|
448
|
+
const patternName = (0, spiral_history_1.getPatternDisplayName)(pattern);
|
|
449
|
+
if (advice && advice.yourHistory.times > 1) {
|
|
450
|
+
console.log(chalk_1.default.yellow(` 🔄 You've hit ${patternName} ${advice.yourHistory.times} times`));
|
|
451
|
+
if (advice.whatWorked.length > 0) {
|
|
452
|
+
const topFix = advice.whatWorked[0];
|
|
453
|
+
console.log(chalk_1.default.white(` Your go-to fix: ${(0, spiral_history_1.getResolutionDisplayName)(topFix.resolution).toLowerCase()}`));
|
|
454
|
+
}
|
|
455
|
+
console.log(chalk_1.default.cyan(` → ${advice.suggestion}`));
|
|
456
|
+
console.log('');
|
|
457
|
+
}
|
|
458
|
+
else if (advice) {
|
|
459
|
+
console.log(chalk_1.default.yellow(` 🆕 First time hitting ${patternName}`));
|
|
460
|
+
console.log(chalk_1.default.cyan(` → ${advice.suggestion}`));
|
|
461
|
+
console.log('');
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
if (baselineComparison) {
|
|
467
|
+
const verdictColor = baselineComparison.verdict === 'above' ? chalk_1.default.green :
|
|
468
|
+
baselineComparison.verdict === 'below' ? chalk_1.default.yellow :
|
|
469
|
+
chalk_1.default.gray;
|
|
470
|
+
console.log(verdictColor(` ${baselineComparison.message}`));
|
|
471
|
+
console.log('');
|
|
472
|
+
}
|
|
473
|
+
console.log(chalk_1.default.gray(' Use --format json to get machine-readable output.\n'));
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
async function runSessionStatus(options) {
|
|
477
|
+
const { repo } = options;
|
|
478
|
+
const session = loadActiveSession(repo);
|
|
479
|
+
if (!session) {
|
|
480
|
+
console.log(chalk_1.default.gray('\nNo active session.\n'));
|
|
481
|
+
return;
|
|
482
|
+
}
|
|
483
|
+
const duration = Math.round((Date.now() - new Date(session.startedAt).getTime()) / 60000);
|
|
484
|
+
console.log('');
|
|
485
|
+
console.log(chalk_1.default.bold.cyan('ACTIVE SESSION'));
|
|
486
|
+
console.log('');
|
|
487
|
+
console.log(` ID: ${session.id}`);
|
|
488
|
+
console.log(` Started: ${new Date(session.startedAt).toLocaleString()}`);
|
|
489
|
+
console.log(` Duration: ${duration} min`);
|
|
490
|
+
if (session.vibeLevel !== undefined) {
|
|
491
|
+
console.log(` Vibe Level: ${session.vibeLevel}`);
|
|
492
|
+
}
|
|
493
|
+
console.log('');
|
|
494
|
+
// Show current commit count
|
|
495
|
+
try {
|
|
496
|
+
const commits = await (0, git_1.getCommits)(repo, session.startedAt);
|
|
497
|
+
console.log(` Commits so far: ${commits.length}`);
|
|
498
|
+
}
|
|
499
|
+
catch {
|
|
500
|
+
// Ignore errors
|
|
501
|
+
}
|
|
502
|
+
console.log('');
|
|
503
|
+
}
|
|
504
|
+
async function runSessionStartCli(options) {
|
|
505
|
+
await runSessionStart(options);
|
|
506
|
+
}
|
|
507
|
+
async function runSessionEndCli(options) {
|
|
508
|
+
const { repo, format } = options;
|
|
509
|
+
if (!(await (0, git_1.isGitRepo)(repo))) {
|
|
510
|
+
return null;
|
|
511
|
+
}
|
|
512
|
+
const session = loadActiveSession(repo);
|
|
513
|
+
if (!session) {
|
|
514
|
+
return null;
|
|
515
|
+
}
|
|
516
|
+
const commits = await (0, git_1.getCommits)(repo, session.startedAt);
|
|
517
|
+
if (commits.length === 0) {
|
|
518
|
+
clearActiveSession(repo);
|
|
519
|
+
return null;
|
|
520
|
+
}
|
|
521
|
+
const result = (0, metrics_1.analyzeCommits)(commits);
|
|
522
|
+
const spiralCount = result.fixChains.filter(fc => fc.isSpiral).length;
|
|
523
|
+
// Record detected spirals to history for personalized coaching
|
|
524
|
+
for (const chain of result.fixChains.filter(fc => fc.isSpiral)) {
|
|
525
|
+
(0, spiral_history_1.appendSpiral)(chain.pattern || 'OTHER', chain.component, chain.duration, chain.commits);
|
|
526
|
+
}
|
|
527
|
+
let vibeScoreValue;
|
|
528
|
+
try {
|
|
529
|
+
const fileStats = await (0, git_1.getFileStats)(repo, session.startedAt);
|
|
530
|
+
const fileChurn = (0, file_churn_1.calculateFileChurn)(commits, fileStats.filesPerCommit);
|
|
531
|
+
const timeSpiral = (0, time_spiral_1.calculateTimeSpiral)(commits);
|
|
532
|
+
const velocityAnomaly = (0, velocity_anomaly_1.calculateVelocityAnomaly)(commits);
|
|
533
|
+
const codeStability = (0, code_stability_1.calculateCodeStability)(commits, fileStats.lineStats);
|
|
534
|
+
const vibeScore = (0, score_1.calculateVibeScore)({
|
|
535
|
+
fileChurn,
|
|
536
|
+
timeSpiral,
|
|
537
|
+
velocityAnomaly,
|
|
538
|
+
codeStability,
|
|
539
|
+
});
|
|
540
|
+
vibeScoreValue = Math.round(vibeScore.value * 100);
|
|
541
|
+
}
|
|
542
|
+
catch {
|
|
543
|
+
// Enhanced metrics not available
|
|
544
|
+
}
|
|
545
|
+
const metrics = {
|
|
546
|
+
trust_pass_rate: Math.round(result.metrics.trustPassRate.value),
|
|
547
|
+
rework_ratio: Math.round(result.metrics.reworkRatio.value),
|
|
548
|
+
iteration_velocity: parseFloat(result.metrics.iterationVelocity.value.toFixed(1)),
|
|
549
|
+
debug_spiral_duration_min: Math.round(result.metrics.debugSpiralDuration.value),
|
|
550
|
+
flow_efficiency: Math.round(result.metrics.flowEfficiency.value),
|
|
551
|
+
};
|
|
552
|
+
if (vibeScoreValue !== undefined) {
|
|
553
|
+
metrics.vibe_score = vibeScoreValue;
|
|
554
|
+
}
|
|
555
|
+
const patterns = detectFailurePatterns(metrics, spiralCount);
|
|
556
|
+
const learnings = generateLearnings(metrics, patterns.hit, patterns.avoided, spiralCount);
|
|
557
|
+
let baselineComparison = null;
|
|
558
|
+
if (session.baseline) {
|
|
559
|
+
const trustDelta = metrics.trust_pass_rate - session.baseline.trustPassRate;
|
|
560
|
+
const reworkDelta = metrics.rework_ratio - session.baseline.reworkRatio;
|
|
561
|
+
let verdict;
|
|
562
|
+
let message;
|
|
563
|
+
if (trustDelta > 5 && reworkDelta < 5) {
|
|
564
|
+
verdict = 'above';
|
|
565
|
+
message = 'Better than your baseline - great session!';
|
|
566
|
+
}
|
|
567
|
+
else if (trustDelta < -10 || reworkDelta > 10) {
|
|
568
|
+
verdict = 'below';
|
|
569
|
+
message = 'Rougher than usual - consider what caused friction';
|
|
570
|
+
}
|
|
571
|
+
else {
|
|
572
|
+
verdict = 'normal';
|
|
573
|
+
message = 'Typical session for you';
|
|
574
|
+
}
|
|
575
|
+
baselineComparison = {
|
|
576
|
+
trust_delta: Math.round(trustDelta),
|
|
577
|
+
rework_delta: Math.round(reworkDelta),
|
|
578
|
+
verdict,
|
|
579
|
+
message,
|
|
580
|
+
};
|
|
581
|
+
}
|
|
582
|
+
clearActiveSession(repo);
|
|
583
|
+
return {
|
|
584
|
+
session_id: session.id,
|
|
585
|
+
started_at: session.startedAt,
|
|
586
|
+
ended_at: new Date().toISOString(),
|
|
587
|
+
vibe_level: session.vibeLevel ?? null,
|
|
588
|
+
metrics,
|
|
589
|
+
commits: commits.length,
|
|
590
|
+
retro: {
|
|
591
|
+
failure_patterns_hit: patterns.hit,
|
|
592
|
+
failure_patterns_avoided: patterns.avoided,
|
|
593
|
+
spirals_detected: spiralCount,
|
|
594
|
+
learnings,
|
|
595
|
+
},
|
|
596
|
+
baseline_comparison: baselineComparison,
|
|
597
|
+
};
|
|
598
|
+
}
|
|
599
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/commands/session.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+LA,oDAmCC;AAmWD,gDAMC;AAED,4CA8GC;AA3rBD,yCAAoC;AACpC,kDAA0B;AAC1B,uCAAyB;AACzB,2CAA6B;AAC7B,gCAA6D;AAC7D,wCAA4C;AAC5C,sDAA2D;AAC3D,wDAA6D;AAC7D,kEAAuE;AACvE,8DAAmE;AACnE,oCAA8C;AAE9C,8DAMmC;AAEnC,yDAAyD;AACzD,MAAM,mBAAmB,GAAG,iCAAiC,CAAC;AA2C9D,sDAAsD;AACtD,MAAM,gBAAgB,GAAG;IACvB;QACE,EAAE,EAAE,cAAc;QAClB,IAAI,EAAE,cAAc;QACpB,MAAM,EAAE,CAAC,OAAwC,EAAE,OAAe,EAAE,EAAE,CAAC,OAAO,IAAI,CAAC;QACnF,OAAO,EAAE,CAAC,OAAwC,EAAE,OAAe,EAAE,EAAE,CAAC,OAAO,KAAK,CAAC,IAAI,OAAO,CAAC,YAAY,GAAG,EAAE;KACnH;IACD;QACE,EAAE,EAAE,iBAAiB;QACrB,IAAI,EAAE,iBAAiB;QACvB,MAAM,EAAE,CAAC,OAAwC,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,GAAG,EAAE;QAC/E,OAAO,EAAE,CAAC,OAAwC,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,GAAG,EAAE;KACjF;IACD;QACE,EAAE,EAAE,gBAAgB;QACpB,IAAI,EAAE,gBAAgB;QACtB,MAAM,EAAE,CAAC,OAAwC,EAAE,EAAE,CAAC,OAAO,CAAC,kBAAkB,GAAG,CAAC;QACpF,OAAO,EAAE,CAAC,OAAwC,EAAE,EAAE,CAAC,OAAO,CAAC,kBAAkB,GAAG,CAAC;KACtF;IACD;QACE,EAAE,EAAE,eAAe;QACnB,IAAI,EAAE,eAAe;QACrB,MAAM,EAAE,CAAC,OAAwC,EAAE,EAAE,CAAC,OAAO,CAAC,eAAe,GAAG,EAAE;QAClF,OAAO,EAAE,CAAC,OAAwC,EAAE,EAAE,CAAC,OAAO,CAAC,eAAe,GAAG,EAAE;KACpF;IACD;QACE,EAAE,EAAE,iBAAiB;QACrB,IAAI,EAAE,iBAAiB;QACvB,MAAM,EAAE,CAAC,OAAwC,EAAE,EAAE,CAAC,OAAO,CAAC,eAAe,GAAG,EAAE;QAClF,OAAO,EAAE,CAAC,OAAwC,EAAE,EAAE,CAAC,OAAO,CAAC,eAAe,GAAG,EAAE;KACpF;CACF,CAAC;AAEF,SAAS,oBAAoB,CAAC,QAAgB;IAC5C,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAgB;IACzC,MAAM,WAAW,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IACnD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAsB,EAAE,QAAgB;IACjE,MAAM,WAAW,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IACnD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACtC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;IACD,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,kBAAkB,CAAC,QAAgB;IAC1C,MAAM,WAAW,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IACnD,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/B,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAC7B,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB;IACxB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,IAAI,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC5C,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACtE,OAAO,GAAG,IAAI,IAAI,GAAG,EAAE,CAAC;AAC1B,CAAC;AAED,SAAS,qBAAqB,CAC5B,OAAwC,EACxC,WAAmB;IAEnB,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,KAAK,MAAM,OAAO,IAAI,gBAAgB,EAAE,CAAC;QACvC,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,CAAC;YACzC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC;aAAM,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,CAAC;YACjD,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;AAC1B,CAAC;AAED,SAAS,iBAAiB,CACxB,OAAwC,EACxC,WAAqB,EACrB,eAAyB,EACzB,WAAmB;IAEnB,MAAM,SAAS,GAAa,EAAE,CAAC;IAE/B,6CAA6C;IAC7C,IAAI,eAAe,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QAC7C,SAAS,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;IAC1D,CAAC;IACD,IAAI,eAAe,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;QAChD,SAAS,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;IACzE,CAAC;IACD,IAAI,OAAO,CAAC,eAAe,GAAG,EAAE,EAAE,CAAC;QACjC,SAAS,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,OAAO,CAAC,eAAe,GAAG,EAAE,EAAE,CAAC;QACjC,SAAS,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;IAC1E,CAAC;IAED,8CAA8C;IAC9C,IAAI,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QACzC,SAAS,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;IAC1E,CAAC;IACD,IAAI,WAAW,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;QAC5C,SAAS,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;IAC/D,CAAC;IACD,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;QACpB,SAAS,CAAC,IAAI,CAAC,GAAG,WAAW,+CAA+C,CAAC,CAAC;IAChF,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAgB,oBAAoB;IAClC,MAAM,GAAG,GAAG,IAAI,mBAAO,CAAC,SAAS,CAAC;SAC/B,WAAW,CAAC,wDAAwD,CAAC,CAAC;IAEzE,2BAA2B;IAC3B,GAAG;SACA,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,kDAAkD,CAAC;SAC/D,MAAM,CAAC,sBAAsB,EAAE,2BAA2B,EAAE,QAAQ,CAAC;SACrE,MAAM,CAAC,mBAAmB,EAAE,iBAAiB,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;SAC7D,MAAM,CAAC,qBAAqB,EAAE,+BAA+B,EAAE,UAAU,CAAC;SAC1E,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEL,yBAAyB;IACzB,GAAG;SACA,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,yDAAyD,CAAC;SACtE,MAAM,CAAC,mBAAmB,EAAE,iBAAiB,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;SAC7D,MAAM,CAAC,qBAAqB,EAAE,+BAA+B,EAAE,MAAM,CAAC;SACtE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEL,4BAA4B;IAC5B,GAAG;SACA,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,6BAA6B,CAAC;SAC1C,MAAM,CAAC,mBAAmB,EAAE,iBAAiB,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;SAC7D,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEL,OAAO,GAAG,CAAC;AACb,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,OAI9B;IACC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAExC,IAAI,CAAC,CAAC,MAAM,IAAA,eAAS,EAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,yBAAyB,IAAI,EAAE,CAAC,CAAC,CAAC;QAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,6BAA6B;IAC7B,MAAM,QAAQ,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACzC,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,wBAAwB,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QACtF,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,kCAAkC,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;YAClF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC,CAAC;QAClF,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,kCAAkC;IAClC,MAAM,OAAO,GAAG,MAAM,IAAA,gBAAU,EAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IACrD,IAAI,QAAQ,GAA8B,IAAI,CAAC;IAE/C,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,IAAA,wBAAc,EAAC,OAAO,CAAC,CAAC;QACvC,QAAQ,GAAG;YACT,aAAa,EAAE,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK;YACjD,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK;YAC7C,iBAAiB,EAAE,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,KAAK;YACzD,mBAAmB,EAAE,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,KAAK;YAC7D,cAAc,EAAE,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK;SACpD,CAAC;IACJ,CAAC;IAED,qBAAqB;IACrB,MAAM,OAAO,GAAkB;QAC7B,EAAE,EAAE,iBAAiB,EAAE;QACvB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,SAAS,EAAE,KAAK;QAChB,QAAQ;KACT,CAAC;IAEF,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAEjC,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;YACzB,UAAU,EAAE,OAAO,CAAC,EAAE;YACtB,UAAU,EAAE,OAAO,CAAC,SAAS;YAC7B,UAAU,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI;YACrC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAC3B,eAAe,EAAE,OAAO,CAAC,QAAQ,CAAC,aAAa;gBAC/C,YAAY,EAAE,OAAO,CAAC,QAAQ,CAAC,WAAW;gBAC1C,kBAAkB,EAAE,OAAO,CAAC,QAAQ,CAAC,iBAAiB;gBACtD,yBAAyB,EAAE,OAAO,CAAC,QAAQ,CAAC,mBAAmB;gBAC/D,eAAe,EAAE,OAAO,CAAC,QAAQ,CAAC,cAAc;aACjD,CAAC,CAAC,CAAC,IAAI;SACT,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACf,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,SAAS,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;QAC9E,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,EAAE,CAAC,CAAC;QACxC,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;YACrD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7E,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5E,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,iBAAiB,QAAQ,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QACvF,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC,CAAC;QAChF,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC,CAAC;IACzE,CAAC;AACH,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,OAG5B;IACC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAEjC,IAAI,CAAC,CAAC,MAAM,IAAA,eAAS,EAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,yBAAyB,IAAI,EAAE,CAAC,CAAC,CAAC;QAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,sBAAsB;IACtB,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAC,CAAC;QAC9D,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC,CAAC;YACxD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC,CAAC;QACrE,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,kCAAkC;IAClC,MAAM,OAAO,GAAG,MAAM,IAAA,gBAAU,EAAC,IAAI,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAE1D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;gBACzB,KAAK,EAAE,uBAAuB;gBAC9B,UAAU,EAAE,OAAO,CAAC,EAAE;gBACtB,UAAU,EAAE,OAAO,CAAC,SAAS;aAC9B,CAAC,CAAC,CAAC;QACN,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,yCAAyC,CAAC,CAAC,CAAC;YACrE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,oBAAoB,OAAO,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC;QACrE,CAAC;QACD,2BAA2B;QAC3B,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,kBAAkB;IAClB,MAAM,MAAM,GAAG,IAAA,wBAAc,EAAC,OAAO,CAAC,CAAC;IACvC,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC;IAEtE,+DAA+D;IAC/D,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/D,IAAA,6BAAY,EACV,KAAK,CAAC,OAAO,IAAI,OAAO,EACxB,KAAK,CAAC,SAAS,EACf,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,OAAO,CACd,CAAC;IACJ,CAAC;IAED,mCAAmC;IACnC,IAAI,cAAkC,CAAC;IACvC,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,IAAA,kBAAY,EAAC,IAAI,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;QAC9D,MAAM,SAAS,GAAG,IAAA,+BAAkB,EAAC,OAAO,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC;QACxE,MAAM,UAAU,GAAG,IAAA,iCAAmB,EAAC,OAAO,CAAC,CAAC;QAChD,MAAM,eAAe,GAAG,IAAA,2CAAwB,EAAC,OAAO,CAAC,CAAC;QAC1D,MAAM,aAAa,GAAG,IAAA,uCAAsB,EAAC,OAAO,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;QAC3E,MAAM,SAAS,GAAG,IAAA,0BAAkB,EAAC;YACnC,SAAS;YACT,UAAU;YACV,eAAe;YACf,aAAa;SACd,CAAC,CAAC;QACH,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,iCAAiC;IACnC,CAAC;IAED,uBAAuB;IACvB,MAAM,OAAO,GAAoC;QAC/C,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC;QAC/D,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC;QAC1D,kBAAkB,EAAE,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACjF,yBAAyB,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,KAAK,CAAC;QAC/E,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC;KACjE,CAAC;IACF,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;QACjC,OAAO,CAAC,UAAU,GAAG,cAAc,CAAC;IACtC,CAAC;IAED,0BAA0B;IAC1B,MAAM,QAAQ,GAAG,qBAAqB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAE7D,qBAAqB;IACrB,MAAM,SAAS,GAAG,iBAAiB,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAE1F,sBAAsB;IACtB,IAAI,kBAAkB,GAAgD,IAAI,CAAC;IAC3E,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,MAAM,UAAU,GAAG,OAAO,CAAC,eAAe,GAAG,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC5E,MAAM,WAAW,GAAG,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;QAExE,IAAI,OAAqC,CAAC;QAC1C,IAAI,OAAe,CAAC;QAEpB,IAAI,UAAU,GAAG,CAAC,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;YACtC,OAAO,GAAG,OAAO,CAAC;YAClB,OAAO,GAAG,4CAA4C,CAAC;QACzD,CAAC;aAAM,IAAI,UAAU,GAAG,CAAC,EAAE,IAAI,WAAW,GAAG,EAAE,EAAE,CAAC;YAChD,OAAO,GAAG,OAAO,CAAC;YAClB,OAAO,GAAG,oDAAoD,CAAC;QACjE,CAAC;aAAM,CAAC;YACN,OAAO,GAAG,QAAQ,CAAC;YACnB,OAAO,GAAG,yBAAyB,CAAC;QACtC,CAAC;QAED,kBAAkB,GAAG;YACnB,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;YACnC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;YACrC,OAAO;YACP,OAAO;SACR,CAAC;IACJ,CAAC;IAED,qBAAqB;IACrB,MAAM,MAAM,GAAyB;QACnC,UAAU,EAAE,OAAO,CAAC,EAAE;QACtB,UAAU,EAAE,OAAO,CAAC,SAAS;QAC7B,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QAClC,UAAU,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI;QACrC,OAAO;QACP,OAAO,EAAE,OAAO,CAAC,MAAM;QACvB,KAAK,EAAE;YACL,oBAAoB,EAAE,QAAQ,CAAC,GAAG;YAClC,wBAAwB,EAAE,QAAQ,CAAC,OAAO;YAC1C,gBAAgB,EAAE,WAAW;YAC7B,SAAS;SACV;QACD,mBAAmB,EAAE,kBAAkB;KACxC,CAAC;IAEF,oBAAoB;IACpB,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAEzB,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;QACpI,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5C,IAAI,MAAM,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QACpD,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,wBAAwB,OAAO,CAAC,eAAe,GAAG,CAAC,CAAC;QAChE,OAAO,CAAC,GAAG,CAAC,qBAAqB,OAAO,CAAC,YAAY,GAAG,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,2BAA2B,OAAO,CAAC,kBAAkB,KAAK,CAAC,CAAC;QACxE,OAAO,CAAC,GAAG,CAAC,wBAAwB,OAAO,CAAC,eAAe,GAAG,CAAC,CAAC;QAChE,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,kBAAkB,OAAO,CAAC,UAAU,GAAG,CAAC,CAAC;QACvD,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,IAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAC,CAAC;YACvD,KAAK,MAAM,CAAC,IAAI,QAAQ,CAAC,GAAG,EAAE,CAAC;gBAC7B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1C,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC;YAClD,KAAK,MAAM,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACjC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;YACzC,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;YACxC,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;gBAC1B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;YACxC,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;QAED,gDAAgD;QAChD,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;YACpB,MAAM,cAAc,GAAG,MAAM,CAAC,SAAS;iBACpC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,OAAO,CAAC;iBACvC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,OAAiB,CAAC,CAAC;YACnC,MAAM,cAAc,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC;YAEpD,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC,CAAC;gBACpE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAEhB,KAAK,MAAM,OAAO,IAAI,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;oBACjD,MAAM,MAAM,GAAG,IAAA,0BAAS,EAAC,OAAO,CAAC,CAAC;oBAClC,MAAM,WAAW,GAAG,IAAA,sCAAqB,EAAC,OAAO,CAAC,CAAC;oBAEnD,IAAI,MAAM,IAAI,MAAM,CAAC,WAAW,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;wBAC3C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,mBAAmB,WAAW,IAAI,MAAM,CAAC,WAAW,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC;wBAE9F,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;4BACjC,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;4BACpC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,wBAAwB,IAAA,yCAAwB,EAAC,MAAM,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC;wBAChH,CAAC;wBAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;wBACvD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBAClB,CAAC;yBAAM,IAAI,MAAM,EAAE,CAAC;wBAClB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,2BAA2B,WAAW,EAAE,CAAC,CAAC,CAAC;wBACpE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;wBACvD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBAClB,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,kBAAkB,EAAE,CAAC;YACvB,MAAM,YAAY,GAAG,kBAAkB,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,eAAK,CAAC,KAAK,CAAC,CAAC;gBACvD,kBAAkB,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,eAAK,CAAC,MAAM,CAAC,CAAC;oBACvD,eAAK,CAAC,IAAI,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,kBAAkB,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAC7D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC,CAAC;IACnF,CAAC;AACH,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,OAAyB;IACvD,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IAEzB,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;QAClD,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC;IAE1F,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,SAAS,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IAC1E,OAAO,CAAC,GAAG,CAAC,eAAe,QAAQ,MAAM,CAAC,CAAC;IAC3C,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,iBAAiB,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,4BAA4B;IAC5B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,IAAA,gBAAU,EAAC,IAAI,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,qBAAqB,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,gBAAgB;IAClB,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAEM,KAAK,UAAU,kBAAkB,CAAC,OAIxC;IACC,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;AACjC,CAAC;AAEM,KAAK,UAAU,gBAAgB,CAAC,OAGtC;IACC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAEjC,IAAI,CAAC,CAAC,MAAM,IAAA,eAAS,EAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,IAAA,gBAAU,EAAC,IAAI,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAC1D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,MAAM,GAAG,IAAA,wBAAc,EAAC,OAAO,CAAC,CAAC;IACvC,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC;IAEtE,+DAA+D;IAC/D,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/D,IAAA,6BAAY,EACV,KAAK,CAAC,OAAO,IAAI,OAAO,EACxB,KAAK,CAAC,SAAS,EACf,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,OAAO,CACd,CAAC;IACJ,CAAC;IAED,IAAI,cAAkC,CAAC;IACvC,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,IAAA,kBAAY,EAAC,IAAI,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;QAC9D,MAAM,SAAS,GAAG,IAAA,+BAAkB,EAAC,OAAO,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC;QACxE,MAAM,UAAU,GAAG,IAAA,iCAAmB,EAAC,OAAO,CAAC,CAAC;QAChD,MAAM,eAAe,GAAG,IAAA,2CAAwB,EAAC,OAAO,CAAC,CAAC;QAC1D,MAAM,aAAa,GAAG,IAAA,uCAAsB,EAAC,OAAO,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;QAC3E,MAAM,SAAS,GAAG,IAAA,0BAAkB,EAAC;YACnC,SAAS;YACT,UAAU;YACV,eAAe;YACf,aAAa;SACd,CAAC,CAAC;QACH,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,iCAAiC;IACnC,CAAC;IAED,MAAM,OAAO,GAAoC;QAC/C,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC;QAC/D,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC;QAC1D,kBAAkB,EAAE,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACjF,yBAAyB,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,KAAK,CAAC;QAC/E,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC;KACjE,CAAC;IACF,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;QACjC,OAAO,CAAC,UAAU,GAAG,cAAc,CAAC;IACtC,CAAC;IAED,MAAM,QAAQ,GAAG,qBAAqB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAC7D,MAAM,SAAS,GAAG,iBAAiB,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAE1F,IAAI,kBAAkB,GAAgD,IAAI,CAAC;IAC3E,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,MAAM,UAAU,GAAG,OAAO,CAAC,eAAe,GAAG,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC5E,MAAM,WAAW,GAAG,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;QAExE,IAAI,OAAqC,CAAC;QAC1C,IAAI,OAAe,CAAC;QAEpB,IAAI,UAAU,GAAG,CAAC,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;YACtC,OAAO,GAAG,OAAO,CAAC;YAClB,OAAO,GAAG,4CAA4C,CAAC;QACzD,CAAC;aAAM,IAAI,UAAU,GAAG,CAAC,EAAE,IAAI,WAAW,GAAG,EAAE,EAAE,CAAC;YAChD,OAAO,GAAG,OAAO,CAAC;YAClB,OAAO,GAAG,oDAAoD,CAAC;QACjE,CAAC;aAAM,CAAC;YACN,OAAO,GAAG,QAAQ,CAAC;YACnB,OAAO,GAAG,yBAAyB,CAAC;QACtC,CAAC;QAED,kBAAkB,GAAG;YACnB,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;YACnC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;YACrC,OAAO;YACP,OAAO;SACR,CAAC;IACJ,CAAC;IAED,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAEzB,OAAO;QACL,UAAU,EAAE,OAAO,CAAC,EAAE;QACtB,UAAU,EAAE,OAAO,CAAC,SAAS;QAC7B,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QAClC,UAAU,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI;QACrC,OAAO;QACP,OAAO,EAAE,OAAO,CAAC,MAAM;QACvB,KAAK,EAAE;YACL,oBAAoB,EAAE,QAAQ,CAAC,GAAG;YAClC,wBAAwB,EAAE,QAAQ,CAAC,OAAO;YAC1C,gBAAgB,EAAE,WAAW;YAC7B,SAAS;SACV;QACD,mBAAmB,EAAE,kBAAkB;KACxC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sessions Command (VIBE-046)
|
|
3
|
+
*
|
|
4
|
+
* Identify work sessions from git history using configurable time gap threshold.
|
|
5
|
+
* Proven algorithm from release-engineering retrospective.
|
|
6
|
+
*/
|
|
7
|
+
import { Command } from 'commander';
|
|
8
|
+
import { SessionDetectionResult } from '../analyzers/sessions';
|
|
9
|
+
export interface SessionsOptions {
|
|
10
|
+
since?: string;
|
|
11
|
+
until?: string;
|
|
12
|
+
threshold: number;
|
|
13
|
+
format: string;
|
|
14
|
+
repo: string;
|
|
15
|
+
verbose: boolean;
|
|
16
|
+
limit?: number;
|
|
17
|
+
}
|
|
18
|
+
export declare function createSessionsCommand(): Command;
|
|
19
|
+
export declare function runSessions(options: SessionsOptions): Promise<SessionDetectionResult | null>;
|
|
20
|
+
//# sourceMappingURL=sessions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../src/commands/sessions.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,EAAkB,sBAAsB,EAAmB,MAAM,uBAAuB,CAAC;AAGhG,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,qBAAqB,IAAI,OAAO,CAuB/C;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC,CAqDlG"}
|