@4da/mcp-server 3.2.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 (123) hide show
  1. package/README.md +135 -0
  2. package/dist/db.d.ts +64 -0
  3. package/dist/db.d.ts.map +1 -0
  4. package/dist/db.js +578 -0
  5. package/dist/db.js.map +1 -0
  6. package/dist/index.d.ts +37 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +422 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/llm.d.ts +144 -0
  11. package/dist/llm.d.ts.map +1 -0
  12. package/dist/llm.js +447 -0
  13. package/dist/llm.js.map +1 -0
  14. package/dist/output-manager.d.ts +156 -0
  15. package/dist/output-manager.d.ts.map +1 -0
  16. package/dist/output-manager.js +156 -0
  17. package/dist/output-manager.js.map +1 -0
  18. package/dist/schema-registry.d.ts +46 -0
  19. package/dist/schema-registry.d.ts.map +1 -0
  20. package/dist/schema-registry.js +133 -0
  21. package/dist/schema-registry.js.map +1 -0
  22. package/dist/schemas/config-validator.json +18 -0
  23. package/dist/schemas/context-analysis.json +25 -0
  24. package/dist/schemas/daily-briefing.json +34 -0
  25. package/dist/schemas/explain-relevance.json +19 -0
  26. package/dist/schemas/get-actionable-signals.json +29 -0
  27. package/dist/schemas/get-context.json +17 -0
  28. package/dist/schemas/get-relevant-content.json +26 -0
  29. package/dist/schemas/llm-status.json +13 -0
  30. package/dist/schemas/record-feedback.json +24 -0
  31. package/dist/schemas/score-autopsy.json +30 -0
  32. package/dist/schemas/source-health.json +17 -0
  33. package/dist/schemas/topic-connections.json +34 -0
  34. package/dist/schemas/trend-analysis.json +29 -0
  35. package/dist/tools/attention-report.d.ts +39 -0
  36. package/dist/tools/attention-report.d.ts.map +1 -0
  37. package/dist/tools/attention-report.js +72 -0
  38. package/dist/tools/attention-report.js.map +1 -0
  39. package/dist/tools/config-validator.d.ts +59 -0
  40. package/dist/tools/config-validator.d.ts.map +1 -0
  41. package/dist/tools/config-validator.js +375 -0
  42. package/dist/tools/config-validator.js.map +1 -0
  43. package/dist/tools/context-analysis.d.ts +108 -0
  44. package/dist/tools/context-analysis.d.ts.map +1 -0
  45. package/dist/tools/context-analysis.js +300 -0
  46. package/dist/tools/context-analysis.js.map +1 -0
  47. package/dist/tools/daily-briefing.d.ts +103 -0
  48. package/dist/tools/daily-briefing.d.ts.map +1 -0
  49. package/dist/tools/daily-briefing.js +278 -0
  50. package/dist/tools/daily-briefing.js.map +1 -0
  51. package/dist/tools/explain-relevance.d.ts +36 -0
  52. package/dist/tools/explain-relevance.d.ts.map +1 -0
  53. package/dist/tools/explain-relevance.js +50 -0
  54. package/dist/tools/explain-relevance.js.map +1 -0
  55. package/dist/tools/export-context.d.ts +43 -0
  56. package/dist/tools/export-context.d.ts.map +1 -0
  57. package/dist/tools/export-context.js +104 -0
  58. package/dist/tools/export-context.js.map +1 -0
  59. package/dist/tools/get-actionable-signals.d.ts +65 -0
  60. package/dist/tools/get-actionable-signals.d.ts.map +1 -0
  61. package/dist/tools/get-actionable-signals.js +268 -0
  62. package/dist/tools/get-actionable-signals.js.map +1 -0
  63. package/dist/tools/get-context.d.ts +34 -0
  64. package/dist/tools/get-context.d.ts.map +1 -0
  65. package/dist/tools/get-context.js +43 -0
  66. package/dist/tools/get-context.js.map +1 -0
  67. package/dist/tools/get-relevant-content.d.ts +44 -0
  68. package/dist/tools/get-relevant-content.d.ts.map +1 -0
  69. package/dist/tools/get-relevant-content.js +56 -0
  70. package/dist/tools/get-relevant-content.js.map +1 -0
  71. package/dist/tools/index.d.ts +40 -0
  72. package/dist/tools/index.d.ts.map +1 -0
  73. package/dist/tools/index.js +44 -0
  74. package/dist/tools/index.js.map +1 -0
  75. package/dist/tools/knowledge-gaps.d.ts +36 -0
  76. package/dist/tools/knowledge-gaps.d.ts.map +1 -0
  77. package/dist/tools/knowledge-gaps.js +76 -0
  78. package/dist/tools/knowledge-gaps.js.map +1 -0
  79. package/dist/tools/llm-status.d.ts +45 -0
  80. package/dist/tools/llm-status.d.ts.map +1 -0
  81. package/dist/tools/llm-status.js +92 -0
  82. package/dist/tools/llm-status.js.map +1 -0
  83. package/dist/tools/project-health.d.ts +41 -0
  84. package/dist/tools/project-health.d.ts.map +1 -0
  85. package/dist/tools/project-health.js +71 -0
  86. package/dist/tools/project-health.js.map +1 -0
  87. package/dist/tools/record-feedback.d.ts +39 -0
  88. package/dist/tools/record-feedback.d.ts.map +1 -0
  89. package/dist/tools/record-feedback.js +60 -0
  90. package/dist/tools/record-feedback.js.map +1 -0
  91. package/dist/tools/reverse-mentions.d.ts +38 -0
  92. package/dist/tools/reverse-mentions.d.ts.map +1 -0
  93. package/dist/tools/reverse-mentions.js +57 -0
  94. package/dist/tools/reverse-mentions.js.map +1 -0
  95. package/dist/tools/score-autopsy.d.ts +93 -0
  96. package/dist/tools/score-autopsy.d.ts.map +1 -0
  97. package/dist/tools/score-autopsy.js +288 -0
  98. package/dist/tools/score-autopsy.js.map +1 -0
  99. package/dist/tools/semantic-shifts.d.ts +37 -0
  100. package/dist/tools/semantic-shifts.d.ts.map +1 -0
  101. package/dist/tools/semantic-shifts.js +73 -0
  102. package/dist/tools/semantic-shifts.js.map +1 -0
  103. package/dist/tools/signal-chains.d.ts +45 -0
  104. package/dist/tools/signal-chains.d.ts.map +1 -0
  105. package/dist/tools/signal-chains.js +60 -0
  106. package/dist/tools/signal-chains.js.map +1 -0
  107. package/dist/tools/source-health.d.ts +64 -0
  108. package/dist/tools/source-health.d.ts.map +1 -0
  109. package/dist/tools/source-health.js +176 -0
  110. package/dist/tools/source-health.js.map +1 -0
  111. package/dist/tools/topic-connections.d.ts +112 -0
  112. package/dist/tools/topic-connections.d.ts.map +1 -0
  113. package/dist/tools/topic-connections.js +318 -0
  114. package/dist/tools/topic-connections.js.map +1 -0
  115. package/dist/tools/trend-analysis.d.ts +105 -0
  116. package/dist/tools/trend-analysis.d.ts.map +1 -0
  117. package/dist/tools/trend-analysis.js +295 -0
  118. package/dist/tools/trend-analysis.js.map +1 -0
  119. package/dist/types.d.ts +163 -0
  120. package/dist/types.d.ts.map +1 -0
  121. package/dist/types.js +7 -0
  122. package/dist/types.js.map +1 -0
  123. package/package.json +61 -0
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Context Analysis Tool
3
+ *
4
+ * Analyze and optimize your local context for better relevance.
5
+ * This is a SUPERPOWER - it tells you how to make 4DA smarter about you.
6
+ *
7
+ * With synthesize=true, uses LLM to give personalized optimization advice.
8
+ */
9
+ import type { FourDADatabase } from "../db.js";
10
+ import { type CompactResult, type ContextAnalysisKeyData } from "../output-manager.js";
11
+ export declare const contextAnalysisTool: {
12
+ name: string;
13
+ description: string;
14
+ inputSchema: {
15
+ type: string;
16
+ properties: {
17
+ include_recommendations: {
18
+ type: string;
19
+ description: string;
20
+ };
21
+ analyze_gaps: {
22
+ type: string;
23
+ description: string;
24
+ };
25
+ synthesize: {
26
+ type: string;
27
+ description: string;
28
+ };
29
+ compact: {
30
+ type: string;
31
+ description: string;
32
+ };
33
+ };
34
+ };
35
+ };
36
+ export interface ContextAnalysisParams {
37
+ include_recommendations?: boolean;
38
+ analyze_gaps?: boolean;
39
+ synthesize?: boolean;
40
+ compact?: boolean;
41
+ }
42
+ interface ContextQualityScore {
43
+ overall: number;
44
+ dimensions: {
45
+ name: string;
46
+ score: number;
47
+ explanation: string;
48
+ }[];
49
+ }
50
+ interface CoverageGap {
51
+ area: string;
52
+ evidence: string;
53
+ recommendation: string;
54
+ }
55
+ interface ContextAnalysisResult {
56
+ context_summary: {
57
+ role: string | null;
58
+ tech_stack_count: number;
59
+ interests_count: number;
60
+ domains_count: number;
61
+ exclusions_count: number;
62
+ detected_tech_count: number;
63
+ active_topics_count: number;
64
+ learned_affinities_count: number;
65
+ anti_topics_count: number;
66
+ };
67
+ quality_score: ContextQualityScore;
68
+ tech_stack: string[];
69
+ interests: {
70
+ topic: string;
71
+ weight: number;
72
+ }[];
73
+ top_detected_tech: {
74
+ name: string;
75
+ confidence: number;
76
+ }[];
77
+ top_active_topics: {
78
+ topic: string;
79
+ weight: number;
80
+ }[];
81
+ top_affinities: {
82
+ topic: string;
83
+ score: number;
84
+ }[];
85
+ exclusions: string[];
86
+ coverage_gaps: CoverageGap[];
87
+ recommendations: {
88
+ priority: "high" | "medium" | "low";
89
+ action: string;
90
+ impact: string;
91
+ }[];
92
+ recent_items_breakdown: {
93
+ matched_by_interests: number;
94
+ matched_by_tech: number;
95
+ matched_by_ace: number;
96
+ matched_by_learned: number;
97
+ unmatched: number;
98
+ };
99
+ ai_advice?: {
100
+ personalized_recommendations: string;
101
+ highest_impact_change: string;
102
+ ideal_context_description: string;
103
+ model_used: string;
104
+ };
105
+ }
106
+ export declare function executeContextAnalysis(db: FourDADatabase, params: ContextAnalysisParams): Promise<ContextAnalysisResult | CompactResult<ContextAnalysisKeyData>>;
107
+ export {};
108
+ //# sourceMappingURL=context-analysis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-analysis.d.ts","sourceRoot":"","sources":["../../src/tools/context-analysis.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/C,OAAO,EAAgC,KAAK,aAAa,EAAE,KAAK,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAErH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;CAkC/B,CAAC;AAEF,MAAM,WAAW,qBAAqB;IACpC,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,UAAU,mBAAmB;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE;QACV,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;KACrB,EAAE,CAAC;CACL;AAED,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,UAAU,qBAAqB;IAC7B,eAAe,EAAE;QACf,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;QACpB,gBAAgB,EAAE,MAAM,CAAC;QACzB,eAAe,EAAE,MAAM,CAAC;QACxB,aAAa,EAAE,MAAM,CAAC;QACtB,gBAAgB,EAAE,MAAM,CAAC;QACzB,mBAAmB,EAAE,MAAM,CAAC;QAC5B,mBAAmB,EAAE,MAAM,CAAC;QAC5B,wBAAwB,EAAE,MAAM,CAAC;QACjC,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;IACF,aAAa,EAAE,mBAAmB,CAAC;IACnC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC/C,iBAAiB,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC1D,iBAAiB,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACvD,cAAc,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACnD,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,aAAa,EAAE,WAAW,EAAE,CAAC;IAC7B,eAAe,EAAE;QACf,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;QACpC,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;KAChB,EAAE,CAAC;IACJ,sBAAsB,EAAE;QACtB,oBAAoB,EAAE,MAAM,CAAC;QAC7B,eAAe,EAAE,MAAM,CAAC;QACxB,cAAc,EAAE,MAAM,CAAC;QACvB,kBAAkB,EAAE,MAAM,CAAC;QAC3B,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IAEF,SAAS,CAAC,EAAE;QACV,4BAA4B,EAAE,MAAM,CAAC;QACrC,qBAAqB,EAAE,MAAM,CAAC;QAC9B,yBAAyB,EAAE,MAAM,CAAC;QAClC,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAED,wBAAsB,sBAAsB,CAC1C,EAAE,EAAE,cAAc,EAClB,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,qBAAqB,GAAG,aAAa,CAAC,sBAAsB,CAAC,CAAC,CAuGxE"}
@@ -0,0 +1,300 @@
1
+ /**
2
+ * Context Analysis Tool
3
+ *
4
+ * Analyze and optimize your local context for better relevance.
5
+ * This is a SUPERPOWER - it tells you how to make 4DA smarter about you.
6
+ *
7
+ * With synthesize=true, uses LLM to give personalized optimization advice.
8
+ */
9
+ import { getLLMConfig, canSynthesize, synthesize, SYNTHESIS_PROMPTS } from "../llm.js";
10
+ import { createContextAnalysisCompact } from "../output-manager.js";
11
+ export const contextAnalysisTool = {
12
+ name: "context_analysis",
13
+ description: `Analyze your 4DA context and get optimization recommendations.
14
+
15
+ With synthesize=true (recommended), uses AI for personalized optimization advice.
16
+
17
+ Returns:
18
+ - Current context summary (tech stack, interests, topics)
19
+ - Context quality score
20
+ - Coverage gaps (what you care about but isn't tracked)
21
+ - AI-powered personalized recommendations (when enabled)
22
+
23
+ Use this to tune 4DA for better personalization.`,
24
+ inputSchema: {
25
+ type: "object",
26
+ properties: {
27
+ include_recommendations: {
28
+ type: "boolean",
29
+ description: "Include optimization recommendations (default: true)",
30
+ },
31
+ analyze_gaps: {
32
+ type: "boolean",
33
+ description: "Analyze coverage gaps (default: true)",
34
+ },
35
+ synthesize: {
36
+ type: "boolean",
37
+ description: "Use AI for personalized advice (default: true if LLM configured)",
38
+ },
39
+ compact: {
40
+ type: "boolean",
41
+ description: "Return compact result with file reference (default: true for ~80% token reduction)",
42
+ },
43
+ },
44
+ },
45
+ };
46
+ export async function executeContextAnalysis(db, params) {
47
+ const { include_recommendations = true, analyze_gaps = true } = params;
48
+ const useCompact = params.compact !== false; // Default to compact=true
49
+ // Check LLM availability
50
+ const dbInstance = db.db;
51
+ const llmConfig = getLLMConfig(dbInstance);
52
+ const shouldSynthesize = params.synthesize ?? canSynthesize(llmConfig);
53
+ // Get full context
54
+ const context = db.getUserContext(true, true);
55
+ // Get recent items to analyze matching patterns
56
+ const recentItems = db.getRelevantContent(0, undefined, 100, 168); // Last week
57
+ // Calculate quality score
58
+ const qualityScore = calculateQualityScore(context);
59
+ // Analyze recent items breakdown
60
+ const itemsBreakdown = analyzeItemsBreakdown(db, recentItems);
61
+ // Find coverage gaps
62
+ const coverageGaps = analyze_gaps ? findCoverageGaps(context, recentItems) : [];
63
+ // Generate recommendations
64
+ const recommendations = include_recommendations
65
+ ? generateRecommendations(context, qualityScore, coverageGaps, itemsBreakdown)
66
+ : [];
67
+ const result = {
68
+ context_summary: {
69
+ role: context.role,
70
+ tech_stack_count: context.tech_stack.length,
71
+ interests_count: context.interests.length,
72
+ domains_count: context.domains.length,
73
+ exclusions_count: context.exclusions.length,
74
+ detected_tech_count: context.ace?.detected_tech.length || 0,
75
+ active_topics_count: context.ace?.active_topics.length || 0,
76
+ learned_affinities_count: context.learned?.topic_affinities.length || 0,
77
+ anti_topics_count: context.learned?.anti_topics.length || 0,
78
+ },
79
+ quality_score: qualityScore,
80
+ tech_stack: context.tech_stack,
81
+ interests: context.interests.map(i => ({ topic: i.topic, weight: i.weight })),
82
+ top_detected_tech: (context.ace?.detected_tech || [])
83
+ .slice(0, 10)
84
+ .map(t => ({ name: t.name, confidence: t.confidence })),
85
+ top_active_topics: (context.ace?.active_topics || [])
86
+ .slice(0, 10)
87
+ .map(t => ({ topic: t.topic, weight: t.weight })),
88
+ top_affinities: (context.learned?.topic_affinities || [])
89
+ .filter(a => a.affinity_score > 0)
90
+ .slice(0, 10)
91
+ .map(a => ({ topic: a.topic, score: a.affinity_score })),
92
+ exclusions: context.exclusions,
93
+ coverage_gaps: coverageGaps,
94
+ recommendations,
95
+ recent_items_breakdown: itemsBreakdown,
96
+ };
97
+ // AI Personalized Advice - the actual superpower
98
+ if (shouldSynthesize && canSynthesize(llmConfig)) {
99
+ try {
100
+ const analysisData = {
101
+ context_summary: result.context_summary,
102
+ quality_score: result.quality_score,
103
+ coverage_gaps: result.coverage_gaps,
104
+ recommendations: result.recommendations,
105
+ recent_items_breakdown: result.recent_items_breakdown,
106
+ };
107
+ const synthesis = await synthesize(llmConfig, {
108
+ system: SYNTHESIS_PROMPTS.contextAnalysis.system,
109
+ prompt: SYNTHESIS_PROMPTS.contextAnalysis.buildPrompt(analysisData),
110
+ max_tokens: 350,
111
+ complexity: SYNTHESIS_PROMPTS.contextAnalysis.complexity,
112
+ });
113
+ // Parse the synthesis
114
+ const lines = synthesis.synthesis.split("\n").filter(l => l.trim());
115
+ const highestImpact = lines.find(l => l.toLowerCase().includes("highest") ||
116
+ l.toLowerCase().includes("most important") ||
117
+ l.toLowerCase().includes("first")) || lines[0] || "";
118
+ result.ai_advice = {
119
+ personalized_recommendations: synthesis.synthesis,
120
+ highest_impact_change: highestImpact,
121
+ ideal_context_description: lines[lines.length - 1] || "",
122
+ model_used: synthesis.model_used,
123
+ };
124
+ }
125
+ catch (error) {
126
+ console.error("AI advice failed:", error);
127
+ }
128
+ }
129
+ // Return compact or full result based on parameter
130
+ if (useCompact) {
131
+ return createContextAnalysisCompact(result);
132
+ }
133
+ return result;
134
+ }
135
+ function calculateQualityScore(context) {
136
+ const dimensions = [];
137
+ // Explicit signals (tech stack + interests)
138
+ const explicitScore = Math.min(1, (context.tech_stack.length + context.interests.length) / 10);
139
+ dimensions.push({
140
+ name: "Explicit Signals",
141
+ score: Math.round(explicitScore * 100) / 100,
142
+ explanation: explicitScore >= 0.7
143
+ ? "Good coverage of explicit interests and tech"
144
+ : "Consider adding more interests and tech stack items",
145
+ });
146
+ // ACE coverage
147
+ const aceScore = context.ace
148
+ ? Math.min(1, (context.ace.detected_tech.length + context.ace.active_topics.length) / 20)
149
+ : 0;
150
+ dimensions.push({
151
+ name: "ACE Detection",
152
+ score: Math.round(aceScore * 100) / 100,
153
+ explanation: aceScore >= 0.5
154
+ ? "ACE is detecting your work context well"
155
+ : aceScore > 0
156
+ ? "ACE has some detection - consider adding more watched directories"
157
+ : "ACE not active - add directories to watch",
158
+ });
159
+ // Learned preferences
160
+ const learnedScore = context.learned
161
+ ? Math.min(1, context.learned.topic_affinities.filter(a => a.affinity_score > 0).length / 15)
162
+ : 0;
163
+ dimensions.push({
164
+ name: "Learned Preferences",
165
+ score: Math.round(learnedScore * 100) / 100,
166
+ explanation: learnedScore >= 0.5
167
+ ? "Good learning from your feedback"
168
+ : "Give more feedback to help 4DA learn your preferences",
169
+ });
170
+ // Diversity
171
+ const diversity = new Set([
172
+ ...context.tech_stack,
173
+ ...context.interests.map(i => i.topic),
174
+ ...context.domains,
175
+ ]).size;
176
+ const diversityScore = Math.min(1, diversity / 15);
177
+ dimensions.push({
178
+ name: "Diversity",
179
+ score: Math.round(diversityScore * 100) / 100,
180
+ explanation: diversityScore >= 0.6
181
+ ? "Good topic diversity"
182
+ : "Consider broadening your declared interests",
183
+ });
184
+ const overall = dimensions.reduce((sum, d) => sum + d.score, 0) / dimensions.length;
185
+ return {
186
+ overall: Math.round(overall * 100) / 100,
187
+ dimensions,
188
+ };
189
+ }
190
+ function analyzeItemsBreakdown(db, items) {
191
+ let interests = 0;
192
+ let tech = 0;
193
+ let ace = 0;
194
+ let learned = 0;
195
+ let unmatched = 0;
196
+ // Sample up to 20 items for detailed analysis
197
+ const sample = items.slice(0, 20);
198
+ for (const item of sample) {
199
+ const explanation = db.explainRelevance(item.id, item.source_type);
200
+ if (!explanation) {
201
+ unmatched++;
202
+ continue;
203
+ }
204
+ const mc = explanation.matching_context;
205
+ if (mc.matching_interests.length > 0)
206
+ interests++;
207
+ else if (mc.matching_tech.length > 0)
208
+ tech++;
209
+ else if (mc.matching_topics.length > 0)
210
+ ace++;
211
+ else if (mc.matching_affinities.length > 0)
212
+ learned++;
213
+ else
214
+ unmatched++;
215
+ }
216
+ return {
217
+ matched_by_interests: interests,
218
+ matched_by_tech: tech,
219
+ matched_by_ace: ace,
220
+ matched_by_learned: learned,
221
+ unmatched,
222
+ };
223
+ }
224
+ function findCoverageGaps(context, items) {
225
+ const gaps = [];
226
+ // Find high-scoring items that don't match explicit context
227
+ const unmatchedHighScorers = items
228
+ .filter(i => i.relevance_score >= 0.6)
229
+ .filter(i => {
230
+ const text = (i.title + " " + i.content).toLowerCase();
231
+ const matchesExplicit = context.tech_stack.some(t => text.includes(t.toLowerCase())) ||
232
+ context.interests.some(int => text.includes(int.topic.toLowerCase()));
233
+ return !matchesExplicit;
234
+ })
235
+ .slice(0, 5);
236
+ for (const item of unmatchedHighScorers) {
237
+ // Extract potential topic
238
+ const words = item.title.toLowerCase().split(/\s+/).filter(w => w.length > 4);
239
+ const potentialTopic = words[0] || "unidentified topic";
240
+ gaps.push({
241
+ area: potentialTopic,
242
+ evidence: `Item "${item.title.substring(0, 50)}..." scored ${Math.round(item.relevance_score * 100)}% without explicit interest match`,
243
+ recommendation: `Consider adding "${potentialTopic}" as an explicit interest`,
244
+ });
245
+ }
246
+ // Check for ACE gaps
247
+ if (!context.ace || context.ace.active_topics.length === 0) {
248
+ gaps.push({
249
+ area: "Local Context",
250
+ evidence: "No active topics detected from local files",
251
+ recommendation: "Ensure ACE is scanning your active project directories",
252
+ });
253
+ }
254
+ return gaps.slice(0, 5);
255
+ }
256
+ function generateRecommendations(context, quality, gaps, breakdown) {
257
+ const recommendations = [];
258
+ // Low quality score
259
+ if (quality.overall < 0.5) {
260
+ recommendations.push({
261
+ priority: "high",
262
+ action: "Add more explicit interests and tech stack items",
263
+ impact: "Will significantly improve relevance scoring",
264
+ });
265
+ }
266
+ // No ACE
267
+ if (!context.ace || context.ace.detected_tech.length === 0) {
268
+ recommendations.push({
269
+ priority: "high",
270
+ action: "Configure watched directories for ACE scanning",
271
+ impact: "Enables automatic context detection from your code",
272
+ });
273
+ }
274
+ // Low learned preferences
275
+ if (!context.learned || context.learned.topic_affinities.filter(a => a.affinity_score > 0).length < 5) {
276
+ recommendations.push({
277
+ priority: "medium",
278
+ action: "Provide more feedback on items (click, save, dismiss)",
279
+ impact: "Helps 4DA learn your preferences over time",
280
+ });
281
+ }
282
+ // Coverage gaps
283
+ for (const gap of gaps.slice(0, 2)) {
284
+ recommendations.push({
285
+ priority: "medium",
286
+ action: gap.recommendation,
287
+ impact: `Would improve matching for "${gap.area}" content`,
288
+ });
289
+ }
290
+ // High unmatched rate
291
+ if (breakdown.unmatched > 10) {
292
+ recommendations.push({
293
+ priority: "low",
294
+ action: "Review your exclusions - may be too aggressive",
295
+ impact: "Could be filtering out relevant content",
296
+ });
297
+ }
298
+ return recommendations;
299
+ }
300
+ //# sourceMappingURL=context-analysis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-analysis.js","sourceRoot":"","sources":["../../src/tools/context-analysis.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Daily Briefing Tool
3
+ *
4
+ * Generate an executive summary of 4DA's discoveries.
5
+ * This is a SUPERPOWER - it synthesizes noise into actionable intelligence.
6
+ *
7
+ * With synthesize=true, uses LLM to generate genuine insights.
8
+ */
9
+ import type { FourDADatabase } from "../db.js";
10
+ import { type CompactResult, type DailyBriefingKeyData } from "../output-manager.js";
11
+ export declare const dailyBriefingTool: {
12
+ name: string;
13
+ description: string;
14
+ inputSchema: {
15
+ type: string;
16
+ properties: {
17
+ hours: {
18
+ type: string;
19
+ description: string;
20
+ };
21
+ min_score: {
22
+ type: string;
23
+ description: string;
24
+ };
25
+ max_items: {
26
+ type: string;
27
+ description: string;
28
+ };
29
+ format: {
30
+ type: string;
31
+ enum: string[];
32
+ description: string;
33
+ };
34
+ synthesize: {
35
+ type: string;
36
+ description: string;
37
+ };
38
+ compact: {
39
+ type: string;
40
+ description: string;
41
+ };
42
+ };
43
+ };
44
+ };
45
+ export interface DailyBriefingParams {
46
+ hours?: number;
47
+ min_score?: number;
48
+ max_items?: number;
49
+ format?: "full" | "brief" | "actionable";
50
+ synthesize?: boolean;
51
+ compact?: boolean;
52
+ }
53
+ interface Theme {
54
+ name: string;
55
+ item_count: number;
56
+ avg_score: number;
57
+ top_items: {
58
+ title: string;
59
+ score: number;
60
+ url: string | null;
61
+ }[];
62
+ insight: string;
63
+ }
64
+ interface BriefingResult {
65
+ period: {
66
+ start: string;
67
+ end: string;
68
+ hours: number;
69
+ };
70
+ summary: {
71
+ total_items_analyzed: number;
72
+ high_relevance_count: number;
73
+ avg_score: number;
74
+ tldr: string;
75
+ };
76
+ themes: Theme[];
77
+ notable_items: {
78
+ id: number;
79
+ title: string;
80
+ url: string | null;
81
+ source: string;
82
+ score: number;
83
+ why_notable: string;
84
+ }[];
85
+ recommendations: {
86
+ priority: "high" | "medium" | "low";
87
+ action: string;
88
+ reasoning: string;
89
+ }[];
90
+ trends: {
91
+ rising: string[];
92
+ falling: string[];
93
+ };
94
+ ai_synthesis?: {
95
+ executive_brief: string;
96
+ key_insight: string;
97
+ action_item: string;
98
+ model_used: string;
99
+ };
100
+ }
101
+ export declare function executeDailyBriefing(db: FourDADatabase, params: DailyBriefingParams): Promise<BriefingResult | CompactResult<DailyBriefingKeyData>>;
102
+ export {};
103
+ //# sourceMappingURL=daily-briefing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daily-briefing.d.ts","sourceRoot":"","sources":["../../src/tools/daily-briefing.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/C,OAAO,EAA8B,KAAK,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAEjH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6C7B,CAAC;AAEF,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,YAAY,CAAC;IACzC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,UAAU,KAAK;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,EAAE,CAAC;IAClE,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,cAAc;IACtB,MAAM,EAAE;QACN,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,OAAO,EAAE;QACP,oBAAoB,EAAE,MAAM,CAAC;QAC7B,oBAAoB,EAAE,MAAM,CAAC;QAC7B,SAAS,EAAE,MAAM,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,aAAa,EAAE;QACb,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;KACrB,EAAE,CAAC;IACJ,eAAe,EAAE;QACf,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;QACpC,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;KACnB,EAAE,CAAC;IACJ,MAAM,EAAE;QACN,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,OAAO,EAAE,MAAM,EAAE,CAAC;KACnB,CAAC;IAEF,YAAY,CAAC,EAAE;QACb,eAAe,EAAE,MAAM,CAAC;QACxB,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAED,wBAAsB,oBAAoB,CACxC,EAAE,EAAE,cAAc,EAClB,MAAM,EAAE,mBAAmB,GAC1B,OAAO,CAAC,cAAc,GAAG,aAAa,CAAC,oBAAoB,CAAC,CAAC,CAuH/D"}