@benchcubed/today-cli 1.0.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/README.md +296 -0
- package/dist/ai/bedrock-client.d.ts +1 -0
- package/dist/ai/bedrock-client.d.ts.map +1 -0
- package/dist/ai/bedrock-client.js +2 -0
- package/dist/ai/bedrock-client.js.map +1 -0
- package/dist/ai/knowledge-processor.d.ts +1 -0
- package/dist/ai/knowledge-processor.d.ts.map +1 -0
- package/dist/ai/knowledge-processor.js +2 -0
- package/dist/ai/knowledge-processor.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +70 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/ask.d.ts +3 -0
- package/dist/commands/ask.d.ts.map +1 -0
- package/dist/commands/ask.js +217 -0
- package/dist/commands/ask.js.map +1 -0
- package/dist/commands/audit.d.ts +3 -0
- package/dist/commands/audit.d.ts.map +1 -0
- package/dist/commands/audit.js +153 -0
- package/dist/commands/audit.js.map +1 -0
- package/dist/commands/auth.d.ts +3 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +114 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/config.d.ts +3 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +72 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/embeddings.d.ts +3 -0
- package/dist/commands/embeddings.d.ts.map +1 -0
- package/dist/commands/embeddings.js +118 -0
- package/dist/commands/embeddings.js.map +1 -0
- package/dist/commands/experts.d.ts +3 -0
- package/dist/commands/experts.d.ts.map +1 -0
- package/dist/commands/experts.js +129 -0
- package/dist/commands/experts.js.map +1 -0
- package/dist/commands/export-import.d.ts +4 -0
- package/dist/commands/export-import.d.ts.map +1 -0
- package/dist/commands/export-import.js +285 -0
- package/dist/commands/export-import.js.map +1 -0
- package/dist/commands/git.d.ts +4 -0
- package/dist/commands/git.d.ts.map +1 -0
- package/dist/commands/git.js +274 -0
- package/dist/commands/git.js.map +1 -0
- package/dist/commands/impact.d.ts +3 -0
- package/dist/commands/impact.d.ts.map +1 -0
- package/dist/commands/impact.js +121 -0
- package/dist/commands/impact.js.map +1 -0
- package/dist/commands/insights.d.ts +3 -0
- package/dist/commands/insights.d.ts.map +1 -0
- package/dist/commands/insights.js +113 -0
- package/dist/commands/insights.js.map +1 -0
- package/dist/commands/learned.d.ts +3 -0
- package/dist/commands/learned.d.ts.map +1 -0
- package/dist/commands/learned.js +355 -0
- package/dist/commands/learned.js.map +1 -0
- package/dist/commands/onboard.d.ts +3 -0
- package/dist/commands/onboard.d.ts.map +1 -0
- package/dist/commands/onboard.js +141 -0
- package/dist/commands/onboard.js.map +1 -0
- package/dist/commands/recent.d.ts +3 -0
- package/dist/commands/recent.d.ts.map +1 -0
- package/dist/commands/recent.js +83 -0
- package/dist/commands/recent.js.map +1 -0
- package/dist/commands/secrets.d.ts +3 -0
- package/dist/commands/secrets.d.ts.map +1 -0
- package/dist/commands/secrets.js +203 -0
- package/dist/commands/secrets.js.map +1 -0
- package/dist/commands/stats.d.ts +3 -0
- package/dist/commands/stats.d.ts.map +1 -0
- package/dist/commands/stats.js +120 -0
- package/dist/commands/stats.js.map +1 -0
- package/dist/config/index.d.ts +12 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +46 -0
- package/dist/config/index.js.map +1 -0
- package/dist/database/migrations.d.ts +13 -0
- package/dist/database/migrations.d.ts.map +1 -0
- package/dist/database/migrations.js +190 -0
- package/dist/database/migrations.js.map +1 -0
- package/dist/database/postgresql.d.ts +92 -0
- package/dist/database/postgresql.d.ts.map +1 -0
- package/dist/database/postgresql.js +382 -0
- package/dist/database/postgresql.js.map +1 -0
- package/dist/database/sqlite.d.ts +54 -0
- package/dist/database/sqlite.d.ts.map +1 -0
- package/dist/database/sqlite.js +337 -0
- package/dist/database/sqlite.js.map +1 -0
- package/dist/lambda/admin.d.ts +3 -0
- package/dist/lambda/admin.d.ts.map +1 -0
- package/dist/lambda/admin.js +818 -0
- package/dist/lambda/admin.js.map +1 -0
- package/dist/lambda/ai-services.d.ts +6 -0
- package/dist/lambda/ai-services.d.ts.map +1 -0
- package/dist/lambda/ai-services.js +472 -0
- package/dist/lambda/ai-services.js.map +1 -0
- package/dist/lambda/analytics.d.ts +3 -0
- package/dist/lambda/analytics.d.ts.map +1 -0
- package/dist/lambda/analytics.js +481 -0
- package/dist/lambda/analytics.js.map +1 -0
- package/dist/lambda/api-router.d.ts +3 -0
- package/dist/lambda/api-router.d.ts.map +1 -0
- package/dist/lambda/api-router.js +162 -0
- package/dist/lambda/api-router.js.map +1 -0
- package/dist/lambda/custom-topics.d.ts +3 -0
- package/dist/lambda/custom-topics.d.ts.map +1 -0
- package/dist/lambda/custom-topics.js +425 -0
- package/dist/lambda/custom-topics.js.map +1 -0
- package/dist/lambda/graph-builder.d.ts +3 -0
- package/dist/lambda/graph-builder.d.ts.map +1 -0
- package/dist/lambda/graph-builder.js +442 -0
- package/dist/lambda/graph-builder.js.map +1 -0
- package/dist/lambda/knowledge-ai.d.ts +3 -0
- package/dist/lambda/knowledge-ai.d.ts.map +1 -0
- package/dist/lambda/knowledge-ai.js +849 -0
- package/dist/lambda/knowledge-ai.js.map +1 -0
- package/dist/lambda/post-confirmation.d.ts +8 -0
- package/dist/lambda/post-confirmation.d.ts.map +1 -0
- package/dist/lambda/post-confirmation.js +92 -0
- package/dist/lambda/post-confirmation.js.map +1 -0
- package/dist/lambda/teams.d.ts +3 -0
- package/dist/lambda/teams.d.ts.map +1 -0
- package/dist/lambda/teams.js +568 -0
- package/dist/lambda/teams.js.map +1 -0
- package/dist/lib/export-helpers.d.ts +5 -0
- package/dist/lib/export-helpers.d.ts.map +1 -0
- package/dist/lib/export-helpers.js +137 -0
- package/dist/lib/export-helpers.js.map +1 -0
- package/dist/lib/import-helpers.d.ts +5 -0
- package/dist/lib/import-helpers.d.ts.map +1 -0
- package/dist/lib/import-helpers.js +185 -0
- package/dist/lib/import-helpers.js.map +1 -0
- package/dist/lib/insights-helpers.d.ts +123 -0
- package/dist/lib/insights-helpers.d.ts.map +1 -0
- package/dist/lib/insights-helpers.js +374 -0
- package/dist/lib/insights-helpers.js.map +1 -0
- package/dist/lib/search-helpers.d.ts +4 -0
- package/dist/lib/search-helpers.d.ts.map +1 -0
- package/dist/lib/search-helpers.js +124 -0
- package/dist/lib/search-helpers.js.map +1 -0
- package/dist/lib/secret-helpers.d.ts +2 -0
- package/dist/lib/secret-helpers.d.ts.map +1 -0
- package/dist/lib/secret-helpers.js +85 -0
- package/dist/lib/secret-helpers.js.map +1 -0
- package/dist/lib/stats-helpers.d.ts +41 -0
- package/dist/lib/stats-helpers.d.ts.map +1 -0
- package/dist/lib/stats-helpers.js +263 -0
- package/dist/lib/stats-helpers.js.map +1 -0
- package/dist/services/aws-api.d.ts +81 -0
- package/dist/services/aws-api.d.ts.map +1 -0
- package/dist/services/aws-api.js +388 -0
- package/dist/services/aws-api.js.map +1 -0
- package/dist/services/bedrock.d.ts +83 -0
- package/dist/services/bedrock.d.ts.map +1 -0
- package/dist/services/bedrock.js +434 -0
- package/dist/services/bedrock.js.map +1 -0
- package/dist/services/commit-learnings.d.ts +25 -0
- package/dist/services/commit-learnings.d.ts.map +1 -0
- package/dist/services/commit-learnings.js +180 -0
- package/dist/services/commit-learnings.js.map +1 -0
- package/dist/services/embedding-storage.d.ts +42 -0
- package/dist/services/embedding-storage.d.ts.map +1 -0
- package/dist/services/embedding-storage.js +124 -0
- package/dist/services/embedding-storage.js.map +1 -0
- package/dist/services/expert-engine.d.ts +21 -0
- package/dist/services/expert-engine.d.ts.map +1 -0
- package/dist/services/expert-engine.js +58 -0
- package/dist/services/expert-engine.js.map +1 -0
- package/dist/services/onboarding-accelerator.d.ts +118 -0
- package/dist/services/onboarding-accelerator.d.ts.map +1 -0
- package/dist/services/onboarding-accelerator.js +403 -0
- package/dist/services/onboarding-accelerator.js.map +1 -0
- package/dist/services/secret-detection.d.ts +46 -0
- package/dist/services/secret-detection.d.ts.map +1 -0
- package/dist/services/secret-detection.js +75 -0
- package/dist/services/secret-detection.js.map +1 -0
- package/dist/services/secret-manager-simple.d.ts +51 -0
- package/dist/services/secret-manager-simple.d.ts.map +1 -0
- package/dist/services/secret-manager-simple.js +119 -0
- package/dist/services/secret-manager-simple.js.map +1 -0
- package/dist/services/secret-manager.d.ts +150 -0
- package/dist/services/secret-manager.d.ts.map +1 -0
- package/dist/services/secret-manager.js +287 -0
- package/dist/services/secret-manager.js.map +1 -0
- package/dist/services/vector-embeddings.d.ts +70 -0
- package/dist/services/vector-embeddings.d.ts.map +1 -0
- package/dist/services/vector-embeddings.js +167 -0
- package/dist/services/vector-embeddings.js.map +1 -0
- package/dist/services/vector-search.d.ts +28 -0
- package/dist/services/vector-search.d.ts.map +1 -0
- package/dist/services/vector-search.js +192 -0
- package/dist/services/vector-search.js.map +1 -0
- package/dist/types/index.d.ts +86 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +4 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/formatting.d.ts +10 -0
- package/dist/utils/formatting.d.ts.map +1 -0
- package/dist/utils/formatting.js +82 -0
- package/dist/utils/formatting.js.map +1 -0
- package/dist/utils/git.d.ts +52 -0
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/utils/git.js +182 -0
- package/dist/utils/git.js.map +1 -0
- package/dist/utils/validation.d.ts +17 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +187 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +81 -0
|
@@ -0,0 +1,374 @@
|
|
|
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.generateComprehensiveInsights = generateComprehensiveInsights;
|
|
7
|
+
exports.analyzeLearningPatterns = analyzeLearningPatterns;
|
|
8
|
+
exports.identifyKnowledgeGaps = identifyKnowledgeGaps;
|
|
9
|
+
exports.analyzeExpertiseDistribution = analyzeExpertiseDistribution;
|
|
10
|
+
exports.calculateLearningVelocity = calculateLearningVelocity;
|
|
11
|
+
exports.generateActionableRecommendations = generateActionableRecommendations;
|
|
12
|
+
exports.generateInsightsSummary = generateInsightsSummary;
|
|
13
|
+
exports.identifyTopicClusters = identifyTopicClusters;
|
|
14
|
+
exports.displayComprehensiveInsights = displayComprehensiveInsights;
|
|
15
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
16
|
+
// Comprehensive insights generation functions
|
|
17
|
+
async function generateComprehensiveInsights(entries, isTeam, _detailed) {
|
|
18
|
+
// Analyze learning patterns
|
|
19
|
+
const patterns = analyzeLearningPatterns(entries);
|
|
20
|
+
// Identify knowledge gaps
|
|
21
|
+
const gaps = identifyKnowledgeGaps(entries, patterns);
|
|
22
|
+
// Generate expertise analysis
|
|
23
|
+
const expertise = analyzeExpertiseDistribution(entries);
|
|
24
|
+
// Calculate learning velocity and trends
|
|
25
|
+
const velocity = calculateLearningVelocity(entries);
|
|
26
|
+
// Generate actionable recommendations
|
|
27
|
+
const recommendations = generateActionableRecommendations(patterns, gaps, expertise, velocity, isTeam);
|
|
28
|
+
return {
|
|
29
|
+
patterns,
|
|
30
|
+
gaps,
|
|
31
|
+
expertise,
|
|
32
|
+
velocity,
|
|
33
|
+
recommendations,
|
|
34
|
+
summary: generateInsightsSummary(patterns, gaps, expertise, velocity, isTeam)
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
function analyzeLearningPatterns(entries) {
|
|
38
|
+
// Topic frequency analysis
|
|
39
|
+
const topicFrequency = new Map();
|
|
40
|
+
const topicImpact = new Map();
|
|
41
|
+
const topicRecency = new Map();
|
|
42
|
+
entries.forEach(entry => {
|
|
43
|
+
const entryDate = new Date(entry.createdAt);
|
|
44
|
+
entry.aiTopics.forEach((topic) => {
|
|
45
|
+
topicFrequency.set(topic, (topicFrequency.get(topic) || 0) + 1);
|
|
46
|
+
topicImpact.set(topic, (topicImpact.get(topic) || 0) + entry.impactScore);
|
|
47
|
+
const currentRecent = topicRecency.get(topic);
|
|
48
|
+
if (!currentRecent || entryDate > currentRecent) {
|
|
49
|
+
topicRecency.set(topic, entryDate);
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
// Identify trending topics (high frequency + recent activity)
|
|
54
|
+
const trendingTopics = Array.from(topicFrequency.entries())
|
|
55
|
+
.map(([topic, frequency]) => ({
|
|
56
|
+
topic,
|
|
57
|
+
frequency,
|
|
58
|
+
avgImpact: (topicImpact.get(topic) || 0) / frequency,
|
|
59
|
+
lastActivity: topicRecency.get(topic),
|
|
60
|
+
trendScore: frequency * (topicImpact.get(topic) || 0) / frequency
|
|
61
|
+
}))
|
|
62
|
+
.sort((a, b) => b.trendScore - a.trendScore);
|
|
63
|
+
// Identify learning clusters (related topics)
|
|
64
|
+
const clusters = identifyTopicClusters(trendingTopics);
|
|
65
|
+
return {
|
|
66
|
+
trendingTopics: trendingTopics.slice(0, 10),
|
|
67
|
+
clusters,
|
|
68
|
+
totalTopics: topicFrequency.size,
|
|
69
|
+
avgTopicsPerEntry: Array.from(topicFrequency.values()).reduce((a, b) => a + b, 0) / entries.length
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
function identifyKnowledgeGaps(entries, patterns) {
|
|
73
|
+
const gaps = [];
|
|
74
|
+
// Identify topics with low impact scores (potential knowledge gaps)
|
|
75
|
+
const lowImpactTopics = patterns.trendingTopics
|
|
76
|
+
.filter((topic) => topic.avgImpact < 6)
|
|
77
|
+
.slice(0, 5);
|
|
78
|
+
if (lowImpactTopics.length > 0) {
|
|
79
|
+
gaps.push({
|
|
80
|
+
type: 'low_impact',
|
|
81
|
+
description: 'Topics with lower impact scores may need deeper exploration',
|
|
82
|
+
topics: lowImpactTopics.map((t) => t.topic),
|
|
83
|
+
severity: 'medium'
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
// Identify expertise level gaps
|
|
87
|
+
const expertiseDistribution = entries.reduce((acc, entry) => {
|
|
88
|
+
acc[entry.expertiseLevel] = (acc[entry.expertiseLevel] || 0) + 1;
|
|
89
|
+
return acc;
|
|
90
|
+
}, {});
|
|
91
|
+
const expertRatio = (expertiseDistribution.expert || 0) / entries.length;
|
|
92
|
+
if (expertRatio < 0.2) {
|
|
93
|
+
gaps.push({
|
|
94
|
+
type: 'expertise_gap',
|
|
95
|
+
description: 'Limited expert-level knowledge entries suggest need for advanced learning',
|
|
96
|
+
severity: 'high',
|
|
97
|
+
recommendation: 'Focus on advanced topics and expert-level content'
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
// Identify stale knowledge areas (no recent activity)
|
|
101
|
+
const staleThreshold = new Date(Date.now() - 30 * 24 * 60 * 60 * 1000); // 30 days ago
|
|
102
|
+
const staleTopics = patterns.trendingTopics
|
|
103
|
+
.filter((topic) => topic.lastActivity < staleThreshold)
|
|
104
|
+
.slice(0, 3);
|
|
105
|
+
if (staleTopics.length > 0) {
|
|
106
|
+
gaps.push({
|
|
107
|
+
type: 'stale_knowledge',
|
|
108
|
+
description: 'Some knowledge areas haven\'t been updated recently',
|
|
109
|
+
topics: staleTopics.map((t) => t.topic),
|
|
110
|
+
severity: 'low'
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
return gaps;
|
|
114
|
+
}
|
|
115
|
+
function analyzeExpertiseDistribution(entries) {
|
|
116
|
+
const distribution = entries.reduce((acc, entry) => {
|
|
117
|
+
acc[entry.expertiseLevel] = (acc[entry.expertiseLevel] || 0) + 1;
|
|
118
|
+
return acc;
|
|
119
|
+
}, {});
|
|
120
|
+
const total = entries.length;
|
|
121
|
+
const percentages = {
|
|
122
|
+
beginner: ((distribution.beginner || 0) / total) * 100,
|
|
123
|
+
intermediate: ((distribution.intermediate || 0) / total) * 100,
|
|
124
|
+
expert: ((distribution.expert || 0) / total) * 100
|
|
125
|
+
};
|
|
126
|
+
// Identify expertise trends by analyzing recent vs older entries
|
|
127
|
+
const recentThreshold = new Date(Date.now() - 14 * 24 * 60 * 60 * 1000); // 2 weeks ago
|
|
128
|
+
const recentEntries = entries.filter(entry => new Date(entry.createdAt) >= recentThreshold);
|
|
129
|
+
const olderEntries = entries.filter(entry => new Date(entry.createdAt) < recentThreshold);
|
|
130
|
+
const recentExpertRatio = recentEntries.length > 0
|
|
131
|
+
? (recentEntries.filter((e) => e.expertiseLevel === 'expert').length / recentEntries.length)
|
|
132
|
+
: 0;
|
|
133
|
+
const olderExpertRatio = olderEntries.length > 0
|
|
134
|
+
? (olderEntries.filter((e) => e.expertiseLevel === 'expert').length / olderEntries.length)
|
|
135
|
+
: 0;
|
|
136
|
+
const expertiseTrend = recentExpertRatio > olderExpertRatio ? 'improving' :
|
|
137
|
+
recentExpertRatio < olderExpertRatio ? 'declining' : 'stable';
|
|
138
|
+
return {
|
|
139
|
+
distribution,
|
|
140
|
+
percentages,
|
|
141
|
+
expertiseTrend,
|
|
142
|
+
recentExpertRatio,
|
|
143
|
+
totalEntries: total
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
function calculateLearningVelocity(entries) {
|
|
147
|
+
// Group entries by week
|
|
148
|
+
const weeklyData = new Map();
|
|
149
|
+
entries.forEach(entry => {
|
|
150
|
+
const date = new Date(entry.createdAt);
|
|
151
|
+
const weekStart = new Date(date.getFullYear(), date.getMonth(), date.getDate() - date.getDay());
|
|
152
|
+
const weekKey = weekStart.toISOString().split('T')[0];
|
|
153
|
+
weeklyData.set(weekKey, (weeklyData.get(weekKey) || 0) + 1);
|
|
154
|
+
});
|
|
155
|
+
const weeks = Array.from(weeklyData.entries())
|
|
156
|
+
.sort((a, b) => a[0].localeCompare(b[0]))
|
|
157
|
+
.map(([week, count]) => ({ week, count }));
|
|
158
|
+
// Calculate velocity trend
|
|
159
|
+
const recentWeeks = weeks.slice(-4); // Last 4 weeks
|
|
160
|
+
const avgRecentVelocity = recentWeeks.length > 0
|
|
161
|
+
? recentWeeks.reduce((sum, w) => sum + w.count, 0) / recentWeeks.length
|
|
162
|
+
: 0;
|
|
163
|
+
const olderWeeks = weeks.slice(-8, -4); // 4 weeks before that
|
|
164
|
+
const avgOlderVelocity = olderWeeks.length > 0
|
|
165
|
+
? olderWeeks.reduce((sum, w) => sum + w.count, 0) / olderWeeks.length
|
|
166
|
+
: 0;
|
|
167
|
+
const velocityTrend = avgRecentVelocity > avgOlderVelocity ? 'accelerating' :
|
|
168
|
+
avgRecentVelocity < avgOlderVelocity ? 'slowing' : 'stable';
|
|
169
|
+
return {
|
|
170
|
+
weeklyData: weeks,
|
|
171
|
+
avgRecentVelocity,
|
|
172
|
+
avgOlderVelocity,
|
|
173
|
+
velocityTrend,
|
|
174
|
+
totalWeeks: weeks.length
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
function generateActionableRecommendations(patterns, gaps, expertise, velocity, isTeam) {
|
|
178
|
+
const recommendations = [];
|
|
179
|
+
// Learning velocity recommendations
|
|
180
|
+
if (velocity.velocityTrend === 'slowing') {
|
|
181
|
+
recommendations.push({
|
|
182
|
+
category: 'velocity',
|
|
183
|
+
priority: 'high',
|
|
184
|
+
title: 'Boost Learning Momentum',
|
|
185
|
+
description: 'Learning velocity has decreased recently',
|
|
186
|
+
actions: [
|
|
187
|
+
'Set daily learning goals (15-30 minutes)',
|
|
188
|
+
'Create learning accountability partnerships',
|
|
189
|
+
'Schedule regular knowledge sharing sessions'
|
|
190
|
+
]
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
// Expertise development recommendations
|
|
194
|
+
if (expertise.percentages.expert < 20) {
|
|
195
|
+
recommendations.push({
|
|
196
|
+
category: 'expertise',
|
|
197
|
+
priority: 'high',
|
|
198
|
+
title: 'Develop Expert-Level Knowledge',
|
|
199
|
+
description: `Only ${expertise.percentages.expert.toFixed(1)}% of knowledge entries are expert-level`,
|
|
200
|
+
actions: [
|
|
201
|
+
'Focus on advanced topics in your strongest areas',
|
|
202
|
+
'Seek mentorship from senior team members',
|
|
203
|
+
'Contribute to complex projects and document learnings'
|
|
204
|
+
]
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
// Topic diversification recommendations
|
|
208
|
+
if (patterns.clusters.length < 3) {
|
|
209
|
+
recommendations.push({
|
|
210
|
+
category: 'diversification',
|
|
211
|
+
priority: 'medium',
|
|
212
|
+
title: 'Expand Knowledge Breadth',
|
|
213
|
+
description: 'Learning is concentrated in few topic areas',
|
|
214
|
+
actions: [
|
|
215
|
+
'Explore adjacent technologies and concepts',
|
|
216
|
+
'Cross-train in different domains',
|
|
217
|
+
'Attend conferences or workshops in new areas'
|
|
218
|
+
]
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
// Knowledge gap recommendations
|
|
222
|
+
gaps.forEach(gap => {
|
|
223
|
+
if (gap.severity === 'high') {
|
|
224
|
+
recommendations.push({
|
|
225
|
+
category: 'gaps',
|
|
226
|
+
priority: 'high',
|
|
227
|
+
title: `Address ${gap.type.replace('_', ' ')}`,
|
|
228
|
+
description: gap.description,
|
|
229
|
+
actions: gap.recommendation ? [gap.recommendation] : [
|
|
230
|
+
'Schedule focused learning sessions',
|
|
231
|
+
'Find relevant resources and tutorials',
|
|
232
|
+
'Practice with hands-on projects'
|
|
233
|
+
]
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
});
|
|
237
|
+
// Team-specific recommendations
|
|
238
|
+
if (isTeam) {
|
|
239
|
+
recommendations.push({
|
|
240
|
+
category: 'collaboration',
|
|
241
|
+
priority: 'medium',
|
|
242
|
+
title: 'Enhance Knowledge Sharing',
|
|
243
|
+
description: 'Improve team learning collaboration',
|
|
244
|
+
actions: [
|
|
245
|
+
'Implement regular tech talks or lunch-and-learns',
|
|
246
|
+
'Create internal documentation standards',
|
|
247
|
+
'Establish peer review processes for learning content'
|
|
248
|
+
]
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
return recommendations.slice(0, 6); // Top 6 recommendations
|
|
252
|
+
}
|
|
253
|
+
function generateInsightsSummary(patterns, gaps, expertise, velocity, isTeam) {
|
|
254
|
+
const scope = isTeam ? 'team' : 'personal';
|
|
255
|
+
const topTopic = patterns.trendingTopics[0]?.topic || 'various topics';
|
|
256
|
+
const expertiseLevel = expertise.percentages.expert > 30 ? 'advanced' :
|
|
257
|
+
expertise.percentages.intermediate > 50 ? 'intermediate' : 'developing';
|
|
258
|
+
return {
|
|
259
|
+
overview: `Your ${scope} learning shows ${expertiseLevel} expertise with strong focus on ${topTopic}`,
|
|
260
|
+
velocity: `Learning velocity is ${velocity.velocityTrend} with ${velocity.avgRecentVelocity.toFixed(1)} entries per week`,
|
|
261
|
+
strengths: [
|
|
262
|
+
`${patterns.trendingTopics.length} active learning topics`,
|
|
263
|
+
`${expertise.percentages.expert.toFixed(1)}% expert-level content`,
|
|
264
|
+
`${velocity.totalWeeks} weeks of consistent learning`
|
|
265
|
+
],
|
|
266
|
+
opportunities: gaps.length > 0 ? gaps.map(g => g.description).slice(0, 2) : ['Continue current learning momentum']
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
function identifyTopicClusters(topics) {
|
|
270
|
+
// Simple clustering based on topic similarity (could be enhanced with ML)
|
|
271
|
+
const clusters = [];
|
|
272
|
+
const techClusters = {
|
|
273
|
+
'Frontend': ['react', 'javascript', 'typescript', 'css', 'html', 'vue', 'angular'],
|
|
274
|
+
'Backend': ['node', 'python', 'java', 'api', 'rest', 'graphql', 'microservices'],
|
|
275
|
+
'Cloud': ['aws', 'azure', 'gcp', 'lambda', 'docker', 'kubernetes', 'terraform'],
|
|
276
|
+
'Database': ['sql', 'mongodb', 'postgresql', 'redis', 'dynamodb', 'database'],
|
|
277
|
+
'DevOps': ['ci/cd', 'jenkins', 'github', 'deployment', 'monitoring', 'testing']
|
|
278
|
+
};
|
|
279
|
+
Object.entries(techClusters).forEach(([clusterName, keywords]) => {
|
|
280
|
+
const clusterTopics = topics.filter(topic => keywords.some(keyword => topic.topic.toLowerCase().includes(keyword.toLowerCase())));
|
|
281
|
+
if (clusterTopics.length > 0) {
|
|
282
|
+
clusters.push({
|
|
283
|
+
name: clusterName,
|
|
284
|
+
topics: clusterTopics.slice(0, 5),
|
|
285
|
+
strength: clusterTopics.reduce((sum, t) => sum + t.frequency, 0)
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
});
|
|
289
|
+
return clusters.sort((a, b) => b.strength - a.strength);
|
|
290
|
+
}
|
|
291
|
+
function displayComprehensiveInsights(insights, aiEnhanced, isTeam, detailed, bedrockAvailable) {
|
|
292
|
+
const scope = isTeam ? 'Team' : 'Personal';
|
|
293
|
+
console.log(chalk_1.default.blue(`\n📊 ${scope} AI Knowledge Insights & Recommendations`));
|
|
294
|
+
console.log(chalk_1.default.green('☁️ Comprehensive analysis from AWS cloud infrastructure'));
|
|
295
|
+
console.log('');
|
|
296
|
+
if (bedrockAvailable && aiEnhanced) {
|
|
297
|
+
console.log(chalk_1.default.green('🤖 Enhanced with Amazon Bedrock AI'));
|
|
298
|
+
console.log('');
|
|
299
|
+
}
|
|
300
|
+
// Overview
|
|
301
|
+
console.log(chalk_1.default.green('📊 Learning Overview:'));
|
|
302
|
+
console.log(chalk_1.default.gray(` ${insights.summary.overview}`));
|
|
303
|
+
console.log(chalk_1.default.gray(` ${insights.summary.velocity}`));
|
|
304
|
+
console.log('');
|
|
305
|
+
// Top trending topics
|
|
306
|
+
console.log(chalk_1.default.green('🔥 Trending Knowledge Areas:'));
|
|
307
|
+
insights.patterns.trendingTopics.slice(0, 5).forEach((topic, index) => {
|
|
308
|
+
const trendIcon = topic.frequency > 2 ? '📈' : '📊';
|
|
309
|
+
console.log(chalk_1.default.gray(` ${index + 1}. ${trendIcon} ${topic.topic} (${topic.frequency} entries, ${topic.avgImpact.toFixed(1)} avg impact)`));
|
|
310
|
+
});
|
|
311
|
+
console.log('');
|
|
312
|
+
// Knowledge clusters
|
|
313
|
+
if (insights.patterns.clusters.length > 0) {
|
|
314
|
+
console.log(chalk_1.default.green('🎯 Knowledge Clusters:'));
|
|
315
|
+
insights.patterns.clusters.slice(0, 3).forEach((cluster) => {
|
|
316
|
+
console.log(chalk_1.default.gray(` ${cluster.name}: ${cluster.topics.map((t) => t.topic).join(', ')}`));
|
|
317
|
+
});
|
|
318
|
+
console.log('');
|
|
319
|
+
}
|
|
320
|
+
// Expertise analysis
|
|
321
|
+
console.log(chalk_1.default.green('🎓 Expertise Distribution:'));
|
|
322
|
+
console.log(chalk_1.default.gray(` Expert: ${insights.expertise.percentages.expert.toFixed(1)}%`));
|
|
323
|
+
console.log(chalk_1.default.gray(` Intermediate: ${insights.expertise.percentages.intermediate.toFixed(1)}%`));
|
|
324
|
+
console.log(chalk_1.default.gray(` Beginner: ${insights.expertise.percentages.beginner.toFixed(1)}%`));
|
|
325
|
+
console.log(chalk_1.default.gray(` Trend: ${insights.expertise.expertiseTrend}`));
|
|
326
|
+
console.log('');
|
|
327
|
+
// Knowledge gaps (if any)
|
|
328
|
+
if (insights.gaps.length > 0) {
|
|
329
|
+
console.log(chalk_1.default.yellow('⚠️ Knowledge Gaps Identified:'));
|
|
330
|
+
insights.gaps.forEach((gap) => {
|
|
331
|
+
const severityColor = gap.severity === 'high' ? chalk_1.default.red :
|
|
332
|
+
gap.severity === 'medium' ? chalk_1.default.yellow : chalk_1.default.gray;
|
|
333
|
+
console.log(severityColor(` • ${gap.description}`));
|
|
334
|
+
if (gap.topics) {
|
|
335
|
+
console.log(chalk_1.default.gray(` Topics: ${gap.topics.join(', ')}`));
|
|
336
|
+
}
|
|
337
|
+
});
|
|
338
|
+
console.log('');
|
|
339
|
+
}
|
|
340
|
+
// Actionable recommendations
|
|
341
|
+
console.log(chalk_1.default.cyan('💡 Actionable Recommendations:'));
|
|
342
|
+
insights.recommendations.forEach((rec, index) => {
|
|
343
|
+
const priorityIcon = rec.priority === 'high' ? '🚨' : rec.priority === 'medium' ? '⚡' : '💡';
|
|
344
|
+
console.log(chalk_1.default.cyan(` ${index + 1}. ${priorityIcon} ${rec.title}`));
|
|
345
|
+
console.log(chalk_1.default.gray(` ${rec.description}`));
|
|
346
|
+
if (detailed) {
|
|
347
|
+
rec.actions.forEach((action) => {
|
|
348
|
+
console.log(chalk_1.default.gray(` • ${action}`));
|
|
349
|
+
});
|
|
350
|
+
}
|
|
351
|
+
console.log('');
|
|
352
|
+
});
|
|
353
|
+
// AI-enhanced insights from Bedrock
|
|
354
|
+
if (aiEnhanced && aiEnhanced.length > 0) {
|
|
355
|
+
console.log(chalk_1.default.green('🤖 Amazon Bedrock AI Insights:'));
|
|
356
|
+
aiEnhanced.forEach((insight, index) => {
|
|
357
|
+
console.log(chalk_1.default.gray(` ${index + 1}. ${insight}`));
|
|
358
|
+
});
|
|
359
|
+
console.log('');
|
|
360
|
+
}
|
|
361
|
+
// Learning velocity
|
|
362
|
+
if (detailed) {
|
|
363
|
+
console.log(chalk_1.default.green('📈 Learning Velocity:'));
|
|
364
|
+
console.log(chalk_1.default.gray(` Recent average: ${insights.velocity.avgRecentVelocity.toFixed(1)} entries/week`));
|
|
365
|
+
console.log(chalk_1.default.gray(` Trend: ${insights.velocity.velocityTrend}`));
|
|
366
|
+
console.log(chalk_1.default.gray(` Active weeks: ${insights.velocity.totalWeeks}`));
|
|
367
|
+
console.log('');
|
|
368
|
+
}
|
|
369
|
+
// Footer
|
|
370
|
+
console.log(chalk_1.default.green('🌐 All insights generated from real-time AWS cloud data'));
|
|
371
|
+
console.log(chalk_1.default.gray('💡 Use --detailed flag for specific action items'));
|
|
372
|
+
console.log(chalk_1.default.gray('🎯 Perfect for identifying team efficiency improvements'));
|
|
373
|
+
}
|
|
374
|
+
//# sourceMappingURL=insights-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"insights-helpers.js","sourceRoot":"","sources":["../../src/lib/insights-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare function performClientSideSemanticSearch(entries: any[], queryEmbedding: number[], _query: string): Promise<any[]>;
|
|
2
|
+
export declare function performHybridSearch(query: string, queryEmbedding: number[], awsApiService: any): Promise<any[]>;
|
|
3
|
+
export declare function calculateKeywordRelevance(entry: any, query: string): number;
|
|
4
|
+
//# sourceMappingURL=search-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-helpers.d.ts","sourceRoot":"","sources":["../../src/lib/search-helpers.ts"],"names":[],"mappings":"AAEA,wBAAsB,+BAA+B,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAU9H;AAED,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,aAAa,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAmDrH;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAoC3E"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Helper functions for vector search
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
+
var ownKeys = function(o) {
|
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
+
var ar = [];
|
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
+
return ar;
|
|
25
|
+
};
|
|
26
|
+
return ownKeys(o);
|
|
27
|
+
};
|
|
28
|
+
return function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
36
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
|
+
exports.performClientSideSemanticSearch = performClientSideSemanticSearch;
|
|
38
|
+
exports.performHybridSearch = performHybridSearch;
|
|
39
|
+
exports.calculateKeywordRelevance = calculateKeywordRelevance;
|
|
40
|
+
async function performClientSideSemanticSearch(entries, queryEmbedding, _query) {
|
|
41
|
+
// Use the vector search service which now supports S3 lazy-loading
|
|
42
|
+
const { vectorSearch } = await Promise.resolve().then(() => __importStar(require('../services/vector-search')));
|
|
43
|
+
const results = await vectorSearch(queryEmbedding, entries, 10, 0.6);
|
|
44
|
+
return results.map(r => ({
|
|
45
|
+
...entries.find((e) => e.id === r.id),
|
|
46
|
+
similarity: r.similarity
|
|
47
|
+
}));
|
|
48
|
+
}
|
|
49
|
+
async function performHybridSearch(query, queryEmbedding, awsApiService) {
|
|
50
|
+
// Get all entries for hybrid analysis
|
|
51
|
+
const allEntries = await awsApiService.getKnowledgeEntries(1000);
|
|
52
|
+
// Perform keyword search (40% weight)
|
|
53
|
+
const keywordResults = allEntries.filter((entry) => entry.content.toLowerCase().includes(query.toLowerCase()) ||
|
|
54
|
+
entry.aiTopics.some((topic) => topic.toLowerCase().includes(query.toLowerCase())));
|
|
55
|
+
// Perform semantic search (60% weight)
|
|
56
|
+
const semanticResults = await performClientSideSemanticSearch(allEntries, queryEmbedding, query);
|
|
57
|
+
// Combine results with weighted scoring
|
|
58
|
+
const combinedResults = new Map();
|
|
59
|
+
// Add keyword results with keyword score
|
|
60
|
+
keywordResults.forEach((entry) => {
|
|
61
|
+
const keywordScore = calculateKeywordRelevance(entry, query);
|
|
62
|
+
combinedResults.set(entry.id, {
|
|
63
|
+
...entry,
|
|
64
|
+
keywordScore,
|
|
65
|
+
semanticScore: 0,
|
|
66
|
+
combinedScore: keywordScore * 0.4
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
// Add or update with semantic scores
|
|
70
|
+
semanticResults.forEach((entry) => {
|
|
71
|
+
const existing = combinedResults.get(entry.id);
|
|
72
|
+
const semanticScore = entry.similarity || 0;
|
|
73
|
+
if (existing) {
|
|
74
|
+
// Update existing entry with semantic score
|
|
75
|
+
existing.semanticScore = semanticScore;
|
|
76
|
+
existing.combinedScore = existing.keywordScore * 0.4 + semanticScore * 0.6;
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
// Add new semantic-only result
|
|
80
|
+
combinedResults.set(entry.id, {
|
|
81
|
+
...entry,
|
|
82
|
+
keywordScore: 0,
|
|
83
|
+
semanticScore,
|
|
84
|
+
combinedScore: semanticScore * 0.6
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
// Sort by combined score and return top results
|
|
89
|
+
return Array.from(combinedResults.values())
|
|
90
|
+
.sort((a, b) => b.combinedScore - a.combinedScore)
|
|
91
|
+
.slice(0, 30);
|
|
92
|
+
}
|
|
93
|
+
function calculateKeywordRelevance(entry, query) {
|
|
94
|
+
const queryLower = query.toLowerCase();
|
|
95
|
+
const contentLower = entry.content.toLowerCase();
|
|
96
|
+
let score = 0;
|
|
97
|
+
// Exact phrase match (highest weight)
|
|
98
|
+
if (contentLower.includes(queryLower)) {
|
|
99
|
+
score += 10;
|
|
100
|
+
}
|
|
101
|
+
// Individual word matches
|
|
102
|
+
const queryWords = queryLower.split(/\s+/);
|
|
103
|
+
const contentWords = contentLower.split(/\s+/);
|
|
104
|
+
queryWords.forEach(queryWord => {
|
|
105
|
+
if (queryWord.length > 2) { // Skip very short words
|
|
106
|
+
const matches = contentWords.filter((word) => word.includes(queryWord)).length;
|
|
107
|
+
score += matches * 2;
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
// Topic matches
|
|
111
|
+
entry.aiTopics.forEach((topic) => {
|
|
112
|
+
if (topic.toLowerCase().includes(queryLower)) {
|
|
113
|
+
score += 5;
|
|
114
|
+
}
|
|
115
|
+
queryWords.forEach(queryWord => {
|
|
116
|
+
if (queryWord.length > 2 && topic.toLowerCase().includes(queryWord)) {
|
|
117
|
+
score += 3;
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
// Normalize score (0-10 scale)
|
|
122
|
+
return Math.min(score / 2, 10);
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=search-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-helpers.js","sourceRoot":"","sources":["../../src/lib/search-helpers.ts"],"names":[],"mappings":";AAAA,qCAAqC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAErC,0EAUC;AAED,kDAmDC;AAED,8DAoCC;AArGM,KAAK,UAAU,+BAA+B,CAAC,OAAc,EAAE,cAAwB,EAAE,MAAc;IAC5G,mEAAmE;IACnE,MAAM,EAAE,YAAY,EAAE,GAAG,wDAAa,2BAA2B,GAAC,CAAC;IAEnE,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,cAAc,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;IAErE,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACvB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;QAC1C,UAAU,EAAE,CAAC,CAAC,UAAU;KACzB,CAAC,CAAC,CAAC;AACN,CAAC;AAEM,KAAK,UAAU,mBAAmB,CAAC,KAAa,EAAE,cAAwB,EAAE,aAAkB;IACnG,sCAAsC;IACtC,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAEjE,sCAAsC;IACtC,MAAM,cAAc,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,KAAU,EAAE,EAAE,CACtD,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QACzD,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAC1F,CAAC;IAEF,uCAAuC;IACvC,MAAM,eAAe,GAAG,MAAM,+BAA+B,CAAC,UAAU,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC;IAEjG,wCAAwC;IACxC,MAAM,eAAe,GAAG,IAAI,GAAG,EAAE,CAAC;IAElC,yCAAyC;IACzC,cAAc,CAAC,OAAO,CAAC,CAAC,KAAU,EAAE,EAAE;QACpC,MAAM,YAAY,GAAG,yBAAyB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC7D,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE;YAC5B,GAAG,KAAK;YACR,YAAY;YACZ,aAAa,EAAE,CAAC;YAChB,aAAa,EAAE,YAAY,GAAG,GAAG;SAClC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,qCAAqC;IACrC,eAAe,CAAC,OAAO,CAAC,CAAC,KAAU,EAAE,EAAE;QACrC,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC/C,MAAM,aAAa,GAAG,KAAK,CAAC,UAAU,IAAI,CAAC,CAAC;QAE5C,IAAI,QAAQ,EAAE,CAAC;YACb,4CAA4C;YAC5C,QAAQ,CAAC,aAAa,GAAG,aAAa,CAAC;YACvC,QAAQ,CAAC,aAAa,GAAG,QAAQ,CAAC,YAAY,GAAG,GAAG,GAAG,aAAa,GAAG,GAAG,CAAC;QAC7E,CAAC;aAAM,CAAC;YACN,+BAA+B;YAC/B,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE;gBAC5B,GAAG,KAAK;gBACR,YAAY,EAAE,CAAC;gBACf,aAAa;gBACb,aAAa,EAAE,aAAa,GAAG,GAAG;aACnC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,gDAAgD;IAChD,OAAO,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC;SACxC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,aAAa,CAAC;SACjD,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAClB,CAAC;AAED,SAAgB,yBAAyB,CAAC,KAAU,EAAE,KAAa;IACjE,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IACvC,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;IAEjD,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,sCAAsC;IACtC,IAAI,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QACtC,KAAK,IAAI,EAAE,CAAC;IACd,CAAC;IAED,0BAA0B;IAC1B,MAAM,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3C,MAAM,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAE/C,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;QAC7B,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,wBAAwB;YAClD,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;YACvF,KAAK,IAAI,OAAO,GAAG,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,gBAAgB;IAChB,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAa,EAAE,EAAE;QACvC,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YAC7C,KAAK,IAAI,CAAC,CAAC;QACb,CAAC;QACD,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;YAC7B,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBACpE,KAAK,IAAI,CAAC,CAAC;YACb,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,+BAA+B;IAC/B,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secret-helpers.d.ts","sourceRoot":"","sources":["../../src/lib/secret-helpers.ts"],"names":[],"mappings":"AAEA,wBAAsB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAuF1E"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.searchSecretReferences = searchSecretReferences;
|
|
4
|
+
const config_1 = require("../config");
|
|
5
|
+
async function searchSecretReferences(query) {
|
|
6
|
+
try {
|
|
7
|
+
const config = config_1.configManager.getConfig();
|
|
8
|
+
const teamId = config.teamId || 'demo_team';
|
|
9
|
+
// Mock secret discoveries for demo
|
|
10
|
+
const mockDiscoveries = [
|
|
11
|
+
{
|
|
12
|
+
id: 'disc_1',
|
|
13
|
+
secretName: `${teamId}/production/api-key-123456`,
|
|
14
|
+
secretType: 'api_key',
|
|
15
|
+
environment: 'production',
|
|
16
|
+
status: 'discovered',
|
|
17
|
+
riskLevel: 'critical',
|
|
18
|
+
valuePreview: 'tui_***...s0t',
|
|
19
|
+
discoveredBy: 'alice-dev',
|
|
20
|
+
discoveredAt: '2025-01-15',
|
|
21
|
+
description: 'TUI production API key detected in knowledge entry',
|
|
22
|
+
tags: ['tui', 'api', 'production', 'authentication']
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
id: 'disc_2',
|
|
26
|
+
secretName: `${teamId}/staging/database-connection-789`,
|
|
27
|
+
secretType: 'connection_string',
|
|
28
|
+
environment: 'staging',
|
|
29
|
+
status: 'approved',
|
|
30
|
+
riskLevel: 'high',
|
|
31
|
+
valuePreview: 'postgres://***...@host',
|
|
32
|
+
discoveredBy: 'bob-dev',
|
|
33
|
+
discoveredAt: '2025-01-14',
|
|
34
|
+
description: 'Database connection string for staging environment',
|
|
35
|
+
tags: ['database', 'postgres', 'staging', 'connection']
|
|
36
|
+
}
|
|
37
|
+
];
|
|
38
|
+
// Search for matching secrets based on query with intelligent matching
|
|
39
|
+
const lowerQuery = query.toLowerCase();
|
|
40
|
+
return mockDiscoveries.filter(discovery => {
|
|
41
|
+
// Direct matches
|
|
42
|
+
if (discovery.description.toLowerCase().includes(lowerQuery) ||
|
|
43
|
+
discovery.secretName.toLowerCase().includes(lowerQuery) ||
|
|
44
|
+
discovery.tags.some(tag => tag.toLowerCase().includes(lowerQuery)) ||
|
|
45
|
+
discovery.secretType.toLowerCase().includes(lowerQuery)) {
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
// Intelligent keyword matching for common developer queries
|
|
49
|
+
const queryWords = lowerQuery.split(/\s+/);
|
|
50
|
+
const searchableText = [
|
|
51
|
+
discovery.description,
|
|
52
|
+
discovery.secretName,
|
|
53
|
+
discovery.secretType,
|
|
54
|
+
discovery.environment,
|
|
55
|
+
...discovery.tags
|
|
56
|
+
].join(' ').toLowerCase();
|
|
57
|
+
// Check if query contains key terms that match this secret
|
|
58
|
+
const keyTermMatches = queryWords.some(word => {
|
|
59
|
+
// Remove common words that don't help with matching
|
|
60
|
+
if (['what', 'is', 'the', 'our', 'where', 'can', 'i', 'find', 'how', 'do', 'to', 'a', 'an'].includes(word)) {
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
// Match key terms
|
|
64
|
+
return searchableText.includes(word) ||
|
|
65
|
+
// Handle common variations
|
|
66
|
+
(word === 'key' && searchableText.includes('api')) ||
|
|
67
|
+
(word === 'keys' && searchableText.includes('api')) ||
|
|
68
|
+
(word === 'credential' && searchableText.includes('api')) ||
|
|
69
|
+
(word === 'credentials' && searchableText.includes('api')) ||
|
|
70
|
+
(word === 'password' && searchableText.includes('connection')) ||
|
|
71
|
+
(word === 'connection' && searchableText.includes('database')) ||
|
|
72
|
+
(word === 'connect' && searchableText.includes('database'));
|
|
73
|
+
});
|
|
74
|
+
// Also check for compound matches (e.g., "TUI API" should match TUI + API)
|
|
75
|
+
const hasMultipleMatches = queryWords.filter(word => !['what', 'is', 'the', 'our', 'where', 'can', 'i', 'find', 'how', 'do', 'to', 'a', 'an'].includes(word) &&
|
|
76
|
+
searchableText.includes(word)).length >= 2;
|
|
77
|
+
return keyTermMatches || hasMultipleMatches;
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
console.warn('Failed to search secret references:', error);
|
|
82
|
+
return [];
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=secret-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secret-helpers.js","sourceRoot":"","sources":["../../src/lib/secret-helpers.ts"],"names":[],"mappings":"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"}
|