fivocell 1.0.5 → 2.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.
Files changed (152) hide show
  1. package/README.md +697 -505
  2. package/bin/cell.js +2 -2
  3. package/dist/behavior-intelligence.d.ts +90 -0
  4. package/dist/behavior-intelligence.d.ts.map +1 -0
  5. package/dist/behavior-intelligence.js +595 -0
  6. package/dist/behavior-intelligence.js.map +1 -0
  7. package/dist/cli.d.ts +6 -1
  8. package/dist/cli.d.ts.map +1 -1
  9. package/dist/cli.js +2191 -1
  10. package/dist/cli.js.map +1 -1
  11. package/dist/cloud-sync.d.ts +66 -0
  12. package/dist/cloud-sync.d.ts.map +1 -0
  13. package/dist/cloud-sync.js +328 -0
  14. package/dist/cloud-sync.js.map +1 -0
  15. package/dist/community-intelligence.d.ts +42 -0
  16. package/dist/community-intelligence.d.ts.map +1 -0
  17. package/dist/community-intelligence.js +160 -0
  18. package/dist/community-intelligence.js.map +1 -0
  19. package/dist/community-v2.d.ts +106 -0
  20. package/dist/community-v2.d.ts.map +1 -0
  21. package/dist/community-v2.js +378 -0
  22. package/dist/community-v2.js.map +1 -0
  23. package/dist/core/__tests__/chapter8-hostile.test.js +1 -1
  24. package/dist/core/__tests__/chapter8-hostile.test.js.map +1 -1
  25. package/dist/core/__tests__/chapter9-hostile.test.js +1 -1
  26. package/dist/core/__tests__/chapter9-hostile.test.js.map +1 -1
  27. package/dist/core/__tests__/complexity-analyzer.test.js +15 -15
  28. package/dist/core/__tests__/team-composer.test.js +2 -1
  29. package/dist/core/__tests__/team-composer.test.js.map +1 -1
  30. package/dist/core/convention-detector.d.ts.map +1 -1
  31. package/dist/core/convention-detector.js +11 -23
  32. package/dist/core/convention-detector.js.map +1 -1
  33. package/dist/core/cost-optimizer.d.ts.map +1 -1
  34. package/dist/core/cost-optimizer.js +13 -25
  35. package/dist/core/cost-optimizer.js.map +1 -1
  36. package/dist/core/database.d.ts +28 -0
  37. package/dist/core/database.d.ts.map +1 -0
  38. package/dist/core/database.js +587 -0
  39. package/dist/core/database.js.map +1 -0
  40. package/dist/core/knowledge-graph.d.ts.map +1 -1
  41. package/dist/core/knowledge-graph.js +9 -24
  42. package/dist/core/knowledge-graph.js.map +1 -1
  43. package/dist/core/logger.d.ts +9 -0
  44. package/dist/core/logger.d.ts.map +1 -0
  45. package/dist/core/logger.js +26 -0
  46. package/dist/core/logger.js.map +1 -0
  47. package/dist/core/playbook-generator.js +48 -48
  48. package/dist/core/privacy-manager.d.ts.map +1 -1
  49. package/dist/core/privacy-manager.js +5 -0
  50. package/dist/core/privacy-manager.js.map +1 -1
  51. package/dist/core/project-dna.d.ts.map +1 -1
  52. package/dist/core/project-dna.js +6 -19
  53. package/dist/core/project-dna.js.map +1 -1
  54. package/dist/core/prompt-builder.d.ts +18 -0
  55. package/dist/core/prompt-builder.d.ts.map +1 -0
  56. package/dist/core/prompt-builder.js +325 -0
  57. package/dist/core/prompt-builder.js.map +1 -0
  58. package/dist/core/session-memory.d.ts +90 -0
  59. package/dist/core/session-memory.d.ts.map +1 -0
  60. package/dist/core/session-memory.js +229 -0
  61. package/dist/core/session-memory.js.map +1 -0
  62. package/dist/core/signal-capture.d.ts +5 -0
  63. package/dist/core/signal-capture.d.ts.map +1 -1
  64. package/dist/core/signal-capture.js +67 -0
  65. package/dist/core/signal-capture.js.map +1 -1
  66. package/dist/core/team-composer.d.ts.map +1 -1
  67. package/dist/core/team-composer.js +16 -6
  68. package/dist/core/team-composer.js.map +1 -1
  69. package/dist/cross-model-memory.d.ts +95 -0
  70. package/dist/cross-model-memory.d.ts.map +1 -0
  71. package/dist/cross-model-memory.js +229 -0
  72. package/dist/cross-model-memory.js.map +1 -0
  73. package/dist/daemon/lifecycle.d.ts +18 -0
  74. package/dist/daemon/lifecycle.d.ts.map +1 -1
  75. package/dist/daemon/lifecycle.js +182 -5
  76. package/dist/daemon/lifecycle.js.map +1 -1
  77. package/dist/daemon/server.d.ts.map +1 -1
  78. package/dist/daemon/server.js +269 -6
  79. package/dist/daemon/server.js.map +1 -1
  80. package/dist/first-run.d.ts +8 -0
  81. package/dist/first-run.d.ts.map +1 -0
  82. package/dist/first-run.js +182 -0
  83. package/dist/first-run.js.map +1 -0
  84. package/dist/focus-report.d.ts +32 -0
  85. package/dist/focus-report.d.ts.map +1 -0
  86. package/dist/focus-report.js +293 -0
  87. package/dist/focus-report.js.map +1 -0
  88. package/dist/ide-intelligence.d.ts +118 -0
  89. package/dist/ide-intelligence.d.ts.map +1 -0
  90. package/dist/ide-intelligence.js +284 -0
  91. package/dist/ide-intelligence.js.map +1 -0
  92. package/dist/index.d.ts +22 -0
  93. package/dist/index.d.ts.map +1 -1
  94. package/dist/index.js +119 -2
  95. package/dist/index.js.map +1 -1
  96. package/dist/insight-generator.d.ts +58 -0
  97. package/dist/insight-generator.d.ts.map +1 -0
  98. package/dist/insight-generator.js +314 -0
  99. package/dist/insight-generator.js.map +1 -0
  100. package/dist/journey-memory.d.ts +75 -0
  101. package/dist/journey-memory.d.ts.map +1 -0
  102. package/dist/journey-memory.js +360 -0
  103. package/dist/journey-memory.js.map +1 -0
  104. package/dist/mcp-server.d.ts +2054 -0
  105. package/dist/mcp-server.d.ts.map +1 -0
  106. package/dist/mcp-server.js +1120 -0
  107. package/dist/mcp-server.js.map +1 -0
  108. package/dist/onboarding-scan.d.ts +174 -0
  109. package/dist/onboarding-scan.d.ts.map +1 -0
  110. package/dist/onboarding-scan.js +1039 -0
  111. package/dist/onboarding-scan.js.map +1 -0
  112. package/dist/personal-intelligence.d.ts +97 -0
  113. package/dist/personal-intelligence.d.ts.map +1 -0
  114. package/dist/personal-intelligence.js +408 -0
  115. package/dist/personal-intelligence.js.map +1 -0
  116. package/dist/predictive-intelligence.d.ts +95 -0
  117. package/dist/predictive-intelligence.d.ts.map +1 -0
  118. package/dist/predictive-intelligence.js +544 -0
  119. package/dist/predictive-intelligence.js.map +1 -0
  120. package/dist/production.d.ts +67 -0
  121. package/dist/production.d.ts.map +1 -0
  122. package/dist/production.js +333 -0
  123. package/dist/production.js.map +1 -0
  124. package/dist/senior-features.d.ts +63 -0
  125. package/dist/senior-features.d.ts.map +1 -0
  126. package/dist/senior-features.js +325 -0
  127. package/dist/senior-features.js.map +1 -0
  128. package/dist/style-pull.d.ts +40 -0
  129. package/dist/style-pull.d.ts.map +1 -0
  130. package/dist/style-pull.js +385 -0
  131. package/dist/style-pull.js.map +1 -0
  132. package/dist/team-collaboration.d.ts +116 -0
  133. package/dist/team-collaboration.d.ts.map +1 -0
  134. package/dist/team-collaboration.js +375 -0
  135. package/dist/team-collaboration.js.map +1 -0
  136. package/dist/team-intelligence.d.ts +64 -0
  137. package/dist/team-intelligence.d.ts.map +1 -0
  138. package/dist/team-intelligence.js +289 -0
  139. package/dist/team-intelligence.js.map +1 -0
  140. package/dist/test-watch.d.ts +2 -0
  141. package/dist/test-watch.d.ts.map +1 -0
  142. package/dist/test-watch.js +8 -0
  143. package/dist/test-watch.js.map +1 -0
  144. package/dist/user-intelligence.d.ts +69 -0
  145. package/dist/user-intelligence.d.ts.map +1 -0
  146. package/dist/user-intelligence.js +553 -0
  147. package/dist/user-intelligence.js.map +1 -0
  148. package/dist/work-style.d.ts +49 -0
  149. package/dist/work-style.d.ts.map +1 -0
  150. package/dist/work-style.js +247 -0
  151. package/dist/work-style.js.map +1 -0
  152. package/package.json +3 -2
@@ -0,0 +1,375 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getDataAtLevel = getDataAtLevel;
4
+ exports.validateNoLeakage = validateNoLeakage;
5
+ exports.composeTeamStyle = composeTeamStyle;
6
+ exports.detectKnowledgeSilos = detectKnowledgeSilos;
7
+ exports.calculateBusFactor = calculateBusFactor;
8
+ exports.suggestKnowledgeTransfer = suggestKnowledgeTransfer;
9
+ exports.generateOnboardingDoc = generateOnboardingDoc;
10
+ exports.analyzeReviewPatterns = analyzeReviewPatterns;
11
+ exports.suggestPRReview = suggestPRReview;
12
+ exports.getTeamHealth = getTeamHealth;
13
+ exports.generateSprintRetro = generateSprintRetro;
14
+ exports.generateHandoff = generateHandoff;
15
+ const database_1 = require("./core/database");
16
+ // ─── 3-Level Data Separation ────────────────────────────────────────────────
17
+ function getDataAtLevel(level, project) {
18
+ (0, database_1.initializeDatabase)();
19
+ const db = (0, database_1.getDb)();
20
+ if (level === 'personal') {
21
+ const profile = db.prepare('SELECT * FROM user_profile WHERE id = 1').get();
22
+ const sessions = db.prepare('SELECT COUNT(*) as count FROM sessions').get();
23
+ const decisions = db.prepare('SELECT * FROM decisions ORDER BY created_at DESC LIMIT 10').all();
24
+ return {
25
+ level: 'personal',
26
+ profile: profile || null,
27
+ totalSessions: sessions.count,
28
+ recentDecisions: decisions,
29
+ note: 'This data is YOURS only — never shared with team or community',
30
+ };
31
+ }
32
+ if (level === 'team') {
33
+ const members = db.prepare('SELECT * FROM collaborators ORDER BY commit_count DESC').all();
34
+ const silos = db.prepare('SELECT * FROM silos WHERE risk_level = ?').all('high');
35
+ const teamSessions = db.prepare('SELECT tool_name, COUNT(*) as count FROM sessions GROUP BY tool_name').all();
36
+ return {
37
+ level: 'team',
38
+ members,
39
+ highRiskSilos: silos,
40
+ toolUsage: teamSessions,
41
+ note: 'Team data — visible to all team members',
42
+ };
43
+ }
44
+ // community
45
+ const signals = db.prepare('SELECT * FROM community_signals ORDER BY frequency DESC LIMIT 20').all();
46
+ const trends = db.prepare('SELECT trend, COUNT(*) as count FROM community_signals GROUP BY trend').all();
47
+ return {
48
+ level: 'community',
49
+ topSignals: signals,
50
+ trends,
51
+ note: 'Anonymous community data — no PII, 300-byte max payload',
52
+ };
53
+ }
54
+ function validateNoLeakage(fromLevel, toLevel) {
55
+ const forbidden = {
56
+ personal: ['team', 'community'],
57
+ team: ['community'],
58
+ community: [],
59
+ };
60
+ if (forbidden[fromLevel].includes(toLevel)) {
61
+ return {
62
+ safe: false,
63
+ reason: `Data leakage detected: ${fromLevel} data must NOT be shared with ${toLevel} level`,
64
+ };
65
+ }
66
+ return { safe: true, reason: 'Data flow is safe' };
67
+ }
68
+ // ─── Team Style Composer ─────────────────────────────────────────────────────
69
+ function composeTeamStyle(project) {
70
+ const db = (0, database_1.getDb)();
71
+ const patterns = db.prepare(project
72
+ ? "SELECT rule, category, confidence FROM patterns WHERE project = ? ORDER BY confidence DESC LIMIT 20"
73
+ : "SELECT rule, category, confidence FROM patterns ORDER BY confidence DESC LIMIT 20").all(...(project ? [project] : []));
74
+ const languages = db.prepare('SELECT language, file_count FROM skills ORDER BY file_count DESC LIMIT 5').all();
75
+ const sessions = db.prepare('SELECT files_touched FROM sessions WHERE end_time IS NOT NULL LIMIT 20').all();
76
+ let totalFiles = 0;
77
+ let fileCount = 0;
78
+ for (const s of sessions) {
79
+ try {
80
+ const files = JSON.parse(s.files_touched);
81
+ totalFiles += files.length;
82
+ fileCount++;
83
+ }
84
+ catch { /* skip */ }
85
+ }
86
+ const testFiles = db.prepare("SELECT COUNT(DISTINCT file_path) as cnt FROM behavior_events WHERE file_path LIKE '%.test.%' OR file_path LIKE '%.spec.%'").get();
87
+ const totalSourceFiles = db.prepare("SELECT COUNT(DISTINCT file_path) as cnt FROM behavior_events").get();
88
+ const testRatio = totalSourceFiles.cnt > 0 ? testFiles.cnt / totalSourceFiles.cnt : 0;
89
+ const hasReview = db.prepare("SELECT COUNT(*) as cnt FROM behavior_events WHERE event_type = 'review'").get();
90
+ return {
91
+ languages: languages.map(l => l.language),
92
+ patterns: patterns.slice(0, 10).map(p => p.rule.slice(0, 80)),
93
+ conventions: patterns.filter(p => p.category === 'convention').map(p => p.rule.slice(0, 80)),
94
+ avgFileSize: fileCount > 0 ? Math.round(totalFiles / fileCount) : 0,
95
+ testCoverage: testRatio >= 0.5 ? 'high' : testRatio >= 0.2 ? 'medium' : testRatio > 0 ? 'low' : 'none',
96
+ codeReviewStyle: hasReview.cnt > 10 ? 'thorough' : hasReview.cnt > 0 ? 'light' : 'none',
97
+ description: `Team uses ${languages.map(l => l.language).join(', ') || 'unknown stack'} with ${patterns.length} learned patterns`,
98
+ };
99
+ }
100
+ // ─── Knowledge Transfer ──────────────────────────────────────────────────────
101
+ function detectKnowledgeSilos() {
102
+ const db = (0, database_1.getDb)();
103
+ const silos = [];
104
+ const dbSilos = db.prepare('SELECT * FROM silos ORDER BY risk_level DESC').all();
105
+ for (const s of dbSilos) {
106
+ const members = safeJson(String(s.members || '[]')) || [];
107
+ silos.push({
108
+ name: String(s.name || ''),
109
+ members,
110
+ knowledgeArea: String(s.knowledge_area || ''),
111
+ riskLevel: String(s.risk_level || 'low'),
112
+ busFactor: Number(s.bus_factor || 1),
113
+ description: `Knowledge area "${s.name}" known by ${members.length} members (bus factor: ${s.bus_factor})`,
114
+ });
115
+ }
116
+ const collaborators = db.prepare('SELECT name, skills FROM collaborators WHERE skills IS NOT NULL').all();
117
+ const skillMap = new Map();
118
+ for (const c of collaborators) {
119
+ const skills = safeJson(c.skills) || [];
120
+ for (const skill of skills) {
121
+ if (!skillMap.has(skill))
122
+ skillMap.set(skill, []);
123
+ skillMap.get(skill).push(c.name);
124
+ }
125
+ }
126
+ for (const [skill, experts] of skillMap) {
127
+ if (experts.length === 1) {
128
+ const existing = silos.find(s => s.knowledgeArea === skill);
129
+ if (!existing) {
130
+ silos.push({
131
+ name: `${skill} Expert`,
132
+ members: experts,
133
+ knowledgeArea: skill,
134
+ riskLevel: 'high',
135
+ busFactor: 1,
136
+ description: `"${skill}" is known only to ${experts[0]} — single point of failure`,
137
+ });
138
+ }
139
+ }
140
+ }
141
+ return silos.sort((a, b) => {
142
+ const riskOrder = { high: 3, medium: 2, low: 1 };
143
+ return (riskOrder[b.riskLevel] || 0) - (riskOrder[a.riskLevel] || 0);
144
+ });
145
+ }
146
+ function calculateBusFactor() {
147
+ const db = (0, database_1.getDb)();
148
+ const collaborators = db.prepare('SELECT name, commit_count, skills, collaboration_score FROM collaborators ORDER BY commit_count DESC').all();
149
+ const members = collaborators.map(c => {
150
+ const skills = safeJson(c.skills) || [];
151
+ const score = Math.min(100, Math.round((c.commit_count * 2) + (c.collaboration_score * 30)));
152
+ return {
153
+ name: c.name,
154
+ score,
155
+ criticalAreas: skills.slice(0, 5),
156
+ risk: score >= 70 ? 'high' : score >= 40 ? 'medium' : 'low',
157
+ };
158
+ });
159
+ const overallScore = members.length > 0
160
+ ? Math.round(members.reduce((sum, m) => sum + m.score, 0) / members.length)
161
+ : 0;
162
+ const singlePointsOfFailure = members
163
+ .filter(m => m.criticalAreas.length > 0 && m.risk === 'high')
164
+ .map(m => `${m.name} (${m.criticalAreas.join(', ')})`);
165
+ return { overallScore, members, singlePointsOfFailure };
166
+ }
167
+ function suggestKnowledgeTransfer() {
168
+ const suggestions = [];
169
+ const silos = detectKnowledgeSilos();
170
+ const db = (0, database_1.getDb)();
171
+ const members = db.prepare('SELECT name FROM collaborators ORDER BY commit_count DESC').all();
172
+ const memberNames = members.map(m => m.name);
173
+ for (const silo of silos) {
174
+ if (silo.riskLevel === 'high' && silo.members.length === 1) {
175
+ const expert = silo.members[0];
176
+ const learners = memberNames.filter(n => n !== expert).slice(0, 2);
177
+ for (const learner of learners) {
178
+ suggestions.push({
179
+ area: silo.knowledgeArea,
180
+ from: expert,
181
+ to: learner,
182
+ priority: 'high',
183
+ });
184
+ }
185
+ }
186
+ }
187
+ return suggestions;
188
+ }
189
+ // ─── Onboarding Assistant ────────────────────────────────────────────────────
190
+ function generateOnboardingDoc(teamName, project) {
191
+ const db = (0, database_1.getDb)();
192
+ const style = composeTeamStyle(project);
193
+ const silos = detectKnowledgeSilos();
194
+ const busFactor = calculateBusFactor();
195
+ const members = db.prepare('SELECT name, skills, commit_count FROM collaborators ORDER BY commit_count DESC LIMIT 5').all();
196
+ const keyMembers = members.map(m => ({
197
+ name: m.name,
198
+ expertise: safeJson(m.skills) || [],
199
+ }));
200
+ const commonBugs = db.prepare("SELECT description, COUNT(*) as cnt FROM behavior_events WHERE event_type = 'bug_fix' GROUP BY description ORDER BY cnt DESC LIMIT 5").all();
201
+ const whoToAsk = keyMembers.slice(0, 4).map(m => ({
202
+ area: m.expertise[0] || 'general',
203
+ person: m.name,
204
+ }));
205
+ return {
206
+ teamName,
207
+ generatedAt: new Date().toISOString(),
208
+ stack: style.languages,
209
+ patterns: style.patterns.slice(0, 5),
210
+ commonBugs: commonBugs.map(b => b.description.slice(0, 80)),
211
+ keyMembers,
212
+ styleGuide: style.description,
213
+ firstWeekTasks: [
214
+ 'Set up local dev environment',
215
+ 'Read team style guide',
216
+ 'Review top 3 patterns in the codebase',
217
+ 'Pair with a team member on a small task',
218
+ 'Submit first PR with team review',
219
+ ],
220
+ whoToAsk,
221
+ };
222
+ }
223
+ // ─── Code Review Intelligence ────────────────────────────────────────────────
224
+ function analyzeReviewPatterns() {
225
+ const db = (0, database_1.getDb)();
226
+ const insights = [];
227
+ const reviewers = db.prepare("SELECT name, commit_count FROM collaborators ORDER BY commit_count DESC LIMIT 10").all();
228
+ for (const r of reviewers) {
229
+ const reviewBugs = db.prepare("SELECT description FROM behavior_events WHERE event_type = 'bug_fix' AND project IN (SELECT project FROM collaborators WHERE name = ?)").all(r.name);
230
+ const nitpickRate = Math.min(1, reviewBugs.length / Math.max(1, r.commit_count));
231
+ const approvalRate = Math.max(0.3, 1 - nitpickRate);
232
+ const commonIssues = [...new Set(reviewBugs.map(b => b.description.slice(0, 50)))].slice(0, 3);
233
+ let style = 'balanced';
234
+ if (nitpickRate > 0.6)
235
+ style = 'thorough';
236
+ else if (nitpickRate < 0.2)
237
+ style = 'light';
238
+ insights.push({
239
+ reviewer: r.name,
240
+ style,
241
+ nitpickRate: Math.round(nitpickRate * 100) / 100,
242
+ approvalRate: Math.round(approvalRate * 100) / 100,
243
+ commonIssues,
244
+ strength: style === 'thorough' ? 'Catches edge cases early' : style === 'light' ? 'Keeps momentum going' : 'Good balance of quality and speed',
245
+ suggestion: style === 'thorough' ? 'Consider being less nitpicky on minor issues to keep PR cycle time low' : style === 'light' ? 'Consider adding more thorough reviews for critical paths' : 'Maintain current balanced approach',
246
+ });
247
+ }
248
+ return insights;
249
+ }
250
+ function suggestPRReview(filePaths) {
251
+ const suggestions = [];
252
+ const db = (0, database_1.getDb)();
253
+ for (const file of filePaths) {
254
+ const bugs = db.prepare("SELECT description, COUNT(*) as cnt FROM behavior_events WHERE file_path = ? AND event_type = 'bug_fix' GROUP BY description ORDER BY cnt DESC LIMIT 3").all(file);
255
+ if (bugs.length > 0) {
256
+ suggestions.push(`⚠ ${file}: Historical bugs — ${bugs.map(b => b.description.slice(0, 40)).join('; ')}`);
257
+ }
258
+ const isTest = /\.(test|spec)\./.test(file);
259
+ if (!isTest && (file.endsWith('.ts') || file.endsWith('.js'))) {
260
+ const hasTryCatch = db.prepare("SELECT COUNT(*) as cnt FROM behavior_events WHERE file_path = ? AND description LIKE '%null%' OR description LIKE '%undefined%'").get(file);
261
+ if (hasTryCatch.cnt > 0) {
262
+ suggestions.push(`🔍 ${file}: Check for null/undefined safety — historical issue`);
263
+ }
264
+ }
265
+ }
266
+ return suggestions;
267
+ }
268
+ // ─── Team Health ─────────────────────────────────────────────────────────────
269
+ function getTeamHealth(project) {
270
+ const busFactor = calculateBusFactor();
271
+ const silos = detectKnowledgeSilos();
272
+ const style = composeTeamStyle(project);
273
+ const highRiskSilos = silos.filter(s => s.riskLevel === 'high');
274
+ const singlePoints = busFactor.singlePointsOfFailure;
275
+ const skillGaps = [];
276
+ if (style.testCoverage === 'none' || style.testCoverage === 'low')
277
+ skillGaps.push('Testing');
278
+ if (style.codeReviewStyle === 'none')
279
+ skillGaps.push('Code Review');
280
+ if (highRiskSilos.length > 0)
281
+ skillGaps.push(...highRiskSilos.map(s => s.knowledgeArea));
282
+ const strengths = [];
283
+ if (style.testCoverage === 'high')
284
+ strengths.push('Strong test coverage');
285
+ if (style.codeReviewStyle === 'thorough')
286
+ strengths.push('Thorough code reviews');
287
+ if (busFactor.overallScore >= 60)
288
+ strengths.push('Good bus factor distribution');
289
+ if (highRiskSilos.length === 0)
290
+ strengths.push('No critical knowledge silos');
291
+ const recommendations = [];
292
+ if (singlePoints.length > 0)
293
+ recommendations.push(`Knowledge transfer needed: ${singlePoints.join(', ')}`);
294
+ if (highRiskSilos.length > 0)
295
+ recommendations.push(`${highRiskSilos.length} high-risk knowledge silos detected`);
296
+ if (style.testCoverage === 'none')
297
+ recommendations.push('No test coverage detected — add tests');
298
+ if (busFactor.overallScore < 40)
299
+ recommendations.push('Bus factor is low — distribute knowledge');
300
+ const score = Math.max(0, Math.min(100, 50
301
+ + (busFactor.overallScore > 50 ? 15 : -10)
302
+ - (highRiskSilos.length * 10)
303
+ + (style.testCoverage === 'high' ? 10 : style.testCoverage === 'medium' ? 5 : -5)
304
+ + (style.codeReviewStyle === 'thorough' ? 10 : 0)));
305
+ return {
306
+ score,
307
+ busFactor: busFactor.overallScore,
308
+ siloCount: silos.length,
309
+ collaborationEdges: 0,
310
+ skillGaps,
311
+ strengths,
312
+ recommendations,
313
+ };
314
+ }
315
+ // ─── Sprint Retro ────────────────────────────────────────────────────────────
316
+ function generateSprintRetro(days = 14, project) {
317
+ const db = (0, database_1.getDb)();
318
+ const since = new Date(Date.now() - days * 24 * 60 * 60 * 1000).toISOString();
319
+ const commits = db.prepare(project
320
+ ? "SELECT COUNT(*) as cnt FROM behavior_events WHERE created_at >= ? AND project = ?"
321
+ : "SELECT COUNT(*) as cnt FROM behavior_events WHERE created_at >= ?").get(...(project ? [since, project] : [since]));
322
+ const bugFixes = db.prepare(project
323
+ ? "SELECT COUNT(*) as cnt FROM behavior_events WHERE event_type = 'bug_fix' AND created_at >= ? AND project = ?"
324
+ : "SELECT COUNT(*) as cnt FROM behavior_events WHERE event_type = 'bug_fix' AND created_at >= ?").get(...(project ? [since, project] : [since]));
325
+ const sessions = db.prepare("SELECT tool_name, COUNT(*) as cnt FROM sessions WHERE start_time >= ? GROUP BY tool_name ORDER BY cnt DESC").all(since);
326
+ const decisions = db.prepare("SELECT technology, reason FROM decisions WHERE created_at >= ? ORDER BY created_at DESC LIMIT 5").all(since);
327
+ const newPatterns = db.prepare("SELECT COUNT(*) as cnt FROM patterns WHERE created_at >= ?").get(since);
328
+ const summary = [
329
+ `${commits.cnt} behavior events tracked`,
330
+ `${bugFixes.cnt} bugs fixed`,
331
+ `${decisions.length} key decisions made`,
332
+ `${newPatterns.cnt} new patterns learned`,
333
+ `Tools used: ${sessions.map(s => `${s.tool_name}(${s.cnt})`).join(', ') || 'none'}`,
334
+ ].join('. ');
335
+ return {
336
+ period: `Last ${days} days`,
337
+ commits: commits.cnt,
338
+ filesChanged: 0,
339
+ topContributors: sessions.map(s => ({ name: s.tool_name, commits: s.cnt })),
340
+ keyDecisions: decisions.map(d => `${d.technology}: ${d.reason}`),
341
+ bugsFixed: bugFixes.cnt,
342
+ newPatterns: newPatterns.cnt,
343
+ summary,
344
+ };
345
+ }
346
+ // ─── Handoff ─────────────────────────────────────────────────────────────────
347
+ function generateHandoff(from, to, project) {
348
+ const db = (0, database_1.getDb)();
349
+ const lastSession = db.prepare('SELECT key_decisions, files_touched, context_snapshot FROM sessions WHERE project = ? ORDER BY start_time DESC LIMIT 1').get(project);
350
+ const recentBugs = db.prepare("SELECT description FROM behavior_events WHERE event_type = 'bug_fix' AND project = ? ORDER BY created_at DESC LIMIT 3").all(project);
351
+ const decisions = lastSession
352
+ ? safeJson(String(lastSession.key_decisions || '[]'))
353
+ : [];
354
+ return {
355
+ from,
356
+ to,
357
+ project,
358
+ currentTasks: decisions.slice(0, 5),
359
+ keyDecisions: decisions,
360
+ blockers: recentBugs.map(b => b.description.slice(0, 80)),
361
+ contextNotes: String(lastSession?.context_snapshot || 'No context available'),
362
+ };
363
+ }
364
+ // ─── Utility ─────────────────────────────────────────────────────────────────
365
+ function safeJson(val) {
366
+ if (!val || val === '[]' || val === '{}')
367
+ return null;
368
+ try {
369
+ return JSON.parse(val);
370
+ }
371
+ catch {
372
+ return val;
373
+ }
374
+ }
375
+ //# sourceMappingURL=team-collaboration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"team-collaboration.js","sourceRoot":"","sources":["../src/team-collaboration.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ export interface Collaborator {
2
+ name: string;
3
+ email: string;
4
+ commits: number;
5
+ firstCommit: string;
6
+ lastCommit: string;
7
+ filesChanged: number;
8
+ linesAdded: number;
9
+ linesRemoved: number;
10
+ projects: string[];
11
+ role: 'unknown' | 'owner' | 'maintainer' | 'contributor' | 'visitor';
12
+ topHour: string;
13
+ topDay: string;
14
+ }
15
+ export interface CollaborationEdge {
16
+ source: string;
17
+ target: string;
18
+ sharedFiles: number;
19
+ sharedProjects: string[];
20
+ reviewCount: number;
21
+ strength: 'strong' | 'moderate' | 'weak';
22
+ }
23
+ export interface ReviewPattern {
24
+ reviewer: string;
25
+ reviewee: string;
26
+ commentsGiven: number;
27
+ commentsReceived: number;
28
+ nitpickTendency: 'high' | 'medium' | 'low';
29
+ responseTime: string;
30
+ approvalRate: number;
31
+ }
32
+ export interface TeamSkill {
33
+ area: string;
34
+ experts: string[];
35
+ learners: string[];
36
+ coverage: 'full' | 'partial' | 'single-point' | 'none';
37
+ risk: 'high' | 'medium' | 'low';
38
+ description: string;
39
+ }
40
+ export interface TeamIntelReport {
41
+ collaborators: Collaborator[];
42
+ edges: CollaborationEdge[];
43
+ reviews: ReviewPattern[];
44
+ skills: TeamSkill[];
45
+ summary: {
46
+ teamSize: number;
47
+ totalCommits: number;
48
+ totalProjects: number;
49
+ soloProjects: number;
50
+ teamProjects: number;
51
+ avgCommitsPerPerson: number;
52
+ topCollaboratorPair: string;
53
+ knowledgeSilos: string[];
54
+ };
55
+ recommendations: string[];
56
+ generatedAt: string;
57
+ }
58
+ export declare function detectCollaborators(rootDir: string): Collaborator[];
59
+ export declare function detectCollaborationEdges(rootDir: string, collaborators: Collaborator[]): CollaborationEdge[];
60
+ export declare function detectReviewPatterns(rootDir: string, collaborators: Collaborator[]): ReviewPattern[];
61
+ export declare function detectTeamSkills(collaborators: Collaborator[]): TeamSkill[];
62
+ export declare function buildTeamIntelReport(rootDir: string): TeamIntelReport;
63
+ export declare function saveTeamIntel(report: TeamIntelReport): string;
64
+ //# sourceMappingURL=team-intelligence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"team-intelligence.d.ts","sourceRoot":"","sources":["../src/team-intelligence.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,EAAE,SAAS,GAAG,OAAO,GAAG,YAAY,GAAG,aAAa,GAAG,SAAS,CAAC;IACrE,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAC;CAC1C;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IAC3C,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,cAAc,GAAG,MAAM,CAAC;IACvD,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,KAAK,EAAE,iBAAiB,EAAE,CAAC;IAC3B,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,OAAO,EAAE;QACP,QAAQ,EAAE,MAAM,CAAC;QACjB,YAAY,EAAE,MAAM,CAAC;QACrB,aAAa,EAAE,MAAM,CAAC;QACtB,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,MAAM,CAAC;QACrB,mBAAmB,EAAE,MAAM,CAAC;QAC5B,mBAAmB,EAAE,MAAM,CAAC;QAC5B,cAAc,EAAE,MAAM,EAAE,CAAC;KAC1B,CAAC;IACF,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;CACrB;AAwBD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,EAAE,CAgEnE;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,GAAG,iBAAiB,EAAE,CAwC5G;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,GAAG,aAAa,EAAE,CAiBpG;AAED,wBAAgB,gBAAgB,CAAC,aAAa,EAAE,YAAY,EAAE,GAAG,SAAS,EAAE,CAS3E;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,CAqBrE;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CA8B7D"}