@4da/mcp-server 4.3.0 → 4.6.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 (202) hide show
  1. package/README.md +61 -81
  2. package/dist/db.d.ts +12 -1
  3. package/dist/db.d.ts.map +1 -1
  4. package/dist/db.js +71 -8
  5. package/dist/db.js.map +1 -1
  6. package/dist/index.d.ts +9 -14
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +12 -17
  9. package/dist/index.js.map +1 -1
  10. package/dist/live/crates-registry.d.ts +18 -0
  11. package/dist/live/crates-registry.d.ts.map +1 -0
  12. package/dist/live/crates-registry.js +133 -0
  13. package/dist/live/crates-registry.js.map +1 -0
  14. package/dist/live/go-registry.d.ts +19 -0
  15. package/dist/live/go-registry.d.ts.map +1 -0
  16. package/dist/live/go-registry.js +127 -0
  17. package/dist/live/go-registry.js.map +1 -0
  18. package/dist/live/http-utils.d.ts +3 -0
  19. package/dist/live/http-utils.d.ts.map +1 -0
  20. package/dist/live/http-utils.js +20 -0
  21. package/dist/live/http-utils.js.map +1 -0
  22. package/dist/live/index.d.ts +7 -2
  23. package/dist/live/index.d.ts.map +1 -1
  24. package/dist/live/index.js +71 -0
  25. package/dist/live/index.js.map +1 -1
  26. package/dist/live/npm-registry.d.ts +19 -0
  27. package/dist/live/npm-registry.d.ts.map +1 -0
  28. package/dist/live/npm-registry.js +132 -0
  29. package/dist/live/npm-registry.js.map +1 -0
  30. package/dist/live/osv-scanner.d.ts.map +1 -1
  31. package/dist/live/osv-scanner.js +1 -10
  32. package/dist/live/osv-scanner.js.map +1 -1
  33. package/dist/live/pypi-registry.d.ts +18 -0
  34. package/dist/live/pypi-registry.d.ts.map +1 -0
  35. package/dist/live/pypi-registry.js +142 -0
  36. package/dist/live/pypi-registry.js.map +1 -0
  37. package/dist/live/rate-limiter.d.ts +12 -0
  38. package/dist/live/rate-limiter.d.ts.map +1 -1
  39. package/dist/live/rate-limiter.js +4 -0
  40. package/dist/live/rate-limiter.js.map +1 -1
  41. package/dist/live/semver-utils.d.ts +5 -0
  42. package/dist/live/semver-utils.d.ts.map +1 -0
  43. package/dist/live/semver-utils.js +28 -0
  44. package/dist/live/semver-utils.js.map +1 -0
  45. package/dist/live/types.d.ts +41 -0
  46. package/dist/live/types.d.ts.map +1 -1
  47. package/dist/schema-registry.d.ts +4 -2
  48. package/dist/schema-registry.d.ts.map +1 -1
  49. package/dist/schema-registry.js +55 -221
  50. package/dist/schema-registry.js.map +1 -1
  51. package/dist/schemas/dependency-health.json +27 -0
  52. package/dist/schemas/upgrade-planner.json +22 -0
  53. package/dist/tool-dispatch.d.ts +1 -7
  54. package/dist/tool-dispatch.d.ts.map +1 -1
  55. package/dist/tool-dispatch.js +14 -46
  56. package/dist/tool-dispatch.js.map +1 -1
  57. package/dist/tools/dependency-health.d.ts +45 -0
  58. package/dist/tools/dependency-health.d.ts.map +1 -0
  59. package/dist/tools/dependency-health.js +152 -0
  60. package/dist/tools/dependency-health.js.map +1 -0
  61. package/dist/tools/index.d.ts +13 -40
  62. package/dist/tools/index.d.ts.map +1 -1
  63. package/dist/tools/index.js +18 -52
  64. package/dist/tools/index.js.map +1 -1
  65. package/dist/tools/upgrade-planner.d.ts +59 -0
  66. package/dist/tools/upgrade-planner.d.ts.map +1 -0
  67. package/dist/tools/upgrade-planner.js +167 -0
  68. package/dist/tools/upgrade-planner.js.map +1 -0
  69. package/dist/tools/what-should-i-know.d.ts +4 -12
  70. package/dist/tools/what-should-i-know.d.ts.map +1 -1
  71. package/dist/tools/what-should-i-know.js +11 -102
  72. package/dist/tools/what-should-i-know.js.map +1 -1
  73. package/package.json +2 -2
  74. package/dist/schemas/agent-feedback-stats.json +0 -14
  75. package/dist/schemas/agent-session-brief.json +0 -25
  76. package/dist/schemas/attention-report.json +0 -13
  77. package/dist/schemas/autophagy-status.json +0 -13
  78. package/dist/schemas/compound-advantage.json +0 -14
  79. package/dist/schemas/config-validator.json +0 -18
  80. package/dist/schemas/context-analysis.json +0 -25
  81. package/dist/schemas/daily-briefing.json +0 -34
  82. package/dist/schemas/decision-windows.json +0 -22
  83. package/dist/schemas/delegation-score.json +0 -18
  84. package/dist/schemas/explain-relevance.json +0 -19
  85. package/dist/schemas/export-context.json +0 -17
  86. package/dist/schemas/llm-status.json +0 -13
  87. package/dist/schemas/preemption-feed.json +0 -18
  88. package/dist/schemas/project-health.json +0 -13
  89. package/dist/schemas/record-agent-feedback.json +0 -28
  90. package/dist/schemas/reverse-mentions.json +0 -13
  91. package/dist/schemas/score-autopsy.json +0 -30
  92. package/dist/schemas/semantic-shifts.json +0 -17
  93. package/dist/schemas/signal-chains.json +0 -19
  94. package/dist/schemas/source-health.json +0 -17
  95. package/dist/schemas/tech-radar.json +0 -23
  96. package/dist/schemas/topic-connections.json +0 -34
  97. package/dist/schemas/trend-analysis.json +0 -29
  98. package/dist/schemas/trust-summary.json +0 -13
  99. package/dist/tools/agent-feedback-stats.d.ts +0 -30
  100. package/dist/tools/agent-feedback-stats.d.ts.map +0 -1
  101. package/dist/tools/agent-feedback-stats.js +0 -41
  102. package/dist/tools/agent-feedback-stats.js.map +0 -1
  103. package/dist/tools/agent-session-brief.d.ts +0 -44
  104. package/dist/tools/agent-session-brief.d.ts.map +0 -1
  105. package/dist/tools/agent-session-brief.js +0 -179
  106. package/dist/tools/agent-session-brief.js.map +0 -1
  107. package/dist/tools/attention-report.d.ts +0 -40
  108. package/dist/tools/attention-report.d.ts.map +0 -1
  109. package/dist/tools/attention-report.js +0 -73
  110. package/dist/tools/attention-report.js.map +0 -1
  111. package/dist/tools/autophagy-status.d.ts +0 -25
  112. package/dist/tools/autophagy-status.d.ts.map +0 -1
  113. package/dist/tools/autophagy-status.js +0 -56
  114. package/dist/tools/autophagy-status.js.map +0 -1
  115. package/dist/tools/compound-advantage.d.ts +0 -30
  116. package/dist/tools/compound-advantage.d.ts.map +0 -1
  117. package/dist/tools/compound-advantage.js +0 -133
  118. package/dist/tools/compound-advantage.js.map +0 -1
  119. package/dist/tools/config-validator.d.ts +0 -59
  120. package/dist/tools/config-validator.d.ts.map +0 -1
  121. package/dist/tools/config-validator.js +0 -417
  122. package/dist/tools/config-validator.js.map +0 -1
  123. package/dist/tools/context-analysis.d.ts +0 -108
  124. package/dist/tools/context-analysis.d.ts.map +0 -1
  125. package/dist/tools/context-analysis.js +0 -301
  126. package/dist/tools/context-analysis.js.map +0 -1
  127. package/dist/tools/daily-briefing.d.ts +0 -103
  128. package/dist/tools/daily-briefing.d.ts.map +0 -1
  129. package/dist/tools/daily-briefing.js +0 -294
  130. package/dist/tools/daily-briefing.js.map +0 -1
  131. package/dist/tools/decision-windows.d.ts +0 -37
  132. package/dist/tools/decision-windows.d.ts.map +0 -1
  133. package/dist/tools/decision-windows.js +0 -67
  134. package/dist/tools/decision-windows.js.map +0 -1
  135. package/dist/tools/delegation-score.d.ts +0 -34
  136. package/dist/tools/delegation-score.d.ts.map +0 -1
  137. package/dist/tools/delegation-score.js +0 -260
  138. package/dist/tools/delegation-score.js.map +0 -1
  139. package/dist/tools/explain-relevance.d.ts +0 -36
  140. package/dist/tools/explain-relevance.d.ts.map +0 -1
  141. package/dist/tools/explain-relevance.js +0 -51
  142. package/dist/tools/explain-relevance.js.map +0 -1
  143. package/dist/tools/export-context.d.ts +0 -60
  144. package/dist/tools/export-context.d.ts.map +0 -1
  145. package/dist/tools/export-context.js +0 -179
  146. package/dist/tools/export-context.js.map +0 -1
  147. package/dist/tools/llm-status.d.ts +0 -45
  148. package/dist/tools/llm-status.d.ts.map +0 -1
  149. package/dist/tools/llm-status.js +0 -93
  150. package/dist/tools/llm-status.js.map +0 -1
  151. package/dist/tools/muse-context.d.ts +0 -195
  152. package/dist/tools/muse-context.d.ts.map +0 -1
  153. package/dist/tools/muse-context.js +0 -284
  154. package/dist/tools/muse-context.js.map +0 -1
  155. package/dist/tools/preemption-feed.d.ts +0 -55
  156. package/dist/tools/preemption-feed.d.ts.map +0 -1
  157. package/dist/tools/preemption-feed.js +0 -124
  158. package/dist/tools/preemption-feed.js.map +0 -1
  159. package/dist/tools/project-health.d.ts +0 -53
  160. package/dist/tools/project-health.d.ts.map +0 -1
  161. package/dist/tools/project-health.js +0 -122
  162. package/dist/tools/project-health.js.map +0 -1
  163. package/dist/tools/record-agent-feedback.d.ts +0 -46
  164. package/dist/tools/record-agent-feedback.d.ts.map +0 -1
  165. package/dist/tools/record-agent-feedback.js +0 -71
  166. package/dist/tools/record-agent-feedback.js.map +0 -1
  167. package/dist/tools/reverse-mentions.d.ts +0 -38
  168. package/dist/tools/reverse-mentions.d.ts.map +0 -1
  169. package/dist/tools/reverse-mentions.js +0 -75
  170. package/dist/tools/reverse-mentions.js.map +0 -1
  171. package/dist/tools/score-autopsy.d.ts +0 -93
  172. package/dist/tools/score-autopsy.d.ts.map +0 -1
  173. package/dist/tools/score-autopsy.js +0 -295
  174. package/dist/tools/score-autopsy.js.map +0 -1
  175. package/dist/tools/semantic-shifts.d.ts +0 -53
  176. package/dist/tools/semantic-shifts.d.ts.map +0 -1
  177. package/dist/tools/semantic-shifts.js +0 -74
  178. package/dist/tools/semantic-shifts.js.map +0 -1
  179. package/dist/tools/signal-chains.d.ts +0 -52
  180. package/dist/tools/signal-chains.d.ts.map +0 -1
  181. package/dist/tools/signal-chains.js +0 -63
  182. package/dist/tools/signal-chains.js.map +0 -1
  183. package/dist/tools/source-health.d.ts +0 -64
  184. package/dist/tools/source-health.d.ts.map +0 -1
  185. package/dist/tools/source-health.js +0 -205
  186. package/dist/tools/source-health.js.map +0 -1
  187. package/dist/tools/tech-radar.d.ts +0 -38
  188. package/dist/tools/tech-radar.d.ts.map +0 -1
  189. package/dist/tools/tech-radar.js +0 -249
  190. package/dist/tools/tech-radar.js.map +0 -1
  191. package/dist/tools/topic-connections.d.ts +0 -112
  192. package/dist/tools/topic-connections.d.ts.map +0 -1
  193. package/dist/tools/topic-connections.js +0 -319
  194. package/dist/tools/topic-connections.js.map +0 -1
  195. package/dist/tools/trend-analysis.d.ts +0 -105
  196. package/dist/tools/trend-analysis.d.ts.map +0 -1
  197. package/dist/tools/trend-analysis.js +0 -296
  198. package/dist/tools/trend-analysis.js.map +0 -1
  199. package/dist/tools/trust-summary.d.ts +0 -38
  200. package/dist/tools/trust-summary.d.ts.map +0 -1
  201. package/dist/tools/trust-summary.js +0 -89
  202. package/dist/tools/trust-summary.js.map +0 -1
@@ -1,296 +0,0 @@
1
- // SPDX-License-Identifier: FSL-1.1-Apache-2.0
2
- /**
3
- * Trend Analysis Tool
4
- *
5
- * Statistical analysis of patterns and trends over time.
6
- * This is a SUPERPOWER - it reveals what's rising, falling, and anomalous.
7
- *
8
- * With synthesize=true, uses LLM to interpret trends and make predictions.
9
- */
10
- import { getLLMConfig, canSynthesize, synthesize, SYNTHESIS_PROMPTS } from "../llm.js";
11
- import { createTrendAnalysisCompact } from "../output-manager.js";
12
- export const trendAnalysisTool = {
13
- name: "trend_analysis",
14
- description: `Analyze patterns and trends in 4DA's content over time.
15
-
16
- With synthesize=true (recommended), uses AI to interpret trends and predict what matters.
17
-
18
- Returns:
19
- - Topic frequency trends (rising/falling)
20
- - Volume anomalies detected
21
- - Week-over-week comparisons
22
- - Source performance trends
23
- - AI predictions (when enabled)
24
-
25
- Use this to understand what's changing in your information landscape.`,
26
- inputSchema: {
27
- type: "object",
28
- properties: {
29
- days: {
30
- type: "number",
31
- description: "Analysis period in days (default: 30)",
32
- },
33
- topic: {
34
- type: "string",
35
- description: "Specific topic to analyze (optional)",
36
- },
37
- detect_anomalies: {
38
- type: "boolean",
39
- description: "Include anomaly detection (default: true)",
40
- },
41
- synthesize: {
42
- type: "boolean",
43
- description: "Use AI to interpret trends and predict (default: true if LLM configured)",
44
- },
45
- compact: {
46
- type: "boolean",
47
- description: "Return compact result with file reference (default: true for ~80% token reduction)",
48
- },
49
- },
50
- },
51
- };
52
- export async function executeTrendAnalysis(db, params) {
53
- const { days = 30, topic, detect_anomalies = true } = params;
54
- const useCompact = params.compact !== false; // Default to compact=true
55
- const dbInstance = db.db;
56
- // Check LLM availability
57
- const llmConfig = getLLMConfig(dbInstance);
58
- const shouldSynthesize = params.synthesize ?? canSynthesize(llmConfig);
59
- const endDate = new Date();
60
- const startDate = new Date(endDate.getTime() - days * 24 * 60 * 60 * 1000);
61
- // Volume by day
62
- const volumeByDayStmt = dbInstance.prepare(`
63
- SELECT date(created_at) as date, COUNT(*) as count
64
- FROM source_items
65
- WHERE datetime(created_at) >= datetime(?)
66
- GROUP BY date(created_at)
67
- ORDER BY date
68
- `);
69
- const volumeByDay = volumeByDayStmt.all(startDate.toISOString());
70
- // Calculate statistics for anomaly detection
71
- const volumes = volumeByDay.map(v => v.count);
72
- const mean = volumes.reduce((a, b) => a + b, 0) / volumes.length || 0;
73
- const stdDev = Math.sqrt(volumes.reduce((sum, v) => sum + Math.pow(v - mean, 2), 0) / volumes.length) || 1;
74
- // Detect anomalies
75
- const anomalies = detect_anomalies
76
- ? volumeByDay
77
- .map(v => ({
78
- date: v.date,
79
- volume: v.count,
80
- expected: Math.round(mean),
81
- z_score: Math.round(((v.count - mean) / stdDev) * 100) / 100,
82
- status: (v.count - mean) / stdDev > 2 ? "spike" :
83
- (v.count - mean) / stdDev < -2 ? "drop" : "normal",
84
- }))
85
- .filter(a => a.status !== "normal")
86
- : [];
87
- // Topic trends - compare this week vs last week
88
- const topicTrends = getTopicTrends(dbInstance, topic);
89
- // Source trends
90
- const sourceTrends = getSourceTrends(dbInstance, days);
91
- // Topic correlations (co-occurrence)
92
- const correlations = getTopicCorrelations(dbInstance, days);
93
- // Overall stats
94
- const totalStmt = dbInstance.prepare(`
95
- SELECT COUNT(*) as total, AVG(CASE WHEN url IS NOT NULL THEN 1 ELSE 0 END) as avg_has_url
96
- FROM source_items
97
- WHERE datetime(created_at) >= datetime(?)
98
- `);
99
- const totalStats = totalStmt.get(startDate.toISOString());
100
- // Get relevant items for avg score
101
- const relevantItems = db.getRelevantContent(0, undefined, 1000, days * 24);
102
- const avgRelevance = relevantItems.length > 0
103
- ? relevantItems.reduce((sum, i) => sum + i.relevance_score, 0) / relevantItems.length
104
- : 0;
105
- // Volume trend
106
- const recentVolume = volumeByDay.slice(-7).reduce((sum, v) => sum + v.count, 0);
107
- const olderVolume = volumeByDay.slice(-14, -7).reduce((sum, v) => sum + v.count, 0);
108
- const volumeTrend = recentVolume > olderVolume * 1.1 ? "increasing" :
109
- recentVolume < olderVolume * 0.9 ? "decreasing" : "stable";
110
- // Generate predictions
111
- const predictions = generatePredictions(topicTrends, volumeTrend, anomalies);
112
- const result = {
113
- period: {
114
- start: startDate.toISOString().split("T")[0],
115
- end: endDate.toISOString().split("T")[0],
116
- days,
117
- },
118
- summary: {
119
- total_items: totalStats.total,
120
- avg_relevance: Math.round(avgRelevance * 100) / 100,
121
- volume_trend: volumeTrend,
122
- top_rising_topic: topicTrends.find(t => t.trend === "rising")?.topic || null,
123
- top_falling_topic: topicTrends.find(t => t.trend === "falling")?.topic || null,
124
- },
125
- topic_trends: topicTrends,
126
- volume_by_day: volumeByDay,
127
- anomalies,
128
- source_trends: sourceTrends,
129
- correlations,
130
- predictions,
131
- };
132
- // AI Interpretation - the actual superpower
133
- if (shouldSynthesize && canSynthesize(llmConfig)) {
134
- try {
135
- const context = db.getUserContext(true, true);
136
- const trendData = {
137
- period: result.period,
138
- summary: result.summary,
139
- topic_trends: result.topic_trends.slice(0, 8),
140
- anomalies: result.anomalies,
141
- correlations: result.correlations,
142
- };
143
- const contextData = {
144
- interests: context.interests.slice(0, 10),
145
- tech_stack: context.tech_stack,
146
- role: context.role,
147
- };
148
- const synthesis = await synthesize(llmConfig, {
149
- system: SYNTHESIS_PROMPTS.trendAnalysis.system,
150
- prompt: SYNTHESIS_PROMPTS.trendAnalysis.buildPrompt(trendData, contextData),
151
- max_tokens: 400,
152
- complexity: SYNTHESIS_PROMPTS.trendAnalysis.complexity,
153
- });
154
- // Parse the synthesis
155
- const lines = synthesis.synthesis.split("\n").filter(l => l.trim());
156
- const keySignal = lines[0] || "";
157
- const forecast = lines.find(l => l.toLowerCase().includes("week") || l.toLowerCase().includes("expect") || l.toLowerCase().includes("predict")) || lines[1] || "";
158
- const focus = lines.find(l => l.toLowerCase().includes("focus") || l.toLowerCase().includes("attention") || l.toLowerCase().includes("should")) || "";
159
- result.ai_interpretation = {
160
- narrative: synthesis.synthesis,
161
- key_signal: keySignal,
162
- forecast: forecast,
163
- recommended_focus: focus || "Continue monitoring trends",
164
- model_used: synthesis.model_used,
165
- };
166
- }
167
- catch (error) {
168
- console.error("AI interpretation failed:", error);
169
- }
170
- }
171
- // Return compact or full result based on parameter
172
- if (useCompact) {
173
- return createTrendAnalysisCompact(result);
174
- }
175
- return result;
176
- }
177
- function getTopicTrends(db, filterTopic) {
178
- // Define topics to track
179
- const topics = filterTopic
180
- ? [filterTopic]
181
- : ["rust", "typescript", "python", "ai", "llm", "database", "security", "async", "wasm", "react"];
182
- const trends = [];
183
- for (const topic of topics) {
184
- // This week
185
- const thisWeekStmt = db.prepare(`
186
- SELECT COUNT(*) as count, AVG(CASE WHEN url IS NOT NULL THEN 1 ELSE 0 END) as quality
187
- FROM source_items
188
- WHERE datetime(created_at) >= datetime('now', '-7 days')
189
- AND (lower(title) LIKE ? OR lower(content) LIKE ?)
190
- `);
191
- const thisWeek = thisWeekStmt.all(`%${topic}%`, `%${topic}%`);
192
- // Last week
193
- const lastWeekStmt = db.prepare(`
194
- SELECT COUNT(*) as count
195
- FROM source_items
196
- WHERE datetime(created_at) >= datetime('now', '-14 days')
197
- AND datetime(created_at) < datetime('now', '-7 days')
198
- AND (lower(title) LIKE ? OR lower(content) LIKE ?)
199
- `);
200
- const lastWeek = lastWeekStmt.all(`%${topic}%`, `%${topic}%`);
201
- const current = thisWeek[0]?.count || 0;
202
- const previous = lastWeek[0]?.count || 0;
203
- const changePercent = previous > 0
204
- ? Math.round(((current - previous) / previous) * 100)
205
- : current > 0 ? 100 : 0;
206
- trends.push({
207
- topic,
208
- current_week: current,
209
- previous_week: previous,
210
- change_percent: changePercent,
211
- trend: changePercent > 15 ? "rising" : changePercent < -15 ? "falling" : "stable",
212
- avg_score: thisWeek[0]?.quality || 0,
213
- });
214
- }
215
- // Sort by absolute change
216
- return trends.sort((a, b) => Math.abs(b.change_percent) - Math.abs(a.change_percent));
217
- }
218
- function getSourceTrends(db, days) {
219
- const stmt = db.prepare(`
220
- SELECT
221
- source_type,
222
- COUNT(*) as total,
223
- SUM(CASE WHEN datetime(created_at) >= datetime('now', '-7 days') THEN 1 ELSE 0 END) as recent,
224
- SUM(CASE WHEN datetime(created_at) >= datetime('now', '-14 days')
225
- AND datetime(created_at) < datetime('now', '-7 days') THEN 1 ELSE 0 END) as older
226
- FROM source_items
227
- WHERE datetime(created_at) >= datetime('now', '-' || ? || ' days')
228
- GROUP BY source_type
229
- `);
230
- const sources = stmt.all(days);
231
- return sources.map(s => ({
232
- source: s.source_type,
233
- volume_trend: s.recent > s.older * 1.1 ? "up" :
234
- s.recent < s.older * 0.9 ? "down" : "stable",
235
- quality_trend: "stable", // Would need more data to compute
236
- avg_score: 0.6, // Placeholder
237
- item_count: s.total,
238
- }));
239
- }
240
- function getTopicCorrelations(db, days) {
241
- const topicPairs = [
242
- ["rust", "async"],
243
- ["ai", "llm"],
244
- ["typescript", "react"],
245
- ["database", "sql"],
246
- ["security", "auth"],
247
- ];
248
- const correlations = [];
249
- for (const [a, b] of topicPairs) {
250
- const stmt = db.prepare(`
251
- SELECT COUNT(*) as count
252
- FROM source_items
253
- WHERE datetime(created_at) >= datetime('now', '-' || ? || ' days')
254
- AND (lower(title) LIKE ? OR lower(content) LIKE ?)
255
- AND (lower(title) LIKE ? OR lower(content) LIKE ?)
256
- `);
257
- const result = stmt.all(days, `%${a}%`, `%${a}%`, `%${b}%`, `%${b}%`);
258
- if (result[0]?.count > 0) {
259
- correlations.push({
260
- topic_a: a,
261
- topic_b: b,
262
- co_occurrences: result[0].count,
263
- });
264
- }
265
- }
266
- return correlations.sort((a, b) => b.co_occurrences - a.co_occurrences);
267
- }
268
- function generatePredictions(trends, volumeTrend, anomalies) {
269
- const predictions = [];
270
- // Rising topics
271
- const rising = trends.filter(t => t.trend === "rising");
272
- if (rising.length > 0) {
273
- predictions.push(`"${rising[0].topic}" is trending up (+${rising[0].change_percent}%) - expect more content soon`);
274
- }
275
- // Falling topics
276
- const falling = trends.filter(t => t.trend === "falling");
277
- if (falling.length > 0) {
278
- predictions.push(`"${falling[0].topic}" is declining (${falling[0].change_percent}%) - may stabilize or continue dropping`);
279
- }
280
- // Volume prediction
281
- if (volumeTrend === "increasing") {
282
- predictions.push("Overall content volume is increasing - more items to filter");
283
- }
284
- else if (volumeTrend === "decreasing") {
285
- predictions.push("Content volume is decreasing - sources may need attention");
286
- }
287
- // Anomaly-based prediction
288
- if (anomalies.filter(a => a.status === "spike").length > 2) {
289
- predictions.push("Multiple volume spikes detected - possibly major news events");
290
- }
291
- if (predictions.length === 0) {
292
- predictions.push("Patterns are stable - no significant changes predicted");
293
- }
294
- return predictions;
295
- }
296
- //# sourceMappingURL=trend-analysis.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"trend-analysis.js","sourceRoot":"","sources":["../../src/tools/trend-analysis.ts"],"names":[],"mappings":"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"}
@@ -1,38 +0,0 @@
1
- /**
2
- * trust_summary tool
3
- *
4
- * Returns intelligence quality metrics from the trust ledger —
5
- * precision, action rate, false positive rate, preemption wins.
6
- * Helps agents assess how reliable 4DA's intelligence is.
7
- */
8
- import type { FourDADatabase } from "../db.js";
9
- export interface TrustSummaryParams {
10
- days?: number;
11
- }
12
- export declare const trustSummaryTool: {
13
- name: string;
14
- description: string;
15
- inputSchema: {
16
- type: "object";
17
- properties: {
18
- days: {
19
- type: string;
20
- description: string;
21
- default: number;
22
- };
23
- };
24
- };
25
- };
26
- export declare function executeTrustSummary(db: FourDADatabase, params: TrustSummaryParams): {
27
- period_days: number;
28
- total_surfaced: number;
29
- acted_on: number;
30
- dismissed: number;
31
- false_positives: number;
32
- precision: number;
33
- action_conversion_rate: number;
34
- preemption_wins: number;
35
- avg_lead_time_hours: number | null;
36
- reliability_assessment: string;
37
- };
38
- //# sourceMappingURL=trust-summary.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"trust-summary.d.ts","sourceRoot":"","sources":["../../src/tools/trust-summary.ts"],"names":[],"mappings":"AACA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/C,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;CAc5B,CAAC;AAEF,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,cAAc,EAClB,MAAM,EAAE,kBAAkB;;;;;;;;;;;EA8E3B"}
@@ -1,89 +0,0 @@
1
- // SPDX-License-Identifier: FSL-1.1-Apache-2.0
2
- /**
3
- * trust_summary tool
4
- *
5
- * Returns intelligence quality metrics from the trust ledger —
6
- * precision, action rate, false positive rate, preemption wins.
7
- * Helps agents assess how reliable 4DA's intelligence is.
8
- */
9
- export const trustSummaryTool = {
10
- name: "trust_summary",
11
- description: "Get intelligence quality metrics — precision, action conversion rate, false positive rate, and preemption wins. Use this to assess how reliable 4DA's signals are before acting on them.",
12
- inputSchema: {
13
- type: "object",
14
- properties: {
15
- days: {
16
- type: "number",
17
- description: "Number of days to analyze. Default: 30",
18
- default: 30,
19
- },
20
- },
21
- },
22
- };
23
- export function executeTrustSummary(db, params) {
24
- const rawDb = db.getRawDb();
25
- const days = params.days ?? 30;
26
- const offset = `-${days} days`;
27
- // Count events by type
28
- let counts = [];
29
- try {
30
- counts = rawDb
31
- .prepare(`SELECT event_type, COUNT(*) as cnt
32
- FROM trust_events
33
- WHERE created_at >= datetime('now', ?)
34
- GROUP BY event_type`)
35
- .all(offset);
36
- }
37
- catch {
38
- /* trust_events table may not exist yet */
39
- }
40
- const getCount = (type) => counts.find((c) => c.event_type === type)?.cnt ?? 0;
41
- const surfaced = getCount("surfaced");
42
- const acted_on = getCount("acted_on");
43
- const dismissed = getCount("dismissed");
44
- const false_positives = getCount("false_positive");
45
- const validated = getCount("validated");
46
- const true_positives = acted_on + validated;
47
- const precision = true_positives + false_positives > 0
48
- ? true_positives / (true_positives + false_positives)
49
- : 1.0;
50
- const action_rate = surfaced > 0 ? acted_on / surfaced : 0;
51
- // Preemption wins
52
- let preemption_wins = 0;
53
- let avg_lead_time_hours = null;
54
- try {
55
- const winRow = rawDb
56
- .prepare(`SELECT COUNT(*) as wins, AVG(lead_time_hours) as avg_lead
57
- FROM preemption_wins
58
- WHERE verified = 1 AND created_at >= datetime('now', ?)`)
59
- .get(offset);
60
- if (winRow) {
61
- preemption_wins = winRow.wins;
62
- avg_lead_time_hours = winRow.avg_lead;
63
- }
64
- }
65
- catch {
66
- /* table may not exist yet */
67
- }
68
- return {
69
- period_days: days,
70
- total_surfaced: surfaced,
71
- acted_on,
72
- dismissed,
73
- false_positives,
74
- precision: Math.round(precision * 1000) / 1000,
75
- action_conversion_rate: Math.round(action_rate * 1000) / 1000,
76
- preemption_wins,
77
- avg_lead_time_hours: avg_lead_time_hours
78
- ? Math.round(avg_lead_time_hours * 10) / 10
79
- : null,
80
- reliability_assessment: precision >= 0.8
81
- ? "high"
82
- : precision >= 0.6
83
- ? "moderate"
84
- : precision >= 0.3
85
- ? "developing"
86
- : "insufficient_data",
87
- };
88
- }
89
- //# sourceMappingURL=trust-summary.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"trust-summary.js","sourceRoot":"","sources":["../../src/tools/trust-summary.ts"],"names":[],"mappings":"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"}