@ginkoai/cli 1.7.2 → 2.0.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/assign.d.ts +19 -0
- package/dist/commands/assign.d.ts.map +1 -0
- package/dist/commands/assign.js +200 -0
- package/dist/commands/assign.js.map +1 -0
- package/dist/commands/epic.d.ts.map +1 -1
- package/dist/commands/epic.js +48 -23
- package/dist/commands/epic.js.map +1 -1
- package/dist/commands/graph/api-client.d.ts +1 -0
- package/dist/commands/graph/api-client.d.ts.map +1 -1
- package/dist/commands/graph/api-client.js.map +1 -1
- package/dist/commands/insights/index.d.ts +12 -0
- package/dist/commands/insights/index.d.ts.map +1 -0
- package/dist/commands/insights/index.js +12 -0
- package/dist/commands/insights/index.js.map +1 -0
- package/dist/commands/insights/insights-command.d.ts +20 -0
- package/dist/commands/insights/insights-command.d.ts.map +1 -0
- package/dist/commands/insights/insights-command.js +369 -0
- package/dist/commands/insights/insights-command.js.map +1 -0
- package/dist/commands/principles/seed.d.ts +26 -0
- package/dist/commands/principles/seed.d.ts.map +1 -0
- package/dist/commands/principles/seed.js +150 -0
- package/dist/commands/principles/seed.js.map +1 -0
- package/dist/commands/start/start-reflection.d.ts +11 -0
- package/dist/commands/start/start-reflection.d.ts.map +1 -1
- package/dist/commands/start/start-reflection.js +149 -16
- package/dist/commands/start/start-reflection.js.map +1 -1
- package/dist/commands/sync/index.d.ts +21 -0
- package/dist/commands/sync/index.d.ts.map +1 -0
- package/dist/commands/sync/index.js +38 -0
- package/dist/commands/sync/index.js.map +1 -0
- package/dist/commands/sync/node-syncer.d.ts +58 -0
- package/dist/commands/sync/node-syncer.d.ts.map +1 -0
- package/dist/commands/sync/node-syncer.js +192 -0
- package/dist/commands/sync/node-syncer.js.map +1 -0
- package/dist/commands/sync/sprint-syncer.d.ts +42 -0
- package/dist/commands/sync/sprint-syncer.d.ts.map +1 -0
- package/dist/commands/sync/sprint-syncer.js +274 -0
- package/dist/commands/sync/sprint-syncer.js.map +1 -0
- package/dist/commands/sync/sync-command.d.ts +16 -0
- package/dist/commands/sync/sync-command.d.ts.map +1 -0
- package/dist/commands/sync/sync-command.js +429 -0
- package/dist/commands/sync/sync-command.js.map +1 -0
- package/dist/commands/sync/types.d.ts +86 -0
- package/dist/commands/sync/types.d.ts.map +1 -0
- package/dist/commands/sync/types.js +12 -0
- package/dist/commands/sync/types.js.map +1 -0
- package/dist/core/session-log-manager.d.ts +3 -1
- package/dist/core/session-log-manager.d.ts.map +1 -1
- package/dist/core/session-log-manager.js +5 -3
- package/dist/core/session-log-manager.js.map +1 -1
- package/dist/data/standard-principles.d.ts +43 -0
- package/dist/data/standard-principles.d.ts.map +1 -0
- package/dist/data/standard-principles.js +323 -0
- package/dist/data/standard-principles.js.map +1 -0
- package/dist/index.js +54 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/insights/analyzers/anti-patterns.d.ts +32 -0
- package/dist/lib/insights/analyzers/anti-patterns.d.ts.map +1 -0
- package/dist/lib/insights/analyzers/anti-patterns.js +302 -0
- package/dist/lib/insights/analyzers/anti-patterns.js.map +1 -0
- package/dist/lib/insights/analyzers/efficiency.d.ts +22 -0
- package/dist/lib/insights/analyzers/efficiency.d.ts.map +1 -0
- package/dist/lib/insights/analyzers/efficiency.js +311 -0
- package/dist/lib/insights/analyzers/efficiency.js.map +1 -0
- package/dist/lib/insights/analyzers/index.d.ts +24 -0
- package/dist/lib/insights/analyzers/index.d.ts.map +1 -0
- package/dist/lib/insights/analyzers/index.js +37 -0
- package/dist/lib/insights/analyzers/index.js.map +1 -0
- package/dist/lib/insights/analyzers/patterns.d.ts +21 -0
- package/dist/lib/insights/analyzers/patterns.d.ts.map +1 -0
- package/dist/lib/insights/analyzers/patterns.js +337 -0
- package/dist/lib/insights/analyzers/patterns.js.map +1 -0
- package/dist/lib/insights/analyzers/quality.d.ts +29 -0
- package/dist/lib/insights/analyzers/quality.d.ts.map +1 -0
- package/dist/lib/insights/analyzers/quality.js +371 -0
- package/dist/lib/insights/analyzers/quality.js.map +1 -0
- package/dist/lib/insights/data-collector.d.ts +68 -0
- package/dist/lib/insights/data-collector.d.ts.map +1 -0
- package/dist/lib/insights/data-collector.js +514 -0
- package/dist/lib/insights/data-collector.js.map +1 -0
- package/dist/lib/insights/index.d.ts +14 -0
- package/dist/lib/insights/index.d.ts.map +1 -0
- package/dist/lib/insights/index.js +17 -0
- package/dist/lib/insights/index.js.map +1 -0
- package/dist/lib/insights/scheduler.d.ts +71 -0
- package/dist/lib/insights/scheduler.d.ts.map +1 -0
- package/dist/lib/insights/scheduler.js +126 -0
- package/dist/lib/insights/scheduler.js.map +1 -0
- package/dist/lib/insights/types.d.ts +216 -0
- package/dist/lib/insights/types.d.ts.map +1 -0
- package/dist/lib/insights/types.js +12 -0
- package/dist/lib/insights/types.js.map +1 -0
- package/dist/templates/ai-instructions-template.d.ts +1 -0
- package/dist/templates/ai-instructions-template.d.ts.map +1 -1
- package/dist/templates/ai-instructions-template.js +51 -0
- package/dist/templates/ai-instructions-template.js.map +1 -1
- package/package.json +1 -1
- package/dist/lib/__tests__/task-timeout.test.d.ts +0 -12
- package/dist/lib/__tests__/task-timeout.test.d.ts.map +0 -1
- package/dist/lib/__tests__/task-timeout.test.js +0 -278
- package/dist/lib/__tests__/task-timeout.test.js.map +0 -1
|
@@ -0,0 +1,369 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileType: command
|
|
3
|
+
* @status: current
|
|
4
|
+
* @updated: 2025-12-15
|
|
5
|
+
* @tags: [cli, insights, coaching, analysis]
|
|
6
|
+
* @related: [../../lib/insights/, ../status.ts]
|
|
7
|
+
* @priority: high
|
|
8
|
+
* @complexity: medium
|
|
9
|
+
* @dependencies: [chalk, commander]
|
|
10
|
+
*/
|
|
11
|
+
import chalk from 'chalk';
|
|
12
|
+
import { collectInsightData, getAllAnalyzers, getAnalyzer, } from '../../lib/insights/index.js';
|
|
13
|
+
// ============================================================================
|
|
14
|
+
// Constants
|
|
15
|
+
// ============================================================================
|
|
16
|
+
const SEVERITY_ICONS = {
|
|
17
|
+
info: '○',
|
|
18
|
+
suggestion: '◐',
|
|
19
|
+
warning: '⚠️',
|
|
20
|
+
critical: '🚨',
|
|
21
|
+
};
|
|
22
|
+
const CATEGORY_DISPLAY_NAMES = {
|
|
23
|
+
efficiency: 'Session Efficiency',
|
|
24
|
+
patterns: 'Pattern Adoption',
|
|
25
|
+
quality: 'Collaboration Quality',
|
|
26
|
+
'anti-patterns': 'Anti-Patterns',
|
|
27
|
+
};
|
|
28
|
+
const SCORE_RATINGS = [
|
|
29
|
+
{ min: 90, label: 'Excellent', color: chalk.green },
|
|
30
|
+
{ min: 75, label: 'Good', color: chalk.cyan },
|
|
31
|
+
{ min: 60, label: 'Fair', color: chalk.yellow },
|
|
32
|
+
{ min: 40, label: 'Needs Improvement', color: chalk.hex('#FFA500') },
|
|
33
|
+
{ min: 0, label: 'Critical', color: chalk.red },
|
|
34
|
+
];
|
|
35
|
+
// ============================================================================
|
|
36
|
+
// Main Command
|
|
37
|
+
// ============================================================================
|
|
38
|
+
export async function insightsCommand(options = {}) {
|
|
39
|
+
try {
|
|
40
|
+
const days = options.days ?? 30;
|
|
41
|
+
// Collect data
|
|
42
|
+
console.log(chalk.dim(`Analyzing ${days} days of activity...`));
|
|
43
|
+
const data = await collectInsightData({ days });
|
|
44
|
+
// Run analysis
|
|
45
|
+
const report = await generateReport(data, options.category);
|
|
46
|
+
// Output based on format
|
|
47
|
+
if (options.json) {
|
|
48
|
+
outputJson(report);
|
|
49
|
+
}
|
|
50
|
+
else if (options.detailed) {
|
|
51
|
+
outputDetailed(report);
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
outputSummary(report);
|
|
55
|
+
}
|
|
56
|
+
// Sync to Supabase if requested
|
|
57
|
+
if (options.sync) {
|
|
58
|
+
await syncToSupabase(report);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
console.error(chalk.red('Error running insights analysis:'), error instanceof Error ? error.message : String(error));
|
|
63
|
+
process.exit(1);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
// ============================================================================
|
|
67
|
+
// Report Generation
|
|
68
|
+
// ============================================================================
|
|
69
|
+
async function generateReport(data, categoryFilter) {
|
|
70
|
+
const analyzers = categoryFilter
|
|
71
|
+
? [getAnalyzer(categoryFilter)].filter(Boolean)
|
|
72
|
+
: getAllAnalyzers();
|
|
73
|
+
if (analyzers.length === 0) {
|
|
74
|
+
throw new Error(`Unknown category: ${categoryFilter}. Valid categories: efficiency, patterns, quality, anti-patterns`);
|
|
75
|
+
}
|
|
76
|
+
// Run all analyzers
|
|
77
|
+
const allInsights = [];
|
|
78
|
+
for (const analyzer of analyzers) {
|
|
79
|
+
if (analyzer) {
|
|
80
|
+
const insights = await analyzer.analyze(data);
|
|
81
|
+
allInsights.push(...insights);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
// Calculate category scores
|
|
85
|
+
const categoryScores = calculateCategoryScores(allInsights);
|
|
86
|
+
// Calculate overall score
|
|
87
|
+
const overallScore = calculateOverallScore(categoryScores);
|
|
88
|
+
// Generate summary
|
|
89
|
+
const summary = generateSummary(allInsights, overallScore);
|
|
90
|
+
return {
|
|
91
|
+
userId: data.userId,
|
|
92
|
+
projectId: data.projectId,
|
|
93
|
+
runAt: new Date(),
|
|
94
|
+
period: data.period,
|
|
95
|
+
overallScore,
|
|
96
|
+
categoryScores,
|
|
97
|
+
insights: allInsights,
|
|
98
|
+
summary,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
function calculateCategoryScores(insights) {
|
|
102
|
+
const categories = ['efficiency', 'patterns', 'quality', 'anti-patterns'];
|
|
103
|
+
const scores = [];
|
|
104
|
+
for (const category of categories) {
|
|
105
|
+
const categoryInsights = insights.filter(i => i.category === category);
|
|
106
|
+
const baseScore = 75; // Start with a base score
|
|
107
|
+
// Calculate adjustments from insights
|
|
108
|
+
const adjustments = categoryInsights.reduce((sum, insight) => sum + insight.scoreImpact, 0);
|
|
109
|
+
// Clamp score between 0 and 100
|
|
110
|
+
const score = Math.max(0, Math.min(100, baseScore + adjustments));
|
|
111
|
+
scores.push({
|
|
112
|
+
category,
|
|
113
|
+
score: Math.round(score),
|
|
114
|
+
baseScore,
|
|
115
|
+
adjustments,
|
|
116
|
+
insightCount: categoryInsights.length,
|
|
117
|
+
criticalCount: categoryInsights.filter(i => i.severity === 'critical').length,
|
|
118
|
+
warningCount: categoryInsights.filter(i => i.severity === 'warning').length,
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
return scores;
|
|
122
|
+
}
|
|
123
|
+
function calculateOverallScore(categoryScores) {
|
|
124
|
+
if (categoryScores.length === 0)
|
|
125
|
+
return 75;
|
|
126
|
+
// Weight categories (efficiency and quality slightly higher)
|
|
127
|
+
const weights = {
|
|
128
|
+
efficiency: 0.3,
|
|
129
|
+
patterns: 0.2,
|
|
130
|
+
quality: 0.3,
|
|
131
|
+
'anti-patterns': 0.2,
|
|
132
|
+
};
|
|
133
|
+
let weightedSum = 0;
|
|
134
|
+
let totalWeight = 0;
|
|
135
|
+
for (const cs of categoryScores) {
|
|
136
|
+
const weight = weights[cs.category] || 0.25;
|
|
137
|
+
weightedSum += cs.score * weight;
|
|
138
|
+
totalWeight += weight;
|
|
139
|
+
}
|
|
140
|
+
return Math.round(weightedSum / totalWeight);
|
|
141
|
+
}
|
|
142
|
+
function generateSummary(insights, score) {
|
|
143
|
+
const criticalCount = insights.filter(i => i.severity === 'critical').length;
|
|
144
|
+
const warningCount = insights.filter(i => i.severity === 'warning').length;
|
|
145
|
+
const positiveCount = insights.filter(i => i.scoreImpact > 0).length;
|
|
146
|
+
if (criticalCount > 0) {
|
|
147
|
+
return `${criticalCount} critical issues require immediate attention.`;
|
|
148
|
+
}
|
|
149
|
+
else if (warningCount > 0) {
|
|
150
|
+
return `${warningCount} areas could be improved. ${positiveCount} metrics are performing well.`;
|
|
151
|
+
}
|
|
152
|
+
else if (score >= 90) {
|
|
153
|
+
return `Excellent performance across all metrics. Keep up the great work!`;
|
|
154
|
+
}
|
|
155
|
+
else if (score >= 75) {
|
|
156
|
+
return `Good overall performance with ${positiveCount} strong areas.`;
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
return `Several areas need attention to improve your development workflow.`;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
// ============================================================================
|
|
163
|
+
// Output Formatters
|
|
164
|
+
// ============================================================================
|
|
165
|
+
function outputSummary(report) {
|
|
166
|
+
// Header
|
|
167
|
+
console.log('');
|
|
168
|
+
console.log(chalk.bold(`Coaching Insights`) + chalk.dim(` | ${report.userId} | ${report.projectId}`));
|
|
169
|
+
console.log(chalk.dim(`Analysis period: ${report.period.days} days`));
|
|
170
|
+
console.log('');
|
|
171
|
+
// Category summaries
|
|
172
|
+
for (const categoryScore of report.categoryScores) {
|
|
173
|
+
const displayName = CATEGORY_DISPLAY_NAMES[categoryScore.category];
|
|
174
|
+
const categoryInsights = report.insights.filter(i => i.category === categoryScore.category);
|
|
175
|
+
// Skip empty categories
|
|
176
|
+
if (categoryInsights.length === 0)
|
|
177
|
+
continue;
|
|
178
|
+
console.log(chalk.cyan.bold(displayName));
|
|
179
|
+
// Show top 2 insights per category
|
|
180
|
+
const topInsights = categoryInsights.slice(0, 2);
|
|
181
|
+
for (const insight of topInsights) {
|
|
182
|
+
const icon = SEVERITY_ICONS[insight.severity];
|
|
183
|
+
const titleColor = insight.scoreImpact > 0 ? chalk.green : insight.severity === 'warning' ? chalk.yellow : chalk.white;
|
|
184
|
+
console.log(` ${icon} ${titleColor(insight.title)}`);
|
|
185
|
+
if (insight.description && insight.description.length < 80) {
|
|
186
|
+
console.log(chalk.dim(` ${insight.description}`));
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
if (categoryInsights.length > 2) {
|
|
190
|
+
console.log(chalk.dim(` +${categoryInsights.length - 2} more insights`));
|
|
191
|
+
}
|
|
192
|
+
console.log('');
|
|
193
|
+
}
|
|
194
|
+
// Overall score
|
|
195
|
+
const rating = getScoreRating(report.overallScore);
|
|
196
|
+
console.log(chalk.bold('Overall Score: ') + rating.color(`${report.overallScore}/100 (${rating.label})`));
|
|
197
|
+
console.log(chalk.dim(report.summary));
|
|
198
|
+
console.log('');
|
|
199
|
+
console.log(chalk.dim(`Run ${chalk.cyan('ginko insights --detailed')} for full analysis`));
|
|
200
|
+
}
|
|
201
|
+
function outputDetailed(report) {
|
|
202
|
+
// Header
|
|
203
|
+
console.log('');
|
|
204
|
+
console.log(chalk.bold.green('Coaching Insights Report'));
|
|
205
|
+
console.log(chalk.dim('═'.repeat(60)));
|
|
206
|
+
console.log(`User: ${report.userId}`);
|
|
207
|
+
console.log(`Project: ${report.projectId}`);
|
|
208
|
+
console.log(`Period: ${report.period.start.toLocaleDateString()} - ${report.period.end.toLocaleDateString()} (${report.period.days} days)`);
|
|
209
|
+
console.log(`Generated: ${report.runAt.toLocaleString()}`);
|
|
210
|
+
console.log(chalk.dim('═'.repeat(60)));
|
|
211
|
+
console.log('');
|
|
212
|
+
// Category details
|
|
213
|
+
for (const categoryScore of report.categoryScores) {
|
|
214
|
+
const displayName = CATEGORY_DISPLAY_NAMES[categoryScore.category];
|
|
215
|
+
const categoryInsights = report.insights.filter(i => i.category === categoryScore.category);
|
|
216
|
+
if (categoryInsights.length === 0)
|
|
217
|
+
continue;
|
|
218
|
+
const scoreRating = getScoreRating(categoryScore.score);
|
|
219
|
+
console.log(chalk.cyan.bold(`${displayName}`) + chalk.dim(` | Score: `) + scoreRating.color(`${categoryScore.score}/100`));
|
|
220
|
+
console.log(chalk.dim('─'.repeat(50)));
|
|
221
|
+
for (const insight of categoryInsights) {
|
|
222
|
+
const icon = SEVERITY_ICONS[insight.severity];
|
|
223
|
+
const severityColor = getSeverityColor(insight.severity);
|
|
224
|
+
console.log(` ${icon} ${severityColor.bold(insight.title)}`);
|
|
225
|
+
console.log(` ${insight.description}`);
|
|
226
|
+
// Show metric if available
|
|
227
|
+
if (insight.metricValue !== undefined) {
|
|
228
|
+
const metricStr = `${insight.metricName}: ${insight.metricValue}${insight.metricUnit || ''}`;
|
|
229
|
+
const targetStr = insight.metricTarget !== undefined ? ` (target: ${insight.metricTarget}${insight.metricUnit || ''})` : '';
|
|
230
|
+
console.log(chalk.dim(` Metric: ${metricStr}${targetStr}`));
|
|
231
|
+
}
|
|
232
|
+
// Show evidence
|
|
233
|
+
if (insight.evidence.length > 0) {
|
|
234
|
+
console.log(chalk.dim(` Evidence:`));
|
|
235
|
+
for (const ev of insight.evidence.slice(0, 3)) {
|
|
236
|
+
console.log(chalk.dim(` - ${ev.description}`));
|
|
237
|
+
}
|
|
238
|
+
if (insight.evidence.length > 3) {
|
|
239
|
+
console.log(chalk.dim(` ... and ${insight.evidence.length - 3} more`));
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
// Show recommendations
|
|
243
|
+
if (insight.recommendations.length > 0) {
|
|
244
|
+
console.log(chalk.yellow.dim(` Recommendations:`));
|
|
245
|
+
for (const rec of insight.recommendations) {
|
|
246
|
+
console.log(chalk.yellow.dim(` - ${rec}`));
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
console.log('');
|
|
250
|
+
}
|
|
251
|
+
console.log('');
|
|
252
|
+
}
|
|
253
|
+
// Overall summary
|
|
254
|
+
console.log(chalk.dim('═'.repeat(60)));
|
|
255
|
+
const rating = getScoreRating(report.overallScore);
|
|
256
|
+
console.log(chalk.bold('Overall Score: ') + rating.color(`${report.overallScore}/100 (${rating.label})`));
|
|
257
|
+
console.log('');
|
|
258
|
+
console.log(chalk.bold('Summary: ') + report.summary);
|
|
259
|
+
console.log('');
|
|
260
|
+
// Score breakdown
|
|
261
|
+
console.log(chalk.bold('Category Breakdown:'));
|
|
262
|
+
for (const cs of report.categoryScores) {
|
|
263
|
+
const displayName = CATEGORY_DISPLAY_NAMES[cs.category];
|
|
264
|
+
const rating = getScoreRating(cs.score);
|
|
265
|
+
const bar = generateScoreBar(cs.score);
|
|
266
|
+
console.log(` ${displayName.padEnd(22)} ${bar} ${rating.color(String(cs.score).padStart(3))}`);
|
|
267
|
+
}
|
|
268
|
+
console.log('');
|
|
269
|
+
}
|
|
270
|
+
function outputJson(report) {
|
|
271
|
+
const output = {
|
|
272
|
+
...report,
|
|
273
|
+
runAt: report.runAt.toISOString(),
|
|
274
|
+
period: {
|
|
275
|
+
...report.period,
|
|
276
|
+
start: report.period.start.toISOString(),
|
|
277
|
+
end: report.period.end.toISOString(),
|
|
278
|
+
},
|
|
279
|
+
};
|
|
280
|
+
console.log(JSON.stringify(output, null, 2));
|
|
281
|
+
}
|
|
282
|
+
// ============================================================================
|
|
283
|
+
// Supabase Sync
|
|
284
|
+
// ============================================================================
|
|
285
|
+
async function syncToSupabase(report) {
|
|
286
|
+
console.log(chalk.dim('\nSyncing to dashboard...'));
|
|
287
|
+
// Load auth token
|
|
288
|
+
const { loadAuthSession } = await import('../../utils/auth-storage.js');
|
|
289
|
+
const { loadGraphConfig } = await import('../graph/config.js');
|
|
290
|
+
const session = await loadAuthSession();
|
|
291
|
+
const token = session?.api_key || null;
|
|
292
|
+
if (!token) {
|
|
293
|
+
console.log(chalk.yellow('⚠ Not authenticated. Run `ginko login` to sync insights.'));
|
|
294
|
+
console.log(chalk.dim('Results saved locally only'));
|
|
295
|
+
return;
|
|
296
|
+
}
|
|
297
|
+
// Get API URL from graph config or environment
|
|
298
|
+
const graphConfig = await loadGraphConfig();
|
|
299
|
+
const apiUrl = graphConfig?.apiEndpoint || process.env.GINKO_API_URL || 'https://app.ginkoai.com';
|
|
300
|
+
// Prepare request payload
|
|
301
|
+
const payload = {
|
|
302
|
+
userId: report.userId,
|
|
303
|
+
projectId: report.projectId,
|
|
304
|
+
graphId: graphConfig?.graphId,
|
|
305
|
+
overallScore: report.overallScore,
|
|
306
|
+
categoryScores: report.categoryScores,
|
|
307
|
+
insights: report.insights,
|
|
308
|
+
summary: report.summary,
|
|
309
|
+
period: {
|
|
310
|
+
start: report.period.start.toISOString(),
|
|
311
|
+
end: report.period.end.toISOString(),
|
|
312
|
+
days: report.period.days,
|
|
313
|
+
},
|
|
314
|
+
};
|
|
315
|
+
try {
|
|
316
|
+
const response = await fetch(`${apiUrl}/api/v1/insights/sync`, {
|
|
317
|
+
method: 'POST',
|
|
318
|
+
headers: {
|
|
319
|
+
'Content-Type': 'application/json',
|
|
320
|
+
'Authorization': `Bearer ${token}`,
|
|
321
|
+
},
|
|
322
|
+
body: JSON.stringify(payload),
|
|
323
|
+
});
|
|
324
|
+
if (!response.ok) {
|
|
325
|
+
const errorData = await response.json().catch(() => ({}));
|
|
326
|
+
throw new Error(errorData.error || `HTTP ${response.status}`);
|
|
327
|
+
}
|
|
328
|
+
const result = await response.json();
|
|
329
|
+
console.log(chalk.green('✓ Insights synced to dashboard'));
|
|
330
|
+
console.log(chalk.dim(` Run ID: ${result.runId}`));
|
|
331
|
+
console.log(chalk.dim(` Insights: ${result.insightCount} | Trends: ${result.trendCount}`));
|
|
332
|
+
}
|
|
333
|
+
catch (error) {
|
|
334
|
+
console.log(chalk.yellow(`⚠ Sync failed: ${error instanceof Error ? error.message : String(error)}`));
|
|
335
|
+
console.log(chalk.dim('Results saved locally only'));
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
// ============================================================================
|
|
339
|
+
// Helper Functions
|
|
340
|
+
// ============================================================================
|
|
341
|
+
function getScoreRating(score) {
|
|
342
|
+
for (const rating of SCORE_RATINGS) {
|
|
343
|
+
if (score >= rating.min) {
|
|
344
|
+
return rating;
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
return SCORE_RATINGS[SCORE_RATINGS.length - 1];
|
|
348
|
+
}
|
|
349
|
+
function getSeverityColor(severity) {
|
|
350
|
+
switch (severity) {
|
|
351
|
+
case 'critical':
|
|
352
|
+
return chalk.red;
|
|
353
|
+
case 'warning':
|
|
354
|
+
return chalk.yellow;
|
|
355
|
+
case 'suggestion':
|
|
356
|
+
return chalk.cyan;
|
|
357
|
+
case 'info':
|
|
358
|
+
default:
|
|
359
|
+
return chalk.white;
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
function generateScoreBar(score, width = 20) {
|
|
363
|
+
const filled = Math.round((score / 100) * width);
|
|
364
|
+
const empty = width - filled;
|
|
365
|
+
const rating = getScoreRating(score);
|
|
366
|
+
return rating.color('█'.repeat(filled)) + chalk.dim('░'.repeat(empty));
|
|
367
|
+
}
|
|
368
|
+
export default insightsCommand;
|
|
369
|
+
//# sourceMappingURL=insights-command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"insights-command.js","sourceRoot":"","sources":["../../../src/commands/insights/insights-command.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileType: command
|
|
3
|
+
* @status: current
|
|
4
|
+
* @updated: 2025-12-16
|
|
5
|
+
* @tags: [cli, principles, seeding, graph-sync]
|
|
6
|
+
* @related: [standard-principles.ts, graph-api-client.ts]
|
|
7
|
+
* @priority: medium
|
|
8
|
+
* @complexity: medium
|
|
9
|
+
* @dependencies: [commander, chalk]
|
|
10
|
+
*/
|
|
11
|
+
import { Command } from 'commander';
|
|
12
|
+
interface SeedOptions {
|
|
13
|
+
dryRun?: boolean;
|
|
14
|
+
force?: boolean;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Seed standard principles to the knowledge graph.
|
|
18
|
+
* This command creates Principle nodes for all standard best practices.
|
|
19
|
+
*/
|
|
20
|
+
export declare function seedPrinciples(options?: SeedOptions): Promise<void>;
|
|
21
|
+
/**
|
|
22
|
+
* Create the principles seed command for the CLI.
|
|
23
|
+
*/
|
|
24
|
+
export declare function createSeedCommand(): Command;
|
|
25
|
+
export default createSeedCommand;
|
|
26
|
+
//# sourceMappingURL=seed.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seed.d.ts","sourceRoot":"","sources":["../../../src/commands/principles/seed.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,UAAU,WAAW;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4H7E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAU3C;AAED,eAAe,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileType: command
|
|
3
|
+
* @status: current
|
|
4
|
+
* @updated: 2025-12-16
|
|
5
|
+
* @tags: [cli, principles, seeding, graph-sync]
|
|
6
|
+
* @related: [standard-principles.ts, graph-api-client.ts]
|
|
7
|
+
* @priority: medium
|
|
8
|
+
* @complexity: medium
|
|
9
|
+
* @dependencies: [commander, chalk]
|
|
10
|
+
*/
|
|
11
|
+
import { Command } from 'commander';
|
|
12
|
+
import chalk from 'chalk';
|
|
13
|
+
import { STANDARD_PRINCIPLES } from '../../data/standard-principles';
|
|
14
|
+
/**
|
|
15
|
+
* Seed standard principles to the knowledge graph.
|
|
16
|
+
* This command creates Principle nodes for all standard best practices.
|
|
17
|
+
*/
|
|
18
|
+
export async function seedPrinciples(options = {}) {
|
|
19
|
+
const { dryRun = false, force = false } = options;
|
|
20
|
+
console.log(chalk.cyan('\n📚 Ginko Principles Seeder\n'));
|
|
21
|
+
console.log(chalk.dim(`Found ${STANDARD_PRINCIPLES.length} standard principles to seed\n`));
|
|
22
|
+
if (dryRun) {
|
|
23
|
+
console.log(chalk.yellow('🔍 Dry run mode - no changes will be made\n'));
|
|
24
|
+
}
|
|
25
|
+
// Display principles to be seeded
|
|
26
|
+
for (const principle of STANDARD_PRINCIPLES) {
|
|
27
|
+
const statusIcon = principle.status === 'active' ? '✅' : '⚠️';
|
|
28
|
+
console.log(`${statusIcon} ${chalk.bold(principle.principle_id)}: ${principle.name}`);
|
|
29
|
+
console.log(chalk.dim(` Source: ${principle.source}`));
|
|
30
|
+
if (principle.related_adrs?.length) {
|
|
31
|
+
console.log(chalk.dim(` ADRs: ${principle.related_adrs.join(', ')}`));
|
|
32
|
+
}
|
|
33
|
+
console.log();
|
|
34
|
+
}
|
|
35
|
+
if (dryRun) {
|
|
36
|
+
console.log(chalk.yellow('\n✓ Dry run complete. Use --force to actually seed.\n'));
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
// Check for graph configuration
|
|
40
|
+
const graphId = process.env.GINKO_GRAPH_ID;
|
|
41
|
+
const bearerToken = process.env.GINKO_BEARER_TOKEN;
|
|
42
|
+
if (!graphId || !bearerToken) {
|
|
43
|
+
console.log(chalk.yellow('\n⚠️ Graph credentials not found.'));
|
|
44
|
+
console.log(chalk.dim(' Set GINKO_GRAPH_ID and GINKO_BEARER_TOKEN to seed to graph.'));
|
|
45
|
+
console.log(chalk.dim(' Principles are defined in packages/cli/src/data/standard-principles.ts\n'));
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
// Seed to graph API
|
|
49
|
+
console.log(chalk.cyan('\n🌐 Seeding principles to graph...\n'));
|
|
50
|
+
let successCount = 0;
|
|
51
|
+
let skipCount = 0;
|
|
52
|
+
let errorCount = 0;
|
|
53
|
+
for (const principle of STANDARD_PRINCIPLES) {
|
|
54
|
+
try {
|
|
55
|
+
const response = await fetch('https://app.ginkoai.com/api/v1/graph/nodes', {
|
|
56
|
+
method: 'POST',
|
|
57
|
+
headers: {
|
|
58
|
+
'Authorization': `Bearer ${bearerToken}`,
|
|
59
|
+
'Content-Type': 'application/json'
|
|
60
|
+
},
|
|
61
|
+
body: JSON.stringify({
|
|
62
|
+
graphId,
|
|
63
|
+
label: 'Principle',
|
|
64
|
+
properties: {
|
|
65
|
+
principle_id: principle.principle_id,
|
|
66
|
+
name: principle.name,
|
|
67
|
+
theory: principle.theory,
|
|
68
|
+
type: principle.type,
|
|
69
|
+
status: principle.status,
|
|
70
|
+
source: principle.source,
|
|
71
|
+
related_patterns: principle.related_patterns || [],
|
|
72
|
+
related_adrs: principle.related_adrs || [],
|
|
73
|
+
version: principle.version
|
|
74
|
+
}
|
|
75
|
+
})
|
|
76
|
+
});
|
|
77
|
+
if (response.ok) {
|
|
78
|
+
console.log(chalk.green(` ✓ ${principle.principle_id}: ${principle.name}`));
|
|
79
|
+
successCount++;
|
|
80
|
+
}
|
|
81
|
+
else if (response.status === 409) {
|
|
82
|
+
// Already exists
|
|
83
|
+
if (force) {
|
|
84
|
+
// Update existing
|
|
85
|
+
const updateResponse = await fetch(`https://app.ginkoai.com/api/v1/graph/nodes/${principle.principle_id}`, {
|
|
86
|
+
method: 'PATCH',
|
|
87
|
+
headers: {
|
|
88
|
+
'Authorization': `Bearer ${bearerToken}`,
|
|
89
|
+
'Content-Type': 'application/json'
|
|
90
|
+
},
|
|
91
|
+
body: JSON.stringify({
|
|
92
|
+
graphId,
|
|
93
|
+
properties: {
|
|
94
|
+
name: principle.name,
|
|
95
|
+
theory: principle.theory,
|
|
96
|
+
type: principle.type,
|
|
97
|
+
status: principle.status,
|
|
98
|
+
source: principle.source,
|
|
99
|
+
related_patterns: principle.related_patterns || [],
|
|
100
|
+
related_adrs: principle.related_adrs || [],
|
|
101
|
+
version: principle.version
|
|
102
|
+
}
|
|
103
|
+
})
|
|
104
|
+
});
|
|
105
|
+
if (updateResponse.ok) {
|
|
106
|
+
console.log(chalk.blue(` ↻ ${principle.principle_id}: Updated`));
|
|
107
|
+
successCount++;
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
console.log(chalk.yellow(` ⚠ ${principle.principle_id}: Update failed`));
|
|
111
|
+
errorCount++;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
console.log(chalk.dim(` ○ ${principle.principle_id}: Already exists (use --force to update)`));
|
|
116
|
+
skipCount++;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
const error = await response.text();
|
|
121
|
+
console.log(chalk.red(` ✗ ${principle.principle_id}: Failed - ${error}`));
|
|
122
|
+
errorCount++;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
catch (error) {
|
|
126
|
+
console.log(chalk.red(` ✗ ${principle.principle_id}: ${error instanceof Error ? error.message : 'Unknown error'}`));
|
|
127
|
+
errorCount++;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
// Summary
|
|
131
|
+
console.log(chalk.cyan('\n📊 Seeding Summary'));
|
|
132
|
+
console.log(` Created: ${chalk.green(successCount)}`);
|
|
133
|
+
console.log(` Skipped: ${chalk.dim(skipCount)}`);
|
|
134
|
+
console.log(` Errors: ${errorCount > 0 ? chalk.red(errorCount) : chalk.dim(errorCount)}\n`);
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Create the principles seed command for the CLI.
|
|
138
|
+
*/
|
|
139
|
+
export function createSeedCommand() {
|
|
140
|
+
const command = new Command('seed')
|
|
141
|
+
.description('Seed standard principles to the knowledge graph')
|
|
142
|
+
.option('--dry-run', 'Show what would be seeded without making changes')
|
|
143
|
+
.option('--force', 'Update existing principles instead of skipping')
|
|
144
|
+
.action(async (options) => {
|
|
145
|
+
await seedPrinciples(options);
|
|
146
|
+
});
|
|
147
|
+
return command;
|
|
148
|
+
}
|
|
149
|
+
export default createSeedCommand;
|
|
150
|
+
//# sourceMappingURL=seed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seed.js","sourceRoot":"","sources":["../../../src/commands/principles/seed.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,6 +20,11 @@ export declare class StartReflectionCommand extends ReflectionCommand {
|
|
|
20
20
|
* Parse intent for session initialization
|
|
21
21
|
*/
|
|
22
22
|
private parseIntent;
|
|
23
|
+
/**
|
|
24
|
+
* Check for unsynced knowledge nodes (TASK-5)
|
|
25
|
+
* Returns count of nodes edited in dashboard but not synced to git
|
|
26
|
+
*/
|
|
27
|
+
private checkUnsyncedNodes;
|
|
23
28
|
/**
|
|
24
29
|
* Convert graph API sprint response to local SprintChecklist format
|
|
25
30
|
* Enables graph-first loading with seamless fallback to local files
|
|
@@ -124,6 +129,12 @@ export declare class StartReflectionCommand extends ReflectionCommand {
|
|
|
124
129
|
* Initialize session logging (ADR-033)
|
|
125
130
|
*/
|
|
126
131
|
private initializeSessionLog;
|
|
132
|
+
/**
|
|
133
|
+
* Run scheduled insights updates in the background.
|
|
134
|
+
* Checks which periods (1-day, 7-day, 30-day) need updates and runs them.
|
|
135
|
+
* Non-blocking - runs asynchronously without awaiting completion.
|
|
136
|
+
*/
|
|
137
|
+
private runScheduledInsights;
|
|
127
138
|
}
|
|
128
139
|
export default StartReflectionCommand;
|
|
129
140
|
//# sourceMappingURL=start-reflection.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start-reflection.d.ts","sourceRoot":"","sources":["../../../src/commands/start/start-reflection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"start-reflection.d.ts","sourceRoot":"","sources":["../../../src/commands/start/start-reflection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAmCrE;;;GAGG;AACH,qBAAa,sBAAuB,SAAQ,iBAAiB;IAC3D,OAAO,CAAC,cAAc,CAAuB;;IAQ7C;;OAEG;IACH,OAAO,CAAC,WAAW;IAQnB;;;OAGG;YACW,kBAAkB;IAmChC;;;;OAIG;IACH,OAAO,CAAC,6BAA6B;IA8ErC;;OAEG;IACG,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,GAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAkR/D;;;;;OAKG;YACW,kBAAkB;IA6VhC;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,GAAG,CAAC;IA+BlC;;OAEG;IACG,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;IAsDlF;;OAEG;YACW,WAAW;IAuBzB;;OAEG;YACW,0BAA0B;IA2DxC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAqB1B;;OAEG;YACW,aAAa;IAM3B;;OAEG;YACW,iBAAiB;IAU/B;;OAEG;YACW,WAAW;IAKzB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAW5B;;OAEG;IACH,OAAO,CAAC,4BAA4B;IA6BpC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA4CzB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA2B9B;;OAEG;IACG,aAAa,CAAC,YAAY,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAmCpD;;OAEG;IACH,OAAO,CAAC,mBAAmB,CAAC,CAI1B;IAEF;;;;;OAKG;YACW,iBAAiB;IAwI/B;;;;;OAKG;YACW,cAAc;IA6I5B;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;IAM5B;;;;OAIG;YACW,cAAc;IAa5B;;OAEG;YACW,oBAAoB;IAuBlC;;;;OAIG;YACW,oBAAoB;CAsDnC;AAGD,eAAe,sBAAsB,CAAC"}
|