@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.
- package/README.md +135 -0
- package/dist/db.d.ts +64 -0
- package/dist/db.d.ts.map +1 -0
- package/dist/db.js +578 -0
- package/dist/db.js.map +1 -0
- package/dist/index.d.ts +37 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +422 -0
- package/dist/index.js.map +1 -0
- package/dist/llm.d.ts +144 -0
- package/dist/llm.d.ts.map +1 -0
- package/dist/llm.js +447 -0
- package/dist/llm.js.map +1 -0
- package/dist/output-manager.d.ts +156 -0
- package/dist/output-manager.d.ts.map +1 -0
- package/dist/output-manager.js +156 -0
- package/dist/output-manager.js.map +1 -0
- package/dist/schema-registry.d.ts +46 -0
- package/dist/schema-registry.d.ts.map +1 -0
- package/dist/schema-registry.js +133 -0
- package/dist/schema-registry.js.map +1 -0
- package/dist/schemas/config-validator.json +18 -0
- package/dist/schemas/context-analysis.json +25 -0
- package/dist/schemas/daily-briefing.json +34 -0
- package/dist/schemas/explain-relevance.json +19 -0
- package/dist/schemas/get-actionable-signals.json +29 -0
- package/dist/schemas/get-context.json +17 -0
- package/dist/schemas/get-relevant-content.json +26 -0
- package/dist/schemas/llm-status.json +13 -0
- package/dist/schemas/record-feedback.json +24 -0
- package/dist/schemas/score-autopsy.json +30 -0
- package/dist/schemas/source-health.json +17 -0
- package/dist/schemas/topic-connections.json +34 -0
- package/dist/schemas/trend-analysis.json +29 -0
- package/dist/tools/attention-report.d.ts +39 -0
- package/dist/tools/attention-report.d.ts.map +1 -0
- package/dist/tools/attention-report.js +72 -0
- package/dist/tools/attention-report.js.map +1 -0
- package/dist/tools/config-validator.d.ts +59 -0
- package/dist/tools/config-validator.d.ts.map +1 -0
- package/dist/tools/config-validator.js +375 -0
- package/dist/tools/config-validator.js.map +1 -0
- package/dist/tools/context-analysis.d.ts +108 -0
- package/dist/tools/context-analysis.d.ts.map +1 -0
- package/dist/tools/context-analysis.js +300 -0
- package/dist/tools/context-analysis.js.map +1 -0
- package/dist/tools/daily-briefing.d.ts +103 -0
- package/dist/tools/daily-briefing.d.ts.map +1 -0
- package/dist/tools/daily-briefing.js +278 -0
- package/dist/tools/daily-briefing.js.map +1 -0
- package/dist/tools/explain-relevance.d.ts +36 -0
- package/dist/tools/explain-relevance.d.ts.map +1 -0
- package/dist/tools/explain-relevance.js +50 -0
- package/dist/tools/explain-relevance.js.map +1 -0
- package/dist/tools/export-context.d.ts +43 -0
- package/dist/tools/export-context.d.ts.map +1 -0
- package/dist/tools/export-context.js +104 -0
- package/dist/tools/export-context.js.map +1 -0
- package/dist/tools/get-actionable-signals.d.ts +65 -0
- package/dist/tools/get-actionable-signals.d.ts.map +1 -0
- package/dist/tools/get-actionable-signals.js +268 -0
- package/dist/tools/get-actionable-signals.js.map +1 -0
- package/dist/tools/get-context.d.ts +34 -0
- package/dist/tools/get-context.d.ts.map +1 -0
- package/dist/tools/get-context.js +43 -0
- package/dist/tools/get-context.js.map +1 -0
- package/dist/tools/get-relevant-content.d.ts +44 -0
- package/dist/tools/get-relevant-content.d.ts.map +1 -0
- package/dist/tools/get-relevant-content.js +56 -0
- package/dist/tools/get-relevant-content.js.map +1 -0
- package/dist/tools/index.d.ts +40 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +44 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/knowledge-gaps.d.ts +36 -0
- package/dist/tools/knowledge-gaps.d.ts.map +1 -0
- package/dist/tools/knowledge-gaps.js +76 -0
- package/dist/tools/knowledge-gaps.js.map +1 -0
- package/dist/tools/llm-status.d.ts +45 -0
- package/dist/tools/llm-status.d.ts.map +1 -0
- package/dist/tools/llm-status.js +92 -0
- package/dist/tools/llm-status.js.map +1 -0
- package/dist/tools/project-health.d.ts +41 -0
- package/dist/tools/project-health.d.ts.map +1 -0
- package/dist/tools/project-health.js +71 -0
- package/dist/tools/project-health.js.map +1 -0
- package/dist/tools/record-feedback.d.ts +39 -0
- package/dist/tools/record-feedback.d.ts.map +1 -0
- package/dist/tools/record-feedback.js +60 -0
- package/dist/tools/record-feedback.js.map +1 -0
- package/dist/tools/reverse-mentions.d.ts +38 -0
- package/dist/tools/reverse-mentions.d.ts.map +1 -0
- package/dist/tools/reverse-mentions.js +57 -0
- package/dist/tools/reverse-mentions.js.map +1 -0
- package/dist/tools/score-autopsy.d.ts +93 -0
- package/dist/tools/score-autopsy.d.ts.map +1 -0
- package/dist/tools/score-autopsy.js +288 -0
- package/dist/tools/score-autopsy.js.map +1 -0
- package/dist/tools/semantic-shifts.d.ts +37 -0
- package/dist/tools/semantic-shifts.d.ts.map +1 -0
- package/dist/tools/semantic-shifts.js +73 -0
- package/dist/tools/semantic-shifts.js.map +1 -0
- package/dist/tools/signal-chains.d.ts +45 -0
- package/dist/tools/signal-chains.d.ts.map +1 -0
- package/dist/tools/signal-chains.js +60 -0
- package/dist/tools/signal-chains.js.map +1 -0
- package/dist/tools/source-health.d.ts +64 -0
- package/dist/tools/source-health.d.ts.map +1 -0
- package/dist/tools/source-health.js +176 -0
- package/dist/tools/source-health.js.map +1 -0
- package/dist/tools/topic-connections.d.ts +112 -0
- package/dist/tools/topic-connections.d.ts.map +1 -0
- package/dist/tools/topic-connections.js +318 -0
- package/dist/tools/topic-connections.js.map +1 -0
- package/dist/tools/trend-analysis.d.ts +105 -0
- package/dist/tools/trend-analysis.d.ts.map +1 -0
- package/dist/tools/trend-analysis.js +295 -0
- package/dist/tools/trend-analysis.js.map +1 -0
- package/dist/types.d.ts +163 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +7 -0
- package/dist/types.js.map +1 -0
- 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"}
|